xref: /linux/Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
166ed144fSRob Herring# SPDX-License-Identifier: GPL-2.0
266ed144fSRob Herring%YAML 1.2
366ed144fSRob Herring---
466ed144fSRob Herring$id: http://devicetree.org/schemas/interrupt-controller/arm,gic.yaml#
566ed144fSRob Herring$schema: http://devicetree.org/meta-schemas/core.yaml#
666ed144fSRob Herring
766ed144fSRob Herringtitle: ARM Generic Interrupt Controller v1 and v2
866ed144fSRob Herring
966ed144fSRob Herringmaintainers:
1066ed144fSRob Herring  - Marc Zyngier <marc.zyngier@arm.com>
1166ed144fSRob Herring
1266ed144fSRob Herringdescription: |+
1366ed144fSRob Herring  ARM SMP cores are often associated with a GIC, providing per processor
1466ed144fSRob Herring  interrupts (PPI), shared processor interrupts (SPI) and software
1566ed144fSRob Herring  generated interrupts (SGI).
1666ed144fSRob Herring
1766ed144fSRob Herring  Primary GIC is attached directly to the CPU and typically has PPIs and SGIs.
1866ed144fSRob Herring  Secondary GICs are cascaded into the upward interrupt controller and do not
1966ed144fSRob Herring  have PPIs or SGIs.
2066ed144fSRob Herring
2166ed144fSRob HerringallOf:
2266ed144fSRob Herring  - $ref: /schemas/interrupt-controller.yaml#
2366ed144fSRob Herring
2466ed144fSRob Herringproperties:
2566ed144fSRob Herring  compatible:
2666ed144fSRob Herring    oneOf:
2766ed144fSRob Herring      - items:
2866ed144fSRob Herring          - enum:
2966ed144fSRob Herring              - arm,arm11mp-gic
3066ed144fSRob Herring              - arm,cortex-a15-gic
3166ed144fSRob Herring              - arm,cortex-a7-gic
3266ed144fSRob Herring              - arm,cortex-a5-gic
3366ed144fSRob Herring              - arm,cortex-a9-gic
3466ed144fSRob Herring              - arm,eb11mp-gic
3566ed144fSRob Herring              - arm,gic-400
3666ed144fSRob Herring              - arm,pl390
3766ed144fSRob Herring              - arm,tc11mp-gic
3866ed144fSRob Herring              - qcom,msm-8660-qgic
3966ed144fSRob Herring              - qcom,msm-qgic2
4066ed144fSRob Herring
4166ed144fSRob Herring      - items:
4261efb56eSAndre Przywara          - const: arm,gic-400
4361efb56eSAndre Przywara          - enum:
4461efb56eSAndre Przywara              - arm,cortex-a15-gic
4561efb56eSAndre Przywara              - arm,cortex-a7-gic
4661efb56eSAndre Przywara
4761efb56eSAndre Przywara      - items:
4866ed144fSRob Herring          - const: arm,arm1176jzf-devchip-gic
4966ed144fSRob Herring          - const: arm,arm11mp-gic
5066ed144fSRob Herring
5166ed144fSRob Herring      - items:
5266ed144fSRob Herring          - const: brcm,brahma-b15-gic
5366ed144fSRob Herring          - const: arm,cortex-a15-gic
5466ed144fSRob Herring
55d806cdaeSSameer Pujar      - oneOf:
56d806cdaeSSameer Pujar          - const: nvidia,tegra210-agic
57d806cdaeSSameer Pujar          - items:
58d806cdaeSSameer Pujar              - enum:
59d806cdaeSSameer Pujar                  - nvidia,tegra186-agic
60d806cdaeSSameer Pujar                  - nvidia,tegra194-agic
61fed44d6cSSameer Pujar                  - nvidia,tegra234-agic
62d806cdaeSSameer Pujar              - const: nvidia,tegra210-agic
63d806cdaeSSameer Pujar
6466ed144fSRob Herring  interrupt-controller: true
6566ed144fSRob Herring
6666ed144fSRob Herring  "#address-cells":
67*f1bd8b2eSJean-Philippe Brucker    enum: [ 0, 1, 2 ]
6866ed144fSRob Herring  "#size-cells":
69*f1bd8b2eSJean-Philippe Brucker    enum: [ 1, 2 ]
7066ed144fSRob Herring
7166ed144fSRob Herring  "#interrupt-cells":
7266ed144fSRob Herring    const: 3
7366ed144fSRob Herring    description: |
7466ed144fSRob Herring      The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
7566ed144fSRob Herring      interrupts.
7666ed144fSRob Herring
7766ed144fSRob Herring      The 2nd cell contains the interrupt number for the interrupt type.
7866ed144fSRob Herring      SPI interrupts are in the range [0-987].  PPI interrupts are in the
7966ed144fSRob Herring      range [0-15].
8066ed144fSRob Herring
8166ed144fSRob Herring      The 3rd cell is the flags, encoded as follows:
8266ed144fSRob Herring        bits[3:0] trigger type and level flags.
8366ed144fSRob Herring          1 = low-to-high edge triggered
8466ed144fSRob Herring          2 = high-to-low edge triggered (invalid for SPIs)
8566ed144fSRob Herring          4 = active high level-sensitive
8666ed144fSRob Herring          8 = active low level-sensitive (invalid for SPIs).
8766ed144fSRob Herring        bits[15:8] PPI interrupt cpu mask.  Each bit corresponds to each of
8866ed144fSRob Herring        the 8 possible cpus attached to the GIC.  A bit set to '1' indicated
8966ed144fSRob Herring        the interrupt is wired to that CPU.  Only valid for PPI interrupts.
9066ed144fSRob Herring        Also note that the configurability of PPI interrupts is IMPLEMENTATION
9166ed144fSRob Herring        DEFINED and as such not guaranteed to be present (most SoC available
9266ed144fSRob Herring        in 2014 seem to ignore the setting of this flag and use the hardware
9366ed144fSRob Herring        default value).
9466ed144fSRob Herring
9566ed144fSRob Herring  reg:
9666ed144fSRob Herring    description: |
9766ed144fSRob Herring      Specifies base physical address(s) and size of the GIC registers. The
9866ed144fSRob Herring      first region is the GIC distributor register base and size. The 2nd region
9966ed144fSRob Herring      is the GIC cpu interface register base and size.
10066ed144fSRob Herring
10166ed144fSRob Herring      For GICv2 with virtualization extensions, additional regions are
10266ed144fSRob Herring      required for specifying the base physical address and size of the VGIC
10366ed144fSRob Herring      registers. The first additional region is the GIC virtual interface
10466ed144fSRob Herring      control register base and size. The 2nd additional region is the GIC
10566ed144fSRob Herring      virtual cpu interface register base and size.
10666ed144fSRob Herring    minItems: 2
10766ed144fSRob Herring    maxItems: 4
10866ed144fSRob Herring
1098d665693SRob Herring  ranges: true
1108d665693SRob Herring
11166ed144fSRob Herring  interrupts:
11266ed144fSRob Herring    description: Interrupt source of the parent interrupt controller on
11366ed144fSRob Herring      secondary GICs, or VGIC maintenance interrupt on primary GIC (see
11466ed144fSRob Herring      below).
11566ed144fSRob Herring    maxItems: 1
11666ed144fSRob Herring
11766ed144fSRob Herring  cpu-offset:
11866ed144fSRob Herring    description: per-cpu offset within the distributor and cpu interface
11966ed144fSRob Herring      regions, used when the GIC doesn't have banked registers. The offset
12066ed144fSRob Herring      is cpu-offset * cpu-nr.
12166ed144fSRob Herring    $ref: /schemas/types.yaml#/definitions/uint32
12266ed144fSRob Herring
12366ed144fSRob Herring  clocks:
12466ed144fSRob Herring    minItems: 1
12566ed144fSRob Herring    maxItems: 2
12666ed144fSRob Herring
12766ed144fSRob Herring  clock-names:
12866ed144fSRob Herring    description: List of names for the GIC clock input(s). Valid clock names
12966ed144fSRob Herring      depend on the GIC variant.
13066ed144fSRob Herring    oneOf:
13166ed144fSRob Herring      - const: ic_clk # for "arm,arm11mp-gic"
13266ed144fSRob Herring      - const: PERIPHCLKEN # for "arm,cortex-a15-gic"
13366ed144fSRob Herring      - items: # for "arm,cortex-a9-gic"
13466ed144fSRob Herring          - const: PERIPHCLK
13566ed144fSRob Herring          - const: PERIPHCLKEN
13666ed144fSRob Herring      - const: clk  # for "arm,gic-400" and "nvidia,tegra210"
13766ed144fSRob Herring      - const: gclk # for "arm,pl390"
13866ed144fSRob Herring
13966ed144fSRob Herring  power-domains:
14066ed144fSRob Herring    maxItems: 1
14166ed144fSRob Herring
142c95d5e13SGeert Uytterhoeven  resets:
143c95d5e13SGeert Uytterhoeven    maxItems: 1
144c95d5e13SGeert Uytterhoeven
14566ed144fSRob Herringrequired:
14666ed144fSRob Herring  - compatible
14766ed144fSRob Herring  - reg
14866ed144fSRob Herring
14966ed144fSRob HerringpatternProperties:
15066ed144fSRob Herring  "^v2m@[0-9a-f]+$":
15199838f01SRob Herring    type: object
15266ed144fSRob Herring    description: |
15366ed144fSRob Herring      * GICv2m extension for MSI/MSI-x support (Optional)
15466ed144fSRob Herring
15566ed144fSRob Herring      Certain revisions of GIC-400 supports MSI/MSI-x via V2M register frame(s).
15666ed144fSRob Herring      This is enabled by specifying v2m sub-node(s).
15766ed144fSRob Herring
15866ed144fSRob Herring    properties:
15966ed144fSRob Herring      compatible:
16066ed144fSRob Herring        const: arm,gic-v2m-frame
16166ed144fSRob Herring
16266ed144fSRob Herring      msi-controller: true
16366ed144fSRob Herring
16466ed144fSRob Herring      reg:
16566ed144fSRob Herring        maxItems: 1
16666ed144fSRob Herring        description: GICv2m MSI interface register base and size
16766ed144fSRob Herring
16866ed144fSRob Herring      arm,msi-base-spi:
16966ed144fSRob Herring        description: When the MSI_TYPER register contains an incorrect value,
17066ed144fSRob Herring          this property should contain the SPI base of the MSI frame, overriding
17166ed144fSRob Herring          the HW value.
17266ed144fSRob Herring        $ref: /schemas/types.yaml#/definitions/uint32
17366ed144fSRob Herring
17466ed144fSRob Herring      arm,msi-num-spis:
17566ed144fSRob Herring        description: When the MSI_TYPER register contains an incorrect value,
17666ed144fSRob Herring          this property should contain the number of SPIs assigned to the
17766ed144fSRob Herring          frame, overriding the HW value.
17866ed144fSRob Herring        $ref: /schemas/types.yaml#/definitions/uint32
17966ed144fSRob Herring
18066ed144fSRob Herring    required:
18166ed144fSRob Herring      - compatible
18266ed144fSRob Herring      - msi-controller
18366ed144fSRob Herring      - reg
18466ed144fSRob Herring
18566ed144fSRob Herring    additionalProperties: false
18666ed144fSRob Herring
18766ed144fSRob HerringadditionalProperties: false
18866ed144fSRob Herring
18966ed144fSRob Herringexamples:
19066ed144fSRob Herring  - |
19166ed144fSRob Herring    // GICv1
19266ed144fSRob Herring    intc: interrupt-controller@fff11000 {
19366ed144fSRob Herring      compatible = "arm,cortex-a9-gic";
19466ed144fSRob Herring      #interrupt-cells = <3>;
19566ed144fSRob Herring      #address-cells = <1>;
19666ed144fSRob Herring      interrupt-controller;
19766ed144fSRob Herring      reg = <0xfff11000 0x1000>,
19866ed144fSRob Herring            <0xfff10100 0x100>;
19966ed144fSRob Herring    };
20066ed144fSRob Herring
20166ed144fSRob Herring  - |
20266ed144fSRob Herring    // GICv2
20366ed144fSRob Herring    interrupt-controller@2c001000 {
20466ed144fSRob Herring      compatible = "arm,cortex-a15-gic";
20566ed144fSRob Herring      #interrupt-cells = <3>;
20666ed144fSRob Herring      interrupt-controller;
20766ed144fSRob Herring      reg = <0x2c001000 0x1000>,
20866ed144fSRob Herring            <0x2c002000 0x2000>,
20966ed144fSRob Herring            <0x2c004000 0x2000>,
21066ed144fSRob Herring            <0x2c006000 0x2000>;
21166ed144fSRob Herring      interrupts = <1 9 0xf04>;
21266ed144fSRob Herring    };
21366ed144fSRob Herring
21466ed144fSRob Herring  - |
21566ed144fSRob Herring    // GICv2m extension for MSI/MSI-x support
21666ed144fSRob Herring    interrupt-controller@e1101000 {
21766ed144fSRob Herring      compatible = "arm,gic-400";
21866ed144fSRob Herring      #interrupt-cells = <3>;
2198d665693SRob Herring      #address-cells = <1>;
2208d665693SRob Herring      #size-cells = <1>;
22166ed144fSRob Herring      interrupt-controller;
22266ed144fSRob Herring      interrupts = <1 8 0xf04>;
2238d665693SRob Herring      ranges = <0 0xe1100000 0x100000>;
2248d665693SRob Herring      reg = <0xe1110000 0x01000>,
2258d665693SRob Herring            <0xe112f000 0x02000>,
2268d665693SRob Herring            <0xe1140000 0x10000>,
2278d665693SRob Herring            <0xe1160000 0x10000>;
22866ed144fSRob Herring
2298d665693SRob Herring      v2m0: v2m@80000 {
23066ed144fSRob Herring        compatible = "arm,gic-v2m-frame";
23166ed144fSRob Herring        msi-controller;
2328d665693SRob Herring        reg = <0x80000 0x1000>;
23366ed144fSRob Herring      };
23466ed144fSRob Herring
23566ed144fSRob Herring      //...
23666ed144fSRob Herring
2378d665693SRob Herring      v2mN: v2m@90000 {
23866ed144fSRob Herring        compatible = "arm,gic-v2m-frame";
23966ed144fSRob Herring        msi-controller;
2408d665693SRob Herring        reg = <0x90000 0x1000>;
24166ed144fSRob Herring      };
24266ed144fSRob Herring    };
24366ed144fSRob Herring...
244