|
|
Log in / Subscribe / Register

ASoC: qcom: qdsp6: add push/pull module support

From:  Srinivas Kandagatla <srinivas.kandagatla-AT-oss.qualcomm.com>
To:  broonie-AT-kernel.org
Subject:  [PATCH v2 0/6] ASoC: qcom: qdsp6: add push/pull module support
Date:  Thu, 28 May 2026 19:57:59 +0100
Message-ID:  <20260528185806.6316-1-srinivas.kandagatla@oss.qualcomm.com>
Cc:  lgirdwood-AT-gmail.com, perex-AT-perex.cz, tiwai-AT-suse.com, krzysztof.kozlowski-AT-oss.qualcomm.com, alexey.klimov-AT-linaro.org, mohammad.rafi.shaik-AT-oss.qualcomm.com, ravi.hothi-AT-oss.qualcomm.com, mathieu.poirier-AT-linaro.org, andersson-AT-kernel.org, kees-AT-kernel.org, verhaegen-AT-google.com, linux-sound-AT-vger.kernel.org, linux-arm-msm-AT-vger.kernel.org, linux-kernel-AT-vger.kernel.org, Srinivas Kandagatla <srinivas.kandagatla-AT-oss.qualcomm.com>
Archive-link:  Article

This patchset adds support for Push/Pull mode modules.
Push-pull mode uses dedicated shared-memory modules that allow the DSP
to access the PCM circular buffer directly. In addition to reducing
fragment queueing and ACK handling in the host driver, 
This mode exposes a DSP-maintained position buffer that provides
fine-grained hardware pointer updates. Unlike the Read/Write Shared
Memory endpoitn modules, which are period based, where the reported
pointer advances only at period boundaries, where as push-pull mode
allows .pointer() to reflect sub-period progress, improving pointer
accuracy.
Also the driver now can queue buffers which are less than period size,
which makes tests like alsa_conformance_test happy.

Now the pointer update visibility is around 1ms, compared to min of
10ms with read/write shared memory endpoints.

Along with the circular buffer support, this patchset also adds
watermark event support to provide a period level event from dsp to
notify about period progress.

Tested this on T14s, Arduino VENTUNO-Q platforms.

Tplg related changes are available at: 
https://github.com/Srinivas-Kandagatla/audioreach-topolog...

thanks,
Srini

Changes since v1:
	- move position buffer defines to PATCH 4/6 to fix dependencies

Srinivas Kandagatla (6):
  ASoC: qcom: audioreach: use cached shared memory module IID
  ASoC: qcom: q6apm: return error code to consumers on failures
  ASoC: qcom: q6apm: remove shared memory IID helpers
  ASoC: qcom: audioreach: Add support for shared memory push/pull
    modules
  ASoC: qcom: q6apm: add watermark event support
  ASoC: qcom: q6apm-dai: add push-pull and watermark event support

 sound/soc/qcom/qdsp6/audioreach.c |  79 ++++++++++-
 sound/soc/qcom/qdsp6/audioreach.h |  96 +++++++++++++
 sound/soc/qcom/qdsp6/q6apm-dai.c  | 144 +++++++++++++++----
 sound/soc/qcom/qdsp6/q6apm.c      | 222 ++++++++++++++++++++++--------
 sound/soc/qcom/qdsp6/q6apm.h      |  13 +-
 5 files changed, 465 insertions(+), 89 deletions(-)

-- 
2.53.0




Copyright © 2026, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds