diff mbox series

[02/10] ASoC: dt-bindings: qcom,apr: Split services to shared schema

Message ID 20221111113547.100442-3-krzysztof.kozlowski@linaro.org
State Superseded, archived
Headers show
Series ASoC: dt-bindings: Rework Qualcomm APR/GPR Sound nodes for SM8450 | expand

Checks

Context Check Description
robh/checkpatch success
robh/patch-applied success
robh/dt-meta-schema fail build log

Commit Message

Krzysztof Kozlowski Nov. 11, 2022, 11:35 a.m. UTC
The APR/GPR nodes are organized like:

  apr-or-gpr-device-node <- qcom,apr.yaml
    apr-gpr-service@[0-9] <- qcom,apr.yaml
      service-specific-components <- /schemas/sound/qcom,q6*.yaml

The schema for services (apr-gpr-service@[0-9]) already grows
considerably and is still quite not specific.  It allows several
incorrect combinations, like adding a clock-controller to a APM device.
Restricting it would complicate the schema even more.  Bringing new
support for sound on Qualcomm SM8450 and SC8280XP SoC would grow it as
well.

Simplify the qcom,apr.yaml by splitting the services to a shared file
which will be:
1. Referenced by qcom,apr.yaml with additionalProperties:true,
2. Referenced by specific bindings for services with
   additionalProperties:false (not yet in this commit).

While moving the code, add also required 'reg' and
'qcom,protection-domain' to further constrain the bindings.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 .../bindings/soc/qcom/qcom,apr-services.yaml  |  54 +++++++++
 .../bindings/soc/qcom/qcom,apr.yaml           | 108 +-----------------
 MAINTAINERS                                   |   2 +-
 3 files changed, 58 insertions(+), 106 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml

Comments

Rob Herring Nov. 11, 2022, 1:30 p.m. UTC | #1
On Fri, 11 Nov 2022 12:35:39 +0100, Krzysztof Kozlowski wrote:
> The APR/GPR nodes are organized like:
> 
>   apr-or-gpr-device-node <- qcom,apr.yaml
>     apr-gpr-service@[0-9] <- qcom,apr.yaml
>       service-specific-components <- /schemas/sound/qcom,q6*.yaml
> 
> The schema for services (apr-gpr-service@[0-9]) already grows
> considerably and is still quite not specific.  It allows several
> incorrect combinations, like adding a clock-controller to a APM device.
> Restricting it would complicate the schema even more.  Bringing new
> support for sound on Qualcomm SM8450 and SC8280XP SoC would grow it as
> well.
> 
> Simplify the qcom,apr.yaml by splitting the services to a shared file
> which will be:
> 1. Referenced by qcom,apr.yaml with additionalProperties:true,
> 2. Referenced by specific bindings for services with
>    additionalProperties:false (not yet in this commit).
> 
> While moving the code, add also required 'reg' and
> 'qcom,protection-domain' to further constrain the bindings.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
>  .../bindings/soc/qcom/qcom,apr-services.yaml  |  54 +++++++++
>  .../bindings/soc/qcom/qcom,apr.yaml           | 108 +-----------------
>  MAINTAINERS                                   |   2 +-
>  3 files changed, 58 insertions(+), 106 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@3: failed to match any schema with compatible: ['qcom,q6core']
Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@4: failed to match any schema with compatible: ['qcom,q6afe']
Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@7: failed to match any schema with compatible: ['qcom,q6asm']
Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@8: failed to match any schema with compatible: ['qcom,q6adm']
Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-1/gpr/service@1: failed to match any schema with compatible: ['qcom,q6apm']
Documentation/devicetree/bindings/sound/qcom,q6adm-routing.example.dtb:0:0: /example-0/apr/service@8: failed to match any schema with compatible: ['qcom,q6adm']
Documentation/devicetree/bindings/sound/qcom,q6asm-dais.example.dtb:0:0: /example-0/apr/service@7: failed to match any schema with compatible: ['qcom,q6asm']
Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-clocks.example.dtb:0:0: /example-0/apr/service@4: failed to match any schema with compatible: ['qcom,q6afe']
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-clocks.example.dtb: gpr: service@2: 'qcom,protection-domain' is a required property
	From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-clocks.example.dtb:0:0: /example-1/gpr/service@2: failed to match any schema with compatible: ['qcom,q6prm']
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/sound/qcom,q6apm-dai.example.dtb: gpr: service@1: 'qcom,protection-domain' is a required property
	From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
