162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/iommu/renesas,ipmmu-vmsa.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Renesas VMSA-Compatible IOMMU
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription:
1362306a36Sopenharmony_ci  The IPMMU is an IOMMU implementation compatible with the ARM VMSA page tables.
1462306a36Sopenharmony_ci  It provides address translation for bus masters outside of the CPU, each
1562306a36Sopenharmony_ci  connected to the IPMMU through a port called micro-TLB.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciproperties:
1862306a36Sopenharmony_ci  compatible:
1962306a36Sopenharmony_ci    oneOf:
2062306a36Sopenharmony_ci      - items:
2162306a36Sopenharmony_ci          - enum:
2262306a36Sopenharmony_ci              - renesas,ipmmu-r8a73a4  # R-Mobile APE6
2362306a36Sopenharmony_ci              - renesas,ipmmu-r8a7742  # RZ/G1H
2462306a36Sopenharmony_ci              - renesas,ipmmu-r8a7743  # RZ/G1M
2562306a36Sopenharmony_ci              - renesas,ipmmu-r8a7744  # RZ/G1N
2662306a36Sopenharmony_ci              - renesas,ipmmu-r8a7745  # RZ/G1E
2762306a36Sopenharmony_ci              - renesas,ipmmu-r8a7790  # R-Car H2
2862306a36Sopenharmony_ci              - renesas,ipmmu-r8a7791  # R-Car M2-W
2962306a36Sopenharmony_ci              - renesas,ipmmu-r8a7793  # R-Car M2-N
3062306a36Sopenharmony_ci              - renesas,ipmmu-r8a7794  # R-Car E2
3162306a36Sopenharmony_ci          - const: renesas,ipmmu-vmsa  # R-Mobile APE6 or R-Car Gen2 or RZ/G1
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci      - items:
3462306a36Sopenharmony_ci          - enum:
3562306a36Sopenharmony_ci              - renesas,ipmmu-r8a774a1 # RZ/G2M
3662306a36Sopenharmony_ci              - renesas,ipmmu-r8a774b1 # RZ/G2N
3762306a36Sopenharmony_ci              - renesas,ipmmu-r8a774c0 # RZ/G2E
3862306a36Sopenharmony_ci              - renesas,ipmmu-r8a774e1 # RZ/G2H
3962306a36Sopenharmony_ci              - renesas,ipmmu-r8a7795  # R-Car H3
4062306a36Sopenharmony_ci              - renesas,ipmmu-r8a7796  # R-Car M3-W
4162306a36Sopenharmony_ci              - renesas,ipmmu-r8a77961 # R-Car M3-W+
4262306a36Sopenharmony_ci              - renesas,ipmmu-r8a77965 # R-Car M3-N
4362306a36Sopenharmony_ci              - renesas,ipmmu-r8a77970 # R-Car V3M
4462306a36Sopenharmony_ci              - renesas,ipmmu-r8a77980 # R-Car V3H
4562306a36Sopenharmony_ci              - renesas,ipmmu-r8a77990 # R-Car E3
4662306a36Sopenharmony_ci              - renesas,ipmmu-r8a77995 # R-Car D3
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci      - items:
4962306a36Sopenharmony_ci          - enum:
5062306a36Sopenharmony_ci              - renesas,ipmmu-r8a779a0           # R-Car V3U
5162306a36Sopenharmony_ci              - renesas,ipmmu-r8a779f0           # R-Car S4-8
5262306a36Sopenharmony_ci              - renesas,ipmmu-r8a779g0           # R-Car V4H
5362306a36Sopenharmony_ci          - const: renesas,rcar-gen4-ipmmu-vmsa  # R-Car Gen4
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  reg:
5662306a36Sopenharmony_ci    maxItems: 1
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  interrupts:
5962306a36Sopenharmony_ci    minItems: 1
6062306a36Sopenharmony_ci    description:
6162306a36Sopenharmony_ci      Specifiers for the MMU fault interrupts. Not required for cache IPMMUs.
6262306a36Sopenharmony_ci    items:
6362306a36Sopenharmony_ci      - description: non-secure mode
6462306a36Sopenharmony_ci      - description: secure mode if supported
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci  '#iommu-cells':
6762306a36Sopenharmony_ci    const: 1
6862306a36Sopenharmony_ci    description:
6962306a36Sopenharmony_ci      The number of the micro-TLB that the device is connected to.
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  power-domains:
7262306a36Sopenharmony_ci    maxItems: 1
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  renesas,ipmmu-main:
7562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
7662306a36Sopenharmony_ci    items:
7762306a36Sopenharmony_ci      - minItems: 1
7862306a36Sopenharmony_ci        items:
7962306a36Sopenharmony_ci          - description: phandle to main IPMMU
8062306a36Sopenharmony_ci          - description:
8162306a36Sopenharmony_ci              The interrupt bit number associated with the particular cache
8262306a36Sopenharmony_ci              IPMMU device. If present, the interrupt bit number needs to match
8362306a36Sopenharmony_ci              the main IPMMU IMSSTR register. Only used by cache IPMMU
8462306a36Sopenharmony_ci              instances.
8562306a36Sopenharmony_ci    description:
8662306a36Sopenharmony_ci      Reference to the main IPMMU.
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_cirequired:
8962306a36Sopenharmony_ci  - compatible
9062306a36Sopenharmony_ci  - reg
9162306a36Sopenharmony_ci  - '#iommu-cells'
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cioneOf:
9462306a36Sopenharmony_ci  - required:
9562306a36Sopenharmony_ci      - interrupts
9662306a36Sopenharmony_ci  - required:
9762306a36Sopenharmony_ci      - renesas,ipmmu-main
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciadditionalProperties: false
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ciallOf:
10262306a36Sopenharmony_ci  - if:
10362306a36Sopenharmony_ci      properties:
10462306a36Sopenharmony_ci        compatible:
10562306a36Sopenharmony_ci          not:
10662306a36Sopenharmony_ci            contains:
10762306a36Sopenharmony_ci              const: renesas,ipmmu-vmsa
10862306a36Sopenharmony_ci    then:
10962306a36Sopenharmony_ci      required:
11062306a36Sopenharmony_ci        - power-domains
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci  - if:
11362306a36Sopenharmony_ci      properties:
11462306a36Sopenharmony_ci        compatible:
11562306a36Sopenharmony_ci          contains:
11662306a36Sopenharmony_ci            const: renesas,rcar-gen4-ipmmu-vmsa
11762306a36Sopenharmony_ci    then:
11862306a36Sopenharmony_ci      properties:
11962306a36Sopenharmony_ci        renesas,ipmmu-main:
12062306a36Sopenharmony_ci          items:
12162306a36Sopenharmony_ci            - maxItems: 1
12262306a36Sopenharmony_ci    else:
12362306a36Sopenharmony_ci      properties:
12462306a36Sopenharmony_ci        renesas,ipmmu-main:
12562306a36Sopenharmony_ci          items:
12662306a36Sopenharmony_ci            - minItems: 2
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ciexamples:
12962306a36Sopenharmony_ci  - |
13062306a36Sopenharmony_ci    #include <dt-bindings/clock/r8a7791-cpg-mssr.h>
13162306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
13262306a36Sopenharmony_ci    #include <dt-bindings/power/r8a7791-sysc.h>
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci    ipmmu_mx: iommu@fe951000 {
13562306a36Sopenharmony_ci        compatible = "renesas,ipmmu-r8a7791", "renesas,ipmmu-vmsa";
13662306a36Sopenharmony_ci        reg = <0xfe951000 0x1000>;
13762306a36Sopenharmony_ci        interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>,
13862306a36Sopenharmony_ci                     <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
13962306a36Sopenharmony_ci        #iommu-cells = <1>;
14062306a36Sopenharmony_ci    };
141