From patchwork Mon Aug 9 11:23:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 493841 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:396:0:0:0:0 with SMTP id y22csp2811145jap; Mon, 9 Aug 2021 04:24:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyGPsJWJoJlYDvxhzKJc2iQUIwbW5X2pPPRgFqGEvbNHN0z70gnY/Pg1F6fkXgT6Krrw33I X-Received: by 2002:a92:6a03:: with SMTP id f3mr31859ilc.43.1628508272452; Mon, 09 Aug 2021 04:24:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628508272; cv=none; d=google.com; s=arc-20160816; b=cV5U4903d6K0ofiR2t8yUQ0aHtzlcDoDZir4ax6LxsxChjFpf5bnE5CfvWIMwQ0mfM PkclyXp9FLN2rHLyh1B3zOWSay2t7Xi7jfYnEWWUm52UUdk3OavPQXS+8dottO2ih3dd itx6DHwveLgWozxQROO6GaINQYsdkLHjX5QUmr4WmUDnRT9SDTcbH319om7iG/bGCBm9 o/aY0wgb97/RjVz9C0rpNquf5gTPM3WgyEFgX3feTBzvRqc2Brbj5Th5zNroEVFI6wfW fQx7Hos6CYJnhlPmWf+1ONgKYdGVIZHbuD0oyByEutOjq174BOWvcnfVIeq6Qq2Nm4Yw mH+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=H0QvTsq4Hu71SVIzc9UOs12oE6N97i7FOoAniQXjLLE=; b=Ud9852Pl//tWA5Fk1Tc7PmyMGWc00ujspmVkxbvkcFrFqBAIoVmGL9e8wMGlyLBY10 f0cezSCW5xR6kis7tO48uSKBNB0nlpa+Sj/8IA5DUJz6NXFAMrMu9xCjpYCkyPReaDaz BJGTBfnKOtBQ3LvNif7CAseMGgWGX0xr4pvWa/kND6hesswlYdGI+tlL4+1/x5EfZNsN 2zC3xVlKNjC4Y1FSzFQuZxwKPpncvuXCCZSjl+3P3BUZp4EWttSjGBvzuUtFBX1DQUe9 NnIo+A82EOmkYmuy4zM5iWOKPPyeYWJ3vTeAtz7Py0a15PEQ7E/X6SF5BWPbKBHoCpxe Q1ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rf+o0Vs8; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q9si16629084jap.5.2021.08.09.04.24.32; Mon, 09 Aug 2021 04:24:32 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=rf+o0Vs8; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235045AbhHILYv (ORCPT + 7 others); Mon, 9 Aug 2021 07:24:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235053AbhHILYv (ORCPT ); Mon, 9 Aug 2021 07:24:51 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE492C0613D3 for ; Mon, 9 Aug 2021 04:24:30 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id h13so20923257wrp.1 for ; Mon, 09 Aug 2021 04:24:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=H0QvTsq4Hu71SVIzc9UOs12oE6N97i7FOoAniQXjLLE=; b=rf+o0Vs8HTQ+ELojlj/jSA/9bWOMyF5sRz8gQnJ2VYZqkZFmoT+3CVYwZuzFQZwlmK bXyPjbOSyGokx+KzWk3tN07Mmy7SxMtCYv8ZRofXWAZ9tzDG4jEqxmiyvwACkfHdJx/l w9qoPS+HTLOAmZhwJ8ZkvjfAW10SMHPEsZCo3d0xKoA14zWFqps0rwa04lD7XDWsSMBR cqGEjeHb5WGuvHuWAbofjcM0WEhdjrI/x7Orj42E0BdEzqXxnbs+Cul8d0GVPkP3i5Iz 9uKmg8E9zOnpzYSlzfeCvJ9HZatPic2Hb7kQVSZeP4V01pqsRtoRPQcrK7e3lUd14dnF yPUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=H0QvTsq4Hu71SVIzc9UOs12oE6N97i7FOoAniQXjLLE=; b=ZbP5AAExtsMX6f9axJdxPugqaBp7x2DdCUH1IjfjANSzS32gs1tpdZf8MPkzrBNSCq /0YihmlFrdYQ4CJ6/PJc/b5R3u6Nha0cF1VptIMabMnqetLxpm1VOmp7RrYUjDTXxwLF vZnlzAOOALS2x+NVNcOAWFsbFJK6HEZJF7FFC1eSgKzd6H58ClAlORv3tPODY05OSZ9P QcoMEQb6GWYIOn4RApnGSLPP10zAIbSAI6mbIjc6LVHUON/Xcb7e8qXgQ4zSiLJdzn8V nnHfWfcxywUTygTNVng/fqGZQY3yVHSWtj+TnLPokMBE/Sgya2yGY+P8yc3OV3sJJWpH K/zg== X-Gm-Message-State: AOAM532Iy3PiL5Y0lTPPmn369XmfMUaL+gJJ6JvvW30qu9yscEIbWCZF 99EUqnzhBcvJZ05QV5nGfzUK6Q== X-Received: by 2002:a5d:6905:: with SMTP id t5mr23919160wru.78.1628508269392; Mon, 09 Aug 2021 04:24:29 -0700 (PDT) Received: from srini-hackbox.lan (cpc86377-aztw32-2-0-cust226.18-1.cable.virginm.net. [92.233.226.227]) by smtp.gmail.com with ESMTPSA id b80sm7774900wmb.2.2021.08.09.04.24.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 04:24:28 -0700 (PDT) From: Srinivas Kandagatla To: bjorn.andersson@linaro.org, broonie@kernel.org, robh@kernel.org Cc: plai@codeaurora.org, tiwai@suse.de, devicetree@vger.kernel.org, perex@perex.cz, alsa-devel@alsa-project.org, lgirdwood@gmail.com, bgoswami@codeaurora.org, Srinivas Kandagatla Subject: [PATCH v4 00/20] ASoC: qcom: Add AudioReach support Date: Mon, 9 Aug 2021 12:23:19 +0100 Message-Id: <20210809112339.8368-1-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Many thanks for reviewing v3. This version addresses all the comments raised as part of v3 review. 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 simpified 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/ Thanks, srini Changes since v3: - Split some dt-bindings patches for easy review. - fixed various cppcheck warnings and ignore some bogus ones. - fixed memory leak in various places in topology - reordered Kconfig and Makefile changes - cleaned Kconfig symbols to fit in properly with existing Q6DSP KConfigs - added lpass suffix to compatible for nodes that are dealing with LPASS IP. - fix few typos. Srinivas Kandagatla (20): soc: dt-bindings: qcom: apr: convert to yaml soc: qcom: apr: make code more reuseable soc: dt-bindings: qcom: add gpr bindings soc: qcom: apr: Add GPR support 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 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/soc/qcom/qcom,apr.txt | 134 -- .../bindings/soc/qcom/qcom,apr.yaml | 209 +++ .../devicetree/bindings/sound/qcom,q6afe.txt | 181 --- .../bindings/sound/qcom,q6apm-dai.yaml | 50 + .../sound/qcom,q6dsp-lpass-clocks.yaml | 74 ++ .../sound/qcom,q6dsp-lpass-ports.yaml | 202 +++ drivers/soc/qcom/Kconfig | 8 + drivers/soc/qcom/apr.c | 286 +++- include/dt-bindings/soc/qcom,gpr.h | 18 + include/dt-bindings/sound/qcom,q6afe.h | 203 +-- .../sound/qcom,q6dsp-lpass-ports.h | 208 +++ include/linux/soc/qcom/apr.h | 70 +- include/uapi/sound/snd_ar_tokens.h | 203 +++ sound/soc/qcom/Kconfig | 22 + sound/soc/qcom/qdsp6/Makefile | 11 +- sound/soc/qcom/qdsp6/audioreach.c | 1170 +++++++++++++++++ sound/soc/qcom/qdsp6/audioreach.h | 692 ++++++++++ sound/soc/qcom/qdsp6/q6afe-clocks.c | 187 +-- sound/soc/qcom/qdsp6/q6afe-dai.c | 687 +--------- sound/soc/qcom/qdsp6/q6apm-dai.c | 504 +++++++ sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 266 ++++ sound/soc/qcom/qdsp6/q6apm.c | 916 +++++++++++++ sound/soc/qcom/qdsp6/q6apm.h | 154 +++ 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 | 256 ++++ sound/soc/qcom/qdsp6/q6prm.h | 78 ++ sound/soc/qcom/qdsp6/topology.c | 1118 ++++++++++++++++ 31 files changed, 7443 insertions(+), 1414 deletions(-) delete mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr.txt create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml 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/soc/qcom,gpr.h 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 -- 2.21.0