Commit f71f59dd authored by Daniel Baluta's avatar Daniel Baluta Committed by Mark Brown

ASoC: SOF: Introduce snd_sof_mailbox_read / snd_sof_mailbox_write callbacks

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: default avatarDaniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: default avatarBud Liviu-Alexandru <budliviu@gmail.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20211004152147.1268978-2-daniel.baluta@oss.nxp.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent dc1fad25
...@@ -421,6 +421,10 @@ struct snd_sof_dsp_ops sof_imx8_ops = { ...@@ -421,6 +421,10 @@ struct snd_sof_dsp_ops sof_imx8_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* ipc */ /* ipc */
.send_msg = imx8_send_msg, .send_msg = imx8_send_msg,
.fw_ready = sof_fw_ready, .fw_ready = sof_fw_ready,
...@@ -468,6 +472,10 @@ struct snd_sof_dsp_ops sof_imx8x_ops = { ...@@ -468,6 +472,10 @@ struct snd_sof_dsp_ops sof_imx8x_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* ipc */ /* ipc */
.send_msg = imx8_send_msg, .send_msg = imx8_send_msg,
.fw_ready = sof_fw_ready, .fw_ready = sof_fw_ready,
......
...@@ -284,6 +284,10 @@ struct snd_sof_dsp_ops sof_imx8m_ops = { ...@@ -284,6 +284,10 @@ struct snd_sof_dsp_ops sof_imx8m_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* ipc */ /* ipc */
.send_msg = imx8m_send_msg, .send_msg = imx8m_send_msg,
.fw_ready = sof_fw_ready, .fw_ready = sof_fw_ready,
......
...@@ -42,6 +42,10 @@ const struct snd_sof_dsp_ops sof_apl_ops = { ...@@ -42,6 +42,10 @@ const struct snd_sof_dsp_ops sof_apl_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_thread = hda_dsp_ipc_irq_thread, .irq_thread = hda_dsp_ipc_irq_thread,
......
...@@ -616,6 +616,10 @@ static const struct snd_sof_dsp_ops sof_bdw_ops = { ...@@ -616,6 +616,10 @@ static const struct snd_sof_dsp_ops sof_bdw_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* ipc */ /* ipc */
.send_msg = bdw_send_msg, .send_msg = bdw_send_msg,
.fw_ready = sof_fw_ready, .fw_ready = sof_fw_ready,
......
...@@ -226,6 +226,10 @@ static const struct snd_sof_dsp_ops sof_byt_ops = { ...@@ -226,6 +226,10 @@ static const struct snd_sof_dsp_ops sof_byt_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_handler = atom_irq_handler, .irq_handler = atom_irq_handler,
.irq_thread = atom_irq_thread, .irq_thread = atom_irq_thread,
...@@ -304,6 +308,10 @@ static const struct snd_sof_dsp_ops sof_cht_ops = { ...@@ -304,6 +308,10 @@ static const struct snd_sof_dsp_ops sof_cht_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_handler = atom_irq_handler, .irq_handler = atom_irq_handler,
.irq_thread = atom_irq_thread, .irq_thread = atom_irq_thread,
......
...@@ -247,6 +247,10 @@ const struct snd_sof_dsp_ops sof_cnl_ops = { ...@@ -247,6 +247,10 @@ const struct snd_sof_dsp_ops sof_cnl_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_thread = cnl_ipc_irq_thread, .irq_thread = cnl_ipc_irq_thread,
......
...@@ -41,6 +41,10 @@ const struct snd_sof_dsp_ops sof_icl_ops = { ...@@ -41,6 +41,10 @@ const struct snd_sof_dsp_ops sof_icl_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_thread = cnl_ipc_irq_thread, .irq_thread = cnl_ipc_irq_thread,
......
...@@ -142,6 +142,10 @@ const struct snd_sof_dsp_ops sof_tng_ops = { ...@@ -142,6 +142,10 @@ const struct snd_sof_dsp_ops sof_tng_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_handler = atom_irq_handler, .irq_handler = atom_irq_handler,
.irq_thread = atom_irq_thread, .irq_thread = atom_irq_thread,
......
...@@ -37,6 +37,10 @@ const struct snd_sof_dsp_ops sof_tgl_ops = { ...@@ -37,6 +37,10 @@ const struct snd_sof_dsp_ops sof_tgl_ops = {
.block_read = sof_block_read, .block_read = sof_block_read,
.block_write = sof_block_write, .block_write = sof_block_write,
/* Mailbox IO */
.mailbox_read = sof_mailbox_read,
.mailbox_write = sof_mailbox_write,
/* doorbell */ /* doorbell */
.irq_thread = cnl_ipc_irq_thread, .irq_thread = cnl_ipc_irq_thread,
......
...@@ -322,6 +322,21 @@ static inline int snd_sof_dsp_block_write(struct snd_sof_dev *sdev, ...@@ -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); 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 */ /* ipc */
static inline int snd_sof_dsp_send_msg(struct snd_sof_dev *sdev, static inline int snd_sof_dsp_send_msg(struct snd_sof_dev *sdev,
struct snd_sof_ipc_msg *msg) struct snd_sof_ipc_msg *msg)
......
...@@ -151,6 +151,14 @@ struct snd_sof_dsp_ops { ...@@ -151,6 +151,14 @@ struct snd_sof_dsp_ops {
enum snd_sof_fw_blk_type type, u32 offset, enum snd_sof_fw_blk_type type, u32 offset,
void *src, size_t size); /* mandatory */ 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 */ /* doorbell */
irqreturn_t (*irq_handler)(int irq, void *context); /* optional */ irqreturn_t (*irq_handler)(int irq, void *context); /* optional */
irqreturn_t (*irq_thread)(int irq, void *context); /* optional */ irqreturn_t (*irq_thread)(int irq, void *context); /* optional */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment