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