From 14aed85ca46699106a0f533a4709aa6fc53ad249 Mon Sep 17 00:00:00 2001 From: Pratyush Meduri Date: Fri, 17 Jul 2026 15:33:54 +0530 Subject: [PATCH 1/3] FROMLIST: dt-bindings: remoteproc: qcom,pas-common: allow up to 3 iommus The ADSP PAS on several Qualcomm SoCs (e.g. SA8775P/lemans, QCS8300, Monaco) needs more than a single SMMU stream ID for the audio ML (machine-learning) offload use case. In addition to the primary ADSP stream ID, the DSP/SPF issues DMA transactions through extra stream IDs that are not covered by the existing single-entry mapping. Relax the iommus constraint to allow between 1 and 3 entries so the additional ML offload stream IDs can be described, fixing dtb_check schema violations on device trees that add them. Remove the dependency requiring qcom,vmid whenever a memory-region property is present in the q6apm-dai binding. The memory region itself does not inherently require VMID configuration and the dependency unnecessarily restricts valid DT descriptions. Link: https://lore.kernel.org/all/20260717095825.3962666-2-pratyush.meduri@oss.qualcomm.com/ Signed-off-by: Pratyush Meduri --- .../devicetree/bindings/remoteproc/qcom,pas-common.yaml | 3 ++- Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,pas-common.yaml b/Documentation/devicetree/bindings/remoteproc/qcom,pas-common.yaml index 6a736161d5aed..f4086787425ce 100644 --- a/Documentation/devicetree/bindings/remoteproc/qcom,pas-common.yaml +++ b/Documentation/devicetree/bindings/remoteproc/qcom,pas-common.yaml @@ -45,7 +45,8 @@ properties: - const: shutdown-ack iommus: - maxItems: 1 + minItems: 1 + maxItems: 3 power-domains: minItems: 1 diff --git a/Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml b/Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml index 1c0ea0f389e44..5bf078a005d1c 100644 --- a/Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml +++ b/Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml @@ -49,10 +49,6 @@ properties: required: - compatible -dependentRequired: - memory-region: - - qcom,vmid - additionalProperties: false examples: From de425ef1b4687bc0226bdab2ceda63273e517f16 Mon Sep 17 00:00:00 2001 From: Pratyush Meduri Date: Thu, 16 Jul 2026 20:05:31 +0530 Subject: [PATCH 2/3] FROMLIST: arm64: dts: qcom: lemans: enable audio ML offload memory and SMMU mappings The audio ML (machine-learning) offload use case requires a contiguous, physically addressable buffer shared with the audio DSP/SPF, and issues DMA transactions through additional SMMU stream IDs that are not covered by the existing ADSP mapping. Add a dedicated reusable shared-dma-pool CMA region (16 MiB, 4 MiB aligned) and wire it to the q6apm DAIs node via memory-region. A dedicated pool guarantees the alignment and contiguity the DSP expects and isolates these allocations from the default CMA region. Under the EL2 (Gunyah/hypervisor) configuration the SMMU is fully enforcing, so the ML transactions are otherwise blocked and faulted: arm-smmu 15000000.iommu: Blocked unknown Stream ID 0x3060 arm-smmu 15000000.iommu: Blocked unknown Stream ID 0x3062 Add the ML-related stream IDs (0x3060 mask 0x9, 0x3062 mask 0x1) to the remoteproc_adsp iommus property in the EL2 overlay so these buffers are translated by the SMMU instead of being rejected. Link: https://lore.kernel.org/all/20260717095825.3962666-3-pratyush.meduri@oss.qualcomm.com/ Signed-off-by: Pratyush Meduri --- arch/arm64/boot/dts/qcom/lemans-el2.dtso | 4 +++- arch/arm64/boot/dts/qcom/lemans.dtsi | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/qcom/lemans-el2.dtso b/arch/arm64/boot/dts/qcom/lemans-el2.dtso index 98153a06b4bbf..95cb8586b1068 100644 --- a/arch/arm64/boot/dts/qcom/lemans-el2.dtso +++ b/arch/arm64/boot/dts/qcom/lemans-el2.dtso @@ -26,7 +26,9 @@ * we need to configure it properly to use remote processor. */ &remoteproc_adsp { - iommus = <&apps_smmu 0x3000 0x0>; + iommus = <&apps_smmu 0x3000 0x0>, + <&apps_smmu 0x3060 0x9>, + <&apps_smmu 0x3062 0x1>; }; &remoteproc_cdsp0 { diff --git a/arch/arm64/boot/dts/qcom/lemans.dtsi b/arch/arm64/boot/dts/qcom/lemans.dtsi index 63d269facff2c..8e62258ac14cd 100644 --- a/arch/arm64/boot/dts/qcom/lemans.dtsi +++ b/arch/arm64/boot/dts/qcom/lemans.dtsi @@ -804,6 +804,14 @@ #size-cells = <2>; ranges; + audio_cma_mem: qcom,audio-ml { + compatible = "shared-dma-pool"; + alloc-ranges = <0x0 0x00000000 0x0 0xffffffff>; + reusable; + alignment = <0x0 0x400000>; + size = <0x0 0x1000000>; + }; + sail_ss_mem: sail-ss@80000000 { reg = <0x0 0x80000000 0x0 0x10000000>; no-map; @@ -7778,6 +7786,7 @@ q6apmdai: dais { compatible = "qcom,q6apm-dais"; iommus = <&apps_smmu 0x3001 0x0>; + memory-region = <&audio_cma_mem>; }; }; From 7b19957325b2f9819e6763087bd49f181b723237 Mon Sep 17 00:00:00 2001 From: Pratyush Meduri Date: Thu, 16 Jul 2026 20:20:34 +0530 Subject: [PATCH 3/3] FROMLIST: arm64: dts: qcom: monaco: enable audio ML offload memory and SMMU mappings The audio ML (machine-learning) offload use case requires a contiguous, physically addressable buffer shared with the audio DSP/SPF, and issues DMA transactions through additional SMMU stream IDs that are not covered by the existing ADSP mapping. Add a dedicated reusable shared-dma-pool CMA region (16 MiB, 4 MiB aligned) and wire it to the q6apm DAIs node via memory-region. A dedicated pool guarantees the alignment and contiguity the DSP expects and isolates these allocations from the default CMA region. Under the EL2 (Gunyah/hypervisor) configuration the SMMU is fully enforcing, so the ML transactions are otherwise blocked and faulted: arm-smmu 15000000.iommu: Blocked unknown Stream ID 0x2060 arm-smmu 15000000.iommu: Blocked unknown Stream ID 0x2062 Add the ML-related stream IDs (0x3060 mask 0x9, 0x3062 mask 0x1) to the remoteproc_adsp iommus property in the EL2 overlay so these buffers are translated by the SMMU instead of being rejected. Link: https://lore.kernel.org/all/20260717095825.3962666-4-pratyush.meduri@oss.qualcomm.com/ Signed-off-by: Pratyush Meduri --- arch/arm64/boot/dts/qcom/monaco-el2.dtso | 4 +++- arch/arm64/boot/dts/qcom/monaco.dtsi | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/qcom/monaco-el2.dtso b/arch/arm64/boot/dts/qcom/monaco-el2.dtso index 7cae65ae499c3..b3d009c95b440 100644 --- a/arch/arm64/boot/dts/qcom/monaco-el2.dtso +++ b/arch/arm64/boot/dts/qcom/monaco-el2.dtso @@ -20,7 +20,9 @@ }; &remoteproc_adsp { - iommus = <&apps_smmu 0x2000 0x0>; + iommus = <&apps_smmu 0x2000 0x0>, + <&apps_smmu 0x2060 0x9>, + <&apps_smmu 0x2062 0x1>; }; &remoteproc_cdsp { diff --git a/arch/arm64/boot/dts/qcom/monaco.dtsi b/arch/arm64/boot/dts/qcom/monaco.dtsi index b3c65d7e6ff7b..61f204adb1c35 100644 --- a/arch/arm64/boot/dts/qcom/monaco.dtsi +++ b/arch/arm64/boot/dts/qcom/monaco.dtsi @@ -789,6 +789,14 @@ #size-cells = <2>; ranges; + audio_cma_mem: qcom,audio-ml { + compatible = "shared-dma-pool"; + alloc-ranges = <0x0 0x00000000 0x0 0xffffffff>; + reusable; + alignment = <0x0 0x400000>; + size = <0x0 0x1000000>; + }; + aop_image_mem: aop-image-region@90800000 { reg = <0x0 0x90800000 0x0 0x60000>; no-map; @@ -2851,6 +2859,7 @@ q6apmdai: dais { compatible = "qcom,q6apm-dais"; iommus = <&apps_smmu 0x2001 0x0>; + memory-region = <&audio_cma_mem>; }; };