Documentation/devicetree/bindings/sound/qcom,q6apm-dai.example.dtb:0:0: /example-0/gpr/service@1: failed to match any schema with compatible: ['qcom,q6apm']
Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.example.dtb:0:0: /example-0/apr/service@4: failed to match any schema with compatible: ['qcom,q6afe']
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.example.dtb: gpr: service@1: 'qcom,protection-domain' is a required property
	From schema: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.example.dtb:0:0: /example-1/gpr/service@1: failed to match any schema with compatible: ['qcom,q6apm']

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.
Krzysztof Kozlowski Nov. 11, 2022, 2:21 p.m. UTC | #2
On 11/11/2022 14:30, Rob Herring wrote:
> 
> On Fri, 11 Nov 2022 12:35:39 +0100, Krzysztof Kozlowski wrote:
>> The APR/GPR nodes are organized like:
>>
>>   apr-or-gpr-device-node <- qcom,apr.yaml
>>     apr-gpr-service@[0-9] <- qcom,apr.yaml
>>       service-specific-components <- /schemas/sound/qcom,q6*.yaml
>>
>> The schema for services (apr-gpr-service@[0-9]) already grows
>> considerably and is still quite not specific.  It allows several
>> incorrect combinations, like adding a clock-controller to a APM device.
>> Restricting it would complicate the schema even more.  Bringing new
>> support for sound on Qualcomm SM8450 and SC8280XP SoC would grow it as
>> well.
>>
>> Simplify the qcom,apr.yaml by splitting the services to a shared file
>> which will be:
>> 1. Referenced by qcom,apr.yaml with additionalProperties:true,
>> 2. Referenced by specific bindings for services with
>>    additionalProperties:false (not yet in this commit).
>>
>> While moving the code, add also required 'reg' and
>> 'qcom,protection-domain' to further constrain the bindings.
>>
>> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>> ---
>>  .../bindings/soc/qcom/qcom,apr-services.yaml  |  54 +++++++++
>>  .../bindings/soc/qcom/qcom,apr.yaml           | 108 +-----------------
>>  MAINTAINERS                                   |   2 +-
>>  3 files changed, 58 insertions(+), 106 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
>>
> 
> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> on your patch (DT_CHECKER_FLAGS is new in v5.13):
> 
> yamllint warnings/errors:
> 
> dtschema/dtc warnings/errors:
> Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@3: failed to match any schema with compatible: ['qcom,q6core']
> Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@4: failed to match any schema with compatible: ['qcom,q6afe']
> Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@7: failed to match any schema with compatible: ['qcom,q6asm']
> Documentation/devicetree/bindings/soc/qcom/qcom,apr.example.dtb:0:0: /example-0/apr/service@8: failed to match any schema with compatible: ['qcom,q6adm']

This is expected. I should have mention maybe in commit msg that these
compatibles are being removed in this commit and re-added in further
commits. Change is therefore not entirely bisectable, but should be
easier for review.

If desired, I can squash these commits.

Best regards,
Krzysztof
Srinivas Kandagatla Nov. 11, 2022, 4:35 p.m. UTC | #3
On 11/11/2022 11:35, Krzysztof Kozlowski wrote:
> The APR/GPR nodes are organized like:
> 
>    apr-or-gpr-device-node <- qcom,apr.yaml
>      apr-gpr-service@[0-9] <- qcom,apr.yaml
>        service-specific-components <- /schemas/sound/qcom,q6*.yaml
> 
> The schema for services (apr-gpr-service@[0-9]) already grows

I have not seen these grow or change alteast in the past 9 years.

Old APR (Elite f/w) and new GPR (AudioReach) interface provides access 
to static services on the DSP.

> considerably and is still quite not specific.  It allows several
> incorrect combinations, like adding a clock-controller to a APM device.

