2024-05-10 11:19:19 +00:00
|
|
|
From 3d4f30269402f795f6a4054ced3bfdcbdaddc357 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Phil Elwell <phil@raspberrypi.com>
|
|
|
|
Date: Thu, 11 May 2023 16:08:15 +0100
|
|
|
|
Subject: [PATCH 1127/1135] drm/vc4: Use phys addresses for slave DMA config
|
|
|
|
|
|
|
|
Slave addresses for DMA are meant to be supplied as physical addresses
|
|
|
|
(contrary to what struct snd_dmaengine_dai_dma_data does).
|
|
|
|
|
|
|
|
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 14 +++++---------
|
|
|
|
1 file changed, 5 insertions(+), 9 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
2024-10-04 19:39:07 +00:00
|
|
|
@@ -2831,7 +2831,7 @@ static int vc4_hdmi_audio_init(struct vc
|
2024-05-10 11:19:19 +00:00
|
|
|
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;
|
|
|
|
|
2024-10-04 19:39:07 +00:00
|
|
|
@@ -2867,22 +2867,18 @@ static int vc4_hdmi_audio_init(struct vc
|
2024-05-10 11:19:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
- * 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;
|
|
|
|
|
|
|
|
- addr = of_get_address(dev->of_node, index, NULL, NULL);
|
|
|
|
- if (!addr)
|
|
|
|
+ iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index);
|
|
|
|
+ if (!iomem)
|
|
|
|
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;
|
|
|
|
|