@@ -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