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-topology/tree/push/pull
thanks,
Srini
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 | 98 +++++++++++++
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, 467 insertions(+), 89 deletions(-)
--
2.47.3