| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/interrupt-controller/arm,gic-v5.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: ARM Generic Interrupt Controller, version 5 |
| |
| maintainers: |
| - Lorenzo Pieralisi <lpieralisi@kernel.org> |
| - Marc Zyngier <maz@kernel.org> |
| |
| description: | |
| The GICv5 architecture defines the guidelines to implement GICv5 |
| compliant interrupt controllers for AArch64 systems. |
| |
| The GICv5 specification can be found at |
| https://developer.arm.com/documentation/aes0070 |
| |
| The GICv5 architecture is composed of multiple components: |
| - one or more IRS (Interrupt Routing Service) |
| - zero or more ITS (Interrupt Translation Service) |
| |
| The architecture defines: |
| - PE-Private Peripheral Interrupts (PPI) |
| - Shared Peripheral Interrupts (SPI) |
| - Logical Peripheral Interrupts (LPI) |
| |
| allOf: |
| - $ref: /schemas/interrupt-controller.yaml# |
| |
| properties: |
| compatible: |
| const: arm,gic-v5 |
| |
| "#address-cells": |
| enum: [ 1, 2 ] |
| |
| "#size-cells": |
| enum: [ 1, 2 ] |
| |
| ranges: true |
| |
| "#interrupt-cells": |
| description: | |
| The 1st cell corresponds to the INTID.Type field in the INTID; 1 for PPI, |
| 3 for SPI. LPI interrupts must not be described in the bindings since |
| they are allocated dynamically by the software component managing them. |
| |
| The 2nd cell contains the interrupt INTID.ID field. |
| |
| The 3rd cell is the flags, encoded as follows: |
| bits[3:0] trigger type and level flags. |
| |
| 1 = low-to-high edge triggered |
| 2 = high-to-low edge triggered |
| 4 = active high level-sensitive |
| 8 = active low level-sensitive |
| |
| const: 3 |
| |
| interrupt-controller: true |
| |
| interrupts: |
| description: |
| The VGIC maintenance interrupt. |
| maxItems: 1 |
| |
| required: |
| - compatible |
| - "#address-cells" |
| - "#size-cells" |
| - ranges |
| - "#interrupt-cells" |
| - interrupt-controller |
| |
| patternProperties: |
| "^irs@[0-9a-f]+$": |
| type: object |
| description: |
| GICv5 has one or more Interrupt Routing Services (IRS) that are |
| responsible for handling IRQ state and routing. |
| |
| additionalProperties: false |
| |
| properties: |
| compatible: |
| const: arm,gic-v5-irs |
| |
| reg: |
| minItems: 1 |
| items: |
| - description: IRS config frames |
| - description: IRS setlpi frames |
| |
| reg-names: |
| description: |
| Describe config and setlpi frames that are present. |
| "ns-" stands for non-secure, "s-" for secure, "realm-" for realm |
| and "el3-" for EL3. |
| minItems: 1 |
| maxItems: 8 |
| items: |
| enum: [ ns-config, s-config, realm-config, el3-config, ns-setlpi, |
| s-setlpi, realm-setlpi, el3-setlpi ] |
| |
| "#address-cells": |
| enum: [ 1, 2 ] |
| |
| "#size-cells": |
| enum: [ 1, 2 ] |
| |
| ranges: true |
| |
| dma-noncoherent: |
| description: |
| Present if the GIC IRS permits programming shareability and |
| cacheability attributes but is connected to a non-coherent |
| downstream interconnect. |
| |
| cpus: |
| description: |
| CPUs managed by the IRS. |
| |
| arm,iaffids: |
| $ref: /schemas/types.yaml#/definitions/uint16-array |
| description: |
| Interrupt AFFinity ID (IAFFID) associated with the CPU whose |
| CPU node phandle is at the same index in the cpus array. |
| |
| patternProperties: |
| "^its@[0-9a-f]+$": |
| type: object |
| description: |
| GICv5 has zero or more Interrupt Translation Services (ITS) that are |
| used to route Message Signalled Interrupts (MSI) to the CPUs. Each |
| ITS is connected to an IRS. |
| additionalProperties: false |
| |
| properties: |
| compatible: |
| const: arm,gic-v5-its |
| |
| reg: |
| items: |
| - description: ITS config frames |
| |
| reg-names: |
| description: |
| Describe config frames that are present. |
| "ns-" stands for non-secure, "s-" for secure, "realm-" for realm |
| and "el3-" for EL3. |
| minItems: 1 |
| maxItems: 4 |
| items: |
| enum: [ ns-config, s-config, realm-config, el3-config ] |
| |
| "#address-cells": |
| enum: [ 1, 2 ] |
| |
| "#size-cells": |
| enum: [ 1, 2 ] |
| |
| ranges: true |
| |
| dma-noncoherent: |
| description: |
| Present if the GIC ITS permits programming shareability and |
| cacheability attributes but is connected to a non-coherent |
| downstream interconnect. |
| |
| patternProperties: |
| "^msi-controller@[0-9a-f]+$": |
| type: object |
| description: |
| GICv5 ITS has one or more translate register frames. |
| additionalProperties: false |
| |
| properties: |
| reg: |
| items: |
| - description: ITS translate frames |
| |
| reg-names: |
| description: |
| Describe translate frames that are present. |
| "ns-" stands for non-secure, "s-" for secure, "realm-" for realm |
| and "el3-" for EL3. |
| minItems: 1 |
| maxItems: 4 |
| items: |
| enum: [ ns-translate, s-translate, realm-translate, el3-translate ] |
| |
| "#msi-cells": |
| description: |
| The single msi-cell is the DeviceID of the device which will |
| generate the MSI. |
| const: 1 |
| |
| msi-controller: true |
| |
| required: |
| - reg |
| - reg-names |
| - "#msi-cells" |
| - msi-controller |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - cpus |
| - arm,iaffids |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| interrupt-controller { |
| compatible = "arm,gic-v5"; |
| |
| #interrupt-cells = <3>; |
| interrupt-controller; |
| |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| interrupts = <1 25 4>; |
| |
| irs@2f1a0000 { |
| compatible = "arm,gic-v5-irs"; |
| reg = <0x2f1a0000 0x10000>; // IRS_CONFIG_FRAME |
| reg-names = "ns-config"; |
| |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>, <&cpu4>, <&cpu5>, <&cpu6>, <&cpu7>; |
| arm,iaffids = /bits/ 16 <0 1 2 3 4 5 6 7>; |
| |
| its@2f120000 { |
| compatible = "arm,gic-v5-its"; |
| reg = <0x2f120000 0x10000>; // ITS_CONFIG_FRAME |
| reg-names = "ns-config"; |
| |
| #address-cells = <1>; |
| #size-cells = <1>; |
| ranges; |
| |
| msi-controller@2f130000 { |
| reg = <0x2f130000 0x10000>; // ITS_TRANSLATE_FRAME |
| reg-names = "ns-translate"; |
| |
| #msi-cells = <1>; |
| msi-controller; |
| }; |
| }; |
| }; |
| }; |
| ... |