1# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/net/qcom,ipa.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: Qualcomm IP Accelerator (IPA) 8 9maintainers: 10 - Alex Elder <elder@kernel.org> 11 12description: 13 This binding describes the Qualcomm IPA. The IPA is capable of offloading 14 certain network processing tasks (e.g. filtering, routing, and NAT) from 15 the main processor. 16 17 The IPA sits between multiple independent "execution environments," 18 including the Application Processor (AP) and the modem. The IPA presents 19 a Generic Software Interface (GSI) to each execution environment. 20 The GSI is an integral part of the IPA, but it is logically isolated 21 and has a distinct interrupt and a separately-defined address space. 22 23 See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt. See 24 iommu/iommu.txt and iommu/arm,smmu.yaml for more information about SMMU 25 bindings. 26 27 28 - | 29 -------- --------- 30 | | | | 31 | AP +<---. .----+ Modem | 32 | +--. | | .->+ | 33 | | | | | | | | 34 -------- | | | | --------- 35 v | v | 36 --+-+---+-+-- 37 | GSI | 38 |-----------| 39 | | 40 | IPA | 41 | | 42 ------------- 43 44properties: 45 compatible: 46 enum: 47 - qcom,msm8998-ipa 48 - qcom,sc7180-ipa 49 - qcom,sc7280-ipa 50 - qcom,sdm845-ipa 51 - qcom,sdx55-ipa 52 - qcom,sm8350-ipa 53 54 reg: 55 items: 56 - description: IPA registers 57 - description: IPA shared memory 58 - description: GSI registers 59 60 reg-names: 61 items: 62 - const: ipa-reg 63 - const: ipa-shared 64 - const: gsi 65 66 iommus: 67 maxItems: 1 68 69 clocks: 70 maxItems: 1 71 72 clock-names: 73 const: core 74 75 interrupts: 76 items: 77 - description: IPA interrupt (hardware IRQ) 78 - description: GSI interrupt (hardware IRQ) 79 - description: Modem clock query interrupt (smp2p interrupt) 80 - description: Modem setup ready interrupt (smp2p interrupt) 81 82 interrupt-names: 83 items: 84 - const: ipa 85 - const: gsi 86 - const: ipa-clock-query 87 - const: ipa-setup-ready 88 89 interconnects: 90 items: 91 - description: Interconnect path between IPA and main memory 92 - description: Interconnect path between IPA and internal memory 93 - description: Interconnect path between IPA and the AP subsystem 94 95 interconnect-names: 96 items: 97 - const: memory 98 - const: imem 99 - const: config 100 101 qcom,smem-states: 102 $ref: /schemas/types.yaml#/definitions/phandle-array 103 description: State bits used in by the AP to signal the modem. 104 items: 105 - description: Whether the "ipa-clock-enabled" state bit is valid 106 - description: Whether the IPA clock is enabled (if valid) 107 108 qcom,smem-state-names: 109 description: The names of the state bits used for SMP2P output 110 items: 111 - const: ipa-clock-enabled-valid 112 - const: ipa-clock-enabled 113 114 modem-init: 115 type: boolean 116 description: 117 If present, it indicates that the modem is responsible for 118 performing early IPA initialization, including loading and 119 validating firwmare used by the GSI. 120 121 memory-region: 122 maxItems: 1 123 description: 124 If present, a phandle for a reserved memory area that holds 125 the firmware passed to Trust Zone for authentication. Required 126 when Trust Zone (not the modem) performs early initialization. 127 128 firmware-name: 129 $ref: /schemas/types.yaml#/definitions/string 130 description: 131 If present, name (or relative path) of the file within the 132 firmware search path containing the firmware image used when 133 initializing IPA hardware. Optional, and only used when 134 Trust Zone performs early initialization. 135 136required: 137 - compatible 138 - iommus 139 - reg 140 - clocks 141 - interrupts 142 - interconnects 143 - qcom,smem-states 144 145# Either modem-init is present, or memory-region must be present. 146oneOf: 147 - required: 148 - modem-init 149 - required: 150 - memory-region 151 152# If memory-region is present, firmware-name may optionally be present. 153# But if modem-init is present, firmware-name must not be present. 154if: 155 required: 156 - modem-init 157then: 158 not: 159 required: 160 - firmware-name 161 162additionalProperties: false 163 164examples: 165 - | 166 #include <dt-bindings/interrupt-controller/arm-gic.h> 167 #include <dt-bindings/clock/qcom,rpmh.h> 168 #include <dt-bindings/interconnect/qcom,sdm845.h> 169 170 smp2p-mpss { 171 compatible = "qcom,smp2p"; 172 ipa_smp2p_out: ipa-ap-to-modem { 173 qcom,entry-name = "ipa"; 174 #qcom,smem-state-cells = <1>; 175 }; 176 177 ipa_smp2p_in: ipa-modem-to-ap { 178 qcom,entry-name = "ipa"; 179 interrupt-controller; 180 #interrupt-cells = <2>; 181 }; 182 }; 183 ipa@1e40000 { 184 compatible = "qcom,sdm845-ipa"; 185 186 modem-init; 187 188 iommus = <&apps_smmu 0x720 0x3>; 189 reg = <0x1e40000 0x7000>, 190 <0x1e47000 0x2000>, 191 <0x1e04000 0x2c000>; 192 reg-names = "ipa-reg", 193 "ipa-shared", 194 "gsi"; 195 196 interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>, 197 <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>, 198 <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>, 199 <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>; 200 interrupt-names = "ipa", 201 "gsi", 202 "ipa-clock-query", 203 "ipa-setup-ready"; 204 205 clocks = <&rpmhcc RPMH_IPA_CLK>; 206 clock-names = "core"; 207 208 interconnects = 209 <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>, 210 <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>, 211 <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>; 212 interconnect-names = "memory", 213 "imem", 214 "config"; 215 216 qcom,smem-states = <&ipa_smp2p_out 0>, 217 <&ipa_smp2p_out 1>; 218 qcom,smem-state-names = "ipa-clock-enabled-valid", 219 "ipa-clock-enabled"; 220 }; 221