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
52*0de10fd6SAlex Elder      - qcom,sdx65-ipa
535071429fSLuca Weiss      - qcom,sm6350-ipa
5415c88e18SAlex Elder      - qcom,sm8350-ipa
55fc39c40aSAlex Elder
56fc39c40aSAlex Elder  reg:
57fc39c40aSAlex Elder    items:
58fc39c40aSAlex Elder      - description: IPA registers
59fc39c40aSAlex Elder      - description: IPA shared memory
60fc39c40aSAlex Elder      - description: GSI registers
61fc39c40aSAlex Elder
62fc39c40aSAlex Elder  reg-names:
63fc39c40aSAlex Elder    items:
64fc39c40aSAlex Elder      - const: ipa-reg
65fc39c40aSAlex Elder      - const: ipa-shared
66fc39c40aSAlex Elder      - const: gsi
67fc39c40aSAlex Elder
688456c544SAlex Elder  iommus:
69950d566fSDavid Heidelberg    minItems: 1
70950d566fSDavid Heidelberg    maxItems: 2
718456c544SAlex Elder
72fc39c40aSAlex Elder  clocks:
73fc39c40aSAlex Elder    maxItems: 1
74fc39c40aSAlex Elder
75fc39c40aSAlex Elder  clock-names:
76fc39c40aSAlex Elder    const: core
77fc39c40aSAlex Elder
78fc39c40aSAlex Elder  interrupts:
79fc39c40aSAlex Elder    items:
80fc39c40aSAlex Elder      - description: IPA interrupt (hardware IRQ)
81fc39c40aSAlex Elder      - description: GSI interrupt (hardware IRQ)
82fc39c40aSAlex Elder      - description: Modem clock query interrupt (smp2p interrupt)
83fc39c40aSAlex Elder      - description: Modem setup ready interrupt (smp2p interrupt)
84fc39c40aSAlex Elder
85fc39c40aSAlex Elder  interrupt-names:
86fc39c40aSAlex Elder    items:
87fc39c40aSAlex Elder      - const: ipa
88fc39c40aSAlex Elder      - const: gsi
89fc39c40aSAlex Elder      - const: ipa-clock-query
90fc39c40aSAlex Elder      - const: ipa-setup-ready
91fc39c40aSAlex Elder
92fc39c40aSAlex Elder  interconnects:
93b769cf44SAlex Elder    oneOf:
94b769cf44SAlex Elder      - items:
95b769cf44SAlex Elder          - description: Path leading to system memory
96b769cf44SAlex Elder          - description: Path between the AP and IPA config space
97b769cf44SAlex Elder      - items:
98b769cf44SAlex Elder          - description: Path leading to system memory
99b769cf44SAlex Elder          - description: Path leading to internal memory
100b769cf44SAlex Elder          - description: Path between the AP and IPA config space
101fc39c40aSAlex Elder
102fc39c40aSAlex Elder  interconnect-names:
103b769cf44SAlex Elder    oneOf:
104b769cf44SAlex Elder      - items:
105b769cf44SAlex Elder          - const: memory
106b769cf44SAlex Elder          - const: config
107b769cf44SAlex Elder      - items:
108fc39c40aSAlex Elder          - const: memory
1096a0eb6c9SAlex Elder          - const: imem
110a0221a0fSAlex Elder          - const: config
111fc39c40aSAlex Elder
112ac62a017SAlex Elder  qcom,qmp:
113ac62a017SAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle
114ac62a017SAlex Elder    description: phandle to the AOSS side-channel message RAM
115ac62a017SAlex Elder
116fc39c40aSAlex Elder  qcom,smem-states:
1173d21a460SRob Herring    $ref: /schemas/types.yaml#/definitions/phandle-array
118fc39c40aSAlex Elder    description: State bits used in by the AP to signal the modem.
119fc39c40aSAlex Elder    items:
120fc39c40aSAlex Elder      - description: Whether the "ipa-clock-enabled" state bit is valid
121fc39c40aSAlex Elder      - description: Whether the IPA clock is enabled (if valid)
122fc39c40aSAlex Elder
123fc39c40aSAlex Elder  qcom,smem-state-names:
124fc39c40aSAlex Elder    description: The names of the state bits used for SMP2P output
125fc39c40aSAlex Elder    items:
126fc39c40aSAlex Elder      - const: ipa-clock-enabled-valid
127fc39c40aSAlex Elder      - const: ipa-clock-enabled
128fc39c40aSAlex Elder
1294ca0c647SAlex Elder  qcom,gsi-loader:
1304ca0c647SAlex Elder    enum:
1314ca0c647SAlex Elder      - self
1324ca0c647SAlex Elder      - modem
133a49c3ab7SAlex Elder      - skip
1344ca0c647SAlex Elder    description:
1354ca0c647SAlex Elder      Indicates how GSI firmware should be loaded.  If the AP loads
1364ca0c647SAlex Elder      and validates GSI firmware, this property has value "self".
1374ca0c647SAlex Elder      If the modem does this, this property has value "modem".
138a49c3ab7SAlex Elder      Otherwise, "skip" means GSI firmware loading is not required.
1394ca0c647SAlex Elder
140fc39c40aSAlex Elder  modem-init:
1414ca0c647SAlex Elder    deprecated: true
142fc39c40aSAlex Elder    type: boolean
143fc39c40aSAlex Elder    description:
1444ca0c647SAlex Elder      This is the older (deprecated) way of indicating how GSI firmware
1454ca0c647SAlex Elder      should be loaded.  If present, the modem loads GSI firmware; if
1464ca0c647SAlex Elder      absent, the AP loads GSI firmware.
147fc39c40aSAlex Elder
148fc39c40aSAlex Elder  memory-region:
149fc39c40aSAlex Elder    maxItems: 1
150fc39c40aSAlex Elder    description:
151fc39c40aSAlex Elder      If present, a phandle for a reserved memory area that holds
152fc39c40aSAlex Elder      the firmware passed to Trust Zone for authentication.  Required
1534ca0c647SAlex Elder      when the AP (not the modem) performs early initialization.
154fc39c40aSAlex Elder
155d8604b20SAlex Elder  firmware-name:
156d8604b20SAlex Elder    $ref: /schemas/types.yaml#/definitions/string
157d8604b20SAlex Elder    description:
158d8604b20SAlex Elder      If present, name (or relative path) of the file within the
159d8604b20SAlex Elder      firmware search path containing the firmware image used when
160d8604b20SAlex Elder      initializing IPA hardware.  Optional, and only used when
161d8604b20SAlex Elder      Trust Zone performs early initialization.
162d8604b20SAlex Elder
163fc39c40aSAlex Elderrequired:
164fc39c40aSAlex Elder  - compatible
1658456c544SAlex Elder  - iommus
166fc39c40aSAlex Elder  - reg
167fc39c40aSAlex Elder  - clocks
168fc39c40aSAlex Elder  - interrupts
169fc39c40aSAlex Elder  - interconnects
170fc39c40aSAlex Elder  - qcom,smem-states
171fc39c40aSAlex Elder
1724ca0c647SAlex ElderallOf:
1734ca0c647SAlex Elder  # If qcom,gsi-loader is present, modem-init must not be present
1744ca0c647SAlex Elder  - if:
1754ca0c647SAlex Elder      required:
1764ca0c647SAlex Elder        - qcom,gsi-loader
1774ca0c647SAlex Elder    then:
1784ca0c647SAlex Elder      properties:
1794ca0c647SAlex Elder        modem-init: false
1804ca0c647SAlex Elder
1814ca0c647SAlex Elder      # If qcom,gsi-loader is "self", the AP loads GSI firmware, and
1827a6ca44cSAlex Elder      # memory-region must be specified
1837a6ca44cSAlex Elder      if:
1844ca0c647SAlex Elder        properties:
1854ca0c647SAlex Elder          qcom,gsi-loader:
1864ca0c647SAlex Elder            contains:
1874ca0c647SAlex Elder              const: self
1884ca0c647SAlex Elder      then:
1894ca0c647SAlex Elder        required:
1904ca0c647SAlex Elder          - memory-region
1914ca0c647SAlex Elder    else:
1924ca0c647SAlex Elder      # If qcom,gsi-loader is not present, we use deprecated behavior.
1934ca0c647SAlex Elder      # If modem-init is not present, the AP loads GSI firmware, and
1944ca0c647SAlex Elder      # memory-region must be specified.
1954ca0c647SAlex Elder      if:
1967a6ca44cSAlex Elder        not:
1977a6ca44cSAlex Elder          required:
198fc39c40aSAlex Elder            - modem-init
1997a6ca44cSAlex Elder      then:
2007a6ca44cSAlex Elder        required:
201fc39c40aSAlex Elder          - memory-region
202fc39c40aSAlex Elder
2035be478f9SRob HerringadditionalProperties: false
2045be478f9SRob Herring
205fc39c40aSAlex Elderexamples:
206fc39c40aSAlex Elder  - |
20727bb36edSAlex Elder        #include <dt-bindings/interrupt-controller/arm-gic.h>
208e6e0f093SAlex Elder        #include <dt-bindings/clock/qcom,rpmh.h>
209e6e0f093SAlex Elder        #include <dt-bindings/interconnect/qcom,sdm845.h>
210e6e0f093SAlex Elder
211fc39c40aSAlex Elder        smp2p-mpss {
212fc39c40aSAlex Elder                compatible = "qcom,smp2p";
213d49b3ae4SKrzysztof Kozlowski                interrupts = <GIC_SPI 576 IRQ_TYPE_EDGE_RISING>;
214d49b3ae4SKrzysztof Kozlowski                mboxes = <&apss_shared 6>;
215d49b3ae4SKrzysztof Kozlowski                qcom,smem = <94>, <432>;
216d49b3ae4SKrzysztof Kozlowski                qcom,local-pid = <0>;
217d49b3ae4SKrzysztof Kozlowski                qcom,remote-pid = <5>;
218d49b3ae4SKrzysztof Kozlowski
219fc39c40aSAlex Elder                ipa_smp2p_out: ipa-ap-to-modem {
220fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
221fc39c40aSAlex Elder                        #qcom,smem-state-cells = <1>;
222fc39c40aSAlex Elder                };
223fc39c40aSAlex Elder
224fc39c40aSAlex Elder                ipa_smp2p_in: ipa-modem-to-ap {
225fc39c40aSAlex Elder                        qcom,entry-name = "ipa";
226fc39c40aSAlex Elder                        interrupt-controller;
227fc39c40aSAlex Elder                        #interrupt-cells = <2>;
228fc39c40aSAlex Elder                };
229fc39c40aSAlex Elder        };
230d49b3ae4SKrzysztof Kozlowski
231fc39c40aSAlex Elder        ipa@1e40000 {
2324ca0c647SAlex Elder                compatible = "qcom,sc7180-ipa";
233fc39c40aSAlex Elder
2344ca0c647SAlex Elder                qcom,gsi-loader = "self";
2354ca0c647SAlex Elder                memory-region = <&ipa_fw_mem>;
2364ca0c647SAlex Elder                firmware-name = "qcom/sc7180-trogdor/modem/modem.mdt";
237fc39c40aSAlex Elder
2384ca0c647SAlex Elder                iommus = <&apps_smmu 0x440 0x0>,
2394ca0c647SAlex Elder                         <&apps_smmu 0x442 0x0>;
240fba56184SRob Herring                reg = <0x1e40000 0x7000>,
241fba56184SRob Herring                      <0x1e47000 0x2000>,
242fba56184SRob Herring                      <0x1e04000 0x2c000>;
243fc39c40aSAlex Elder                reg-names = "ipa-reg",
244e6e0f093SAlex Elder                            "ipa-shared",
245fc39c40aSAlex Elder                            "gsi";
246fc39c40aSAlex Elder
24727bb36edSAlex Elder                interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>,
24827bb36edSAlex Elder                                      <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
249fc39c40aSAlex Elder                                      <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
250fc39c40aSAlex Elder                                      <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
251fc39c40aSAlex Elder                interrupt-names = "ipa",
252fc39c40aSAlex Elder                                  "gsi",
253fc39c40aSAlex Elder                                  "ipa-clock-query",
254fc39c40aSAlex Elder                                  "ipa-setup-ready";
255fc39c40aSAlex Elder
256fc39c40aSAlex Elder                clocks = <&rpmhcc RPMH_IPA_CLK>;
257fc39c40aSAlex Elder                clock-names = "core";
258fc39c40aSAlex Elder
259fc39c40aSAlex Elder                interconnects =
2604ca0c647SAlex Elder                        <&aggre2_noc MASTER_IPA 0 &mc_virt SLAVE_EBI1 0>,
2614ca0c647SAlex Elder                        <&aggre2_noc MASTER_IPA 0 &system_noc SLAVE_IMEM 0>,
2624ca0c647SAlex Elder                        <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_IPA_CFG 0>;
263fc39c40aSAlex Elder                interconnect-names = "memory",
264a0221a0fSAlex Elder                                     "imem",
265a0221a0fSAlex Elder                                     "config";
266fc39c40aSAlex Elder
267ac62a017SAlex Elder                qcom,qmp = <&aoss_qmp>;
268ac62a017SAlex Elder
269fc39c40aSAlex Elder                qcom,smem-states = <&ipa_smp2p_out 0>,
270fc39c40aSAlex Elder                                   <&ipa_smp2p_out 1>;
271fc39c40aSAlex Elder                qcom,smem-state-names = "ipa-clock-enabled-valid",
272fc39c40aSAlex Elder                                        "ipa-clock-enabled";
273fc39c40aSAlex Elder        };
274