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) binding
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-v2
21      - qcom,gpr
22
23  power-domains:
24    maxItems: 1
25
26  qcom,apr-domain:
27    $ref: /schemas/types.yaml#/definitions/uint32
28    enum: [1, 2, 3, 4, 5, 6, 7]
29    description:
30      Selects the processor domain for apr
31        1 = APR simulator
32        2 = PC Domain
33        3 = Modem Domain
34        4 = ADSP Domain
35        5 = Application processor Domain
36        6 = Modem2 Domain
37        7 = Application Processor2 Domain
38    deprecated: true
39
40  qcom,domain:
41    $ref: /schemas/types.yaml#/definitions/uint32
42    minimum: 1
43    maximum: 7
44    description:
45      Selects the processor domain for apr
46        1 = APR simulator
47        2 = PC Domain
48        3 = Modem Domain
49        4 = ADSP Domain
50        5 = Application processor Domain
51        6 = Modem2 Domain
52        7 = Application Processor2 Domain
53      Selects the processor domain for gpr
54        1 = Modem Domain
55        2 = Audio DSP Domain
56        3 = Application Processor Domain
57
58  qcom,glink-channels:
59    $ref: /schemas/types.yaml#/definitions/string-array
60    description: Channel name used for the communication
61    items:
62      - const: apr_audio_svc
63
64  qcom,intents:
65    $ref: /schemas/types.yaml#/definitions/uint32-array
66    description:
67      List of (size, amount) pairs describing what intents should be
68      preallocated for this virtual channel. This can be used to tweak the
69      default intents available for the channel to meet expectations of the
70      remote.
71
72  qcom,smd-channels:
73    $ref: /schemas/types.yaml#/definitions/string-array
74    description: Channel name used for the communication
75    items:
76      - const: apr_audio_svc
77
78  '#address-cells':
79    const: 1
80
81  '#size-cells':
82    const: 0
83
84#APR/GPR Services
85patternProperties:
86  "^service@[1-9a-d]$":
87    type: object
88    description:
89      APR/GPR node's client devices use subnodes for desired static port services.
90
91    properties:
92      compatible:
93        enum:
94          - qcom,q6core
95          - qcom,q6asm
96          - qcom,q6afe
97          - qcom,q6adm
98          - qcom,q6apm
99          - qcom,q6prm
100
101      reg:
102        minimum: 1
103        maximum: 13
104        description:
105          APR Service ID
106            3 = DSP Core Service
107            4 = Audio  Front End Service.
108            5 = Voice Stream Manager Service.
109            6 = Voice processing manager.
110            7 = Audio Stream Manager Service.
111            8 = Audio Device Manager Service.
112            9 = Multimode voice manager.
113            10 = Core voice stream.
114            11 = Core voice processor.
115            12 = Ultrasound stream manager.
116            13 = Listen stream manager.
117          GPR Service ID
118            1 = Audio Process Manager Service
119            2 = Proxy Resource Manager Service.
120            3 = AMDB Service.
121            4 = Voice processing manager.
122
123      clock-controller:
124        $ref: /schemas/sound/qcom,q6dsp-lpass-clocks.yaml#
125        description: Qualcomm DSP LPASS clock controller
126        unevaluatedProperties: false
127
128      dais:
129        type: object
130        oneOf:
131          - $ref: /schemas/sound/qcom,q6apm-dai.yaml#
132          - $ref: /schemas/sound/qcom,q6dsp-lpass-ports.yaml#
133          - $ref: /schemas/sound/qcom,q6asm-dais.yaml#
134        unevaluatedProperties: false
135        description: Qualcomm DSP audio ports
136
137      routing:
138        type: object
139        $ref: /schemas/sound/qcom,q6adm-routing.yaml#
140        unevaluatedProperties: false
141        description: Qualcomm DSP LPASS audio routing
142
143      qcom,protection-domain:
144        $ref: /schemas/types.yaml#/definitions/string-array
145        description: protection domain service name and path for apr service
146          possible values are
147          "avs/audio", "msm/adsp/audio_pd".
148          "kernel/elf_loader", "msm/modem/wlan_pd".
149          "tms/servreg", "msm/adsp/audio_pd".
150          "tms/servreg", "msm/modem/wlan_pd".
151          "tms/servreg", "msm/slpi/sensor_pd".
152
153    allOf:
154      - if:
155          properties:
156            compatible:
157              enum:
158                - qcom,q6afe
159        then:
160          properties:
161            dais:
162              properties:
163                compatible:
164                  const: qcom,q6afe-dais
165
166      - if:
167          properties:
168            compatible:
169              enum:
170                - qcom,q6apm
171        then:
172          properties:
173            dais:
174              properties:
175                compatible:
176                  enum:
177                    - qcom,q6apm-dais
178                    - qcom,q6apm-lpass-dais
179
180      - if:
181          properties:
182            compatible:
183              enum:
184                - qcom,q6asm
185        then:
186          properties:
187            dais:
188              properties:
189                compatible:
190                  const: qcom,q6asm-dais
191
192    additionalProperties: false
193
194required:
195  - compatible
196  - qcom,domain
197
198allOf:
199  - if:
200      properties:
201        compatible:
202          enum:
203            - qcom,gpr
204    then:
205      properties:
206        power-domains: false
207
208  - if:
209      required:
210        - qcom,glink-channels
211    then:
212      properties:
213        qcom,smd-channels: false
214
215  - if:
216      required:
217        - qcom,smd-channels
218    then:
219      properties:
220        qcom,glink-channels: false
221
222additionalProperties: false
223
224examples:
225  - |
226    #include <dt-bindings/soc/qcom,apr.h>
227    apr {
228        compatible = "qcom,apr-v2";
229        qcom,domain = <APR_DOMAIN_ADSP>;
230        #address-cells = <1>;
231        #size-cells = <0>;
232
233        q6core: service@3 {
234          compatible = "qcom,q6core";
235          reg = <APR_SVC_ADSP_CORE>;
236          qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
237        };
238
239        q6afe: service@4 {
240          compatible = "qcom,q6afe";
241          reg = <APR_SVC_AFE>;
242          qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
243        };
244
245        q6asm: service@7 {
246          compatible = "qcom,q6asm";
247          reg = <APR_SVC_ASM>;
248          qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
249        };
250
251        q6adm: service@8 {
252          compatible = "qcom,q6adm";
253          reg = <APR_SVC_ADM>;
254          qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
255        };
256    };
257
258  - |
259    #include <dt-bindings/soc/qcom,gpr.h>
260    gpr {
261        compatible = "qcom,gpr";
262        qcom,domain = <GPR_DOMAIN_ID_ADSP>;
263        #address-cells = <1>;
264        #size-cells = <0>;
265
266        service@1 {
267          compatible = "qcom,q6apm";
268          reg = <GPR_APM_MODULE_IID>;
269          qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
270        };
271    };
272