diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2018-12-14 19:15:07 +0200 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:52:15 +0800 |
commit | b35ac86e876b69efc85ebb97f7dca3a695762ef6 (patch) | |
tree | c314f22bb37242835193c2dd376c88ee6bae65bc | |
parent | b9668d7af2016b052dd5ac7c8ccb64303935bb86 (diff) |
MLK-20095-3: ASoC: fsl: Differentiate between QXP and QM
On QM the DSP is inside the VPU subsystem while in QXP
it is inside the Audio DMA subsystem. For this reason
there are "subtle" differences.
Introduce new compatible string for QM to help us correctly
configure the DSP depending on the board they run.
dsp_mem_msg structure is shared with the DSP, so by introducing
new member dsp_board_type we can let DSP know on which target it runs.
Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
-rw-r--r-- | sound/soc/fsl/fsl_dsp.c | 6 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_dsp.h | 6 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_dsp_proxy.c | 1 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_dsp_proxy.h | 1 |
4 files changed, 13 insertions, 1 deletions
diff --git a/sound/soc/fsl/fsl_dsp.c b/sound/soc/fsl/fsl_dsp.c index fa238834385b..63c11db54f04 100644 --- a/sound/soc/fsl/fsl_dsp.c +++ b/sound/soc/fsl/fsl_dsp.c @@ -792,6 +792,11 @@ static int fsl_dsp_probe(struct platform_device *pdev) if (!dsp_priv) return -ENOMEM; + if (of_device_is_compatible(np, "fsl,imx8qxp-dsp")) + dsp_priv->dsp_board_type = DSP_IMX8QXP_TYPE; + else + dsp_priv->dsp_board_type = DSP_IMX8QM_TYPE; + dsp_priv->dev = &pdev->dev; /* Get the addresses and IRQ */ @@ -1059,6 +1064,7 @@ static const struct dev_pm_ops fsl_dsp_pm = { static const struct of_device_id fsl_dsp_ids[] = { { .compatible = "fsl,imx8qxp-dsp", }, + { .compatible = "fsl,imx8qm-dsp", }, {} }; MODULE_DEVICE_TABLE(of, fsl_dsp_ids); diff --git a/sound/soc/fsl/fsl_dsp.h b/sound/soc/fsl/fsl_dsp.h index 6f983f7fae5f..99199e4d5c22 100644 --- a/sound/soc/fsl/fsl_dsp.h +++ b/sound/soc/fsl/fsl_dsp.h @@ -21,6 +21,10 @@ typedef void (*memset_func) (void *s, int c, size_t n); /* ...maximal number of IPC clients per proxy */ #define XF_CFG_MAX_IPC_CLIENTS (1 << 4) +enum { + DSP_IMX8QXP_TYPE = 0, + DSP_IMX8QM_TYPE, +}; /* ...proxy client data */ struct xf_client { @@ -87,7 +91,7 @@ struct fsl_dsp { void *dsp_config_virt; dma_addr_t dsp_config_phys; int dsp_config_size; - + int dsp_board_type; unsigned int fixup_offset; /* ...proxy data structures */ diff --git a/sound/soc/fsl/fsl_dsp_proxy.c b/sound/soc/fsl/fsl_dsp_proxy.c index f29b6ecaacbb..266a50deab91 100644 --- a/sound/soc/fsl/fsl_dsp_proxy.c +++ b/sound/soc/fsl/fsl_dsp_proxy.c @@ -192,6 +192,7 @@ int send_dpu_ext_msg_addr(struct xf_proxy *proxy) dpu_ext_msg->scratch_size = dsp_priv->scratch_buf_size; dpu_ext_msg->dsp_config_phys = dsp_priv->dsp_config_phys; dpu_ext_msg->dsp_config_size = dsp_priv->dsp_config_size; + dpu_ext_msg->dsp_board_type = dsp_priv->dsp_board_type; icm_intr_extended_send(proxy, msghdr.allbits, &ext_msg); diff --git a/sound/soc/fsl/fsl_dsp_proxy.h b/sound/soc/fsl/fsl_dsp_proxy.h index c80412a632ff..9b5c78f8b993 100644 --- a/sound/soc/fsl/fsl_dsp_proxy.h +++ b/sound/soc/fsl/fsl_dsp_proxy.h @@ -350,6 +350,7 @@ struct dsp_mem_msg { u32 scratch_size; u32 dsp_config_phys; u32 dsp_config_size; + u32 dsp_board_type; }; static inline void xf_lock_init(spinlock_t *lock) |