This should be fixed for sure for validation.

We had dedicated bindings per service before.

As the service has changed as part of new AudioReach Firmware, we could 
have added new bindings for these services again. But as we are dealing 
with the same audio hardware and clock resources a new bindings per 
service did not make sense. Since then we moved all the lpass audio 
ports and clocks related bindings to qcom,q6dsp-lpass-clocks.yaml and 
qcom,q6dsp-lpass-ports.yaml.

--srini

> Restricting it would complicate the schema even more.  Bringing new
> support for sound on Qualcomm SM8450 and SC8280XP SoC would grow it as
> well.
> 
> Simplify the qcom,apr.yaml by splitting the services to a shared file
> which will be:
> 1. Referenced by qcom,apr.yaml with additionalProperties:true,
> 2. Referenced by specific bindings for services with
>     additionalProperties:false (not yet in this commit).
> 
> While moving the code, add also required 'reg' and
> 'qcom,protection-domain' to further constrain the bindings.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
>   .../bindings/soc/qcom/qcom,apr-services.yaml  |  54 +++++++++
>   .../bindings/soc/qcom/qcom,apr.yaml           | 108 +-----------------
>   MAINTAINERS                                   |   2 +-
>   3 files changed, 58 insertions(+), 106 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
> 
> diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
> new file mode 100644
> index 000000000000..290555426c39
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
> @@ -0,0 +1,54 @@
> +# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/soc/qcom/qcom,apr-services.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm APR/GPR services shared parts
> +
> +maintainers:
> +  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> +
> +description:
> +  Common parts of a static service in Qualcomm APR/GPR (Asynchronous/Generic
> +  Packet Router).
> +
> +properties:
> +  reg:
> +    minimum: 1
> +    maximum: 13
> +    description: |
> +      APR Service ID
> +        3 = DSP Core Service
> +        4 = Audio  Front End Service.
> +        5 = Voice Stream Manager Service.
> +        6 = Voice processing manager.
> +        7 = Audio Stream Manager Service.
> +        8 = Audio Device Manager Service.
> +        9 = Multimode voice manager.
> +        10 = Core voice stream.
> +        11 = Core voice processor.
> +        12 = Ultrasound stream manager.
> +        13 = Listen stream manager.
> +      GPR Service ID
> +        1 = Audio Process Manager Service
> +        2 = Proxy Resource Manager Service.
> +        3 = AMDB Service.
> +        4 = Voice processing manager.
> +
> +  qcom,protection-domain:
> +    $ref: /schemas/types.yaml#/definitions/string-array
> +    description: |
> +      Protection domain service name and path for APR service
> +      possible values are::
> +      "avs/audio", "msm/adsp/audio_pd".
> +      "kernel/elf_loader", "msm/modem/wlan_pd".
> +      "tms/servreg", "msm/adsp/audio_pd".
> +      "tms/servreg", "msm/modem/wlan_pd".
> +      "tms/servreg", "msm/slpi/sensor_pd".
> +
> +required:
> +  - reg
> +  - qcom,protection-domain
> +
> +additionalProperties: true
> diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> index 0a7a34cb2497..9302ffe567d6 100644
> --- a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> @@ -80,115 +80,13 @@ properties:
>     '#size-cells':
>       const: 0
>   
> -#APR/GPR Services
>   patternProperties:
>     "^service@[1-9a-d]$":
>       type: object
> +    $ref: /schemas/soc/qcom/qcom,apr-services.yaml
> +    additionalProperties: true
>       description:
> -      APR/GPR node's client devices use subnodes for desired static port services.
> -
> -    properties:
> -      compatible:
> -        enum:
> -          - qcom,q6core
> -          - qcom,q6asm
> -          - qcom,q6afe
> -          - qcom,q6adm
> -          - qcom,q6apm
> -          - qcom,q6prm
> -
> -      reg:
> -        minimum: 1
> -        maximum: 13
> -        description:
> -          APR Service ID
> -            3 = DSP Core Service
> -            4 = Audio  Front End Service.
> -            5 = Voice Stream Manager Service.
> -            6 = Voice processing manager.
> -            7 = Audio Stream Manager Service.
> -            8 = Audio Device Manager Service.
> -            9 = Multimode voice manager.
> -            10 = Core voice stream.
> -            11 = Core voice processor.
> -            12 = Ultrasound stream manager.
> -            13 = Listen stream manager.
> -          GPR Service ID
> -            1 = Audio Process Manager Service
> -            2 = Proxy Resource Manager Service.
> -            3 = AMDB Service.
> -            4 = Voice processing manager.
> -
> -      clock-controller:
> -        $ref: /schemas/sound/qcom,q6dsp-lpass-clocks.yaml#
> -        description: Qualcomm DSP LPASS clock controller
> -        unevaluatedProperties: false
> -
> -      dais:
> -        type: object
> -        oneOf:
> -          - $ref: /schemas/sound/qcom,q6apm-dai.yaml#
> -          - $ref: /schemas/sound/qcom,q6dsp-lpass-ports.yaml#
> -          - $ref: /schemas/sound/qcom,q6asm-dais.yaml#
> -        unevaluatedProperties: false
> -        description: Qualcomm DSP audio ports
> -
> -      routing:
> -        type: object
> -        $ref: /schemas/sound/qcom,q6adm-routing.yaml#
> -        unevaluatedProperties: false
> -        description: Qualcomm DSP LPASS audio routing
> -
> -      qcom,protection-domain:
> -        $ref: /schemas/types.yaml#/definitions/string-array
> -        description: protection domain service name and path for apr service
> -          possible values are
> -          "avs/audio", "msm/adsp/audio_pd".
> -          "kernel/elf_loader", "msm/modem/wlan_pd".
> -          "tms/servreg", "msm/adsp/audio_pd".
> -          "tms/servreg", "msm/modem/wlan_pd".
> -          "tms/servreg", "msm/slpi/sensor_pd".
> -
> -    allOf:
> -      - if:
> -          properties:
> -            compatible:
> -              enum:
> -                - qcom,q6afe
> -        then:
> -          properties:
> -            dais:
> -              properties:
> -                compatible:
> -                  const: qcom,q6afe-dais
> -
> -      - if:
> -          properties:
> -            compatible:
> -              enum:
> -                - qcom,q6apm
> -        then:
> -          properties:
> -            dais:
> -              properties:
> -                compatible:
> -                  enum:
> -                    - qcom,q6apm-dais
> -                    - qcom,q6apm-lpass-dais
> -
> -      - if:
> -          properties:
> -            compatible:
> -              enum:
> -                - qcom,q6asm
> -        then:
> -          properties:
> -            dais:
> -              properties:
> -                compatible:
> -                  const: qcom,q6asm-dais
> -
> -    additionalProperties: false
> +      APR/GPR static port services.
>   
>   required:
>     - compatible
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 3df7b9a3f5ba..804e4a700477 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -16893,7 +16893,7 @@ M:	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>   M:	Banajit Goswami <bgoswami@quicinc.com>
>   L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
>   S:	Supported
> -F:	Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> +F:	Documentation/devicetree/bindings/soc/qcom/qcom,apr*
>   F:	Documentation/devicetree/bindings/sound/qcom,*
>   F:	drivers/soc/qcom/apr.c
>   F:	include/dt-bindings/sound/qcom,wcd9335.h
Krzysztof Kozlowski Nov. 14, 2022, 7:45 a.m. UTC | #4
On 11/11/2022 17:35, Srinivas Kandagatla wrote:
> 
> 
> On 11/11/2022 11:35, Krzysztof Kozlowski wrote:
>> The APR/GPR nodes are organized like:
>>
>>    apr-or-gpr-device-node <- qcom,apr.yaml
>>      apr-gpr-service@[0-9] <- qcom,apr.yaml
>>        service-specific-components <- /schemas/sound/qcom,q6*.yaml
>>
>> The schema for services (apr-gpr-service@[0-9]) already grows
> 
> I have not seen these grow or change alteast in the past 9 years.

