18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/interrupt-controller/arm,gic.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: ARM Generic Interrupt Controller v1 and v2
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Marc Zyngier <marc.zyngier@arm.com>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cidescription: |+
138c2ecf20Sopenharmony_ci  ARM SMP cores are often associated with a GIC, providing per processor
148c2ecf20Sopenharmony_ci  interrupts (PPI), shared processor interrupts (SPI) and software
158c2ecf20Sopenharmony_ci  generated interrupts (SGI).
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci  Primary GIC is attached directly to the CPU and typically has PPIs and SGIs.
188c2ecf20Sopenharmony_ci  Secondary GICs are cascaded into the upward interrupt controller and do not
198c2ecf20Sopenharmony_ci  have PPIs or SGIs.
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciallOf:
228c2ecf20Sopenharmony_ci  - $ref: /schemas/interrupt-controller.yaml#
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ciproperties:
258c2ecf20Sopenharmony_ci  compatible:
268c2ecf20Sopenharmony_ci    oneOf:
278c2ecf20Sopenharmony_ci      - items:
288c2ecf20Sopenharmony_ci          - enum:
298c2ecf20Sopenharmony_ci              - arm,arm11mp-gic
308c2ecf20Sopenharmony_ci              - arm,cortex-a15-gic
318c2ecf20Sopenharmony_ci              - arm,cortex-a7-gic
328c2ecf20Sopenharmony_ci              - arm,cortex-a5-gic
338c2ecf20Sopenharmony_ci              - arm,cortex-a9-gic
348c2ecf20Sopenharmony_ci              - arm,eb11mp-gic
358c2ecf20Sopenharmony_ci              - arm,gic-400
368c2ecf20Sopenharmony_ci              - arm,pl390
378c2ecf20Sopenharmony_ci              - arm,tc11mp-gic
388c2ecf20Sopenharmony_ci              - nvidia,tegra210-agic
398c2ecf20Sopenharmony_ci              - qcom,msm-8660-qgic
408c2ecf20Sopenharmony_ci              - qcom,msm-qgic2
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci      - items:
438c2ecf20Sopenharmony_ci          - const: arm,gic-400
448c2ecf20Sopenharmony_ci          - enum:
458c2ecf20Sopenharmony_ci              - arm,cortex-a15-gic
468c2ecf20Sopenharmony_ci              - arm,cortex-a7-gic
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci      - items:
498c2ecf20Sopenharmony_ci          - const: arm,arm1176jzf-devchip-gic
508c2ecf20Sopenharmony_ci          - const: arm,arm11mp-gic
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci      - items:
538c2ecf20Sopenharmony_ci          - const: brcm,brahma-b15-gic
548c2ecf20Sopenharmony_ci          - const: arm,cortex-a15-gic
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci  interrupt-controller: true
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci  "#address-cells":
598c2ecf20Sopenharmony_ci    enum: [ 0, 1 ]
608c2ecf20Sopenharmony_ci  "#size-cells":
618c2ecf20Sopenharmony_ci    const: 1
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci  "#interrupt-cells":
648c2ecf20Sopenharmony_ci    const: 3
658c2ecf20Sopenharmony_ci    description: |
668c2ecf20Sopenharmony_ci      The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
678c2ecf20Sopenharmony_ci      interrupts.
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci      The 2nd cell contains the interrupt number for the interrupt type.
708c2ecf20Sopenharmony_ci      SPI interrupts are in the range [0-987].  PPI interrupts are in the
718c2ecf20Sopenharmony_ci      range [0-15].
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci      The 3rd cell is the flags, encoded as follows:
748c2ecf20Sopenharmony_ci        bits[3:0] trigger type and level flags.
758c2ecf20Sopenharmony_ci          1 = low-to-high edge triggered
768c2ecf20Sopenharmony_ci          2 = high-to-low edge triggered (invalid for SPIs)
778c2ecf20Sopenharmony_ci          4 = active high level-sensitive
788c2ecf20Sopenharmony_ci          8 = active low level-sensitive (invalid for SPIs).
798c2ecf20Sopenharmony_ci        bits[15:8] PPI interrupt cpu mask.  Each bit corresponds to each of
808c2ecf20Sopenharmony_ci        the 8 possible cpus attached to the GIC.  A bit set to '1' indicated
818c2ecf20Sopenharmony_ci        the interrupt is wired to that CPU.  Only valid for PPI interrupts.
828c2ecf20Sopenharmony_ci        Also note that the configurability of PPI interrupts is IMPLEMENTATION
838c2ecf20Sopenharmony_ci        DEFINED and as such not guaranteed to be present (most SoC available
848c2ecf20Sopenharmony_ci        in 2014 seem to ignore the setting of this flag and use the hardware
858c2ecf20Sopenharmony_ci        default value).
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci  reg:
888c2ecf20Sopenharmony_ci    description: |
898c2ecf20Sopenharmony_ci      Specifies base physical address(s) and size of the GIC registers. The
908c2ecf20Sopenharmony_ci      first region is the GIC distributor register base and size. The 2nd region
918c2ecf20Sopenharmony_ci      is the GIC cpu interface register base and size.
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci      For GICv2 with virtualization extensions, additional regions are
948c2ecf20Sopenharmony_ci      required for specifying the base physical address and size of the VGIC
958c2ecf20Sopenharmony_ci      registers. The first additional region is the GIC virtual interface
968c2ecf20Sopenharmony_ci      control register base and size. The 2nd additional region is the GIC
978c2ecf20Sopenharmony_ci      virtual cpu interface register base and size.
988c2ecf20Sopenharmony_ci    minItems: 2
998c2ecf20Sopenharmony_ci    maxItems: 4
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci  ranges: true
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ci  interrupts:
1048c2ecf20Sopenharmony_ci    description: Interrupt source of the parent interrupt controller on
1058c2ecf20Sopenharmony_ci      secondary GICs, or VGIC maintenance interrupt on primary GIC (see
1068c2ecf20Sopenharmony_ci      below).
1078c2ecf20Sopenharmony_ci    maxItems: 1
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci  cpu-offset:
1108c2ecf20Sopenharmony_ci    description: per-cpu offset within the distributor and cpu interface
1118c2ecf20Sopenharmony_ci      regions, used when the GIC doesn't have banked registers. The offset
1128c2ecf20Sopenharmony_ci      is cpu-offset * cpu-nr.
1138c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci  clocks:
1168c2ecf20Sopenharmony_ci    minItems: 1
1178c2ecf20Sopenharmony_ci    maxItems: 2
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci  clock-names:
1208c2ecf20Sopenharmony_ci    description: List of names for the GIC clock input(s). Valid clock names
1218c2ecf20Sopenharmony_ci      depend on the GIC variant.
1228c2ecf20Sopenharmony_ci    oneOf:
1238c2ecf20Sopenharmony_ci      - const: ic_clk # for "arm,arm11mp-gic"
1248c2ecf20Sopenharmony_ci      - const: PERIPHCLKEN # for "arm,cortex-a15-gic"
1258c2ecf20Sopenharmony_ci      - items: # for "arm,cortex-a9-gic"
1268c2ecf20Sopenharmony_ci          - const: PERIPHCLK
1278c2ecf20Sopenharmony_ci          - const: PERIPHCLKEN
1288c2ecf20Sopenharmony_ci      - const: clk # for "arm,gic-400" and "nvidia,tegra210"
1298c2ecf20Sopenharmony_ci      - const: gclk #for "arm,pl390"
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_ci  power-domains:
1328c2ecf20Sopenharmony_ci    maxItems: 1
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci  resets:
1358c2ecf20Sopenharmony_ci    maxItems: 1
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_cirequired:
1388c2ecf20Sopenharmony_ci  - compatible
1398c2ecf20Sopenharmony_ci  - reg
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_cipatternProperties:
1428c2ecf20Sopenharmony_ci  "^v2m@[0-9a-f]+$":
1438c2ecf20Sopenharmony_ci    type: object
1448c2ecf20Sopenharmony_ci    description: |
1458c2ecf20Sopenharmony_ci      * GICv2m extension for MSI/MSI-x support (Optional)
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ci      Certain revisions of GIC-400 supports MSI/MSI-x via V2M register frame(s).
1488c2ecf20Sopenharmony_ci      This is enabled by specifying v2m sub-node(s).
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ci    properties:
1518c2ecf20Sopenharmony_ci      compatible:
1528c2ecf20Sopenharmony_ci        const: arm,gic-v2m-frame
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ci      msi-controller: true
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ci      reg:
1578c2ecf20Sopenharmony_ci        maxItems: 1
1588c2ecf20Sopenharmony_ci        description: GICv2m MSI interface register base and size
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci      arm,msi-base-spi:
1618c2ecf20Sopenharmony_ci        description: When the MSI_TYPER register contains an incorrect value,
1628c2ecf20Sopenharmony_ci          this property should contain the SPI base of the MSI frame, overriding
1638c2ecf20Sopenharmony_ci          the HW value.
1648c2ecf20Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ci      arm,msi-num-spis:
1678c2ecf20Sopenharmony_ci        description: When the MSI_TYPER register contains an incorrect value,
1688c2ecf20Sopenharmony_ci          this property should contain the number of SPIs assigned to the
1698c2ecf20Sopenharmony_ci          frame, overriding the HW value.
1708c2ecf20Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci    required:
1738c2ecf20Sopenharmony_ci      - compatible
1748c2ecf20Sopenharmony_ci      - msi-controller
1758c2ecf20Sopenharmony_ci      - reg
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci    additionalProperties: false
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ciadditionalProperties: false
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ciexamples:
1828c2ecf20Sopenharmony_ci  - |
1838c2ecf20Sopenharmony_ci    // GICv1
1848c2ecf20Sopenharmony_ci    intc: interrupt-controller@fff11000 {
1858c2ecf20Sopenharmony_ci      compatible = "arm,cortex-a9-gic";
1868c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
1878c2ecf20Sopenharmony_ci      #address-cells = <1>;
1888c2ecf20Sopenharmony_ci      interrupt-controller;
1898c2ecf20Sopenharmony_ci      reg = <0xfff11000 0x1000>,
1908c2ecf20Sopenharmony_ci            <0xfff10100 0x100>;
1918c2ecf20Sopenharmony_ci    };
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_ci  - |
1948c2ecf20Sopenharmony_ci    // GICv2
1958c2ecf20Sopenharmony_ci    interrupt-controller@2c001000 {
1968c2ecf20Sopenharmony_ci      compatible = "arm,cortex-a15-gic";
1978c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
1988c2ecf20Sopenharmony_ci      interrupt-controller;
1998c2ecf20Sopenharmony_ci      reg = <0x2c001000 0x1000>,
2008c2ecf20Sopenharmony_ci            <0x2c002000 0x2000>,
2018c2ecf20Sopenharmony_ci            <0x2c004000 0x2000>,
2028c2ecf20Sopenharmony_ci            <0x2c006000 0x2000>;
2038c2ecf20Sopenharmony_ci      interrupts = <1 9 0xf04>;
2048c2ecf20Sopenharmony_ci    };
2058c2ecf20Sopenharmony_ci
2068c2ecf20Sopenharmony_ci  - |
2078c2ecf20Sopenharmony_ci    // GICv2m extension for MSI/MSI-x support
2088c2ecf20Sopenharmony_ci    interrupt-controller@e1101000 {
2098c2ecf20Sopenharmony_ci      compatible = "arm,gic-400";
2108c2ecf20Sopenharmony_ci      #interrupt-cells = <3>;
2118c2ecf20Sopenharmony_ci      #address-cells = <1>;
2128c2ecf20Sopenharmony_ci      #size-cells = <1>;
2138c2ecf20Sopenharmony_ci      interrupt-controller;
2148c2ecf20Sopenharmony_ci      interrupts = <1 8 0xf04>;
2158c2ecf20Sopenharmony_ci      ranges = <0 0xe1100000 0x100000>;
2168c2ecf20Sopenharmony_ci      reg = <0xe1110000 0x01000>,
2178c2ecf20Sopenharmony_ci            <0xe112f000 0x02000>,
2188c2ecf20Sopenharmony_ci            <0xe1140000 0x10000>,
2198c2ecf20Sopenharmony_ci            <0xe1160000 0x10000>;
2208c2ecf20Sopenharmony_ci
2218c2ecf20Sopenharmony_ci      v2m0: v2m@80000 {
2228c2ecf20Sopenharmony_ci        compatible = "arm,gic-v2m-frame";
2238c2ecf20Sopenharmony_ci        msi-controller;
2248c2ecf20Sopenharmony_ci        reg = <0x80000 0x1000>;
2258c2ecf20Sopenharmony_ci      };
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci      //...
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ci      v2mN: v2m@90000 {
2308c2ecf20Sopenharmony_ci        compatible = "arm,gic-v2m-frame";
2318c2ecf20Sopenharmony_ci        msi-controller;
2328c2ecf20Sopenharmony_ci        reg = <0x90000 0x1000>;
2338c2ecf20Sopenharmony_ci      };
2348c2ecf20Sopenharmony_ci    };
2358c2ecf20Sopenharmony_ci...
236