1
0
Fork 0

LF-246: dmaengine: imx-sdma: correct is_ram_script checking

Correct is_ram_script checking in case sdma firmware not loaded as
expected, otherwise all scripts are considered as rom script without
correct "sdma firmware not ready!" since sdma->ram_code_start is 0.

Note: only add the doubtless is_ram_script for sdma-imx6q.bin/sdma-imx7d.
bin , and leave the legacy i.mx5x/i.mx3x/i.mx2x firmware alone since not
sure which of the remain scripts should be in ram.

Signed-off-by: Robin Gong <yibin.gong@nxp.com>
Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
5.4-rM2-2.2.x-imx-squashed
Robin Gong 2019-11-29 04:11:08 +08:00
parent 58d26348b1
commit 122200c5fa
1 changed files with 7 additions and 7 deletions

View File

@ -1023,6 +1023,7 @@ static void sdma_get_pc(struct sdma_channel *sdmac,
case IMX_DMATYPE_CSPI:
per_2_emi = sdma->script_addrs->app_2_mcu_addr;
emi_2_per = sdma->script_addrs->mcu_2_ecspi_addr;
sdmac->is_ram_script = true;
break;
case IMX_DMATYPE_EXT:
case IMX_DMATYPE_SSI:
@ -1033,6 +1034,7 @@ static void sdma_get_pc(struct sdma_channel *sdmac,
case IMX_DMATYPE_SSI_DUAL:
per_2_emi = sdma->script_addrs->ssish_2_mcu_addr;
emi_2_per = sdma->script_addrs->mcu_2_ssish_addr;
sdmac->is_ram_script = true;
break;
case IMX_DMATYPE_SSI_SP:
case IMX_DMATYPE_MMC:
@ -1047,11 +1049,13 @@ static void sdma_get_pc(struct sdma_channel *sdmac,
per_2_emi = sdma->script_addrs->asrc_2_mcu_addr;
emi_2_per = sdma->script_addrs->asrc_2_mcu_addr;
per_2_per = sdma->script_addrs->per_2_per_addr;
sdmac->is_ram_script = true;
break;
case IMX_DMATYPE_ASRC_SP:
per_2_emi = sdma->script_addrs->shp_2_mcu_addr;
emi_2_per = sdma->script_addrs->mcu_2_shp_addr;
per_2_per = sdma->script_addrs->per_2_per_addr;
sdmac->is_ram_script = true;
break;
case IMX_DMATYPE_MSHC:
per_2_emi = sdma->script_addrs->mshc_2_mcu_addr;
@ -1069,10 +1073,12 @@ static void sdma_get_pc(struct sdma_channel *sdmac,
break;
case IMX_DMATYPE_HDMI:
emi_2_per = sdma->script_addrs->hdmi_dma_addr;
sdmac->is_ram_script = true;
break;
case IMX_DMATYPE_MULTI_SAI:
per_2_emi = sdma->script_addrs->sai_2_mcu_addr;
emi_2_per = sdma->script_addrs->mcu_2_sai_addr;
sdmac->is_ram_script = true;
default:
break;
}
@ -1081,13 +1087,6 @@ static void sdma_get_pc(struct sdma_channel *sdmac,
sdmac->pc_to_device = emi_2_per;
sdmac->device_to_device = per_2_per;
sdmac->pc_to_pc = emi_2_emi;
if (sdma->ram_code_start &&
((sdmac->pc_from_device >= sdma->ram_code_start) ||
(sdmac->pc_to_device >= sdma->ram_code_start) ||
(sdmac->device_to_device >= sdma->ram_code_start ||
(sdmac->pc_to_pc >= sdma->ram_code_start))))
sdmac->is_ram_script = true;
}
static int sdma_load_context(struct sdma_channel *sdmac)
@ -1804,6 +1803,7 @@ static int sdma_config_write(struct dma_chan *chan,
struct sdma_channel *sdmac = to_sdma_chan(chan);
sdmac->watermark_level = 0;
sdmac->is_ram_script = false;
if (direction == DMA_DEV_TO_MEM) {
sdmac->per_address = dmaengine_cfg->src_addr;