You added GPR to services in 2021, so it grew past 9 years. Then it grew
in 2022 when I started adding missing pieces - missing compatibles and
properties.

> 
> Old APR (Elite f/w) and new GPR (AudioReach) interface provides access 
> to static services on the DSP.
> 
>> considerably and is still quite not specific.  It allows several
>> incorrect combinations, like adding a clock-controller to a APM device.
> 
> This should be fixed for sure for validation.

This cannot be fixed without making schema over-complicated. It includes
six different compatibles. Except few of them - these compatibles
represent different devices.

> 
> We had dedicated bindings per service before.

Where?

> 
> As the service has changed as part of new AudioReach Firmware, we could 
> have added new bindings for these services again. But as we are dealing 
> with the same audio hardware and clock resources a new bindings per 
> service did not make sense. Since then we moved all the lpass audio 
> ports and clocks related bindings to qcom,q6dsp-lpass-clocks.yaml and 
> qcom,q6dsp-lpass-ports.yaml.

These are not bindings for services but bindings for their devices.

Best regards,
Krzysztof
Krzysztof Kozlowski Nov. 15, 2022, 10:22 a.m. UTC | #5
On 11/11/2022 12:35, Krzysztof Kozlowski wrote:
> The APR/GPR nodes are organized like:
> 
>   apr-or-gpr-device-node <- qcom,apr.yaml
>     apr-gpr-service@[0-9] <- qcom,apr.yaml
>       service-specific-components <- /schemas/sound/qcom,q6*.yaml
> 

