1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: "http://devicetree.org/schemas/soc/qcom/qcom,apr.yaml#"
5$schema: "http://devicetree.org/meta-schemas/core.yaml#"
6
7title: Qualcomm APR/GPR (Asynchronous/Generic Packet Router)
8
9maintainers:
10  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
11
12description: |
13  This binding describes the Qualcomm APR/GPR, APR/GPR is a IPC protocol for
14  communication between Application processor and QDSP. APR/GPR is mainly
15  used for audio/voice services on the QDSP.
16
17properties:
18  compatible:
19    enum:
20      - qcom,apr
21      - qcom,apr-v2
22      - qcom,gpr
23
24  power-domains:
25    maxItems: 1
26
27  qcom,apr-domain:
28    $ref: /schemas/types.yaml#/definitions/uint32
29    enum: [1, 2, 3, 4, 5, 6, 7]
30    description:
31      Selects the processor domain for apr
32        1 = APR simulator
33        2 = PC Domain
34        3 = Modem Domain
35        4 = ADSP Domain
36        5 = Application processor Domain
37        6 = Modem2 Domain
38        7 = Application Processor2 Domain
39    deprecated: true
40
41  qcom,domain:
42    $ref: /schemas/types.yaml#/definitions/uint32
43    minimum: 1
44    maximum: 7
45    description:
46      Selects the processor domain for apr
47        1 = APR simulator
48        2 = PC Domain
49        3 = Modem Domain
50        4 = ADSP Domain
51        5 = Application processor Domain
52        6 = Modem2 Domain
53        7 = Application Processor2 Domain
54      Selects the processor domain for gpr
55        1 = Modem Domain
56        2 = Audio DSP Domain
57        3 = Application Processor Domain
58
59  qcom,glink-channels:
60    $ref: /schemas/types.yaml#/definitions/string-array
61    description: Channel name used for the communication
62    maxItems: 1
63
64  qcom,intents:
65    $ref: /schemas/types.yaml#/definitions/uint32-matrix
66    minItems: 1
67    maxItems: 32
68    items:
69      items:
70        - description: size of each intent to preallocate
71        - description: amount of intents to preallocate
72          minimum: 1
73    description:
74      List of (size, amount) pairs describing what intents should be
75      preallocated for this virtual channel. This can be used to tweak the
76      default intents available for the channel to meet expectations of the
77      remote.
78
79  qcom,smd-channels:
80    $ref: /schemas/types.yaml#/definitions/string-array
81    description: Channel name used for the communication
82    items:
83      - const: apr_audio_svc
84
85  '#address-cells':
86    const: 1
87
88  '#size-cells':
89    const: 0
90
91patternProperties:
92  "^service@[1-9a-d]$":
93    type: object
94    $ref: /schemas/soc/qcom/qcom,apr-services.yaml
95    additionalProperties: true
96    description:
97      APR/GPR static port services.
98
99    properties:
100      compatible:
101        enum:
102          - qcom,q6core
103          - qcom,q6asm
104          - qcom,q6afe
105          - qcom,q6adm
106          - qcom,q6apm
107          - qcom,q6prm
108
109required:
110  - compatible
111  - qcom,domain
112
113allOf:
114  - if:
115      properties:
116        compatible:
117          enum:
118            - qcom,gpr
119    then:
120      properties:
121        qcom,glink-channels:
122          items:
123            - const: adsp_apps
124        power-domains: false
125    else:
126      properties:
127        qcom,glink-channels:
128          items:
129            - const: apr_audio_svc
130
131  - if:
132      required:
133        - qcom,glink-channels
134    then:
135      properties:
136        qcom,smd-channels: false
137
138  - if:
139      required:
140        - qcom,smd-channels
141    then:
142      properties:
143        qcom,glink-channels: false
144
145additionalProperties: false
146
147examples:
148  - |
149    #include <dt-bindings/soc/qcom,apr.h>
150    apr {
151        compatible = "qcom,apr-v2";
152        qcom,domain = <APR_DOMAIN_ADSP>;
153        qcom,glink-channels = "apr_audio_svc";
154        qcom,intents = <512 20>;
155        #address-cells = <1>;
156        #size-cells = <0>;
157
158        q6core: service@3 {
159            compatible = "qcom,q6core";
160            reg = <APR_SVC_ADSP_CORE>;
161            qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
162        };
163
164        service@4 {
165            compatible = "qcom,q6afe";
166            reg = <APR_SVC_AFE>;
167            qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
168
169            clock-controller {
170                compatible = "qcom,q6afe-clocks";
171                #clock-cells = <2>;
172            };
173
174            dais {
175                compatible = "qcom,q6afe-dais";
176                #address-cells = <1>;
177                #size-cells = <0>;
178                #sound-dai-cells = <1>;
179                /* ... */
180            };
181            /* ... */
182        };
183    };
184
185  - |
186    #include <dt-bindings/soc/qcom,gpr.h>
187    gpr {
188        compatible = "qcom,gpr";
189        qcom,domain = <GPR_DOMAIN_ID_ADSP>;
190        qcom,glink-channels = "adsp_apps";
191        qcom,intents = <512 20>;
192        #address-cells = <1>;
193        #size-cells = <0>;
194
195        service@1 {
196            compatible = "qcom,q6apm";
197            reg = <GPR_APM_MODULE_IID>;
198            #sound-dai-cells = <0>;
199            qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
200
201            dais {
202                compatible = "qcom,q6apm-dais";
203                iommus = <&apps_smmu 0x1801 0x0>;
204            };
205
206            bedais {
207                compatible = "qcom,q6apm-lpass-dais";
208                #sound-dai-cells = <1>;
209            };
210        };
211    };
212