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: 47*2afd6c8bSAlex Elder - qcom,msm8998-ipa 4815c88e18SAlex Elder - qcom,sc7180-ipa 4915c88e18SAlex Elder - qcom,sc7280-ipa 5015c88e18SAlex Elder - qcom,sdm845-ipa 5115c88e18SAlex Elder - qcom,sdx55-ipa 5215c88e18SAlex Elder - qcom,sm8350-ipa 53fc39c40aSAlex Elder 54fc39c40aSAlex Elder reg: 55fc39c40aSAlex Elder items: 56fc39c40aSAlex Elder - description: IPA registers 57fc39c40aSAlex Elder - description: IPA shared memory 58fc39c40aSAlex Elder - description: GSI registers 59fc39c40aSAlex Elder 60fc39c40aSAlex Elder reg-names: 61fc39c40aSAlex Elder items: 62fc39c40aSAlex Elder - const: ipa-reg 63fc39c40aSAlex Elder - const: ipa-shared 64fc39c40aSAlex Elder - const: gsi 65fc39c40aSAlex Elder 668456c544SAlex Elder iommus: 678456c544SAlex Elder maxItems: 1 688456c544SAlex Elder 69fc39c40aSAlex Elder clocks: 70fc39c40aSAlex Elder maxItems: 1 71fc39c40aSAlex Elder 72fc39c40aSAlex Elder clock-names: 73fc39c40aSAlex Elder const: core 74fc39c40aSAlex Elder 75fc39c40aSAlex Elder interrupts: 76fc39c40aSAlex Elder items: 77fc39c40aSAlex Elder - description: IPA interrupt (hardware IRQ) 78fc39c40aSAlex Elder - description: GSI interrupt (hardware IRQ) 79fc39c40aSAlex Elder - description: Modem clock query interrupt (smp2p interrupt) 80fc39c40aSAlex Elder - description: Modem setup ready interrupt (smp2p interrupt) 81fc39c40aSAlex Elder 82fc39c40aSAlex Elder interrupt-names: 83fc39c40aSAlex Elder items: 84fc39c40aSAlex Elder - const: ipa 85fc39c40aSAlex Elder - const: gsi 86fc39c40aSAlex Elder - const: ipa-clock-query 87fc39c40aSAlex Elder - const: ipa-setup-ready 88fc39c40aSAlex Elder 89fc39c40aSAlex Elder interconnects: 90fc39c40aSAlex Elder items: 91fc39c40aSAlex Elder - description: Interconnect path between IPA and main memory 92fc39c40aSAlex Elder - description: Interconnect path between IPA and internal memory 93fc39c40aSAlex Elder - description: Interconnect path between IPA and the AP subsystem 94fc39c40aSAlex Elder 95fc39c40aSAlex Elder interconnect-names: 96fc39c40aSAlex Elder items: 97fc39c40aSAlex Elder - const: memory 98fc39c40aSAlex Elder - const: imem 99fc39c40aSAlex Elder - const: config 100fc39c40aSAlex Elder 101fc39c40aSAlex Elder qcom,smem-states: 1023d21a460SRob Herring $ref: /schemas/types.yaml#/definitions/phandle-array 103fc39c40aSAlex Elder description: State bits used in by the AP to signal the modem. 104fc39c40aSAlex Elder items: 105fc39c40aSAlex Elder - description: Whether the "ipa-clock-enabled" state bit is valid 106fc39c40aSAlex Elder - description: Whether the IPA clock is enabled (if valid) 107fc39c40aSAlex Elder 108fc39c40aSAlex Elder qcom,smem-state-names: 109fc39c40aSAlex Elder description: The names of the state bits used for SMP2P output 110fc39c40aSAlex Elder items: 111fc39c40aSAlex Elder - const: ipa-clock-enabled-valid 112fc39c40aSAlex Elder - const: ipa-clock-enabled 113fc39c40aSAlex Elder 114fc39c40aSAlex Elder modem-init: 115fc39c40aSAlex Elder type: boolean 116fc39c40aSAlex Elder description: 117fc39c40aSAlex Elder If present, it indicates that the modem is responsible for 118fc39c40aSAlex Elder performing early IPA initialization, including loading and 119fc39c40aSAlex Elder validating firwmare used by the GSI. 120fc39c40aSAlex Elder 121fc39c40aSAlex Elder memory-region: 122fc39c40aSAlex Elder maxItems: 1 123fc39c40aSAlex Elder description: 124fc39c40aSAlex Elder If present, a phandle for a reserved memory area that holds 125fc39c40aSAlex Elder the firmware passed to Trust Zone for authentication. Required 126fc39c40aSAlex Elder when Trust Zone (not the modem) performs early initialization. 127fc39c40aSAlex Elder 128d8604b20SAlex Elder firmware-name: 129d8604b20SAlex Elder $ref: /schemas/types.yaml#/definitions/string 130d8604b20SAlex Elder description: 131d8604b20SAlex Elder If present, name (or relative path) of the file within the 132d8604b20SAlex Elder firmware search path containing the firmware image used when 133d8604b20SAlex Elder initializing IPA hardware. Optional, and only used when 134d8604b20SAlex Elder Trust Zone performs early initialization. 135d8604b20SAlex Elder 136fc39c40aSAlex Elderrequired: 137fc39c40aSAlex Elder - compatible 1388456c544SAlex Elder - iommus 139fc39c40aSAlex Elder - reg 140fc39c40aSAlex Elder - clocks 141fc39c40aSAlex Elder - interrupts 142fc39c40aSAlex Elder - interconnects 143fc39c40aSAlex Elder - qcom,smem-states 144fc39c40aSAlex Elder 145d8604b20SAlex Elder# Either modem-init is present, or memory-region must be present. 146fc39c40aSAlex ElderoneOf: 147fc39c40aSAlex Elder - required: 148fc39c40aSAlex Elder - modem-init 149fc39c40aSAlex Elder - required: 150fc39c40aSAlex Elder - memory-region 151fc39c40aSAlex Elder 152d8604b20SAlex Elder# If memory-region is present, firmware-name may optionally be present. 153d8604b20SAlex Elder# But if modem-init is present, firmware-name must not be present. 154d8604b20SAlex Elderif: 155d8604b20SAlex Elder required: 156d8604b20SAlex Elder - modem-init 157d8604b20SAlex Elderthen: 158d8604b20SAlex Elder not: 159d8604b20SAlex Elder required: 160d8604b20SAlex Elder - firmware-name 161d8604b20SAlex Elder 1625be478f9SRob HerringadditionalProperties: false 1635be478f9SRob Herring 164fc39c40aSAlex Elderexamples: 165fc39c40aSAlex Elder - | 16627bb36edSAlex Elder #include <dt-bindings/interrupt-controller/arm-gic.h> 167e6e0f093SAlex Elder #include <dt-bindings/clock/qcom,rpmh.h> 168e6e0f093SAlex Elder #include <dt-bindings/interconnect/qcom,sdm845.h> 169e6e0f093SAlex Elder 170fc39c40aSAlex Elder smp2p-mpss { 171fc39c40aSAlex Elder compatible = "qcom,smp2p"; 172fc39c40aSAlex Elder ipa_smp2p_out: ipa-ap-to-modem { 173fc39c40aSAlex Elder qcom,entry-name = "ipa"; 174fc39c40aSAlex Elder #qcom,smem-state-cells = <1>; 175fc39c40aSAlex Elder }; 176fc39c40aSAlex Elder 177fc39c40aSAlex Elder ipa_smp2p_in: ipa-modem-to-ap { 178fc39c40aSAlex Elder qcom,entry-name = "ipa"; 179fc39c40aSAlex Elder interrupt-controller; 180fc39c40aSAlex Elder #interrupt-cells = <2>; 181fc39c40aSAlex Elder }; 182fc39c40aSAlex Elder }; 183fc39c40aSAlex Elder ipa@1e40000 { 184fc39c40aSAlex Elder compatible = "qcom,sdm845-ipa"; 185fc39c40aSAlex Elder 186fc39c40aSAlex Elder modem-init; 187fc39c40aSAlex Elder 1888456c544SAlex Elder iommus = <&apps_smmu 0x720 0x3>; 189fba56184SRob Herring reg = <0x1e40000 0x7000>, 190fba56184SRob Herring <0x1e47000 0x2000>, 191fba56184SRob Herring <0x1e04000 0x2c000>; 192fc39c40aSAlex Elder reg-names = "ipa-reg", 193e6e0f093SAlex Elder "ipa-shared", 194fc39c40aSAlex Elder "gsi"; 195fc39c40aSAlex Elder 19627bb36edSAlex Elder interrupts-extended = <&intc GIC_SPI 311 IRQ_TYPE_EDGE_RISING>, 19727bb36edSAlex Elder <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>, 198fc39c40aSAlex Elder <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>, 199fc39c40aSAlex Elder <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>; 200fc39c40aSAlex Elder interrupt-names = "ipa", 201fc39c40aSAlex Elder "gsi", 202fc39c40aSAlex Elder "ipa-clock-query", 203fc39c40aSAlex Elder "ipa-setup-ready"; 204fc39c40aSAlex Elder 205fc39c40aSAlex Elder clocks = <&rpmhcc RPMH_IPA_CLK>; 206fc39c40aSAlex Elder clock-names = "core"; 207fc39c40aSAlex Elder 208fc39c40aSAlex Elder interconnects = 209fc39c40aSAlex Elder <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>, 210fc39c40aSAlex Elder <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>, 211fc39c40aSAlex Elder <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>; 212fc39c40aSAlex Elder interconnect-names = "memory", 213fc39c40aSAlex Elder "imem", 214fc39c40aSAlex Elder "config"; 215fc39c40aSAlex Elder 216fc39c40aSAlex Elder qcom,smem-states = <&ipa_smp2p_out 0>, 217fc39c40aSAlex Elder <&ipa_smp2p_out 1>; 218fc39c40aSAlex Elder qcom,smem-state-names = "ipa-clock-enabled-valid", 219fc39c40aSAlex Elder "ipa-clock-enabled"; 220fc39c40aSAlex Elder }; 221