123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- * ARM Generic Interrupt Controller, version 3
- AArch64 SMP cores are often associated with a GICv3, providing Private
- Peripheral Interrupts (PPI), Shared Peripheral Interrupts (SPI),
- Software Generated Interrupts (SGI), and Locality-specific Peripheral
- Interrupts (LPI).
- Main node required properties:
- - compatible : should at least contain "arm,gic-v3".
- - interrupt-controller : Identifies the node as an interrupt controller
- - #interrupt-cells : Specifies the number of cells needed to encode an
- interrupt source. Must be a single cell with a value of at least 3.
- The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
- interrupts. Other values are reserved for future use.
- The 2nd cell contains the interrupt number for the interrupt type.
- SPI interrupts are in the range [0-987]. PPI interrupts are in the
- range [0-15].
- The 3rd cell is the flags, encoded as follows:
- bits[3:0] trigger type and level flags.
- 1 = edge triggered
- 4 = level triggered
- Cells 4 and beyond are reserved for future use. When the 1st cell
- has a value of 0 or 1, cells 4 and beyond act as padding, and may be
- ignored. It is recommended that padding cells have a value of 0.
- - reg : Specifies base physical address(s) and size of the GIC
- registers, in the following order:
- - GIC Distributor interface (GICD)
- - GIC Redistributors (GICR), one range per redistributor region
- - GIC CPU interface (GICC)
- - GIC Hypervisor interface (GICH)
- - GIC Virtual CPU interface (GICV)
- GICC, GICH and GICV are optional.
- - interrupts : Interrupt source of the VGIC maintenance interrupt.
- Optional
- - redistributor-stride : If using padding pages, specifies the stride
- of consecutive redistributors. Must be a multiple of 64kB.
- - #redistributor-regions: The number of independent contiguous regions
- occupied by the redistributors. Required if more than one such
- region is present.
- Sub-nodes:
- GICv3 has one or more Interrupt Translation Services (ITS) that are
- used to route Message Signalled Interrupts (MSI) to the CPUs.
- These nodes must have the following properties:
- - compatible : Should at least contain "arm,gic-v3-its".
- - msi-controller : Boolean property. Identifies the node as an MSI controller
- - reg: Specifies the base physical address and size of the ITS
- registers.
- The main GIC node must contain the appropriate #address-cells,
- #size-cells and ranges properties for the reg property of all ITS
- nodes.
- Examples:
- gic: interrupt-controller@2cf00000 {
- compatible = "arm,gic-v3";
- #interrupt-cells = <3>;
- #address-cells = <2>;
- #size-cells = <2>;
- ranges;
- interrupt-controller;
- reg = <0x0 0x2f000000 0 0x10000>, // GICD
- <0x0 0x2f100000 0 0x200000>, // GICR
- <0x0 0x2c000000 0 0x2000>, // GICC
- <0x0 0x2c010000 0 0x2000>, // GICH
- <0x0 0x2c020000 0 0x2000>; // GICV
- interrupts = <1 9 4>;
- gic-its@2c200000 {
- compatible = "arm,gic-v3-its";
- msi-controller;
- reg = <0x0 0x2c200000 0 0x200000>;
- };
- };
- gic: interrupt-controller@2c010000 {
- compatible = "arm,gic-v3";
- #interrupt-cells = <3>;
- #address-cells = <2>;
- #size-cells = <2>;
- ranges;
- interrupt-controller;
- redistributor-stride = <0x0 0x40000>; // 256kB stride
- #redistributor-regions = <2>;
- reg = <0x0 0x2c010000 0 0x10000>, // GICD
- <0x0 0x2d000000 0 0x800000>, // GICR 1: CPUs 0-31
- <0x0 0x2e000000 0 0x800000>; // GICR 2: CPUs 32-63
- <0x0 0x2c040000 0 0x2000>, // GICC
- <0x0 0x2c060000 0 0x2000>, // GICH
- <0x0 0x2c080000 0 0x2000>; // GICV
- interrupts = <1 9 4>;
- gic-its@2c200000 {
- compatible = "arm,gic-v3-its";
- msi-controller;
- reg = <0x0 0x2c200000 0 0x200000>;
- };
- gic-its@2c400000 {
- compatible = "arm,gic-v3-its";
- msi-controller;
- reg = <0x0 0x2c400000 0 0x200000>;
- };
- };
|