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