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