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
23fc39c40aSAlex Elder  See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt.
24fc39c40aSAlex Elder
25fc39c40aSAlex Elder  - |
26fc39c40aSAlex Elder    --------             ---------
27fc39c40aSAlex Elder    |      |             |       |
28fc39c40aSAlex Elder    |  AP  +<---.   .----+ Modem |
29fc39c40aSAlex Elder    |      +--. |   | .->+       |
30fc39c40aSAlex Elder    |      |  | |   | |  |       |
31fc39c40aSAlex Elder    --------  | |   | |  ---------
32fc39c40aSAlex Elder              v |   v |
33fc39c40aSAlex Elder            --+-+---+-+--
34fc39c40aSAlex Elder            |    GSI    |
35fc39c40aSAlex Elder            |-----------|
36fc39c40aSAlex Elder            |           |
37fc39c40aSAlex Elder            |    IPA    |
38fc39c40aSAlex Elder            |           |
39fc39c40aSAlex Elder            -------------
40fc39c40aSAlex Elder
41fc39c40aSAlex Elderproperties:
42fc39c40aSAlex Elder  compatible:
43fc39c40aSAlex Elder      const: "qcom,sdm845-ipa"
44fc39c40aSAlex Elder
45fc39c40aSAlex Elder  reg:
46fc39c40aSAlex Elder    items:
47fc39c40aSAlex Elder      - description: IPA registers
48fc39c40aSAlex Elder      - description: IPA shared memory
49fc39c40aSAlex Elder      - description: GSI registers
50fc39c40aSAlex Elder
51fc39c40aSAlex Elder  reg-names:
52fc39c40aSAlex Elder    items:
53fc39c40aSAlex Elder      - const: ipa-reg
54fc39c40aSAlex Elder      - const: ipa-shared
55fc39c40aSAlex Elder      - const: gsi
56fc39c40aSAlex Elder
57fc39c40aSAlex Elder  clocks:
58fc39c40aSAlex Elder    maxItems: 1
59fc39c40aSAlex Elder
60fc39c40aSAlex Elder  clock-names:
61fc39c40aSAlex Elder      const: core
62fc39c40aSAlex Elder
63fc39c40aSAlex Elder  interrupts:
64fc39c40aSAlex Elder    items:
65fc39c40aSAlex Elder      - description: IPA interrupt (hardware IRQ)
66fc39c40aSAlex Elder      - description: GSI interrupt (hardware IRQ)
67fc39c40aSAlex Elder      - description: Modem clock query interrupt (smp2p interrupt)
68fc39c40aSAlex Elder      - description: Modem setup ready interrupt (smp2p interrupt)
69fc39c40aSAlex Elder
70fc39c40aSAlex Elder  interrupt-names:
71fc39c40aSAlex Elder    items:
72fc39c40aSAlex Elder      - const: ipa
73fc39c40aSAlex Elder      - const: gsi
74fc39c40aSAlex Elder      - const: ipa-clock-query
75fc39c40aSAlex Elder      - const: ipa-setup-ready
76fc39c40aSAlex Elder
77fc39c40aSAlex Elder  interconnects:
78fc39c40aSAlex Elder    items:
79fc39c40aSAlex Elder      - description: Interconnect path between IPA and main memory
80fc39c40aSAlex Elder      - description: Interconnect path between IPA and internal memory
81fc39c40aSAlex Elder      - description: Interconnect path between IPA and the AP subsystem
82fc39c40aSAlex Elder
83fc39c40aSAlex Elder  interconnect-names:
84fc39c40aSAlex Elder    items:
85fc39c40aSAlex Elder      - const: memory
86fc39c40aSAlex Elder      - const: imem
87fc39c40aSAlex Elder      - const: config
88fc39c40aSAlex Elder
89fc39c40aSAlex Elder  qcom,smem-states:
90fc39c40aSAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle-array
91fc39c40aSAlex Elder    description: State bits used in by the AP to signal the modem.
92fc39c40aSAlex Elder    items:
93fc39c40aSAlex Elder    - description: Whether the "ipa-clock-enabled" state bit is valid
94fc39c40aSAlex Elder    - description: Whether the IPA clock is enabled (if valid)
95fc39c40aSAlex Elder
96fc39c40aSAlex Elder  qcom,smem-state-names:
97fc39c40aSAlex Elder    $ref: /schemas/types.yaml#/definitions/string-array
98fc39c40aSAlex Elder    description: The names of the state bits used for SMP2P output
99fc39c40aSAlex Elder    items:
100fc39c40aSAlex Elder      - const: ipa-clock-enabled-valid
101fc39c40aSAlex Elder      - const: ipa-clock-enabled
102fc39c40aSAlex Elder
103fc39c40aSAlex Elder  modem-init:
104fc39c40aSAlex Elder    type: boolean
105fc39c40aSAlex Elder    description:
106fc39c40aSAlex Elder      If present, it indicates that the modem is responsible for
107fc39c40aSAlex Elder      performing early IPA initialization, including loading and
108fc39c40aSAlex Elder      validating firwmare used by the GSI.
109fc39c40aSAlex Elder
110fc39c40aSAlex Elder  modem-remoteproc:
111fc39c40aSAlex Elder    $ref: /schemas/types.yaml#definitions/phandle
112fc39c40aSAlex Elder    description:
113fc39c40aSAlex Elder      This defines the phandle to the remoteproc node representing
114fc39c40aSAlex Elder      the modem subsystem.  This is requied so the IPA driver can
115fc39c40aSAlex Elder      receive and act on notifications of modem up/down events.
116fc39c40aSAlex Elder
117fc39c40aSAlex Elder  memory-region:
118fc39c40aSAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle-array
119fc39c40aSAlex Elder    maxItems: 1
120fc39c40aSAlex Elder    description:
121fc39c40aSAlex Elder      If present, a phandle for a reserved memory area that holds
122fc39c40aSAlex Elder      the firmware passed to Trust Zone for authentication.  Required
123fc39c40aSAlex Elder      when Trust Zone (not the modem) performs early initialization.
124fc39c40aSAlex Elder
125fc39c40aSAlex Elderrequired:
126fc39c40aSAlex Elder  - compatible
127fc39c40aSAlex Elder  - reg
128fc39c40aSAlex Elder  - clocks
129fc39c40aSAlex Elder  - interrupts
130fc39c40aSAlex Elder  - interconnects
131fc39c40aSAlex Elder  - qcom,smem-states
132fc39c40aSAlex Elder  - modem-remoteproc
133fc39c40aSAlex Elder
134fc39c40aSAlex ElderoneOf:
135fc39c40aSAlex Elder  - required:
136fc39c40aSAlex Elder    - modem-init
137fc39c40aSAlex Elder  - required:
138fc39c40aSAlex Elder    - memory-region
139fc39c40aSAlex Elder
140fc39c40aSAlex Elderexamples:
141fc39c40aSAlex Elder  - |
142fc39c40aSAlex Elder        smp2p-mpss {
143fc39c40aSAlex Elder                compatible = "qcom,smp2p";
144fc39c40aSAlex Elder                ipa_smp2p_out: ipa-ap-to-modem {
145fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
146fc39c40aSAlex Elder                        #qcom,smem-state-cells = <1>;
147fc39c40aSAlex Elder                };
148fc39c40aSAlex Elder
149fc39c40aSAlex Elder                ipa_smp2p_in: ipa-modem-to-ap {
150fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
151fc39c40aSAlex Elder                        interrupt-controller;
152fc39c40aSAlex Elder                        #interrupt-cells = <2>;
153fc39c40aSAlex Elder                };
154fc39c40aSAlex Elder        };
155fc39c40aSAlex Elder        ipa@1e40000 {
156fc39c40aSAlex Elder                compatible = "qcom,sdm845-ipa";
157fc39c40aSAlex Elder
158fc39c40aSAlex Elder                modem-init;
159fc39c40aSAlex Elder                modem-remoteproc = <&mss_pil>;
160fc39c40aSAlex Elder
161fc39c40aSAlex Elder                reg = <0 0x1e40000 0 0x7000>,
162fc39c40aSAlex Elder                        <0 0x1e47000 0 0x2000>,
163fc39c40aSAlex Elder                        <0 0x1e04000 0 0x2c000>;
164fc39c40aSAlex Elder                reg-names = "ipa-reg",
165fc39c40aSAlex Elder                                "ipa-shared";
166fc39c40aSAlex Elder                                "gsi";
167fc39c40aSAlex Elder
168fc39c40aSAlex Elder                interrupts-extended = <&intc 0 311 IRQ_TYPE_EDGE_RISING>,
169fc39c40aSAlex Elder                                        <&intc 0 432 IRQ_TYPE_LEVEL_HIGH>,
170fc39c40aSAlex Elder                                        <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
171fc39c40aSAlex Elder                                        <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
172fc39c40aSAlex Elder                interrupt-names = "ipa",
173fc39c40aSAlex Elder                                        "gsi",
174fc39c40aSAlex Elder                                        "ipa-clock-query",
175fc39c40aSAlex Elder                                        "ipa-setup-ready";
176fc39c40aSAlex Elder
177fc39c40aSAlex Elder                clocks = <&rpmhcc RPMH_IPA_CLK>;
178fc39c40aSAlex Elder                clock-names = "core";
179fc39c40aSAlex Elder
180fc39c40aSAlex Elder                interconnects =
181fc39c40aSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
182fc39c40aSAlex Elder                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
183fc39c40aSAlex Elder                        <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
184fc39c40aSAlex Elder                interconnect-names = "memory",
185fc39c40aSAlex Elder                                        "imem",
186fc39c40aSAlex Elder                                        "config";
187fc39c40aSAlex Elder
188fc39c40aSAlex Elder                qcom,smem-states = <&ipa_smp2p_out 0>,
189fc39c40aSAlex Elder                                        <&ipa_smp2p_out 1>;
190fc39c40aSAlex Elder                qcom,smem-state-names = "ipa-clock-enabled-valid",
191fc39c40aSAlex Elder                                        "ipa-clock-enabled";
192fc39c40aSAlex Elder        };
193