summaryrefslogtreecommitdiff
path: root/sound/soc/sof/ipc4.c
diff options
context:
space:
mode:
authorRander Wang <rander.wang@intel.com>2023-02-14 12:33:43 +0200
committerMark Brown <broonie@kernel.org>2023-02-14 13:25:13 +0000
commit1c91e927e55cef17bafd8903cb34a7d12968ae6d (patch)
treea8e3904994ff809f07f0218c6087b0b3cd965197 /sound/soc/sof/ipc4.c
parent3c168838fb0d64dd64f7d65cdbd7d127ce6112ef (diff)
downloadlwn-1c91e927e55cef17bafd8903cb34a7d12968ae6d.tar.gz
lwn-1c91e927e55cef17bafd8903cb34a7d12968ae6d.zip
ASoC: SOF: ipc4: Wake up dsp core before sending ipc msg
The driver shall update the power state to D0i0 before sending a generic IPC. Power-related IPCs are the exception to the rule, they may be sent even when the power-state is D0i3 Signed-off-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20230214103345.30669-4-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof/ipc4.c')
-rw-r--r--sound/soc/sof/ipc4.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sound/soc/sof/ipc4.c b/sound/soc/sof/ipc4.c
index b27ec16ebdfa..8ede4b952997 100644
--- a/sound/soc/sof/ipc4.c
+++ b/sound/soc/sof/ipc4.c
@@ -370,6 +370,17 @@ static int sof_ipc4_tx_msg(struct snd_sof_dev *sdev, void *msg_data, size_t msg_
if (!msg_data)
return -EINVAL;
+ if (!no_pm) {
+ const struct sof_dsp_power_state target_state = {
+ .state = SOF_DSP_PM_D0,
+ };
+
+ /* ensure the DSP is in D0i0 before sending a new IPC */
+ ret = snd_sof_dsp_set_power_state(sdev, &target_state);
+ if (ret < 0)
+ return ret;
+ }
+
/* Serialise IPC TX */
mutex_lock(&ipc->tx_mutex);