ASoC: SOF: Introduce snd_sof_mailbox_read / snd_sof_mailbox_write callbacks
authorDaniel Baluta <daniel.baluta@nxp.com>
Mon, 4 Oct 2021 15:21:44 +0000 (18:21 +0300)
committerMark Brown <broonie@kernel.org>
Thu, 7 Oct 2021 15:57:53 +0000 (16:57 +0100)
We need to introduce snd_sof_mailbox_{read/write} in order to provide
a generic way for mailbox access. These routines are optional, each
platform can implement their own specific routines.

So far, all platforms use mmapped I/O thus they can use custom made
routines sof_mailbox_read / sof_mailbox_write that use MMIO.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Bud Liviu-Alexandru <budliviu@gmail.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20211004152147.1268978-2-daniel.baluta@oss.nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/imx/imx8.c
sound/soc/sof/imx/imx8m.c
sound/soc/sof/intel/apl.c
sound/soc/sof/intel/bdw.c
sound/soc/sof/intel/byt.c
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/icl.c
sound/soc/sof/intel/pci-tng.c
sound/soc/sof/intel/tgl.c
sound/soc/sof/ops.h
sound/soc/sof/sof-priv.h

index 080dafbf5c3323217d764add756358ebbbc91174..195297b14dbc00c487877311c35325fe5848cfd8 100644 (file)
@@ -421,6 +421,10 @@ struct snd_sof_dsp_ops sof_imx8_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* ipc */
        .send_msg       = imx8_send_msg,
        .fw_ready       = sof_fw_ready,
@@ -468,6 +472,10 @@ struct snd_sof_dsp_ops sof_imx8x_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* ipc */
        .send_msg       = imx8_send_msg,
        .fw_ready       = sof_fw_ready,
index 7094790b8aba84b65d44665a8e983de08e91afc1..a19f89b7755f1610c409e82536d5fc407bb900dc 100644 (file)
@@ -284,6 +284,10 @@ struct snd_sof_dsp_ops sof_imx8m_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* ipc */
        .send_msg       = imx8m_send_msg,
        .fw_ready       = sof_fw_ready,
index e6a1f6532547fc869717b59a460b2abc7d642ff9..917f78cf6daf15b8b49c7242d93db274abf7edd5 100644 (file)
@@ -42,6 +42,10 @@ const struct snd_sof_dsp_ops sof_apl_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_thread     = hda_dsp_ipc_irq_thread,
 
index d092754177493426f96ab9805d159ba4ef8b93ad..9c06b92fcb5e54ebb7fc8349573aceaadb15c2dd 100644 (file)
@@ -616,6 +616,10 @@ static const struct snd_sof_dsp_ops sof_bdw_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* ipc */
        .send_msg       = bdw_send_msg,
        .fw_ready       = sof_fw_ready,
index 8f60c72fee7e93e8d6fd86bb522b9b6e92f3791b..8c500a83babc64650414957442f0871faf8a28f5 100644 (file)
@@ -226,6 +226,10 @@ static const struct snd_sof_dsp_ops sof_byt_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_handler    = atom_irq_handler,
        .irq_thread     = atom_irq_thread,
@@ -304,6 +308,10 @@ static const struct snd_sof_dsp_ops sof_cht_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_handler    = atom_irq_handler,
        .irq_thread     = atom_irq_thread,
index 430a268e6b26b6a78ceb927ac4599678a95abe5b..3957e2b3db3206f5d1274c42f66cb7a94f551eaa 100644 (file)
@@ -247,6 +247,10 @@ const struct snd_sof_dsp_ops sof_cnl_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_thread     = cnl_ipc_irq_thread,
 
index 38a40c03c9da99036ec7e849e5340b8510065f28..0b2cc331d55ba3a685f6623235be4084b5e0c903 100644 (file)
@@ -41,6 +41,10 @@ const struct snd_sof_dsp_ops sof_icl_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_thread     = cnl_ipc_irq_thread,
 
index 3d6d013844d7cac1bdaefdc5ad66f4f611975819..8042ac76ec15bd4d3b720d1ac126de60803004c8 100644 (file)
@@ -142,6 +142,10 @@ const struct snd_sof_dsp_ops sof_tng_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_handler    = atom_irq_handler,
        .irq_thread     = atom_irq_thread,
index 664a11aaada2504549ee0db76fd5565cbd907e27..48da8e7a67bce614a0c7f00dada35e93db0a5dbb 100644 (file)
@@ -37,6 +37,10 @@ const struct snd_sof_dsp_ops sof_tgl_ops = {
        .block_read     = sof_block_read,
        .block_write    = sof_block_write,
 
+       /* Mailbox IO */
+       .mailbox_read   = sof_mailbox_read,
+       .mailbox_write  = sof_mailbox_write,
+
        /* doorbell */
        .irq_thread     = cnl_ipc_irq_thread,
 
index a93aa5b943b217920536ac3a7a0a9fd6e1595719..1a5cc8ad4aca1d43fce148b027181a8664b43fd7 100644 (file)
@@ -322,6 +322,21 @@ static inline int snd_sof_dsp_block_write(struct snd_sof_dev *sdev,
        return sof_ops(sdev)->block_write(sdev, blk_type, offset, src, bytes);
 }
 
+/* mailbox IO */
+static inline void snd_sof_dsp_mailbox_read(struct snd_sof_dev *sdev,
+                                           u32 offset, void *dest, size_t bytes)
+{
+       if (sof_ops(sdev)->mailbox_read)
+               sof_ops(sdev)->mailbox_read(sdev, offset, dest, bytes);
+}
+
+static inline void snd_sof_dsp_mailbox_write(struct snd_sof_dev *sdev,
+                                            u32 offset, void *src, size_t bytes)
+{
+       if (sof_ops(sdev)->mailbox_write)
+               sof_ops(sdev)->mailbox_write(sdev, offset, src, bytes);
+}
+
 /* ipc */
 static inline int snd_sof_dsp_send_msg(struct snd_sof_dev *sdev,
                                       struct snd_sof_ipc_msg *msg)
index 4e5bab838cbff7285bbc2d83f779120a571cafd2..f6a8478347bb27799f860475f8326743b29cf151 100644 (file)
@@ -151,6 +151,14 @@ struct snd_sof_dsp_ops {
                           enum snd_sof_fw_blk_type type, u32 offset,
                           void *src, size_t size); /* mandatory */
 
+       /* Mailbox IO */
+       void (*mailbox_read)(struct snd_sof_dev *sof_dev,
+                            u32 offset, void *dest,
+                            size_t size); /* optional */
+       void (*mailbox_write)(struct snd_sof_dev *sof_dev,
+                             u32 offset, void *src,
+                             size_t size); /* optional */
+
        /* doorbell */
        irqreturn_t (*irq_handler)(int irq, void *context); /* optional */
        irqreturn_t (*irq_thread)(int irq, void *context); /* optional */