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