(...)

> +additionalProperties: true
> diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> index 0a7a34cb2497..9302ffe567d6 100644
> --- a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
> @@ -80,115 +80,13 @@ properties:
>    '#size-cells':
>      const: 0
>  
> -#APR/GPR Services
>  patternProperties:
>    "^service@[1-9a-d]$":
>      type: object
> +    $ref: /schemas/soc/qcom/qcom,apr-services.yaml
> +    additionalProperties: true
>      description:
> -      APR/GPR node's client devices use subnodes for desired static port services.
> -
> -    properties:
> -      compatible:
> -        enum:
> -          - qcom,q6core
> -          - qcom,q6asm
> -          - qcom,q6afe
> -          - qcom,q6adm
> -          - qcom,q6apm
> -          - qcom,q6prm

I think that this piece could stay here. Otherwise we allow any
compatible which matches the qcom,apr-services.yaml binding, but that's
easy to achieve.

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
new file mode 100644
index 000000000000..290555426c39
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/qcom/qcom,apr-services.yaml
@@ -0,0 +1,54 @@ 
+# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/soc/qcom/qcom,apr-services.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm APR/GPR services shared parts
+
+maintainers:
+  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+
+description:
+  Common parts of a static service in Qualcomm APR/GPR (Asynchronous/Generic
+  Packet Router).
+
+properties:
+  reg:
+    minimum: 1
+    maximum: 13
+    description: |
+      APR Service ID
+        3 = DSP Core Service
+        4 = Audio  Front End Service.
+        5 = Voice Stream Manager Service.
+        6 = Voice processing manager.
+        7 = Audio Stream Manager Service.
+        8 = Audio Device Manager Service.
+        9 = Multimode voice manager.
+        10 = Core voice stream.
+        11 = Core voice processor.
+        12 = Ultrasound stream manager.
+        13 = Listen stream manager.
+      GPR Service ID
+        1 = Audio Process Manager Service
+        2 = Proxy Resource Manager Service.
+        3 = AMDB Service.
+        4 = Voice processing manager.
+
+  qcom,protection-domain:
+    $ref: /schemas/types.yaml#/definitions/string-array
+    description: |
+      Protection domain service name and path for APR service
+      possible values are::
+      "avs/audio", "msm/adsp/audio_pd".
+      "kernel/elf_loader", "msm/modem/wlan_pd".
+      "tms/servreg", "msm/adsp/audio_pd".
+      "tms/servreg", "msm/modem/wlan_pd".
+      "tms/servreg", "msm/slpi/sensor_pd".
+
+required:
+  - reg
+  - qcom,protection-domain
+
+additionalProperties: true
diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
index 0a7a34cb2497..9302ffe567d6 100644
--- a/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
+++ b/Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
@@ -80,115 +80,13 @@  properties:
   '#size-cells':
     const: 0
 
