1# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/net/qcom,ipa.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm IP Accelerator (IPA)
8
9maintainers:
10  - Alex Elder <elder@kernel.org>
11
12description:
13  This binding describes the Qualcomm IPA.  The IPA is capable of offloading
14  certain network processing tasks (e.g. filtering, routing, and NAT) from
15  the main processor.
16
17  The IPA sits between multiple independent "execution environments,"
18  including the Application Processor (AP) and the modem.  The IPA presents
19  a Generic Software Interface (GSI) to each execution environment.
20  The GSI is an integral part of the IPA, but it is logically isolated
21  and has a distinct interrupt and a separately-defined address space.
22
23  See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt.  See
24  iommu/iommu.txt and iommu/arm,smmu.yaml for more information about SMMU
25  bindings.
26
27
28  - |
29    --------             ---------
30    |      |             |       |
31    |  AP  +<---.   .----+ Modem |
32    |      +--. |   | .->+       |
33    |      |  | |   | |  |       |
34    --------  | |   | |  ---------
35              v |   v |
36            --+-+---+-+--
37            |    GSI    |
38            |-----------|
39            |           |
40            |    IPA    |
41            |           |
42            -------------
43
44properties:
45  compatible:
46    enum:
47      - qcom,msm8998-ipa
48      - qcom,sc7180-ipa
49      - qcom,sc7280-ipa
50      - qcom,sdm845-ipa
51      - qcom,sdx55-ipa
52      - qcom,sm8350-ipa
53
54  reg:
55    items:
56      - description: IPA registers
57      - description: IPA shared memory
58      - description: GSI registers
59
60  reg-names:
61    items:
62      - const: ipa-reg
63      - const: ipa-shared
64      - const: gsi
65
66  iommus:
67    minItems: 1
68    maxItems: 2
69
70  clocks:
71    maxItems: 1
72
73  clock-names:
74    const: core
75
76  interrupts:
77    items:
78      - description: IPA interrupt (hardware IRQ)
79      - description: GSI interrupt (hardware IRQ)
80      - description: Modem clock query interrupt (smp2p interrupt)
81      - description: Modem setup ready interrupt (smp2p interrupt)
82
83  interrupt-names:
84    items:
85      - const: ipa
86      - const: gsi
87      - const: ipa-clock-query
88      - const: ipa-setup-ready
89
90  interconnects:
91    oneOf:
92      - items:
93          - description: Path leading to system memory
94          - description: Path between the AP and IPA config space
95      - items:
96          - description: Path leading to system memory
97          - description: Path leading to internal memory
98          - description: Path between the AP and IPA config space
99
100  interconnect-names:
101    oneOf:
102      - items:
103          - const: memory
104          - const: config
105      - items:
106          - const: memory
107          - const: imem
108          - const: config
109
110  qcom,qmp:
111    $ref: /schemas/types.yaml#/definitions/phandle
112    description: phandle to the AOSS side-channel message RAM
113
114  qcom,smem-states:
115    $ref: /schemas/types.yaml#/definitions/phandle-array
116    description: State bits used in by the AP to signal the modem.
117    items:
118      - description: Whether the "ipa-clock-enabled" state bit is valid
119      - description: Whether the IPA clock is enabled (if valid)
120
121  qcom,smem-state-names:
122    description: The names of the state bits used for SMP2P output
123    items:
124      - const: ipa-clock-enabled-valid
125      - const: ipa-clock-enabled
126
127  modem-init:
128    type: boolean
129    description:
130      If present, it indicates that the modem is responsible for
131      performing early IPA initialization, including loading and
132      validating firwmare used by the GSI.
133
134  memory-region:
135    maxItems: 1
136    description:
137      If present, a phandle for a reserved memory area that holds
138      the firmware passed to Trust Zone for authentication.  Required
139      when Trust Zone (not the modem) performs early initialization.
140
141  firmware-name:
142    $ref: /schemas/types.yaml#/definitions/string
143    description:
144      If present, name (or relative path) of the file within the
145      firmware search path containing the firmware image used when
146      initializing IPA hardware.  Optional, and only used when
147      Trust Zone performs early initialization.
148
149required:
150  - compatible
151  - iommus
152  - reg
153  - clocks
154  - interrupts
155  - interconnects
156  - qcom,smem-states
157
158# Either modem-init is present, or memory-region must be present.
159oneOf:
160  - required:
161      - modem-init
162  - required:
163      - memory-region
164
165# If memory-region is present, firmware-name may optionally be present.
166# But if modem-init is present, firmware-name must not be present.
167if:
168  required:
169    - modem-init
170then:
171  not:
172    required:
173      - firmware-name
174
175additionalProperties: false
176
177examples:
178  - |
179        #include <dt-bindings/interrupt-controller/arm-gic.h>
180        #include <dt-bindings/clock/qcom,rpmh.h>
181        #include <dt-bindings/interconnect/qcom,sdm845.h>
182
183        smp2p-mpss {
184                compatible = "qcom,smp2p";
185                interrupts = <GIC_SPI 576 IRQ_TYPE_EDGE_RISING>;
186                mboxes = <&apss_shared 6>;
187                qcom,smem = <94>, <432>;
188                qcom,local-pid = <0>;
189                qcom,remote-pid = <5>;
190
191                ipa_smp2p_out: ipa-ap-to-modem {
192                        qcom,entry-name = "ipa";
193                        #qcom,smem-state-cells = <1>;
194                };
195
196                ipa_smp2p_in: ipa-modem-to-ap {
197                        qcom,entry-name = "ipa";
198                        interrupt-controller;
199                        #interrupt-cells = <2>;
200                };
201        };
202
203        ipa@1e40000 {
204                compatible = "qcom,sdm845-ipa";
205
206                modem-init;
207
208                iommus = <&apps_smmu 0x720 0x3>;
209                reg = <0x1e40000 0x7000>,
210                        <0x1e47000 0x2000>,
211                        <0x1e04000 0x2c000>;
212                reg-names = "ipa-reg",
213                            "ipa-shared",
214                            "gsi";
215
216                interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
217                                      <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
218                                      <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
219                                      <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
220                interrupt-names = "ipa",
221                                  "gsi",
222                                  "ipa-clock-query",
223                                  "ipa-setup-ready";
224
225                clocks = <&rpmhcc RPMH_IPA_CLK>;
226                clock-names = "core";
227
228                interconnects =
229                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
230                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
231                        <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
232                interconnect-names = "memory",
233                                     "imem",
234                                     "config";
235
236                qcom,qmp = <&aoss_qmp>;
237
238                qcom,smem-states = <&ipa_smp2p_out 0>,
239                                   <&ipa_smp2p_out 1>;
240                qcom,smem-state-names = "ipa-clock-enabled-valid",
241                                        "ipa-clock-enabled";
242        };
243