Re: [PATCH 0/3] ASoC: qcom: qdsp6: report the position of a drained buffer

From: Srinivas Kandagatla

Date: Thu Oct 15 2026 - 06:08:46 EST




On 10/14/26 5:26 PM, Vladyslav Tymoshchuk wrote:
> Since commit a93dad6f4e6a ("ASoC: q6apm-dai: make use of
> q6apm_get_hw_pointer") q6apm-dai reports one frame less than the
> position of the last buffer the DSP returned, and commit 44432315444c
> ("ASoC: qcom: q6asm-dai: use q6asm_get_hw_pointer") did the same in
> q6asm-dai. When the application stops feeding a playback stream, the
> position never reaches appl_ptr: ALSA never sees the underrun, the
> stream stays RUNNING without period interrupts, and drain ends on its
> timeout with -EIO. On a OnePlus Pad 3 (SM8750) this left PipeWire's
> PCM stuck for hours after a stall.
>
> Patch 1 wraps the q6apm position to 0 at the end of the ring, as before
> a93dad6f4e6a. Patch 2 resets the q6apm hw pointer on prepare, which
> a93dad6f4e6a also stopped doing. Patch 3 is patch 1 for q6asm-dai.
>
> Patches 1 and 2 are tested on SM8750 (numbers in patch 1). Patch 3 is
> compile-tested only; a test on a Q6ASM board (RB3, RB5) and on x1e or
> sc8280xp for patches 1 and 2 would be very welcome.
>
> The RFC "ASoC: qcom: q6apm: correct PCM formats and error handling" by
> Zhang Jiaxi [1] touches the same hw pointer, in graph_callback() (4/4
> "recover PCM from failed data receipts"). The two do not conflict:
> that series changes when the hw pointer is published, this one how it
> is turned into a position and when it is reset, and that series
> applies on top of this one on sound/for-next without conflicts.
>
> The analysis, the patches and this text were drafted with an AI
> assistant (Claude, see Assisted-by); I reviewed them and ran the tests
> described in the patches.
>
> [1] https://lore.kernel.org/r/SY5PR01MB10600B2BE812BAA1B0FA501B4A1932@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> Vladyslav Tymoshchuk (3):
> ASoC: qcom: q6apm-dai: wrap the position of a full ring to 0
> ASoC: qcom: q6apm: reset the hw pointer with the fragment queue
> ASoC: qcom: q6asm-dai: wrap the position of a full ring to 0

Thanks for the patches,
Lgtm, tested on Lenovo T14s Gen7

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxxxxxxxx>
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxxxxxxxx>

--srini
>
> sound/soc/qcom/qdsp6/q6apm-dai.c | 12 ++++++++----
> sound/soc/qcom/qdsp6/q6apm.c | 1 +
> sound/soc/qcom/qdsp6/q6asm-dai.c | 7 +++----
> 3 files changed, 12 insertions(+), 8 deletions(-)
>
>
> base-commit: 8ef28aef33f2d5da6959ad6b579ec3cfccc009f6