diff options
author | Bing Song <bing.song@nxp.com> | 2020-10-27 16:47:30 +0800 |
---|---|---|
committer | Bing Song <bing.song@nxp.com> | 2020-10-28 09:13:04 +0800 |
commit | 4b01de37e58b5e9bef6816cad870eddfa9eb7792 (patch) | |
tree | 3a3e8b87c91f6406082173362e356b472c53f651 /sound/soc | |
parent | c630a43169a26101410b9a35dfaa97267eae2e0d (diff) |
MLK-24924-2 dsp: 8mp: change ocram layout for lpa
ATF put into the end of OCRAM on 8mp A1. Change the ocram layout
for lpa.
Signed-off-by: Bing Song <bing.song@nxp.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/fsl/fsl_dsp.c | 43 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_dsp.h | 3 |
2 files changed, 7 insertions, 39 deletions
diff --git a/sound/soc/fsl/fsl_dsp.c b/sound/soc/fsl/fsl_dsp.c index 01a49c15af71..3448ee964c1f 100644 --- a/sound/soc/fsl/fsl_dsp.c +++ b/sound/soc/fsl/fsl_dsp.c @@ -1009,7 +1009,7 @@ static int fsl_dsp_mem_setup_lpa(struct fsl_dsp *dsp_priv) struct device_node *np = dsp_priv->dev->of_node; struct device_node *reserved_node; struct resource reserved_res; - int offset; + int offset, size; reserved_node = of_parse_phandle(np, "ocram", 0); if (!reserved_node) { @@ -1038,47 +1038,22 @@ static int fsl_dsp_mem_setup_lpa(struct fsl_dsp *dsp_priv) } memset_io(dsp_priv->ocram_vir_addr, 0, dsp_priv->ocram_reserved_size); - reserved_node = of_parse_phandle(np, "ocram-e", 0); - if (!reserved_node) { - dev_err(dsp_priv->dev, "failed to get reserved region node\n"); - return -ENODEV; - } - - if (of_address_to_resource(reserved_node, 0, &reserved_res)) { - dev_err(dsp_priv->dev, "failed to get reserved region address\n"); - return -EINVAL; - } - - dsp_priv->ocram_e_phys_addr = reserved_res.start; - dsp_priv->ocram_e_reserved_size = (reserved_res.end - reserved_res.start) - + 1; - if (dsp_priv->ocram_e_reserved_size <= 0) { - dev_err(dsp_priv->dev, "invalid value of reserved region size\n"); - return -EINVAL; - } - - dsp_priv->ocram_e_vir_addr = ioremap_wc(dsp_priv->ocram_e_phys_addr, - dsp_priv->ocram_e_reserved_size); - if (!dsp_priv->ocram_e_vir_addr) { - dev_err(dsp_priv->dev, "failed to remap ocram_e space for dsp firmware\n"); - return -ENXIO; - } - memset_io(dsp_priv->ocram_e_vir_addr, 0, dsp_priv->ocram_e_reserved_size); + size = MSG_BUF_SIZE + DSP_CONFIG_SIZE; /* msg ring buffer memory */ - dsp_priv->msg_buf_virt = dsp_priv->ocram_e_vir_addr; - dsp_priv->msg_buf_phys = dsp_priv->ocram_e_phys_addr; + dsp_priv->msg_buf_virt = dsp_priv->ocram_vir_addr + dsp_priv->ocram_reserved_size - size; + dsp_priv->msg_buf_phys = dsp_priv->ocram_phys_addr + dsp_priv->ocram_reserved_size - size; dsp_priv->msg_buf_size = MSG_BUF_SIZE; offset = MSG_BUF_SIZE; /* keep dsp framework's global data when suspend/resume */ - dsp_priv->dsp_config_virt = dsp_priv->ocram_e_vir_addr + offset; - dsp_priv->dsp_config_phys = dsp_priv->ocram_e_phys_addr + offset; + dsp_priv->dsp_config_virt = dsp_priv->ocram_vir_addr + dsp_priv->ocram_reserved_size - size + offset; + dsp_priv->dsp_config_phys = dsp_priv->ocram_phys_addr + dsp_priv->ocram_reserved_size - size + offset; dsp_priv->dsp_config_size = DSP_CONFIG_SIZE; dsp_priv->scratch_buf_virt = dsp_priv->ocram_vir_addr; dsp_priv->scratch_buf_phys = dsp_priv->ocram_phys_addr; - dsp_priv->scratch_buf_size = dsp_priv->ocram_reserved_size; + dsp_priv->scratch_buf_size = dsp_priv->ocram_reserved_size - size; dsp_priv->dram_reserved_vir_addr = dsp_priv->sdram_vir_addr; dsp_priv->dram_reserved_phys_addr = dsp_priv->sdram_phys_addr; dsp_priv->dram_reserved_size = dsp_priv->sdram_reserved_size; @@ -1376,8 +1351,6 @@ alloc_coherent_fail: iounmap(dsp_priv->sdram_vir_addr); if (dsp_priv->ocram_vir_addr) iounmap(dsp_priv->ocram_vir_addr); - if (dsp_priv->ocram_e_vir_addr) - iounmap(dsp_priv->ocram_e_vir_addr); reserved_node_fail: if (!dsp_priv->dsp_is_lpa) @@ -1405,8 +1378,6 @@ static int fsl_dsp_remove(struct platform_device *pdev) iounmap(dsp_priv->sdram_vir_addr); if (dsp_priv->ocram_vir_addr) iounmap(dsp_priv->ocram_vir_addr); - if (dsp_priv->ocram_e_vir_addr) - iounmap(dsp_priv->ocram_e_vir_addr); pm_runtime_disable(&pdev->dev); fsl_dsp_detach_pm_domains(&pdev->dev, dsp_priv); diff --git a/sound/soc/fsl/fsl_dsp.h b/sound/soc/fsl/fsl_dsp.h index 2e2c71890819..7515a91b867a 100644 --- a/sound/soc/fsl/fsl_dsp.h +++ b/sound/soc/fsl/fsl_dsp.h @@ -96,9 +96,6 @@ struct fsl_dsp { void *ocram_vir_addr; unsigned long ocram_phys_addr; int ocram_reserved_size; - void *ocram_e_vir_addr; - unsigned long ocram_e_phys_addr; - int ocram_e_reserved_size; void *msg_buf_virt; dma_addr_t msg_buf_phys; int msg_buf_size; |