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:
472afd6c8bSAlex 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:
67950d566fSDavid Heidelberg    minItems: 1
68950d566fSDavid Heidelberg    maxItems: 2
698456c544SAlex Elder
70fc39c40aSAlex Elder  clocks:
71fc39c40aSAlex Elder    maxItems: 1
72fc39c40aSAlex Elder
73fc39c40aSAlex Elder  clock-names:
74fc39c40aSAlex Elder    const: core
75fc39c40aSAlex Elder
76fc39c40aSAlex Elder  interrupts:
77fc39c40aSAlex Elder    items:
78fc39c40aSAlex Elder      - description: IPA interrupt (hardware IRQ)
79fc39c40aSAlex Elder      - description: GSI interrupt (hardware IRQ)
80fc39c40aSAlex Elder      - description: Modem clock query interrupt (smp2p interrupt)
81fc39c40aSAlex Elder      - description: Modem setup ready interrupt (smp2p interrupt)
82fc39c40aSAlex Elder
83fc39c40aSAlex Elder  interrupt-names:
84fc39c40aSAlex Elder    items:
85fc39c40aSAlex Elder      - const: ipa
86fc39c40aSAlex Elder      - const: gsi
87fc39c40aSAlex Elder      - const: ipa-clock-query
88fc39c40aSAlex Elder      - const: ipa-setup-ready
89fc39c40aSAlex Elder
90fc39c40aSAlex Elder  interconnects:
91b769cf44SAlex Elder    oneOf:
92b769cf44SAlex Elder      - items:
93b769cf44SAlex Elder          - description: Path leading to system memory
94b769cf44SAlex Elder          - description: Path between the AP and IPA config space
95b769cf44SAlex Elder      - items:
96b769cf44SAlex Elder          - description: Path leading to system memory
97b769cf44SAlex Elder          - description: Path leading to internal memory
98b769cf44SAlex Elder          - description: Path between the AP and IPA config space
99fc39c40aSAlex Elder
100fc39c40aSAlex Elder  interconnect-names:
101b769cf44SAlex Elder    oneOf:
102b769cf44SAlex Elder      - items:
103b769cf44SAlex Elder          - const: memory
104b769cf44SAlex Elder          - const: config
105b769cf44SAlex Elder      - items:
106fc39c40aSAlex Elder          - const: memory
1076a0eb6c9SAlex Elder          - const: imem
108a0221a0fSAlex Elder          - const: config
109fc39c40aSAlex Elder
110ac62a017SAlex Elder  qcom,qmp:
111ac62a017SAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle
112ac62a017SAlex Elder    description: phandle to the AOSS side-channel message RAM
113ac62a017SAlex Elder
114fc39c40aSAlex Elder  qcom,smem-states:
1153d21a460SRob Herring    $ref: /schemas/types.yaml#/definitions/phandle-array
116fc39c40aSAlex Elder    description: State bits used in by the AP to signal the modem.
117fc39c40aSAlex Elder    items:
118fc39c40aSAlex Elder      - description: Whether the "ipa-clock-enabled" state bit is valid
119fc39c40aSAlex Elder      - description: Whether the IPA clock is enabled (if valid)
120fc39c40aSAlex Elder
121fc39c40aSAlex Elder  qcom,smem-state-names:
122fc39c40aSAlex Elder    description: The names of the state bits used for SMP2P output
123fc39c40aSAlex Elder    items:
124fc39c40aSAlex Elder      - const: ipa-clock-enabled-valid
125fc39c40aSAlex Elder      - const: ipa-clock-enabled
126fc39c40aSAlex Elder
127fc39c40aSAlex Elder  modem-init:
128fc39c40aSAlex Elder    type: boolean
129fc39c40aSAlex Elder    description:
130fc39c40aSAlex Elder      If present, it indicates that the modem is responsible for
131fc39c40aSAlex Elder      performing early IPA initialization, including loading and
132fc39c40aSAlex Elder      validating firwmare used by the GSI.
133fc39c40aSAlex Elder
134fc39c40aSAlex Elder  memory-region:
135fc39c40aSAlex Elder    maxItems: 1
136fc39c40aSAlex Elder    description:
137fc39c40aSAlex Elder      If present, a phandle for a reserved memory area that holds
138fc39c40aSAlex Elder      the firmware passed to Trust Zone for authentication.  Required
139fc39c40aSAlex Elder      when Trust Zone (not the modem) performs early initialization.
140fc39c40aSAlex Elder
141d8604b20SAlex Elder  firmware-name:
142d8604b20SAlex Elder    $ref: /schemas/types.yaml#/definitions/string
143d8604b20SAlex Elder    description:
144d8604b20SAlex Elder      If present, name (or relative path) of the file within the
145d8604b20SAlex Elder      firmware search path containing the firmware image used when
146d8604b20SAlex Elder      initializing IPA hardware.  Optional, and only used when
147d8604b20SAlex Elder      Trust Zone performs early initialization.
148d8604b20SAlex Elder
149fc39c40aSAlex Elderrequired:
150fc39c40aSAlex Elder  - compatible
1518456c544SAlex Elder  - iommus
152fc39c40aSAlex Elder  - reg
153fc39c40aSAlex Elder  - clocks
154fc39c40aSAlex Elder  - interrupts
155fc39c40aSAlex Elder  - interconnects
156fc39c40aSAlex Elder  - qcom,smem-states
157fc39c40aSAlex Elder
158*7a6ca44cSAlex Elder# If modem-init is not present, the AP loads GSI firmware, and
159*7a6ca44cSAlex Elder# memory-region must be specified
160*7a6ca44cSAlex Elderif:
161*7a6ca44cSAlex Elder  not:
162*7a6ca44cSAlex Elder    required:
163fc39c40aSAlex Elder      - modem-init
164*7a6ca44cSAlex Elderthen:
165*7a6ca44cSAlex Elder  required:
166fc39c40aSAlex Elder    - memory-region
167fc39c40aSAlex Elder
1685be478f9SRob HerringadditionalProperties: false
1695be478f9SRob Herring
170fc39c40aSAlex Elderexamples:
171fc39c40aSAlex Elder  - |
17227bb36edSAlex Elder        #include <dt-bindings/interrupt-controller/arm-gic.h>
173e6e0f093SAlex Elder        #include <dt-bindings/clock/qcom,rpmh.h>
174e6e0f093SAlex Elder        #include <dt-bindings/interconnect/qcom,sdm845.h>
175e6e0f093SAlex Elder
176fc39c40aSAlex Elder        smp2p-mpss {
177fc39c40aSAlex Elder                compatible = "qcom,smp2p";
178d49b3ae4SKrzysztof Kozlowski                interrupts = <GIC_SPI 576 IRQ_TYPE_EDGE_RISING>;
179d49b3ae4SKrzysztof Kozlowski                mboxes = <&apss_shared 6>;
180d49b3ae4SKrzysztof Kozlowski                qcom,smem = <94>, <432>;
181d49b3ae4SKrzysztof Kozlowski                qcom,local-pid = <0>;
182d49b3ae4SKrzysztof Kozlowski                qcom,remote-pid = <5>;
183d49b3ae4SKrzysztof Kozlowski
184fc39c40aSAlex Elder                ipa_smp2p_out: ipa-ap-to-modem {
185fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
186fc39c40aSAlex Elder                        #qcom,smem-state-cells = <1>;
187fc39c40aSAlex Elder                };
188fc39c40aSAlex Elder
189fc39c40aSAlex Elder                ipa_smp2p_in: ipa-modem-to-ap {
190fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
191fc39c40aSAlex Elder                        interrupt-controller;
192fc39c40aSAlex Elder                        #interrupt-cells = <2>;
193fc39c40aSAlex Elder                };
194fc39c40aSAlex Elder        };
195d49b3ae4SKrzysztof Kozlowski
196fc39c40aSAlex Elder        ipa@1e40000 {
197fc39c40aSAlex Elder                compatible = "qcom,sdm845-ipa";
198fc39c40aSAlex Elder
199fc39c40aSAlex Elder                modem-init;
200fc39c40aSAlex Elder
2018456c544SAlex Elder                iommus = <&apps_smmu 0x720 0x3>;
202fba56184SRob Herring                reg = <0x1e40000 0x7000>,
203fba56184SRob Herring                        <0x1e47000 0x2000>,
204fba56184SRob Herring                        <0x1e04000 0x2c000>;
205fc39c40aSAlex Elder                reg-names = "ipa-reg",
206e6e0f093SAlex Elder                            "ipa-shared",
207fc39c40aSAlex Elder                            "gsi";
208fc39c40aSAlex Elder
20927bb36edSAlex Elder                interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
21027bb36edSAlex Elder                                      <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
211fc39c40aSAlex Elder                                      <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
212fc39c40aSAlex Elder                                      <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
213fc39c40aSAlex Elder                interrupt-names = "ipa",
214fc39c40aSAlex Elder                                  "gsi",
215fc39c40aSAlex Elder                                  "ipa-clock-query",
216fc39c40aSAlex Elder                                  "ipa-setup-ready";
217fc39c40aSAlex Elder
218fc39c40aSAlex Elder                clocks = <&rpmhcc RPMH_IPA_CLK>;
219fc39c40aSAlex Elder                clock-names = "core";
220fc39c40aSAlex Elder
221fc39c40aSAlex Elder                interconnects =
222fc39c40aSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
223a0221a0fSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
224a0221a0fSAlex Elder                        <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
225fc39c40aSAlex Elder                interconnect-names = "memory",
226a0221a0fSAlex Elder                                     "imem",
227a0221a0fSAlex Elder                                     "config";
228fc39c40aSAlex Elder
229ac62a017SAlex Elder                qcom,qmp = <&aoss_qmp>;
230ac62a017SAlex Elder
231fc39c40aSAlex Elder                qcom,smem-states = <&ipa_smp2p_out 0>,
232fc39c40aSAlex Elder                                   <&ipa_smp2p_out 1>;
233fc39c40aSAlex Elder                qcom,smem-state-names = "ipa-clock-enabled-valid",
234fc39c40aSAlex Elder                                        "ipa-clock-enabled";
235fc39c40aSAlex Elder        };
236