diff options
author | Daniel Baluta <daniel.baluta@nxp.com> | 2021-11-19 10:43:19 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-11-22 16:40:12 +0100 |
commit | 3bf4cd8b747a222f0f454f3220199c99f1c03da6 (patch) | |
tree | 00ef2642c67456323f015ac2a28b69c97a147ea8 /sound/soc/soc-topology-test.c | |
parent | ASoC: SOF: imx8m: Implement DSP start (diff) | |
download | linux-3bf4cd8b747a222f0f454f3220199c99f1c03da6.tar.xz linux-3bf4cd8b747a222f0f454f3220199c99f1c03da6.zip |
ASoC: SOF: imx8m: Implement reset callback
Resume common flow (System PM / Runtime PM) is like this:
sof_resume
-> specific device resume
-> snd_sof_load_firmware
-> snd_sof_dsp_reset (1)
-> load_modules()
-> snd_sof_run_firmware (2)
We need to implement dsp_reset callback (1) that will actually reset
the DSP but keep it stalled.
In order to implement this we do the following:
-> put DSP into reset (assert CoreReset bit from PWRCTL)
-> stall the DSP using RunStall bit from AudioDSP_REG2 mix
-> take DSP out of reset (de-assert CoreReset bit from PWRCTL)
At this moment the DSP is taken out of reset and Stalled! This means
that we can load the firmware and then start the DSP (2).
Until now we resetted the DSP by turning down the Audiomix PD. This
doesn't work for Runtime PM if another IP is keeping Audiomix PD up.
By introducing dsp_reset() we no longer rely on turning off the
audiomix to reset the DSP.
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20211119094319.81674-6-daniel.baluta@oss.nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-topology-test.c')
0 files changed, 0 insertions, 0 deletions