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:
46fc39c40aSAlex Elder    const: "qcom,sdm845-ipa"
47fc39c40aSAlex Elder
48fc39c40aSAlex Elder  reg:
49fc39c40aSAlex Elder    items:
50fc39c40aSAlex Elder      - description: IPA registers
51fc39c40aSAlex Elder      - description: IPA shared memory
52fc39c40aSAlex Elder      - description: GSI registers
53fc39c40aSAlex Elder
54fc39c40aSAlex Elder  reg-names:
55fc39c40aSAlex Elder    items:
56fc39c40aSAlex Elder      - const: ipa-reg
57fc39c40aSAlex Elder      - const: ipa-shared
58fc39c40aSAlex Elder      - const: gsi
59fc39c40aSAlex Elder
608456c544SAlex Elder  iommus:
618456c544SAlex Elder    maxItems: 1
628456c544SAlex Elder
63fc39c40aSAlex Elder  clocks:
64fc39c40aSAlex Elder    maxItems: 1
65fc39c40aSAlex Elder
66fc39c40aSAlex Elder  clock-names:
67fc39c40aSAlex Elder    const: core
68fc39c40aSAlex Elder
69fc39c40aSAlex Elder  interrupts:
70fc39c40aSAlex Elder    items:
71fc39c40aSAlex Elder      - description: IPA interrupt (hardware IRQ)
72fc39c40aSAlex Elder      - description: GSI interrupt (hardware IRQ)
73fc39c40aSAlex Elder      - description: Modem clock query interrupt (smp2p interrupt)
74fc39c40aSAlex Elder      - description: Modem setup ready interrupt (smp2p interrupt)
75fc39c40aSAlex Elder
76fc39c40aSAlex Elder  interrupt-names:
77fc39c40aSAlex Elder    items:
78fc39c40aSAlex Elder      - const: ipa
79fc39c40aSAlex Elder      - const: gsi
80fc39c40aSAlex Elder      - const: ipa-clock-query
81fc39c40aSAlex Elder      - const: ipa-setup-ready
82fc39c40aSAlex Elder
83fc39c40aSAlex Elder  interconnects:
84fc39c40aSAlex Elder    items:
85fc39c40aSAlex Elder      - description: Interconnect path between IPA and main memory
86fc39c40aSAlex Elder      - description: Interconnect path between IPA and internal memory
87fc39c40aSAlex Elder      - description: Interconnect path between IPA and the AP subsystem
88fc39c40aSAlex Elder
89fc39c40aSAlex Elder  interconnect-names:
90fc39c40aSAlex Elder    items:
91fc39c40aSAlex Elder      - const: memory
92fc39c40aSAlex Elder      - const: imem
93fc39c40aSAlex Elder      - const: config
94fc39c40aSAlex Elder
95fc39c40aSAlex Elder  qcom,smem-states:
963d21a460SRob Herring    $ref: /schemas/types.yaml#/definitions/phandle-array
97fc39c40aSAlex Elder    description: State bits used in by the AP to signal the modem.
98fc39c40aSAlex Elder    items:
99fc39c40aSAlex Elder      - description: Whether the "ipa-clock-enabled" state bit is valid
100fc39c40aSAlex Elder      - description: Whether the IPA clock is enabled (if valid)
101fc39c40aSAlex Elder
102fc39c40aSAlex Elder  qcom,smem-state-names:
1033d21a460SRob Herring    $ref: /schemas/types.yaml#/definitions/string-array
104fc39c40aSAlex Elder    description: The names of the state bits used for SMP2P output
105fc39c40aSAlex Elder    items:
106fc39c40aSAlex Elder      - const: ipa-clock-enabled-valid
107fc39c40aSAlex Elder      - const: ipa-clock-enabled
108fc39c40aSAlex Elder
109fc39c40aSAlex Elder  modem-init:
110fc39c40aSAlex Elder    type: boolean
111fc39c40aSAlex Elder    description:
112fc39c40aSAlex Elder      If present, it indicates that the modem is responsible for
113fc39c40aSAlex Elder      performing early IPA initialization, including loading and
114fc39c40aSAlex Elder      validating firwmare used by the GSI.
115fc39c40aSAlex Elder
116fc39c40aSAlex Elder  modem-remoteproc:
117fc39c40aSAlex Elder    $ref: /schemas/types.yaml#definitions/phandle
118fc39c40aSAlex Elder    description:
119fc39c40aSAlex Elder      This defines the phandle to the remoteproc node representing
120fc39c40aSAlex Elder      the modem subsystem.  This is requied so the IPA driver can
121fc39c40aSAlex Elder      receive and act on notifications of modem up/down events.
122fc39c40aSAlex Elder
123fc39c40aSAlex Elder  memory-region:
124fc39c40aSAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle-array
125fc39c40aSAlex Elder    maxItems: 1
126fc39c40aSAlex Elder    description:
127fc39c40aSAlex Elder      If present, a phandle for a reserved memory area that holds
128fc39c40aSAlex Elder      the firmware passed to Trust Zone for authentication.  Required
129fc39c40aSAlex Elder      when Trust Zone (not the modem) performs early initialization.
130fc39c40aSAlex Elder
131fc39c40aSAlex Elderrequired:
132fc39c40aSAlex Elder  - compatible
1338456c544SAlex Elder  - iommus
134fc39c40aSAlex Elder  - reg
135fc39c40aSAlex Elder  - clocks
136fc39c40aSAlex Elder  - interrupts
137fc39c40aSAlex Elder  - interconnects
138fc39c40aSAlex Elder  - qcom,smem-states
139fc39c40aSAlex Elder  - modem-remoteproc
140fc39c40aSAlex Elder
141fc39c40aSAlex ElderoneOf:
142fc39c40aSAlex Elder  - required:
143fc39c40aSAlex Elder      - modem-init
144fc39c40aSAlex Elder  - required:
145fc39c40aSAlex Elder      - memory-region
146fc39c40aSAlex Elder
1475be478f9SRob HerringadditionalProperties: false
1485be478f9SRob Herring
149fc39c40aSAlex Elderexamples:
150fc39c40aSAlex Elder  - |
151e6e0f093SAlex Elder        #include <dt-bindings/interrupt-controller/irq.h>
152e6e0f093SAlex Elder        #include <dt-bindings/clock/qcom,rpmh.h>
153e6e0f093SAlex Elder        #include <dt-bindings/interconnect/qcom,sdm845.h>
154e6e0f093SAlex Elder
155fc39c40aSAlex Elder        smp2p-mpss {
156fc39c40aSAlex Elder                compatible = "qcom,smp2p";
157fc39c40aSAlex Elder                ipa_smp2p_out: ipa-ap-to-modem {
158fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
159fc39c40aSAlex Elder                        #qcom,smem-state-cells = <1>;
160fc39c40aSAlex Elder                };
161fc39c40aSAlex Elder
162fc39c40aSAlex Elder                ipa_smp2p_in: ipa-modem-to-ap {
163fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
164fc39c40aSAlex Elder                        interrupt-controller;
165fc39c40aSAlex Elder                        #interrupt-cells = <2>;
166fc39c40aSAlex Elder                };
167fc39c40aSAlex Elder        };
168fc39c40aSAlex Elder        ipa@1e40000 {
169fc39c40aSAlex Elder                compatible = "qcom,sdm845-ipa";
170fc39c40aSAlex Elder
171fc39c40aSAlex Elder                modem-init;
172fc39c40aSAlex Elder                modem-remoteproc = <&mss_pil>;
173fc39c40aSAlex Elder
1748456c544SAlex Elder                iommus = <&apps_smmu 0x720 0x3>;
175fba56184SRob Herring                reg = <0x1e40000 0x7000>,
176fba56184SRob Herring                        <0x1e47000 0x2000>,
177fba56184SRob Herring                        <0x1e04000 0x2c000>;
178fc39c40aSAlex Elder                reg-names = "ipa-reg",
179e6e0f093SAlex Elder                            "ipa-shared",
180fc39c40aSAlex Elder                            "gsi";
181fc39c40aSAlex Elder
182fc39c40aSAlex Elder                interrupts-extended = <&intc 0 311 IRQ_TYPE_EDGE_RISING>,
183fc39c40aSAlex Elder                                      <&intc 0 432 IRQ_TYPE_LEVEL_HIGH>,
184fc39c40aSAlex Elder                                      <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
185fc39c40aSAlex Elder                                      <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
186fc39c40aSAlex Elder                interrupt-names = "ipa",
187fc39c40aSAlex Elder                                  "gsi",
188fc39c40aSAlex Elder                                  "ipa-clock-query",
189fc39c40aSAlex Elder                                  "ipa-setup-ready";
190fc39c40aSAlex Elder
191fc39c40aSAlex Elder                clocks = <&rpmhcc RPMH_IPA_CLK>;
192fc39c40aSAlex Elder                clock-names = "core";
193fc39c40aSAlex Elder
194fc39c40aSAlex Elder                interconnects =
195fc39c40aSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
196fc39c40aSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
197fc39c40aSAlex Elder                        <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
198fc39c40aSAlex Elder                interconnect-names = "memory",
199fc39c40aSAlex Elder                                     "imem",
200fc39c40aSAlex Elder                                     "config";
201fc39c40aSAlex Elder
202fc39c40aSAlex Elder                qcom,smem-states = <&ipa_smp2p_out 0>,
203fc39c40aSAlex Elder                                   <&ipa_smp2p_out 1>;
204fc39c40aSAlex Elder                qcom,smem-state-names = "ipa-clock-enabled-valid",
205fc39c40aSAlex Elder                                        "ipa-clock-enabled";
206fc39c40aSAlex Elder        };
207