162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/iommu/arm,smmu.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: ARM System MMU Architecture Implementation 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Will Deacon <will@kernel.org> 1162306a36Sopenharmony_ci - Robin Murphy <Robin.Murphy@arm.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: |+ 1462306a36Sopenharmony_ci ARM SoCs may contain an implementation of the ARM System Memory 1562306a36Sopenharmony_ci Management Unit Architecture, which can be used to provide 1 or 2 stages 1662306a36Sopenharmony_ci of address translation to bus masters external to the CPU. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci The SMMU may also raise interrupts in response to various fault 1962306a36Sopenharmony_ci conditions. 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciproperties: 2262306a36Sopenharmony_ci $nodename: 2362306a36Sopenharmony_ci pattern: "^iommu@[0-9a-f]*" 2462306a36Sopenharmony_ci compatible: 2562306a36Sopenharmony_ci oneOf: 2662306a36Sopenharmony_ci - description: Qcom SoCs implementing "arm,smmu-v2" 2762306a36Sopenharmony_ci items: 2862306a36Sopenharmony_ci - enum: 2962306a36Sopenharmony_ci - qcom,msm8996-smmu-v2 3062306a36Sopenharmony_ci - qcom,msm8998-smmu-v2 3162306a36Sopenharmony_ci - qcom,sdm630-smmu-v2 3262306a36Sopenharmony_ci - qcom,sm6375-smmu-v2 3362306a36Sopenharmony_ci - const: qcom,smmu-v2 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci - description: Qcom SoCs implementing "qcom,smmu-500" and "arm,mmu-500" 3662306a36Sopenharmony_ci items: 3762306a36Sopenharmony_ci - enum: 3862306a36Sopenharmony_ci - qcom,qcm2290-smmu-500 3962306a36Sopenharmony_ci - qcom,qdu1000-smmu-500 4062306a36Sopenharmony_ci - qcom,sa8775p-smmu-500 4162306a36Sopenharmony_ci - qcom,sc7180-smmu-500 4262306a36Sopenharmony_ci - qcom,sc7280-smmu-500 4362306a36Sopenharmony_ci - qcom,sc8180x-smmu-500 4462306a36Sopenharmony_ci - qcom,sc8280xp-smmu-500 4562306a36Sopenharmony_ci - qcom,sdm670-smmu-500 4662306a36Sopenharmony_ci - qcom,sdm845-smmu-500 4762306a36Sopenharmony_ci - qcom,sdx55-smmu-500 4862306a36Sopenharmony_ci - qcom,sdx65-smmu-500 4962306a36Sopenharmony_ci - qcom,sdx75-smmu-500 5062306a36Sopenharmony_ci - qcom,sm6115-smmu-500 5162306a36Sopenharmony_ci - qcom,sm6125-smmu-500 5262306a36Sopenharmony_ci - qcom,sm6350-smmu-500 5362306a36Sopenharmony_ci - qcom,sm6375-smmu-500 5462306a36Sopenharmony_ci - qcom,sm8150-smmu-500 5562306a36Sopenharmony_ci - qcom,sm8250-smmu-500 5662306a36Sopenharmony_ci - qcom,sm8350-smmu-500 5762306a36Sopenharmony_ci - qcom,sm8450-smmu-500 5862306a36Sopenharmony_ci - qcom,sm8550-smmu-500 5962306a36Sopenharmony_ci - const: qcom,smmu-500 6062306a36Sopenharmony_ci - const: arm,mmu-500 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci - description: Qcom SoCs implementing "arm,mmu-500" (legacy binding) 6362306a36Sopenharmony_ci deprecated: true 6462306a36Sopenharmony_ci items: 6562306a36Sopenharmony_ci # Do not add additional SoC to this list. Instead use two previous lists. 6662306a36Sopenharmony_ci - enum: 6762306a36Sopenharmony_ci - qcom,qcm2290-smmu-500 6862306a36Sopenharmony_ci - qcom,sc7180-smmu-500 6962306a36Sopenharmony_ci - qcom,sc7280-smmu-500 7062306a36Sopenharmony_ci - qcom,sc8180x-smmu-500 7162306a36Sopenharmony_ci - qcom,sc8280xp-smmu-500 7262306a36Sopenharmony_ci - qcom,sdm845-smmu-500 7362306a36Sopenharmony_ci - qcom,sm6115-smmu-500 7462306a36Sopenharmony_ci - qcom,sm6350-smmu-500 7562306a36Sopenharmony_ci - qcom,sm6375-smmu-500 7662306a36Sopenharmony_ci - qcom,sm8150-smmu-500 7762306a36Sopenharmony_ci - qcom,sm8250-smmu-500 7862306a36Sopenharmony_ci - qcom,sm8350-smmu-500 7962306a36Sopenharmony_ci - qcom,sm8450-smmu-500 8062306a36Sopenharmony_ci - const: arm,mmu-500 8162306a36Sopenharmony_ci - description: Qcom Adreno GPUs implementing "qcom,smmu-500" and "arm,mmu-500" 8262306a36Sopenharmony_ci items: 8362306a36Sopenharmony_ci - enum: 8462306a36Sopenharmony_ci - qcom,sa8775p-smmu-500 8562306a36Sopenharmony_ci - qcom,sc7280-smmu-500 8662306a36Sopenharmony_ci - qcom,sc8280xp-smmu-500 8762306a36Sopenharmony_ci - qcom,sm6115-smmu-500 8862306a36Sopenharmony_ci - qcom,sm6125-smmu-500 8962306a36Sopenharmony_ci - qcom,sm8150-smmu-500 9062306a36Sopenharmony_ci - qcom,sm8250-smmu-500 9162306a36Sopenharmony_ci - qcom,sm8350-smmu-500 9262306a36Sopenharmony_ci - const: qcom,adreno-smmu 9362306a36Sopenharmony_ci - const: qcom,smmu-500 9462306a36Sopenharmony_ci - const: arm,mmu-500 9562306a36Sopenharmony_ci - description: Qcom Adreno GPUs implementing "arm,mmu-500" (legacy binding) 9662306a36Sopenharmony_ci deprecated: true 9762306a36Sopenharmony_ci items: 9862306a36Sopenharmony_ci # Do not add additional SoC to this list. Instead use previous list. 9962306a36Sopenharmony_ci - enum: 10062306a36Sopenharmony_ci - qcom,sc7280-smmu-500 10162306a36Sopenharmony_ci - qcom,sm8150-smmu-500 10262306a36Sopenharmony_ci - qcom,sm8250-smmu-500 10362306a36Sopenharmony_ci - const: qcom,adreno-smmu 10462306a36Sopenharmony_ci - const: arm,mmu-500 10562306a36Sopenharmony_ci - description: Qcom Adreno GPUs implementing "arm,smmu-v2" 10662306a36Sopenharmony_ci items: 10762306a36Sopenharmony_ci - enum: 10862306a36Sopenharmony_ci - qcom,msm8996-smmu-v2 10962306a36Sopenharmony_ci - qcom,sc7180-smmu-v2 11062306a36Sopenharmony_ci - qcom,sdm630-smmu-v2 11162306a36Sopenharmony_ci - qcom,sdm845-smmu-v2 11262306a36Sopenharmony_ci - qcom,sm6350-smmu-v2 11362306a36Sopenharmony_ci - const: qcom,adreno-smmu 11462306a36Sopenharmony_ci - const: qcom,smmu-v2 11562306a36Sopenharmony_ci - description: Qcom Adreno GPUs on Google Cheza platform 11662306a36Sopenharmony_ci items: 11762306a36Sopenharmony_ci - const: qcom,sdm845-smmu-v2 11862306a36Sopenharmony_ci - const: qcom,smmu-v2 11962306a36Sopenharmony_ci - description: Marvell SoCs implementing "arm,mmu-500" 12062306a36Sopenharmony_ci items: 12162306a36Sopenharmony_ci - const: marvell,ap806-smmu-500 12262306a36Sopenharmony_ci - const: arm,mmu-500 12362306a36Sopenharmony_ci - description: NVIDIA SoCs that require memory controller interaction 12462306a36Sopenharmony_ci and may program multiple ARM MMU-500s identically with the memory 12562306a36Sopenharmony_ci controller interleaving translations between multiple instances 12662306a36Sopenharmony_ci for improved performance. 12762306a36Sopenharmony_ci items: 12862306a36Sopenharmony_ci - enum: 12962306a36Sopenharmony_ci - nvidia,tegra186-smmu 13062306a36Sopenharmony_ci - nvidia,tegra194-smmu 13162306a36Sopenharmony_ci - nvidia,tegra234-smmu 13262306a36Sopenharmony_ci - const: nvidia,smmu-500 13362306a36Sopenharmony_ci - items: 13462306a36Sopenharmony_ci - const: arm,mmu-500 13562306a36Sopenharmony_ci - const: arm,smmu-v2 13662306a36Sopenharmony_ci - items: 13762306a36Sopenharmony_ci - enum: 13862306a36Sopenharmony_ci - arm,mmu-400 13962306a36Sopenharmony_ci - arm,mmu-401 14062306a36Sopenharmony_ci - const: arm,smmu-v1 14162306a36Sopenharmony_ci - enum: 14262306a36Sopenharmony_ci - arm,smmu-v1 14362306a36Sopenharmony_ci - arm,smmu-v2 14462306a36Sopenharmony_ci - arm,mmu-400 14562306a36Sopenharmony_ci - arm,mmu-401 14662306a36Sopenharmony_ci - arm,mmu-500 14762306a36Sopenharmony_ci - cavium,smmu-v2 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci reg: 15062306a36Sopenharmony_ci minItems: 1 15162306a36Sopenharmony_ci maxItems: 2 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci '#global-interrupts': 15462306a36Sopenharmony_ci description: The number of global interrupts exposed by the device. 15562306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 15662306a36Sopenharmony_ci minimum: 0 15762306a36Sopenharmony_ci maximum: 260 # 2 secure, 2 non-secure, and up to 256 perf counters 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci '#iommu-cells': 16062306a36Sopenharmony_ci enum: [ 1, 2 ] 16162306a36Sopenharmony_ci description: | 16262306a36Sopenharmony_ci See Documentation/devicetree/bindings/iommu/iommu.txt for details. With a 16362306a36Sopenharmony_ci value of 1, each IOMMU specifier represents a distinct stream ID emitted 16462306a36Sopenharmony_ci by that device into the relevant SMMU. 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci SMMUs with stream matching support and complex masters may use a value of 16762306a36Sopenharmony_ci 2, where the second cell of the IOMMU specifier represents an SMR mask to 16862306a36Sopenharmony_ci combine with the ID in the first cell. Care must be taken to ensure the 16962306a36Sopenharmony_ci set of matched IDs does not result in conflicts. 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci interrupts: 17262306a36Sopenharmony_ci minItems: 1 17362306a36Sopenharmony_ci maxItems: 388 # 260 plus 128 contexts 17462306a36Sopenharmony_ci description: | 17562306a36Sopenharmony_ci Interrupt list, with the first #global-interrupts entries corresponding to 17662306a36Sopenharmony_ci the global interrupts and any following entries corresponding to context 17762306a36Sopenharmony_ci interrupts, specified in order of their indexing by the SMMU. 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci For SMMUv2 implementations, there must be exactly one interrupt per 18062306a36Sopenharmony_ci context bank. In the case of a single, combined interrupt, it must be 18162306a36Sopenharmony_ci listed multiple times. 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci dma-coherent: 18462306a36Sopenharmony_ci description: | 18562306a36Sopenharmony_ci Present if page table walks made by the SMMU are cache coherent with the 18662306a36Sopenharmony_ci CPU. 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci NOTE: this only applies to the SMMU itself, not masters connected 18962306a36Sopenharmony_ci upstream of the SMMU. 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci calxeda,smmu-secure-config-access: 19262306a36Sopenharmony_ci type: boolean 19362306a36Sopenharmony_ci description: 19462306a36Sopenharmony_ci Enable proper handling of buggy implementations that always use secure 19562306a36Sopenharmony_ci access to SMMU configuration registers. In this case non-secure aliases of 19662306a36Sopenharmony_ci secure registers have to be used during SMMU configuration. 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci stream-match-mask: 19962306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 20062306a36Sopenharmony_ci description: | 20162306a36Sopenharmony_ci For SMMUs supporting stream matching and using #iommu-cells = <1>, 20262306a36Sopenharmony_ci specifies a mask of bits to ignore when matching stream IDs (e.g. this may 20362306a36Sopenharmony_ci be programmed into the SMRn.MASK field of every stream match register 20462306a36Sopenharmony_ci used). For cases where it is desirable to ignore some portion of every 20562306a36Sopenharmony_ci Stream ID (e.g. for certain MMU-500 configurations given globally unique 20662306a36Sopenharmony_ci input IDs). This property is not valid for SMMUs using stream indexing, or 20762306a36Sopenharmony_ci using stream matching with #iommu-cells = <2>, and may be ignored if 20862306a36Sopenharmony_ci present in such cases. 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci clock-names: 21162306a36Sopenharmony_ci minItems: 1 21262306a36Sopenharmony_ci maxItems: 7 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci clocks: 21562306a36Sopenharmony_ci minItems: 1 21662306a36Sopenharmony_ci maxItems: 7 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci power-domains: 21962306a36Sopenharmony_ci minItems: 1 22062306a36Sopenharmony_ci maxItems: 3 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci nvidia,memory-controller: 22362306a36Sopenharmony_ci description: | 22462306a36Sopenharmony_ci A phandle to the memory controller on NVIDIA Tegra186 and later SoCs. 22562306a36Sopenharmony_ci The memory controller needs to be programmed with a mapping of memory 22662306a36Sopenharmony_ci client IDs to ARM SMMU stream IDs. 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci If this property is absent, the mapping programmed by early firmware 22962306a36Sopenharmony_ci will be used and it is not guaranteed that IOMMU translations will be 23062306a36Sopenharmony_ci enabled for any given device. 23162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/phandle 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cirequired: 23462306a36Sopenharmony_ci - compatible 23562306a36Sopenharmony_ci - reg 23662306a36Sopenharmony_ci - '#global-interrupts' 23762306a36Sopenharmony_ci - '#iommu-cells' 23862306a36Sopenharmony_ci - interrupts 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ciadditionalProperties: false 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ciallOf: 24362306a36Sopenharmony_ci - if: 24462306a36Sopenharmony_ci properties: 24562306a36Sopenharmony_ci compatible: 24662306a36Sopenharmony_ci contains: 24762306a36Sopenharmony_ci enum: 24862306a36Sopenharmony_ci - nvidia,tegra186-smmu 24962306a36Sopenharmony_ci - nvidia,tegra194-smmu 25062306a36Sopenharmony_ci - nvidia,tegra234-smmu 25162306a36Sopenharmony_ci then: 25262306a36Sopenharmony_ci properties: 25362306a36Sopenharmony_ci reg: 25462306a36Sopenharmony_ci minItems: 1 25562306a36Sopenharmony_ci maxItems: 2 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci # The reference to the memory controller is required to ensure that the 25862306a36Sopenharmony_ci # memory client to stream ID mapping can be done synchronously with the 25962306a36Sopenharmony_ci # IOMMU attachment. 26062306a36Sopenharmony_ci required: 26162306a36Sopenharmony_ci - nvidia,memory-controller 26262306a36Sopenharmony_ci else: 26362306a36Sopenharmony_ci properties: 26462306a36Sopenharmony_ci reg: 26562306a36Sopenharmony_ci maxItems: 1 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci - if: 26862306a36Sopenharmony_ci properties: 26962306a36Sopenharmony_ci compatible: 27062306a36Sopenharmony_ci contains: 27162306a36Sopenharmony_ci enum: 27262306a36Sopenharmony_ci - qcom,msm8998-smmu-v2 27362306a36Sopenharmony_ci - qcom,sdm630-smmu-v2 27462306a36Sopenharmony_ci then: 27562306a36Sopenharmony_ci anyOf: 27662306a36Sopenharmony_ci - properties: 27762306a36Sopenharmony_ci clock-names: 27862306a36Sopenharmony_ci items: 27962306a36Sopenharmony_ci - const: bus 28062306a36Sopenharmony_ci clocks: 28162306a36Sopenharmony_ci items: 28262306a36Sopenharmony_ci - description: bus clock required for downstream bus access and for 28362306a36Sopenharmony_ci the smmu ptw 28462306a36Sopenharmony_ci - properties: 28562306a36Sopenharmony_ci clock-names: 28662306a36Sopenharmony_ci items: 28762306a36Sopenharmony_ci - const: iface 28862306a36Sopenharmony_ci - const: mem 28962306a36Sopenharmony_ci - const: mem_iface 29062306a36Sopenharmony_ci clocks: 29162306a36Sopenharmony_ci items: 29262306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 29362306a36Sopenharmony_ci through the TCU's programming interface. 29462306a36Sopenharmony_ci - description: bus clock required for memory access 29562306a36Sopenharmony_ci - description: bus clock required for GPU memory access 29662306a36Sopenharmony_ci - properties: 29762306a36Sopenharmony_ci clock-names: 29862306a36Sopenharmony_ci items: 29962306a36Sopenharmony_ci - const: iface-mm 30062306a36Sopenharmony_ci - const: iface-smmu 30162306a36Sopenharmony_ci - const: bus-smmu 30262306a36Sopenharmony_ci clocks: 30362306a36Sopenharmony_ci items: 30462306a36Sopenharmony_ci - description: interface clock required to access mnoc's registers 30562306a36Sopenharmony_ci through the TCU's programming interface. 30662306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 30762306a36Sopenharmony_ci through the TCU's programming interface. 30862306a36Sopenharmony_ci - description: bus clock required for the smmu ptw 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci - if: 31162306a36Sopenharmony_ci properties: 31262306a36Sopenharmony_ci compatible: 31362306a36Sopenharmony_ci contains: 31462306a36Sopenharmony_ci enum: 31562306a36Sopenharmony_ci - qcom,sm6375-smmu-v2 31662306a36Sopenharmony_ci then: 31762306a36Sopenharmony_ci anyOf: 31862306a36Sopenharmony_ci - properties: 31962306a36Sopenharmony_ci clock-names: 32062306a36Sopenharmony_ci items: 32162306a36Sopenharmony_ci - const: bus 32262306a36Sopenharmony_ci clocks: 32362306a36Sopenharmony_ci items: 32462306a36Sopenharmony_ci - description: bus clock required for downstream bus access and for 32562306a36Sopenharmony_ci the smmu ptw 32662306a36Sopenharmony_ci - properties: 32762306a36Sopenharmony_ci clock-names: 32862306a36Sopenharmony_ci items: 32962306a36Sopenharmony_ci - const: iface 33062306a36Sopenharmony_ci - const: mem 33162306a36Sopenharmony_ci - const: mem_iface 33262306a36Sopenharmony_ci clocks: 33362306a36Sopenharmony_ci items: 33462306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 33562306a36Sopenharmony_ci through the TCU's programming interface. 33662306a36Sopenharmony_ci - description: bus clock required for memory access 33762306a36Sopenharmony_ci - description: bus clock required for GPU memory access 33862306a36Sopenharmony_ci - properties: 33962306a36Sopenharmony_ci clock-names: 34062306a36Sopenharmony_ci items: 34162306a36Sopenharmony_ci - const: iface-mm 34262306a36Sopenharmony_ci - const: iface-smmu 34362306a36Sopenharmony_ci - const: bus-mm 34462306a36Sopenharmony_ci - const: bus-smmu 34562306a36Sopenharmony_ci clocks: 34662306a36Sopenharmony_ci items: 34762306a36Sopenharmony_ci - description: interface clock required to access mnoc's registers 34862306a36Sopenharmony_ci through the TCU's programming interface. 34962306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 35062306a36Sopenharmony_ci through the TCU's programming interface. 35162306a36Sopenharmony_ci - description: bus clock required for downstream bus access 35262306a36Sopenharmony_ci - description: bus clock required for the smmu ptw 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci - if: 35562306a36Sopenharmony_ci properties: 35662306a36Sopenharmony_ci compatible: 35762306a36Sopenharmony_ci contains: 35862306a36Sopenharmony_ci enum: 35962306a36Sopenharmony_ci - qcom,msm8996-smmu-v2 36062306a36Sopenharmony_ci - qcom,sc7180-smmu-v2 36162306a36Sopenharmony_ci - qcom,sdm845-smmu-v2 36262306a36Sopenharmony_ci then: 36362306a36Sopenharmony_ci properties: 36462306a36Sopenharmony_ci clock-names: 36562306a36Sopenharmony_ci items: 36662306a36Sopenharmony_ci - const: bus 36762306a36Sopenharmony_ci - const: iface 36862306a36Sopenharmony_ci 36962306a36Sopenharmony_ci clocks: 37062306a36Sopenharmony_ci items: 37162306a36Sopenharmony_ci - description: bus clock required for downstream bus access and for 37262306a36Sopenharmony_ci the smmu ptw 37362306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 37462306a36Sopenharmony_ci through the TCU's programming interface. 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci - if: 37762306a36Sopenharmony_ci properties: 37862306a36Sopenharmony_ci compatible: 37962306a36Sopenharmony_ci contains: 38062306a36Sopenharmony_ci enum: 38162306a36Sopenharmony_ci - qcom,sa8775p-smmu-500 38262306a36Sopenharmony_ci - qcom,sc7280-smmu-500 38362306a36Sopenharmony_ci - qcom,sc8280xp-smmu-500 38462306a36Sopenharmony_ci then: 38562306a36Sopenharmony_ci properties: 38662306a36Sopenharmony_ci clock-names: 38762306a36Sopenharmony_ci items: 38862306a36Sopenharmony_ci - const: gcc_gpu_memnoc_gfx_clk 38962306a36Sopenharmony_ci - const: gcc_gpu_snoc_dvm_gfx_clk 39062306a36Sopenharmony_ci - const: gpu_cc_ahb_clk 39162306a36Sopenharmony_ci - const: gpu_cc_hlos1_vote_gpu_smmu_clk 39262306a36Sopenharmony_ci - const: gpu_cc_cx_gmu_clk 39362306a36Sopenharmony_ci - const: gpu_cc_hub_cx_int_clk 39462306a36Sopenharmony_ci - const: gpu_cc_hub_aon_clk 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci clocks: 39762306a36Sopenharmony_ci items: 39862306a36Sopenharmony_ci - description: GPU memnoc_gfx clock 39962306a36Sopenharmony_ci - description: GPU snoc_dvm_gfx clock 40062306a36Sopenharmony_ci - description: GPU ahb clock 40162306a36Sopenharmony_ci - description: GPU hlos1_vote_GPU smmu clock 40262306a36Sopenharmony_ci - description: GPU cx_gmu clock 40362306a36Sopenharmony_ci - description: GPU hub_cx_int clock 40462306a36Sopenharmony_ci - description: GPU hub_aon clock 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci - if: 40762306a36Sopenharmony_ci properties: 40862306a36Sopenharmony_ci compatible: 40962306a36Sopenharmony_ci contains: 41062306a36Sopenharmony_ci enum: 41162306a36Sopenharmony_ci - qcom,sm6350-smmu-v2 41262306a36Sopenharmony_ci - qcom,sm8150-smmu-500 41362306a36Sopenharmony_ci - qcom,sm8250-smmu-500 41462306a36Sopenharmony_ci then: 41562306a36Sopenharmony_ci properties: 41662306a36Sopenharmony_ci clock-names: 41762306a36Sopenharmony_ci items: 41862306a36Sopenharmony_ci - const: ahb 41962306a36Sopenharmony_ci - const: bus 42062306a36Sopenharmony_ci - const: iface 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci clocks: 42362306a36Sopenharmony_ci items: 42462306a36Sopenharmony_ci - description: bus clock required for AHB bus access 42562306a36Sopenharmony_ci - description: bus clock required for downstream bus access and for 42662306a36Sopenharmony_ci the smmu ptw 42762306a36Sopenharmony_ci - description: interface clock required to access smmu's registers 42862306a36Sopenharmony_ci through the TCU's programming interface. 42962306a36Sopenharmony_ci 43062306a36Sopenharmony_ci - if: 43162306a36Sopenharmony_ci properties: 43262306a36Sopenharmony_ci compatible: 43362306a36Sopenharmony_ci items: 43462306a36Sopenharmony_ci - enum: 43562306a36Sopenharmony_ci - qcom,sm6115-smmu-500 43662306a36Sopenharmony_ci - qcom,sm6125-smmu-500 43762306a36Sopenharmony_ci - const: qcom,adreno-smmu 43862306a36Sopenharmony_ci - const: qcom,smmu-500 43962306a36Sopenharmony_ci - const: arm,mmu-500 44062306a36Sopenharmony_ci then: 44162306a36Sopenharmony_ci properties: 44262306a36Sopenharmony_ci clock-names: 44362306a36Sopenharmony_ci items: 44462306a36Sopenharmony_ci - const: mem 44562306a36Sopenharmony_ci - const: hlos 44662306a36Sopenharmony_ci - const: iface 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_ci clocks: 44962306a36Sopenharmony_ci items: 45062306a36Sopenharmony_ci - description: GPU memory bus clock 45162306a36Sopenharmony_ci - description: Voter clock required for HLOS SMMU access 45262306a36Sopenharmony_ci - description: Interface clock required for register access 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci # Disallow clocks for all other platforms with specific compatibles 45562306a36Sopenharmony_ci - if: 45662306a36Sopenharmony_ci properties: 45762306a36Sopenharmony_ci compatible: 45862306a36Sopenharmony_ci contains: 45962306a36Sopenharmony_ci enum: 46062306a36Sopenharmony_ci - cavium,smmu-v2 46162306a36Sopenharmony_ci - marvell,ap806-smmu-500 46262306a36Sopenharmony_ci - nvidia,smmu-500 46362306a36Sopenharmony_ci - qcom,qcm2290-smmu-500 46462306a36Sopenharmony_ci - qcom,qdu1000-smmu-500 46562306a36Sopenharmony_ci - qcom,sc7180-smmu-500 46662306a36Sopenharmony_ci - qcom,sc8180x-smmu-500 46762306a36Sopenharmony_ci - qcom,sdm670-smmu-500 46862306a36Sopenharmony_ci - qcom,sdm845-smmu-500 46962306a36Sopenharmony_ci - qcom,sdx55-smmu-500 47062306a36Sopenharmony_ci - qcom,sdx65-smmu-500 47162306a36Sopenharmony_ci - qcom,sm6350-smmu-500 47262306a36Sopenharmony_ci - qcom,sm6375-smmu-500 47362306a36Sopenharmony_ci - qcom,sm8350-smmu-500 47462306a36Sopenharmony_ci - qcom,sm8450-smmu-500 47562306a36Sopenharmony_ci - qcom,sm8550-smmu-500 47662306a36Sopenharmony_ci then: 47762306a36Sopenharmony_ci properties: 47862306a36Sopenharmony_ci clock-names: false 47962306a36Sopenharmony_ci clocks: false 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ci - if: 48262306a36Sopenharmony_ci properties: 48362306a36Sopenharmony_ci compatible: 48462306a36Sopenharmony_ci contains: 48562306a36Sopenharmony_ci const: qcom,sm6375-smmu-500 48662306a36Sopenharmony_ci then: 48762306a36Sopenharmony_ci properties: 48862306a36Sopenharmony_ci power-domains: 48962306a36Sopenharmony_ci items: 49062306a36Sopenharmony_ci - description: SNoC MMU TBU RT GDSC 49162306a36Sopenharmony_ci - description: SNoC MMU TBU NRT GDSC 49262306a36Sopenharmony_ci - description: SNoC TURING MMU TBU0 GDSC 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci required: 49562306a36Sopenharmony_ci - power-domains 49662306a36Sopenharmony_ci else: 49762306a36Sopenharmony_ci properties: 49862306a36Sopenharmony_ci power-domains: 49962306a36Sopenharmony_ci maxItems: 1 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ciexamples: 50262306a36Sopenharmony_ci - |+ 50362306a36Sopenharmony_ci /* SMMU with stream matching or stream indexing */ 50462306a36Sopenharmony_ci smmu1: iommu@ba5e0000 { 50562306a36Sopenharmony_ci compatible = "arm,smmu-v1"; 50662306a36Sopenharmony_ci reg = <0xba5e0000 0x10000>; 50762306a36Sopenharmony_ci #global-interrupts = <2>; 50862306a36Sopenharmony_ci interrupts = <0 32 4>, 50962306a36Sopenharmony_ci <0 33 4>, 51062306a36Sopenharmony_ci <0 34 4>, /* This is the first context interrupt */ 51162306a36Sopenharmony_ci <0 35 4>, 51262306a36Sopenharmony_ci <0 36 4>, 51362306a36Sopenharmony_ci <0 37 4>; 51462306a36Sopenharmony_ci #iommu-cells = <1>; 51562306a36Sopenharmony_ci }; 51662306a36Sopenharmony_ci 51762306a36Sopenharmony_ci /* device with two stream IDs, 0 and 7 */ 51862306a36Sopenharmony_ci master1 { 51962306a36Sopenharmony_ci iommus = <&smmu1 0>, 52062306a36Sopenharmony_ci <&smmu1 7>; 52162306a36Sopenharmony_ci }; 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci /* SMMU with stream matching */ 52562306a36Sopenharmony_ci smmu2: iommu@ba5f0000 { 52662306a36Sopenharmony_ci compatible = "arm,smmu-v1"; 52762306a36Sopenharmony_ci reg = <0xba5f0000 0x10000>; 52862306a36Sopenharmony_ci #global-interrupts = <2>; 52962306a36Sopenharmony_ci interrupts = <0 38 4>, 53062306a36Sopenharmony_ci <0 39 4>, 53162306a36Sopenharmony_ci <0 40 4>, /* This is the first context interrupt */ 53262306a36Sopenharmony_ci <0 41 4>, 53362306a36Sopenharmony_ci <0 42 4>, 53462306a36Sopenharmony_ci <0 43 4>; 53562306a36Sopenharmony_ci #iommu-cells = <2>; 53662306a36Sopenharmony_ci }; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci /* device with stream IDs 0 and 7 */ 53962306a36Sopenharmony_ci master2 { 54062306a36Sopenharmony_ci iommus = <&smmu2 0 0>, 54162306a36Sopenharmony_ci <&smmu2 7 0>; 54262306a36Sopenharmony_ci }; 54362306a36Sopenharmony_ci 54462306a36Sopenharmony_ci /* device with stream IDs 1, 17, 33 and 49 */ 54562306a36Sopenharmony_ci master3 { 54662306a36Sopenharmony_ci iommus = <&smmu2 1 0x30>; 54762306a36Sopenharmony_ci }; 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_ci 55062306a36Sopenharmony_ci /* ARM MMU-500 with 10-bit stream ID input configuration */ 55162306a36Sopenharmony_ci smmu3: iommu@ba600000 { 55262306a36Sopenharmony_ci compatible = "arm,mmu-500", "arm,smmu-v2"; 55362306a36Sopenharmony_ci reg = <0xba600000 0x10000>; 55462306a36Sopenharmony_ci #global-interrupts = <2>; 55562306a36Sopenharmony_ci interrupts = <0 44 4>, 55662306a36Sopenharmony_ci <0 45 4>, 55762306a36Sopenharmony_ci <0 46 4>, /* This is the first context interrupt */ 55862306a36Sopenharmony_ci <0 47 4>, 55962306a36Sopenharmony_ci <0 48 4>, 56062306a36Sopenharmony_ci <0 49 4>; 56162306a36Sopenharmony_ci #iommu-cells = <1>; 56262306a36Sopenharmony_ci /* always ignore appended 5-bit TBU number */ 56362306a36Sopenharmony_ci stream-match-mask = <0x7c00>; 56462306a36Sopenharmony_ci }; 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci bus { 56762306a36Sopenharmony_ci /* bus whose child devices emit one unique 10-bit stream 56862306a36Sopenharmony_ci ID each, but may master through multiple SMMU TBUs */ 56962306a36Sopenharmony_ci iommu-map = <0 &smmu3 0 0x400>; 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_ci }; 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_ci - |+ 57562306a36Sopenharmony_ci /* Qcom's arm,smmu-v2 implementation */ 57662306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 57762306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/irq.h> 57862306a36Sopenharmony_ci smmu4: iommu@d00000 { 57962306a36Sopenharmony_ci compatible = "qcom,msm8996-smmu-v2", "qcom,smmu-v2"; 58062306a36Sopenharmony_ci reg = <0xd00000 0x10000>; 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_ci #global-interrupts = <1>; 58362306a36Sopenharmony_ci interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>, 58462306a36Sopenharmony_ci <GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH>, 58562306a36Sopenharmony_ci <GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH>; 58662306a36Sopenharmony_ci #iommu-cells = <1>; 58762306a36Sopenharmony_ci power-domains = <&mmcc 0>; 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci clocks = <&mmcc 123>, 59062306a36Sopenharmony_ci <&mmcc 124>; 59162306a36Sopenharmony_ci clock-names = "bus", "iface"; 59262306a36Sopenharmony_ci }; 593