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