Message ID | 20240524182702.1317935-17-dave.stevenson@raspberrypi.com |
---|---|
State | New |
Headers | show |
Series | BCM2835 DMA mapping cleanups and fixes | expand |
On Fri, May 24, 2024 at 07:27:00PM +0100, Dave Stevenson wrote: > From: Phil Elwell <phil@raspberrypi.com> > > Slave addresses for DMA are meant to be supplied as physical addresses > (contrary to what struct snd_dmaengine_dai_dma_data does). Can you use the same content for patch 14-17? Frank > > Signed-off-by: Phil Elwell <phil@raspberrypi.com> > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > --- > drivers/gpu/drm/vc4/vc4_hdmi.c | 15 ++++----------- > 1 file changed, 4 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index d30f8e8e8967..c2afd72bd96e 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -2696,7 +2696,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) > struct snd_soc_card *card = &vc4_hdmi->audio.card; > struct device *dev = &vc4_hdmi->pdev->dev; > struct platform_device *codec_pdev; > - const __be32 *addr; > + struct resource *iomem; > int index, len; > int ret; > > @@ -2732,22 +2732,15 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) > } > > /* > - * Get the physical address of VC4_HD_MAI_DATA. We need to retrieve > - * the bus address specified in the DT, because the physical address > - * (the one returned by platform_get_resource()) is not appropriate > - * for DMA transfers. > - * This VC/MMU should probably be exposed to avoid this kind of hacks. > + * Get the physical address of VC4_HD_MAI_DATA. > */ > index = of_property_match_string(dev->of_node, "reg-names", "hd"); > /* Before BCM2711, we don't have a named register range */ > if (index < 0) > index = 1; > + iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index); > > - addr = of_get_address(dev->of_node, index, NULL, NULL); > - if (!addr) > - return -EINVAL; > - > - vc4_hdmi->audio.dma_data.addr = be32_to_cpup(addr) + mai_data->offset; > + vc4_hdmi->audio.dma_data.addr = iomem->start + mai_data->offset; > vc4_hdmi->audio.dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; > vc4_hdmi->audio.dma_data.maxburst = 2; > > -- > 2.34.1 >
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index d30f8e8e8967..c2afd72bd96e 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -2696,7 +2696,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) struct snd_soc_card *card = &vc4_hdmi->audio.card; struct device *dev = &vc4_hdmi->pdev->dev; struct platform_device *codec_pdev; - const __be32 *addr; + struct resource *iomem; int index, len; int ret; @@ -2732,22 +2732,15 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) } /* - * Get the physical address of VC4_HD_MAI_DATA. We need to retrieve - * the bus address specified in the DT, because the physical address - * (the one returned by platform_get_resource()) is not appropriate - * for DMA transfers. - * This VC/MMU should probably be exposed to avoid this kind of hacks. + * Get the physical address of VC4_HD_MAI_DATA. */ index = of_property_match_string(dev->of_node, "reg-names", "hd"); /* Before BCM2711, we don't have a named register range */ if (index < 0) index = 1; + iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index); - addr = of_get_address(dev->of_node, index, NULL, NULL); - if (!addr) - return -EINVAL; - - vc4_hdmi->audio.dma_data.addr = be32_to_cpup(addr) + mai_data->offset; + vc4_hdmi->audio.dma_data.addr = iomem->start + mai_data->offset; vc4_hdmi->audio.dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; vc4_hdmi->audio.dma_data.maxburst = 2;