[PATCH 0/3] ASoC: qcom: qdsp6: Fix audio after an ADSP restart
From: Shawn Guo
Date: Sat Nov 14 2026 - 22:21:06 EST
On Qualcomm Nord, audio does not come back after an ADSP restart
(echo stop/start > /sys/class/remoteproc/remoteproc0/state). There are
two separate problems:
- The sound card takes 5 seconds to come back. The q6apm GPR service
probes about 0.5 ms after remoteproc reports the DSP up, which is
too early for SPF. SPF drops the command without replying, and
apm_probe() waits out the 5 second command timeout before the card
can bind. If the card binds earlier than that, its shared memory map
times out and the card fails to come up.
- Once the card is back, playback fails:
pcm1681 0-004c: Failed to enable sck: -6
The q6prm clock controller is a child of the q6prm GPR device, so it
is unregistered when the DSP stops. Its consumers stay bound, and
their clk handles are left pointing at clk_nodrv_ops. In addition,
the DSP forgets every clock request and vote when it stops, so
clocks that consumers held prepared across the restart are no
longer running.
Patch 1 polls SPF with a short per-command timeout before q6apm
registers its component.
Patch 2 makes q6dsp-lpass-clocks track prepared clocks, and adds
q6dsp_clock_dsp_down()/q6dsp_clock_dsp_up() so the DSP service driver
can mark them lost and request them again. On its own, it does not
change behaviour.
Patch 3 makes q6prm keep the clock controller device across DSP
restarts, parented to the remoteproc platform device, and calls the
new helpers from its probe and remove functions. No DT or binding
changes are needed.
Shawn Guo (3):
ASoC: qcom: q6apm: Wait for SPF to be ready before registering
ASoC: qcom: q6dsp-lpass-clocks: Restore clocks after a DSP restart
ASoC: qcom: q6prm: Keep the clock controller across DSP restarts
sound/soc/qcom/Kconfig | 1 +
sound/soc/qcom/qdsp6/q6apm.c | 50 +++++-
sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.c | 147 ++++++++++++++---
sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.h | 2 +
sound/soc/qcom/qdsp6/q6prm.c | 190 ++++++++++++++++++++--
5 files changed, 350 insertions(+), 40 deletions(-)
--
2.43.0