162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/interrupt-controller/arm,gic-v3.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: ARM Generic Interrupt Controller, version 3
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Marc Zyngier <maz@kernel.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  AArch64 SMP cores are often associated with a GICv3, providing Private
1462306a36Sopenharmony_ci  Peripheral Interrupts (PPI), Shared Peripheral Interrupts (SPI),
1562306a36Sopenharmony_ci  Software Generated Interrupts (SGI), and Locality-specific Peripheral
1662306a36Sopenharmony_ci  Interrupts (LPI).
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciallOf:
1962306a36Sopenharmony_ci  - $ref: /schemas/interrupt-controller.yaml#
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciproperties:
2262306a36Sopenharmony_ci  compatible:
2362306a36Sopenharmony_ci    oneOf:
2462306a36Sopenharmony_ci      - items:
2562306a36Sopenharmony_ci          - enum:
2662306a36Sopenharmony_ci              - qcom,msm8996-gic-v3
2762306a36Sopenharmony_ci          - const: arm,gic-v3
2862306a36Sopenharmony_ci      - const: arm,gic-v3
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci  interrupt-controller: true
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci  "#address-cells":
3362306a36Sopenharmony_ci    enum: [ 0, 1, 2 ]
3462306a36Sopenharmony_ci  "#size-cells":
3562306a36Sopenharmony_ci    enum: [ 1, 2 ]
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci  ranges: true
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  "#interrupt-cells":
4062306a36Sopenharmony_ci    description: |
4162306a36Sopenharmony_ci      Specifies the number of cells needed to encode an interrupt source.
4262306a36Sopenharmony_ci      Must be a single cell with a value of at least 3.
4362306a36Sopenharmony_ci      If the system requires describing PPI affinity, then the value must
4462306a36Sopenharmony_ci      be at least 4.
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci      The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
4762306a36Sopenharmony_ci      interrupts, 2 for interrupts in the Extended SPI range, 3 for the
4862306a36Sopenharmony_ci      Extended PPI range. Other values are reserved for future use.
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci      The 2nd cell contains the interrupt number for the interrupt type.
5162306a36Sopenharmony_ci      SPI interrupts are in the range [0-987]. PPI interrupts are in the
5262306a36Sopenharmony_ci      range [0-15]. Extended SPI interrupts are in the range [0-1023].
5362306a36Sopenharmony_ci      Extended PPI interrupts are in the range [0-127].
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci      The 3rd cell is the flags, encoded as follows:
5662306a36Sopenharmony_ci      bits[3:0] trigger type and level flags.
5762306a36Sopenharmony_ci        1 = edge triggered
5862306a36Sopenharmony_ci        4 = level triggered
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci      The 4th cell is a phandle to a node describing a set of CPUs this
6162306a36Sopenharmony_ci      interrupt is affine to. The interrupt must be a PPI, and the node
6262306a36Sopenharmony_ci      pointed must be a subnode of the "ppi-partitions" subnode. For
6362306a36Sopenharmony_ci      interrupt types other than PPI or PPIs that are not partitionned,
6462306a36Sopenharmony_ci      this cell must be zero. See the "ppi-partitions" node description
6562306a36Sopenharmony_ci      below.
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci      Cells 5 and beyond are reserved for future use and must have a value
6862306a36Sopenharmony_ci      of 0 if present.
6962306a36Sopenharmony_ci    enum: [ 3, 4 ]
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  reg:
7262306a36Sopenharmony_ci    description: |
7362306a36Sopenharmony_ci      Specifies base physical address(s) and size of the GIC
7462306a36Sopenharmony_ci      registers, in the following order:
7562306a36Sopenharmony_ci      - GIC Distributor interface (GICD)
7662306a36Sopenharmony_ci      - GIC Redistributors (GICR), one range per redistributor region
7762306a36Sopenharmony_ci      - GIC CPU interface (GICC)
7862306a36Sopenharmony_ci      - GIC Hypervisor interface (GICH)
7962306a36Sopenharmony_ci      - GIC Virtual CPU interface (GICV)
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci      GICC, GICH and GICV are optional, but must be described if the CPUs
8262306a36Sopenharmony_ci      support them. Examples of such CPUs are ARM's implementations of the
8362306a36Sopenharmony_ci      ARMv8.0 architecture such as Cortex-A32, A34, A35, A53, A57, A72 and
8462306a36Sopenharmony_ci      A73 (this list is not exhaustive).
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci    minItems: 2
8762306a36Sopenharmony_ci    maxItems: 4096   # Should be enough?
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci  interrupts:
9062306a36Sopenharmony_ci    description:
9162306a36Sopenharmony_ci      Interrupt source of the VGIC maintenance interrupt.
9262306a36Sopenharmony_ci    maxItems: 1
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci  redistributor-stride:
9562306a36Sopenharmony_ci    description:
9662306a36Sopenharmony_ci      If using padding pages, specifies the stride of consecutive
9762306a36Sopenharmony_ci      redistributors. Must be a multiple of 64kB.
9862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint64
9962306a36Sopenharmony_ci    multipleOf: 0x10000
10062306a36Sopenharmony_ci    exclusiveMinimum: 0
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci  "#redistributor-regions":
10362306a36Sopenharmony_ci    description:
10462306a36Sopenharmony_ci      The number of independent contiguous regions occupied by the
10562306a36Sopenharmony_ci      redistributors. Required if more than one such region is present.
10662306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
10762306a36Sopenharmony_ci    maximum: 4096
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci  dma-noncoherent:
11062306a36Sopenharmony_ci    description:
11162306a36Sopenharmony_ci      Present if the GIC redistributors permit programming shareability
11262306a36Sopenharmony_ci      and cacheability attributes but are connected to a non-coherent
11362306a36Sopenharmony_ci      downstream interconnect.
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci  msi-controller:
11662306a36Sopenharmony_ci    description:
11762306a36Sopenharmony_ci      Only present if the Message Based Interrupt functionality is
11862306a36Sopenharmony_ci      being exposed by the HW, and the mbi-ranges property present.
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci  mbi-ranges:
12162306a36Sopenharmony_ci    description:
12262306a36Sopenharmony_ci      A list of pairs <intid span>, where "intid" is the first SPI of a range
12362306a36Sopenharmony_ci      that can be used an MBI, and "span" the size of that range. Multiple
12462306a36Sopenharmony_ci      ranges can be provided.
12562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-matrix
12662306a36Sopenharmony_ci    items:
12762306a36Sopenharmony_ci      minItems: 2
12862306a36Sopenharmony_ci      maxItems: 2
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci  mbi-alias:
13162306a36Sopenharmony_ci    description:
13262306a36Sopenharmony_ci      Address property. Base address of an alias of the GICD region containing
13362306a36Sopenharmony_ci      only the {SET,CLR}SPI registers to be used if isolation is required,
13462306a36Sopenharmony_ci      and if supported by the HW.
13562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
13662306a36Sopenharmony_ci    items:
13762306a36Sopenharmony_ci      minItems: 1
13862306a36Sopenharmony_ci      maxItems: 2
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci  ppi-partitions:
14162306a36Sopenharmony_ci    type: object
14262306a36Sopenharmony_ci    additionalProperties: false
14362306a36Sopenharmony_ci    description:
14462306a36Sopenharmony_ci      PPI affinity can be expressed as a single "ppi-partitions" node,
14562306a36Sopenharmony_ci      containing a set of sub-nodes.
14662306a36Sopenharmony_ci    patternProperties:
14762306a36Sopenharmony_ci      "^interrupt-partition-[0-9]+$":
14862306a36Sopenharmony_ci        type: object
14962306a36Sopenharmony_ci        additionalProperties: false
15062306a36Sopenharmony_ci        properties:
15162306a36Sopenharmony_ci          affinity:
15262306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/phandle-array
15362306a36Sopenharmony_ci            items:
15462306a36Sopenharmony_ci              maxItems: 1
15562306a36Sopenharmony_ci            description:
15662306a36Sopenharmony_ci              Should be a list of phandles to CPU nodes (as described in
15762306a36Sopenharmony_ci              Documentation/devicetree/bindings/arm/cpus.yaml).
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci        required:
16062306a36Sopenharmony_ci          - affinity
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci  clocks:
16362306a36Sopenharmony_ci    maxItems: 1
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci  clock-names:
16662306a36Sopenharmony_ci    items:
16762306a36Sopenharmony_ci      - const: aclk
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci  power-domains:
17062306a36Sopenharmony_ci    maxItems: 1
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci  resets:
17362306a36Sopenharmony_ci    maxItems: 1
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci  mediatek,broken-save-restore-fw:
17662306a36Sopenharmony_ci    type: boolean
17762306a36Sopenharmony_ci    description:
17862306a36Sopenharmony_ci      Asserts that the firmware on this device has issues saving and restoring
17962306a36Sopenharmony_ci      GICR registers when the GIC redistributors are powered off.
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_cidependencies:
18262306a36Sopenharmony_ci  mbi-ranges: [ msi-controller ]
18362306a36Sopenharmony_ci  msi-controller: [ mbi-ranges ]
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_cirequired:
18662306a36Sopenharmony_ci  - compatible
18762306a36Sopenharmony_ci  - reg
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_cipatternProperties:
19062306a36Sopenharmony_ci  "^gic-its@": false
19162306a36Sopenharmony_ci  "^interrupt-controller@[0-9a-f]+$": false
19262306a36Sopenharmony_ci  # msi-controller is preferred, but allow other names
19362306a36Sopenharmony_ci  "^(msi-controller|gic-its|interrupt-controller)@[0-9a-f]+$":
19462306a36Sopenharmony_ci    type: object
19562306a36Sopenharmony_ci    description:
19662306a36Sopenharmony_ci      GICv3 has one or more Interrupt Translation Services (ITS) that are
19762306a36Sopenharmony_ci      used to route Message Signalled Interrupts (MSI) to the CPUs.
19862306a36Sopenharmony_ci    properties:
19962306a36Sopenharmony_ci      compatible:
20062306a36Sopenharmony_ci        const: arm,gic-v3-its
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci      dma-noncoherent:
20362306a36Sopenharmony_ci        description:
20462306a36Sopenharmony_ci          Present if the GIC ITS permits programming shareability and
20562306a36Sopenharmony_ci          cacheability attributes but is connected to a non-coherent
20662306a36Sopenharmony_ci          downstream interconnect.
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci      msi-controller: true
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci      "#msi-cells":
21162306a36Sopenharmony_ci        description:
21262306a36Sopenharmony_ci          The single msi-cell is the DeviceID of the device which will generate
21362306a36Sopenharmony_ci          the MSI.
21462306a36Sopenharmony_ci        const: 1
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci      reg:
21762306a36Sopenharmony_ci        description:
21862306a36Sopenharmony_ci          Specifies the base physical address and size of the ITS registers.
21962306a36Sopenharmony_ci        maxItems: 1
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci      socionext,synquacer-pre-its:
22262306a36Sopenharmony_ci        description:
22362306a36Sopenharmony_ci          (u32, u32) tuple describing the untranslated
22462306a36Sopenharmony_ci          address and size of the pre-ITS window.
22562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32-array
22662306a36Sopenharmony_ci        items:
22762306a36Sopenharmony_ci          minItems: 2
22862306a36Sopenharmony_ci          maxItems: 2
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci    required:
23162306a36Sopenharmony_ci      - compatible
23262306a36Sopenharmony_ci      - msi-controller
23362306a36Sopenharmony_ci      - "#msi-cells"
23462306a36Sopenharmony_ci      - reg
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci    additionalProperties: false
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ciadditionalProperties: false
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciexamples:
24162306a36Sopenharmony_ci  - |
24262306a36Sopenharmony_ci    gic: interrupt-controller@2cf00000 {
24362306a36Sopenharmony_ci      compatible = "arm,gic-v3";
24462306a36Sopenharmony_ci      #interrupt-cells = <3>;
24562306a36Sopenharmony_ci      #address-cells = <1>;
24662306a36Sopenharmony_ci      #size-cells = <1>;
24762306a36Sopenharmony_ci      ranges;
24862306a36Sopenharmony_ci      interrupt-controller;
24962306a36Sopenharmony_ci      reg = <0x2f000000 0x10000>,  // GICD
25062306a36Sopenharmony_ci            <0x2f100000 0x200000>,  // GICR
25162306a36Sopenharmony_ci            <0x2c000000 0x2000>,  // GICC
25262306a36Sopenharmony_ci            <0x2c010000 0x2000>,  // GICH
25362306a36Sopenharmony_ci            <0x2c020000 0x2000>;  // GICV
25462306a36Sopenharmony_ci      interrupts = <1 9 4>;
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci      msi-controller;
25762306a36Sopenharmony_ci      mbi-ranges = <256 128>;
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ci      msi-controller@2c200000 {
26062306a36Sopenharmony_ci        compatible = "arm,gic-v3-its";
26162306a36Sopenharmony_ci        msi-controller;
26262306a36Sopenharmony_ci        #msi-cells = <1>;
26362306a36Sopenharmony_ci        reg = <0x2c200000 0x20000>;
26462306a36Sopenharmony_ci      };
26562306a36Sopenharmony_ci    };
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci  - |
26862306a36Sopenharmony_ci    interrupt-controller@2c010000 {
26962306a36Sopenharmony_ci      compatible = "arm,gic-v3";
27062306a36Sopenharmony_ci      #interrupt-cells = <4>;
27162306a36Sopenharmony_ci      #address-cells = <1>;
27262306a36Sopenharmony_ci      #size-cells = <1>;
27362306a36Sopenharmony_ci      ranges;
27462306a36Sopenharmony_ci      interrupt-controller;
27562306a36Sopenharmony_ci      redistributor-stride = <0x0 0x40000>;  // 256kB stride
27662306a36Sopenharmony_ci      #redistributor-regions = <2>;
27762306a36Sopenharmony_ci      reg = <0x2c010000 0x10000>,  // GICD
27862306a36Sopenharmony_ci            <0x2d000000 0x800000>,  // GICR 1: CPUs 0-31
27962306a36Sopenharmony_ci            <0x2e000000 0x800000>,  // GICR 2: CPUs 32-63
28062306a36Sopenharmony_ci            <0x2c040000 0x2000>,  // GICC
28162306a36Sopenharmony_ci            <0x2c060000 0x2000>,  // GICH
28262306a36Sopenharmony_ci            <0x2c080000 0x2000>;  // GICV
28362306a36Sopenharmony_ci      interrupts = <1 9 4 0>;
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci      msi-controller@2c200000 {
28662306a36Sopenharmony_ci        compatible = "arm,gic-v3-its";
28762306a36Sopenharmony_ci        msi-controller;
28862306a36Sopenharmony_ci        #msi-cells = <1>;
28962306a36Sopenharmony_ci        reg = <0x2c200000 0x20000>;
29062306a36Sopenharmony_ci      };
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci      msi-controller@2c400000 {
29362306a36Sopenharmony_ci        compatible = "arm,gic-v3-its";
29462306a36Sopenharmony_ci        msi-controller;
29562306a36Sopenharmony_ci        #msi-cells = <1>;
29662306a36Sopenharmony_ci        reg = <0x2c400000 0x20000>;
29762306a36Sopenharmony_ci      };
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci      ppi-partitions {
30062306a36Sopenharmony_ci        part0: interrupt-partition-0 {
30162306a36Sopenharmony_ci          affinity = <&cpu0>, <&cpu2>;
30262306a36Sopenharmony_ci        };
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci        part1: interrupt-partition-1 {
30562306a36Sopenharmony_ci          affinity = <&cpu1>, <&cpu3>;
30662306a36Sopenharmony_ci        };
30762306a36Sopenharmony_ci      };
30862306a36Sopenharmony_ci    };
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci    device@0 {
31262306a36Sopenharmony_ci      reg = <0 4>;
31362306a36Sopenharmony_ci      interrupts = <1 1 4 &part0>;
31462306a36Sopenharmony_ci    };
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci...
317