Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / net / qcom,ipa.yaml
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
7 title: Qualcomm IP Accelerator (IPA)
8
9 maintainers:
10   - Alex Elder <elder@kernel.org>
11
12 description:
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
44 properties:
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     maxItems: 1
68
69   clocks:
70     maxItems: 1
71
72   clock-names:
73     const: core
74
75   interrupts:
76     items:
77       - description: IPA interrupt (hardware IRQ)
78       - description: GSI interrupt (hardware IRQ)
79       - description: Modem clock query interrupt (smp2p interrupt)
80       - description: Modem setup ready interrupt (smp2p interrupt)
81
82   interrupt-names:
83     items:
84       - const: ipa
85       - const: gsi
86       - const: ipa-clock-query
87       - const: ipa-setup-ready
88
89   interconnects:
90     minItems: 2
91     items:
92       - description: Path leading to system memory
93       - description: Path between the AP and IPA config space
94       - description: Path leading to internal memory
95
96   interconnect-names:
97     minItems: 2
98     items:
99       - const: memory
100       - const: config
101       - const: imem
102
103   qcom,smem-states:
104     $ref: /schemas/types.yaml#/definitions/phandle-array
105     description: State bits used in by the AP to signal the modem.
106     items:
107       - description: Whether the "ipa-clock-enabled" state bit is valid
108       - description: Whether the IPA clock is enabled (if valid)
109
110   qcom,smem-state-names:
111     description: The names of the state bits used for SMP2P output
112     items:
113       - const: ipa-clock-enabled-valid
114       - const: ipa-clock-enabled
115
116   modem-init:
117     type: boolean
118     description:
119       If present, it indicates that the modem is responsible for
120       performing early IPA initialization, including loading and
121       validating firwmare used by the GSI.
122
123   memory-region:
124     maxItems: 1
125     description:
126       If present, a phandle for a reserved memory area that holds
127       the firmware passed to Trust Zone for authentication.  Required
128       when Trust Zone (not the modem) performs early initialization.
129
130   firmware-name:
131     $ref: /schemas/types.yaml#/definitions/string
132     description:
133       If present, name (or relative path) of the file within the
134       firmware search path containing the firmware image used when
135       initializing IPA hardware.  Optional, and only used when
136       Trust Zone performs early initialization.
137
138 required:
139   - compatible
140   - iommus
141   - reg
142   - clocks
143   - interrupts
144   - interconnects
145   - qcom,smem-states
146
147 # Either modem-init is present, or memory-region must be present.
148 oneOf:
149   - required:
150       - modem-init
151   - required:
152       - memory-region
153
154 # If memory-region is present, firmware-name may optionally be present.
155 # But if modem-init is present, firmware-name must not be present.
156 if:
157   required:
158     - modem-init
159 then:
160   not:
161     required:
162       - firmware-name
163
164 additionalProperties: false
165
166 examples:
167   - |
168         #include <dt-bindings/interrupt-controller/arm-gic.h>
169         #include <dt-bindings/clock/qcom,rpmh.h>
170         #include <dt-bindings/interconnect/qcom,sdm845.h>
171
172         smp2p-mpss {
173                 compatible = "qcom,smp2p";
174                 ipa_smp2p_out: ipa-ap-to-modem {
175                         qcom,entry-name = "ipa";
176                         #qcom,smem-state-cells = <1>;
177                 };
178
179                 ipa_smp2p_in: ipa-modem-to-ap {
180                         qcom,entry-name = "ipa";
181                         interrupt-controller;
182                         #interrupt-cells = <2>;
183                 };
184         };
185         ipa@1e40000 {
186                 compatible = "qcom,sdm845-ipa";
187
188                 modem-init;
189
190                 iommus = <&apps_smmu 0x720 0x3>;
191                 reg = <0x1e40000 0x7000>,
192                         <0x1e47000 0x2000>,
193                         <0x1e04000 0x2c000>;
194                 reg-names = "ipa-reg",
195                             "ipa-shared",
196                             "gsi";
197
198                 interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
199                                       <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
200                                       <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
201                                       <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
202                 interrupt-names = "ipa",
203                                   "gsi",
204                                   "ipa-clock-query",
205                                   "ipa-setup-ready";
206
207                 clocks = <&rpmhcc RPMH_IPA_CLK>;
208                 clock-names = "core";
209
210                 interconnects =
211                         <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
212                         <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>,
213                         <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>;
214                 interconnect-names = "memory",
215                                      "config",
216                                      "imem";
217
218                 qcom,smem-states = <&ipa_smp2p_out 0>,
219                                    <&ipa_smp2p_out 1>;
220                 qcom,smem-state-names = "ipa-clock-enabled-valid",
221                                         "ipa-clock-enabled";
222         };