[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