summaryrefslogtreecommitdiff
path: root/sound/soc
diff options
context:
space:
mode:
authorBing Song <bing.song@nxp.com>2020-10-27 16:47:30 +0800
committerBing Song <bing.song@nxp.com>2020-10-28 09:13:04 +0800
commit4b01de37e58b5e9bef6816cad870eddfa9eb7792 (patch)
tree3a3e8b87c91f6406082173362e356b472c53f651 /sound/soc
parentc630a43169a26101410b9a35dfaa97267eae2e0d (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.c43
-rw-r--r--sound/soc/fsl/fsl_dsp.h3
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;