summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Baluta <daniel.baluta@nxp.com>2018-12-14 19:15:07 +0200
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:52:15 +0800
commitb35ac86e876b69efc85ebb97f7dca3a695762ef6 (patch)
treec314f22bb37242835193c2dd376c88ee6bae65bc
parentb9668d7af2016b052dd5ac7c8ccb64303935bb86 (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.c6
-rw-r--r--sound/soc/fsl/fsl_dsp.h6
-rw-r--r--sound/soc/fsl/fsl_dsp_proxy.c1
-rw-r--r--sound/soc/fsl/fsl_dsp_proxy.h1
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)