The initial support for S0ix had limitations that were identified during testing, and opportunitic transitions such as S0/D0ix was not a case that was handled.
Ranjani suggested a major rework reviewed at length on GitHub [1][2]. So far all known issues are solved and no regressions are identified on 5 different platforms, so it's time to share upstream.
This is not intended for 5.6 and can wait after the merge window closes. But since the code isn't simple we want to allow plenty of time for further reviews.
Thanks Ranjani for this important update!
[1] https://github.com/thesofproject/linux/pull/1631 [2] https://github.com/thesofproject/linux/pull/1702
Ranjani Sridharan (9): ASoC: SOF: Do not reset hw_params for streams that ignored suspend ASoC: SOF: pm: Unify suspend/resume routines ASoC: SOF: Add system_suspend_target field to struct snd_sof_dev ASoC: SOF: pm: Introduce DSP power states ASoC: SOF: Move DSP power state transitions to platform-specific ops ASoC: SOF: audio: Add helper to check if only D0i3 streams are active ASoC: SOF: Intel: hda: Amend the DSP state transition diagram ASoC: SOF: Intel: cnl: Implement feature to support DSP D0i3 in S0 ASoC: SOF: Intel: hda: Allow trace DMA in S0 when DSP is in D0I3 for debug
sound/soc/sof/core.c | 4 +- sound/soc/sof/intel/cnl.c | 37 ++++- sound/soc/sof/intel/hda-dsp.c | 289 +++++++++++++++++++++++++++++++--- sound/soc/sof/intel/hda.c | 5 + sound/soc/sof/intel/hda.h | 21 ++- sound/soc/sof/ipc.c | 29 +++- sound/soc/sof/ops.h | 16 +- sound/soc/sof/pcm.c | 2 +- sound/soc/sof/pm.c | 176 ++++++++------------- sound/soc/sof/sof-audio.c | 42 ++++- sound/soc/sof/sof-audio.h | 3 +- sound/soc/sof/sof-priv.h | 43 +++-- 12 files changed, 502 insertions(+), 165 deletions(-)