-#APR/GPR Services
 patternProperties:
   "^service@[1-9a-d]$":
     type: object
+    $ref: /schemas/soc/qcom/qcom,apr-services.yaml
+    additionalProperties: true
     description:
-      APR/GPR node's client devices use subnodes for desired static port services.
-
-    properties:
-      compatible:
-        enum:
-          - qcom,q6core
-          - qcom,q6asm
-          - qcom,q6afe
-          - qcom,q6adm
-          - qcom,q6apm
-          - qcom,q6prm
-
-      reg:
-        minimum: 1
-        maximum: 13
-        description:
-          APR Service ID
-            3 = DSP Core Service
-            4 = Audio  Front End Service.
-            5 = Voice Stream Manager Service.
-            6 = Voice processing manager.
-            7 = Audio Stream Manager Service.
-            8 = Audio Device Manager Service.
-            9 = Multimode voice manager.
-            10 = Core voice stream.
-            11 = Core voice processor.
-            12 = Ultrasound stream manager.
-            13 = Listen stream manager.
-          GPR Service ID
-            1 = Audio Process Manager Service
-            2 = Proxy Resource Manager Service.
-            3 = AMDB Service.
-            4 = Voice processing manager.
-
-      clock-controller:
-        $ref: /schemas/sound/qcom,q6dsp-lpass-clocks.yaml#
-        description: Qualcomm DSP LPASS clock controller
-        unevaluatedProperties: false
-
-      dais:
-        type: object
-        oneOf:
-          - $ref: /schemas/sound/qcom,q6apm-dai.yaml#
-          - $ref: /schemas/sound/qcom,q6dsp-lpass-ports.yaml#
-          - $ref: /schemas/sound/qcom,q6asm-dais.yaml#
-        unevaluatedProperties: false
-        description: Qualcomm DSP audio ports
-
-      routing:
-        type: object
-        $ref: /schemas/sound/qcom,q6adm-routing.yaml#
-        unevaluatedProperties: false
-        description: Qualcomm DSP LPASS audio routing
-
-      qcom,protection-domain:
-        $ref: /schemas/types.yaml#/definitions/string-array
-        description: protection domain service name and path for apr service
-          possible values are
-          "avs/audio", "msm/adsp/audio_pd".
-          "kernel/elf_loader", "msm/modem/wlan_pd".
-          "tms/servreg", "msm/adsp/audio_pd".
-          "tms/servreg", "msm/modem/wlan_pd".
-          "tms/servreg", "msm/slpi/sensor_pd".
-
-    allOf:
-      - if:
-          properties:
-            compatible:
-              enum:
-                - qcom,q6afe
-        then:
-          properties:
-            dais:
-              properties:
-                compatible:
-                  const: qcom,q6afe-dais
-
-      - if:
-          properties:
-            compatible:
-              enum:
-                - qcom,q6apm
-        then:
-          properties:
-            dais:
-              properties:
-                compatible:
-                  enum:
-                    - qcom,q6apm-dais
-                    - qcom,q6apm-lpass-dais
-
-      - if:
-          properties:
-            compatible:
-              enum:
-                - qcom,q6asm
-        then:
-          properties:
-            dais:
-              properties:
-                compatible:
-                  const: qcom,q6asm-dais
-
-    additionalProperties: false
+      APR/GPR static port services.
 
 required:
   - compatible
diff --git a/MAINTAINERS b/MAINTAINERS
index 3df7b9a3f5ba..804e4a700477 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -16893,7 +16893,7 @@  M:	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
 M:	Banajit Goswami <bgoswami@quicinc.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Supported
-F:	Documentation/devicetree/bindings/soc/qcom/qcom,apr.yaml
+F:	Documentation/devicetree/bindings/soc/qcom/qcom,apr*
 F:	Documentation/devicetree/bindings/sound/qcom,*
 F:	drivers/soc/qcom/apr.c
 F:	include/dt-bindings/sound/qcom,wcd9335.h