Unverified Commit 6f95eec6 authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown
Browse files

ASoC: SOF: pm: Set target state earlier



If the DSP crashes before the system suspends, the setting of target state
will be skipped because the firmware state will no longer be
SOF_FW_BOOT_COMPLETE. This leads to the incorrect assumption that the
DSP should suspend to D0I3 instead of suspending to D3. To fix this,
set the target_state before we skip to DSP suspend even when the DSP has
crashed.

Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarCurtis Malainey <cujomalainey@chromium.org>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20221220125629.8469-2-peter.ujfalusi@linux.intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent a12a383e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
	const struct sof_ipc_pm_ops *pm_ops = sdev->ipc->ops->pm;
	const struct sof_ipc_tplg_ops *tplg_ops = sdev->ipc->ops->tplg;
	pm_message_t pm_state;
	u32 target_state = 0;
	u32 target_state = snd_sof_dsp_power_target(sdev);
	int ret;

	/* do nothing if dsp suspend callback is not set */
@@ -206,7 +206,6 @@ static int sof_suspend(struct device *dev, bool runtime_suspend)
		}
	}

	target_state = snd_sof_dsp_power_target(sdev);
	pm_state.event = target_state;

	/* Skip to platform-specific suspend if DSP is entering D0 */