Commit e2eba551 authored by Kai Vehmanen's avatar Kai Vehmanen Committed by Mark Brown

ASoC: SOF: ignore unrecoverable CTX_SAVE IPC errors at suspend

As part of the suspend flow, a context save IPC message is
sent to the firmware before powering down the DSP. If errors
are met, the suspend flow is aborted with current code.

Change the behaviour such that if firmware returns -EBUSY or
-EAGAIN, return the error codes to PM core as before. The device
is left in active state in this case.

If other errors are reported, print a warning but do not block the
suspend flow. As per interface specification, no valid error can be
returned in this scenario. If the hardware has hit a fatal error and
is not able to respond successfully, best recovery method is to
proceed with suspend and power off the DSP.
Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f1fd9d0e
...@@ -343,11 +343,20 @@ static int sof_suspend(struct device *dev, bool runtime_suspend) ...@@ -343,11 +343,20 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
#endif #endif
/* notify DSP of upcoming power down */ /* notify DSP of upcoming power down */
ret = sof_send_pm_ipc(sdev, SOF_IPC_PM_CTX_SAVE); ret = sof_send_pm_ipc(sdev, SOF_IPC_PM_CTX_SAVE);
if (ret < 0) { if (ret == -EBUSY || ret == -EAGAIN) {
/*
* runtime PM has logic to handle -EBUSY/-EAGAIN so
* pass these errors up
*/
dev_err(sdev->dev, dev_err(sdev->dev,
"error: ctx_save ipc error during suspend %d\n", "error: ctx_save ipc error during suspend %d\n",
ret); ret);
return ret; return ret;
} else if (ret < 0) {
/* FW in unexpected state, continue to power down */
dev_warn(sdev->dev,
"ctx_save ipc error %d, proceeding with suspend\n",
ret);
} }
/* power down all DSP cores */ /* power down all DSP cores */
......
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