[PATCH v10 00/17] ASoC: qcom: Add AudioReach support
Srinivas Kandagatla
srinivas.kandagatla at linaro.org
Tue Oct 26 12:07:19 CEST 2021
Hi Mark,
On 25/10/2021 18:16, Srinivas Kandagatla wrote:
> Hi Mark,
>
> This version is a respin of v9 fixing a build error in 12/17 patch.
I seems to have messed up sending this patchset, Am resending this one.
Really sorry for the noise.
-srini
>
> QCOM SoC relevant non-audio patches in this series has been merged into
> the Qualcomm drivers-for-5.16 tree, as this series depends those patches
> an immutable tag is available at:
> https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git tags/20210927135559.738-6-srinivas.kandagatla at linaro.org
>
> This patchset adds ASoC driver support to configure signal processing
> framework ("AudioReach") which is integral part of Qualcomm next
> generation audio SDK and will be deployed on upcoming Qualcomm chipsets.
> It makes use of ASoC Topology to load graphs on to the DSP which is then
> managed by APM (Audio Processing Manager) service to prepare/start/stop.
>
> Here is simplified high-level block diagram of AudioReach:
>
> ___________________________________________________________
> | CPU (Application Processor) |
> | +---------+ +---------+ +----------+ |
> | | q6apm | | q6apm | | q6apm | |
> | | dais | <------> | | <-----> |lpass-dais| |
> | +---------+ +---------+ +----------+ |
> | ^ ^ |
> | | | +---------+ |
> | +---------+ v +---------->|topology | |
> | | q6prm | +---------+ | | |
> | | |<-------->| GPR | +---------+ |
> | +---------+ +---------+ |
> | ^ ^ |
> | | | |
> | +----------+ | |
> | | q6prm | | |
> | |lpass-clks| | |
> | +----------+ | |
> |____________________________|______________________________|
> |
> | RPMSG (IPC over GLINK)
> ____________________________|______________________________
> | | |
> | +-----------------------+ |
> | | | |
> | v v q6 (Audio DSP) |
> |+-----+ +----------------------------------+ |
> || PRM | | APM (Audio Processing Manager) | |
> |+-----+ | . Graph Management | |
> | | . Command Handing | |
> | | . Event Management | |
> | | ... | |
> | +----------------------------------+ |
> | ^ |
> |____________________________|______________________________|
> |
> | LPASS AIF
> ____________________________|______________________________
> | | Audio I/O |
> | v |
> | +--------------------------------------------------+ |
> | | Audio devices | |
> | | CODEC | HDMI-TX | PCM | SLIMBUS | I2S |MI2S |...| |
> | | | |
> | +--------------------------------------------------+ |
> |___________________________________________________________|
>
> AudioReach has constructs of sub-graph, container and modules.
> Each sub-graph can have N containers and each Container can have N Modules
> and connections between them can be linear or non-linear.
> An audio function can be realized with one or many connected
> sub-graphs. There are also control/event paths between modules that can
> be wired up while building graph to achieve various control mechanism
> between modules. These concepts of Sub-Graph, Containers and Modules
> are represented in ASoC topology.
>
> Here is simple I2S graph with a Write Shared Memory and a
> Volume control module within a single Subgraph (1) with one Container (1)
> and 5 modules.
>
> ____________________________________________________________
> | Sub-Graph [1] |
> | _______________________________________________________ |
> | | Container [1] | |
> | | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]-> [I2S-EP]| |
> | |_______________________________________________________| |
> |____________________________________________________________|
>
> For now this graph is split into two subgraphs to achieve dpcm like below:
> ________________________________________________ _________________
> | Sub-Graph [1] | | Sub-Graph [2] |
> | ____________________________________________ | | _____________ |
> | | Container [1] | | | |Container [2]| |
> | | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]| | | | [I2S-EP] | |
> | |____________________________________________| | | |_____________| |
> |________________________________________________| |_________________|
>
> _________________
> | Sub-Graph [3] |
> | _____________ |
> | |Container [3]| |
> | | [DMA-EP] | |
> | |_____________| |
> |_________________|
>
>
> This patchset adds very minimal support for AudioReach which includes
> supporting sub-graphs containing CODEC DMA ports and simple PCM
> Decoder/Encoder and Logger Modules. Additional capabilities will
> be built over time to expose features offered by AudioReach.
>
> This patchset is Tested on SM8250 SoC based Qualcomm Robotics Platform RB5
> and SM9250 MTP with WSA881X Smart Speaker Amplifiers, DMICs connected via
> VA Macro and WCD938x Codec connected via TX and RX Macro and HDMI audio
> via I2S.
>
> First 10 Patches are mostly reorganization existing Old QDSP Audio
> Framework code and bindings so that we could reuse them on AudioReach.
>
> ASoC topology graphs for DragonBoard RB5 and SM8250 MTP are available at
> https://git.linaro.org/people/srinivas.kandagatla/audioreach-topology.git/
> and Qualcomm AudioReach DSP headers are available at:
> https://source.codeaurora.org/quic/la/platform/vendor/opensource/arspf-headers
>
> Note: There is one false positive warning in this patchset:
> audioreach.c:80:45: warning: array of flexible structures
>
> Thanks,
> srini
>
> Changes since v9:
> - fix build error during arm64 defconfig build reported by Mark in 12/17 patch
>
> Srinivas Kandagatla (17):
> ASoC: dt-bindings: move LPASS dai related bindings out of q6afe
> ASoC: dt-bindings: move LPASS clocks related bindings out of q6afe
> ASoC: dt-bindings: rename q6afe.h to q6dsp-lpass-ports.h
> ASoC: qdsp6: q6afe-dai: move lpass audio ports to common file
> ASoC: qdsp6: q6afe-clocks: move audio-clocks to common file
> ASoC: dt-bindings: q6dsp: add q6apm-lpass-dai compatible
> ASoC: dt-bindings: lpass-clocks: add q6prm clocks compatible
> ASoC: dt-bindings: add q6apm digital audio stream bindings
> ASoC: qdsp6: audioreach: add basic pkt alloc support
> ASoC: qdsp6: audioreach: add q6apm support
> ASoC: qdsp6: audioreach: add module configuration command helpers
> ASoC: qdsp6: audioreach: add Kconfig and Makefile
> ASoC: qdsp6: audioreach: add topology support
> ASoC: qdsp6: audioreach: add q6apm-dai support
> ASoC: qdsp6: audioreach: add q6apm lpass dai support
> ASoC: qdsp6: audioreach: add q6prm support
> ASoC: qdsp6: audioreach: add support for q6prm-clocks
>
> .../devicetree/bindings/sound/qcom,q6afe.txt | 181 ---
> .../bindings/sound/qcom,q6apm-dai.yaml | 53 +
> .../sound/qcom,q6dsp-lpass-clocks.yaml | 77 ++
> .../sound/qcom,q6dsp-lpass-ports.yaml | 205 +++
> include/dt-bindings/sound/qcom,q6afe.h | 203 +--
> .../sound/qcom,q6dsp-lpass-ports.h | 208 +++
> include/uapi/sound/snd_ar_tokens.h | 208 +++
> sound/soc/qcom/Kconfig | 22 +
> sound/soc/qcom/qdsp6/Makefile | 11 +-
> sound/soc/qcom/qdsp6/audioreach.c | 1130 +++++++++++++++++
> sound/soc/qcom/qdsp6/audioreach.h | 726 +++++++++++
> sound/soc/qcom/qdsp6/q6afe-clocks.c | 187 +--
> sound/soc/qcom/qdsp6/q6afe-dai.c | 687 +---------
> sound/soc/qcom/qdsp6/q6apm-dai.c | 416 ++++++
> sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 260 ++++
> sound/soc/qcom/qdsp6/q6apm.c | 822 ++++++++++++
> sound/soc/qcom/qdsp6/q6apm.h | 152 +++
> sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.c | 186 +++
> sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.h | 30 +
> sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c | 627 +++++++++
> sound/soc/qcom/qdsp6/q6dsp-lpass-ports.h | 22 +
> sound/soc/qcom/qdsp6/q6prm-clocks.c | 85 ++
> sound/soc/qcom/qdsp6/q6prm.c | 202 +++
> sound/soc/qcom/qdsp6/q6prm.h | 78 ++
> sound/soc/qcom/qdsp6/topology.c | 1113 ++++++++++++++++
> 25 files changed, 6664 insertions(+), 1227 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml
> create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-clocks.yaml
> create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml
> create mode 100644 include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
> create mode 100644 include/uapi/sound/snd_ar_tokens.h
> create mode 100644 sound/soc/qcom/qdsp6/audioreach.c
> create mode 100644 sound/soc/qcom/qdsp6/audioreach.h
> create mode 100644 sound/soc/qcom/qdsp6/q6apm-dai.c
> create mode 100644 sound/soc/qcom/qdsp6/q6apm-lpass-dais.c
> create mode 100644 sound/soc/qcom/qdsp6/q6apm.c
> create mode 100644 sound/soc/qcom/qdsp6/q6apm.h
> create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.c
> create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.h
> create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.h
> create mode 100644 sound/soc/qcom/qdsp6/q6prm-clocks.c
> create mode 100644 sound/soc/qcom/qdsp6/q6prm.c
> create mode 100644 sound/soc/qcom/qdsp6/q6prm.h
> create mode 100644 sound/soc/qcom/qdsp6/topology.c
>
More information about the Alsa-devel
mailing list