[PATCH 05/14] ASoC: SOF: support IPC with immediate response
Guennadi Liakhovetski
guennadi.liakhovetski at linux.intel.com
Thu Mar 12 15:44:20 CET 2020
Usually when an IPC message is sent, we have to wait for a reply from
the DSP or from the host in the VirtIO case. However, sometimes in
the VirtIO case a response is available immediately. Skip sleeping in
such cases.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski at linux.intel.com>
---
sound/soc/sof/ipc.c | 9 +++++----
sound/soc/sof/ops.h | 10 +++++++++-
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
index cf57085..6fa501c1 100644
--- a/sound/soc/sof/ipc.c
+++ b/sound/soc/sof/ipc.c
@@ -262,6 +262,10 @@ int sof_ipc_tx_message_unlocked(struct snd_sof_ipc *ipc, u32 header,
sdev->msg = msg;
+ /*
+ * If snd_sof_dsp_send_msg() returns a positive number it means, that a
+ * response is already available, no need to sleep waiting for it
+ */
ret = snd_sof_dsp_send_msg(sdev, msg);
/* Next reply that we receive will be related to this message */
if (!ret)
@@ -279,10 +283,7 @@ int sof_ipc_tx_message_unlocked(struct snd_sof_ipc *ipc, u32 header,
ipc_log_header(sdev->dev, "ipc tx", msg->header);
/* now wait for completion */
- if (!ret)
- ret = tx_wait_done(ipc, msg, reply_data);
-
- return ret;
+ return tx_wait_done(ipc, msg, reply_data);
}
EXPORT_SYMBOL(sof_ipc_tx_message_unlocked);
diff --git a/sound/soc/sof/ops.h b/sound/soc/sof/ops.h
index a771500..43bcfbf 100644
--- a/sound/soc/sof/ops.h
+++ b/sound/soc/sof/ops.h
@@ -274,7 +274,15 @@ static inline void snd_sof_dsp_block_write(struct snd_sof_dev *sdev, u32 bar,
sof_ops(sdev)->block_write(sdev, bar, offset, src, bytes);
}
-/* ipc */
+/**
+ * snd_sof_dsp_send_msg - call sdev ops to send a message
+ * @sdev: sdev context
+ * @msg: message to send
+ *
+ * Returns < 0 - an error code
+ * 0 - the message has been sent, wait for a reply
+ * > 0 - the message has been sent, a reply is already available
+ */
static inline int snd_sof_dsp_send_msg(struct snd_sof_dev *sdev,
struct snd_sof_ipc_msg *msg)
{
--
1.9.3
More information about the Alsa-devel
mailing list