Skip to content

Commit ebc40b7

Browse files
yaochunhungplbossart
authored andcommitted
ASoC: SOF: mediatek: mt8195 modify dram type as non-cache
Modify dram as non-cache memory type to avoid wrong access between host and dsp side and get the size of shared dma from device tree. Signed-off-by: YC Hung <yc.hung@mediatek.com>
1 parent 56c66b2 commit ebc40b7

1 file changed

Lines changed: 21 additions & 16 deletions

File tree

sound/soc/sof/mediatek/mt8195/mt8195.c

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ static int platform_parse_resource(struct platform_device *pdev, void *data)
5252

5353
dev_dbg(dev, "DMA %pR\n", &res);
5454

55+
adsp->pa_shared_dram = (phys_addr_t)res.start;
56+
adsp->shared_size = resource_size(&res);
57+
if (adsp->pa_shared_dram & DRAM_REMAP_MASK) {
58+
dev_err(dev, "adsp shared dma memory(%#x) is not 4K-aligned\n",
59+
(u32)adsp->pa_shared_dram);
60+
return -EINVAL;
61+
}
62+
5563
ret = of_reserved_mem_device_init(dev);
5664
if (ret) {
5765
dev_err(dev, "of_reserved_mem_device_init failed\n");
@@ -180,23 +188,18 @@ static int adsp_shared_base_ioremap(struct platform_device *pdev, void *data)
180188
{
181189
struct device *dev = &pdev->dev;
182190
struct mtk_adsp_chip_info *adsp = data;
183-
u32 shared_size;
184191

185192
/* remap shared-dram base to be non-cachable */
186-
shared_size = TOTAL_SIZE_SHARED_DRAM_FROM_TAIL;
187-
adsp->pa_shared_dram = adsp->pa_dram + adsp->dramsize - shared_size;
188-
if (adsp->va_dram) {
189-
adsp->shared_dram = adsp->va_dram + DSP_DRAM_SIZE - shared_size;
190-
} else {
191-
adsp->shared_dram = devm_ioremap(dev, adsp->pa_shared_dram,
192-
shared_size);
193-
if (!adsp->shared_dram) {
194-
dev_err(dev, "ioremap failed for shared DRAM\n");
195-
return -ENOMEM;
196-
}
193+
adsp->shared_dram = devm_ioremap(dev, adsp->pa_shared_dram,
194+
adsp->shared_size);
195+
if (!adsp->shared_dram) {
196+
dev_err(dev, "failed to ioremap base %pa size %#x\n",
197+
adsp->shared_dram, adsp->shared_size);
198+
return -ENOMEM;
197199
}
200+
198201
dev_dbg(dev, "shared-dram vbase=%p, phy addr :%pa, size=%#x\n",
199-
adsp->shared_dram, &adsp->pa_shared_dram, shared_size);
202+
adsp->shared_dram, &adsp->pa_shared_dram, adsp->shared_size);
200203

201204
return 0;
202205
}
@@ -268,9 +271,11 @@ static int mt8195_dsp_probe(struct snd_sof_dev *sdev)
268271
goto err_adsp_sram_power_off;
269272
}
270273

271-
sdev->bar[SOF_FW_BLK_TYPE_SRAM] = devm_ioremap_wc(sdev->dev,
272-
priv->adsp->pa_dram,
273-
priv->adsp->dramsize);
274+
priv->adsp->va_sram = sdev->bar[SOF_FW_BLK_TYPE_IRAM];
275+
276+
sdev->bar[SOF_FW_BLK_TYPE_SRAM] = devm_ioremap(sdev->dev,
277+
priv->adsp->pa_dram,
278+
priv->adsp->dramsize);
274279
if (!sdev->bar[SOF_FW_BLK_TYPE_SRAM]) {
275280
dev_err(sdev->dev, "failed to ioremap base %pa size %#x\n",
276281
&priv->adsp->pa_dram, priv->adsp->dramsize);

0 commit comments

Comments
 (0)