1*7d7299bdSLorenzo Pieralisi# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*7d7299bdSLorenzo Pieralisi%YAML 1.2 3*7d7299bdSLorenzo Pieralisi--- 4*7d7299bdSLorenzo Pieralisi$id: http://devicetree.org/schemas/interrupt-controller/arm,gic-v5.yaml# 5*7d7299bdSLorenzo Pieralisi$schema: http://devicetree.org/meta-schemas/core.yaml# 6*7d7299bdSLorenzo Pieralisi 7*7d7299bdSLorenzo Pieralisititle: ARM Generic Interrupt Controller, version 5 8*7d7299bdSLorenzo Pieralisi 9*7d7299bdSLorenzo Pieralisimaintainers: 10*7d7299bdSLorenzo Pieralisi - Lorenzo Pieralisi <lpieralisi@kernel.org> 11*7d7299bdSLorenzo Pieralisi - Marc Zyngier <maz@kernel.org> 12*7d7299bdSLorenzo Pieralisi 13*7d7299bdSLorenzo Pieralisidescription: | 14*7d7299bdSLorenzo Pieralisi The GICv5 architecture defines the guidelines to implement GICv5 15*7d7299bdSLorenzo Pieralisi compliant interrupt controllers for AArch64 systems. 16*7d7299bdSLorenzo Pieralisi 17*7d7299bdSLorenzo Pieralisi The GICv5 specification can be found at 18*7d7299bdSLorenzo Pieralisi https://developer.arm.com/documentation/aes0070 19*7d7299bdSLorenzo Pieralisi 20*7d7299bdSLorenzo Pieralisi The GICv5 architecture is composed of multiple components: 21*7d7299bdSLorenzo Pieralisi - one or more IRS (Interrupt Routing Service) 22*7d7299bdSLorenzo Pieralisi - zero or more ITS (Interrupt Translation Service) 23*7d7299bdSLorenzo Pieralisi 24*7d7299bdSLorenzo Pieralisi The architecture defines: 25*7d7299bdSLorenzo Pieralisi - PE-Private Peripheral Interrupts (PPI) 26*7d7299bdSLorenzo Pieralisi - Shared Peripheral Interrupts (SPI) 27*7d7299bdSLorenzo Pieralisi - Logical Peripheral Interrupts (LPI) 28*7d7299bdSLorenzo Pieralisi 29*7d7299bdSLorenzo PieralisiallOf: 30*7d7299bdSLorenzo Pieralisi - $ref: /schemas/interrupt-controller.yaml# 31*7d7299bdSLorenzo Pieralisi 32*7d7299bdSLorenzo Pieralisiproperties: 33*7d7299bdSLorenzo Pieralisi compatible: 34*7d7299bdSLorenzo Pieralisi const: arm,gic-v5 35*7d7299bdSLorenzo Pieralisi 36*7d7299bdSLorenzo Pieralisi "#address-cells": 37*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 38*7d7299bdSLorenzo Pieralisi 39*7d7299bdSLorenzo Pieralisi "#size-cells": 40*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 41*7d7299bdSLorenzo Pieralisi 42*7d7299bdSLorenzo Pieralisi ranges: true 43*7d7299bdSLorenzo Pieralisi 44*7d7299bdSLorenzo Pieralisi "#interrupt-cells": 45*7d7299bdSLorenzo Pieralisi description: | 46*7d7299bdSLorenzo Pieralisi The 1st cell corresponds to the INTID.Type field in the INTID; 1 for PPI, 47*7d7299bdSLorenzo Pieralisi 3 for SPI. LPI interrupts must not be described in the bindings since 48*7d7299bdSLorenzo Pieralisi they are allocated dynamically by the software component managing them. 49*7d7299bdSLorenzo Pieralisi 50*7d7299bdSLorenzo Pieralisi The 2nd cell contains the interrupt INTID.ID field. 51*7d7299bdSLorenzo Pieralisi 52*7d7299bdSLorenzo Pieralisi The 3rd cell is the flags, encoded as follows: 53*7d7299bdSLorenzo Pieralisi bits[3:0] trigger type and level flags. 54*7d7299bdSLorenzo Pieralisi 55*7d7299bdSLorenzo Pieralisi 1 = low-to-high edge triggered 56*7d7299bdSLorenzo Pieralisi 2 = high-to-low edge triggered 57*7d7299bdSLorenzo Pieralisi 4 = active high level-sensitive 58*7d7299bdSLorenzo Pieralisi 8 = active low level-sensitive 59*7d7299bdSLorenzo Pieralisi 60*7d7299bdSLorenzo Pieralisi const: 3 61*7d7299bdSLorenzo Pieralisi 62*7d7299bdSLorenzo Pieralisi interrupt-controller: true 63*7d7299bdSLorenzo Pieralisi 64*7d7299bdSLorenzo Pieralisi interrupts: 65*7d7299bdSLorenzo Pieralisi description: 66*7d7299bdSLorenzo Pieralisi The VGIC maintenance interrupt. 67*7d7299bdSLorenzo Pieralisi maxItems: 1 68*7d7299bdSLorenzo Pieralisi 69*7d7299bdSLorenzo Pieralisirequired: 70*7d7299bdSLorenzo Pieralisi - compatible 71*7d7299bdSLorenzo Pieralisi - "#address-cells" 72*7d7299bdSLorenzo Pieralisi - "#size-cells" 73*7d7299bdSLorenzo Pieralisi - ranges 74*7d7299bdSLorenzo Pieralisi - "#interrupt-cells" 75*7d7299bdSLorenzo Pieralisi - interrupt-controller 76*7d7299bdSLorenzo Pieralisi 77*7d7299bdSLorenzo PieralisipatternProperties: 78*7d7299bdSLorenzo Pieralisi "^irs@[0-9a-f]+$": 79*7d7299bdSLorenzo Pieralisi type: object 80*7d7299bdSLorenzo Pieralisi description: 81*7d7299bdSLorenzo Pieralisi GICv5 has one or more Interrupt Routing Services (IRS) that are 82*7d7299bdSLorenzo Pieralisi responsible for handling IRQ state and routing. 83*7d7299bdSLorenzo Pieralisi 84*7d7299bdSLorenzo Pieralisi additionalProperties: false 85*7d7299bdSLorenzo Pieralisi 86*7d7299bdSLorenzo Pieralisi properties: 87*7d7299bdSLorenzo Pieralisi compatible: 88*7d7299bdSLorenzo Pieralisi const: arm,gic-v5-irs 89*7d7299bdSLorenzo Pieralisi 90*7d7299bdSLorenzo Pieralisi reg: 91*7d7299bdSLorenzo Pieralisi minItems: 1 92*7d7299bdSLorenzo Pieralisi items: 93*7d7299bdSLorenzo Pieralisi - description: IRS config frames 94*7d7299bdSLorenzo Pieralisi - description: IRS setlpi frames 95*7d7299bdSLorenzo Pieralisi 96*7d7299bdSLorenzo Pieralisi reg-names: 97*7d7299bdSLorenzo Pieralisi description: 98*7d7299bdSLorenzo Pieralisi Describe config and setlpi frames that are present. 99*7d7299bdSLorenzo Pieralisi "ns-" stands for non-secure, "s-" for secure, "realm-" for realm 100*7d7299bdSLorenzo Pieralisi and "el3-" for EL3. 101*7d7299bdSLorenzo Pieralisi minItems: 1 102*7d7299bdSLorenzo Pieralisi maxItems: 8 103*7d7299bdSLorenzo Pieralisi items: 104*7d7299bdSLorenzo Pieralisi enum: [ ns-config, s-config, realm-config, el3-config, ns-setlpi, 105*7d7299bdSLorenzo Pieralisi s-setlpi, realm-setlpi, el3-setlpi ] 106*7d7299bdSLorenzo Pieralisi 107*7d7299bdSLorenzo Pieralisi "#address-cells": 108*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 109*7d7299bdSLorenzo Pieralisi 110*7d7299bdSLorenzo Pieralisi "#size-cells": 111*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 112*7d7299bdSLorenzo Pieralisi 113*7d7299bdSLorenzo Pieralisi ranges: true 114*7d7299bdSLorenzo Pieralisi 115*7d7299bdSLorenzo Pieralisi dma-noncoherent: 116*7d7299bdSLorenzo Pieralisi description: 117*7d7299bdSLorenzo Pieralisi Present if the GIC IRS permits programming shareability and 118*7d7299bdSLorenzo Pieralisi cacheability attributes but is connected to a non-coherent 119*7d7299bdSLorenzo Pieralisi downstream interconnect. 120*7d7299bdSLorenzo Pieralisi 121*7d7299bdSLorenzo Pieralisi cpus: 122*7d7299bdSLorenzo Pieralisi description: 123*7d7299bdSLorenzo Pieralisi CPUs managed by the IRS. 124*7d7299bdSLorenzo Pieralisi 125*7d7299bdSLorenzo Pieralisi arm,iaffids: 126*7d7299bdSLorenzo Pieralisi $ref: /schemas/types.yaml#/definitions/uint16-array 127*7d7299bdSLorenzo Pieralisi description: 128*7d7299bdSLorenzo Pieralisi Interrupt AFFinity ID (IAFFID) associated with the CPU whose 129*7d7299bdSLorenzo Pieralisi CPU node phandle is at the same index in the cpus array. 130*7d7299bdSLorenzo Pieralisi 131*7d7299bdSLorenzo Pieralisi patternProperties: 132*7d7299bdSLorenzo Pieralisi "^its@[0-9a-f]+$": 133*7d7299bdSLorenzo Pieralisi type: object 134*7d7299bdSLorenzo Pieralisi description: 135*7d7299bdSLorenzo Pieralisi GICv5 has zero or more Interrupt Translation Services (ITS) that are 136*7d7299bdSLorenzo Pieralisi used to route Message Signalled Interrupts (MSI) to the CPUs. Each 137*7d7299bdSLorenzo Pieralisi ITS is connected to an IRS. 138*7d7299bdSLorenzo Pieralisi additionalProperties: false 139*7d7299bdSLorenzo Pieralisi 140*7d7299bdSLorenzo Pieralisi properties: 141*7d7299bdSLorenzo Pieralisi compatible: 142*7d7299bdSLorenzo Pieralisi const: arm,gic-v5-its 143*7d7299bdSLorenzo Pieralisi 144*7d7299bdSLorenzo Pieralisi reg: 145*7d7299bdSLorenzo Pieralisi items: 146*7d7299bdSLorenzo Pieralisi - description: ITS config frames 147*7d7299bdSLorenzo Pieralisi 148*7d7299bdSLorenzo Pieralisi reg-names: 149*7d7299bdSLorenzo Pieralisi description: 150*7d7299bdSLorenzo Pieralisi Describe config frames that are present. 151*7d7299bdSLorenzo Pieralisi "ns-" stands for non-secure, "s-" for secure, "realm-" for realm 152*7d7299bdSLorenzo Pieralisi and "el3-" for EL3. 153*7d7299bdSLorenzo Pieralisi minItems: 1 154*7d7299bdSLorenzo Pieralisi maxItems: 4 155*7d7299bdSLorenzo Pieralisi items: 156*7d7299bdSLorenzo Pieralisi enum: [ ns-config, s-config, realm-config, el3-config ] 157*7d7299bdSLorenzo Pieralisi 158*7d7299bdSLorenzo Pieralisi "#address-cells": 159*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 160*7d7299bdSLorenzo Pieralisi 161*7d7299bdSLorenzo Pieralisi "#size-cells": 162*7d7299bdSLorenzo Pieralisi enum: [ 1, 2 ] 163*7d7299bdSLorenzo Pieralisi 164*7d7299bdSLorenzo Pieralisi ranges: true 165*7d7299bdSLorenzo Pieralisi 166*7d7299bdSLorenzo Pieralisi dma-noncoherent: 167*7d7299bdSLorenzo Pieralisi description: 168*7d7299bdSLorenzo Pieralisi Present if the GIC ITS permits programming shareability and 169*7d7299bdSLorenzo Pieralisi cacheability attributes but is connected to a non-coherent 170*7d7299bdSLorenzo Pieralisi downstream interconnect. 171*7d7299bdSLorenzo Pieralisi 172*7d7299bdSLorenzo Pieralisi patternProperties: 173*7d7299bdSLorenzo Pieralisi "^msi-controller@[0-9a-f]+$": 174*7d7299bdSLorenzo Pieralisi type: object 175*7d7299bdSLorenzo Pieralisi description: 176*7d7299bdSLorenzo Pieralisi GICv5 ITS has one or more translate register frames. 177*7d7299bdSLorenzo Pieralisi additionalProperties: false 178*7d7299bdSLorenzo Pieralisi 179*7d7299bdSLorenzo Pieralisi properties: 180*7d7299bdSLorenzo Pieralisi reg: 181*7d7299bdSLorenzo Pieralisi items: 182*7d7299bdSLorenzo Pieralisi - description: ITS translate frames 183*7d7299bdSLorenzo Pieralisi 184*7d7299bdSLorenzo Pieralisi reg-names: 185*7d7299bdSLorenzo Pieralisi description: 186*7d7299bdSLorenzo Pieralisi Describe translate frames that are present. 187*7d7299bdSLorenzo Pieralisi "ns-" stands for non-secure, "s-" for secure, "realm-" for realm 188*7d7299bdSLorenzo Pieralisi and "el3-" for EL3. 189*7d7299bdSLorenzo Pieralisi minItems: 1 190*7d7299bdSLorenzo Pieralisi maxItems: 4 191*7d7299bdSLorenzo Pieralisi items: 192*7d7299bdSLorenzo Pieralisi enum: [ ns-translate, s-translate, realm-translate, el3-translate ] 193*7d7299bdSLorenzo Pieralisi 194*7d7299bdSLorenzo Pieralisi "#msi-cells": 195*7d7299bdSLorenzo Pieralisi description: 196*7d7299bdSLorenzo Pieralisi The single msi-cell is the DeviceID of the device which will 197*7d7299bdSLorenzo Pieralisi generate the MSI. 198*7d7299bdSLorenzo Pieralisi const: 1 199*7d7299bdSLorenzo Pieralisi 200*7d7299bdSLorenzo Pieralisi msi-controller: true 201*7d7299bdSLorenzo Pieralisi 202*7d7299bdSLorenzo Pieralisi required: 203*7d7299bdSLorenzo Pieralisi - reg 204*7d7299bdSLorenzo Pieralisi - reg-names 205*7d7299bdSLorenzo Pieralisi - "#msi-cells" 206*7d7299bdSLorenzo Pieralisi - msi-controller 207*7d7299bdSLorenzo Pieralisi 208*7d7299bdSLorenzo Pieralisi required: 209*7d7299bdSLorenzo Pieralisi - compatible 210*7d7299bdSLorenzo Pieralisi - reg 211*7d7299bdSLorenzo Pieralisi - reg-names 212*7d7299bdSLorenzo Pieralisi 213*7d7299bdSLorenzo Pieralisi required: 214*7d7299bdSLorenzo Pieralisi - compatible 215*7d7299bdSLorenzo Pieralisi - reg 216*7d7299bdSLorenzo Pieralisi - reg-names 217*7d7299bdSLorenzo Pieralisi - cpus 218*7d7299bdSLorenzo Pieralisi - arm,iaffids 219*7d7299bdSLorenzo Pieralisi 220*7d7299bdSLorenzo PieralisiadditionalProperties: false 221*7d7299bdSLorenzo Pieralisi 222*7d7299bdSLorenzo Pieralisiexamples: 223*7d7299bdSLorenzo Pieralisi - | 224*7d7299bdSLorenzo Pieralisi interrupt-controller { 225*7d7299bdSLorenzo Pieralisi compatible = "arm,gic-v5"; 226*7d7299bdSLorenzo Pieralisi 227*7d7299bdSLorenzo Pieralisi #interrupt-cells = <3>; 228*7d7299bdSLorenzo Pieralisi interrupt-controller; 229*7d7299bdSLorenzo Pieralisi 230*7d7299bdSLorenzo Pieralisi #address-cells = <1>; 231*7d7299bdSLorenzo Pieralisi #size-cells = <1>; 232*7d7299bdSLorenzo Pieralisi ranges; 233*7d7299bdSLorenzo Pieralisi 234*7d7299bdSLorenzo Pieralisi interrupts = <1 25 4>; 235*7d7299bdSLorenzo Pieralisi 236*7d7299bdSLorenzo Pieralisi irs@2f1a0000 { 237*7d7299bdSLorenzo Pieralisi compatible = "arm,gic-v5-irs"; 238*7d7299bdSLorenzo Pieralisi reg = <0x2f1a0000 0x10000>; // IRS_CONFIG_FRAME 239*7d7299bdSLorenzo Pieralisi reg-names = "ns-config"; 240*7d7299bdSLorenzo Pieralisi 241*7d7299bdSLorenzo Pieralisi #address-cells = <1>; 242*7d7299bdSLorenzo Pieralisi #size-cells = <1>; 243*7d7299bdSLorenzo Pieralisi ranges; 244*7d7299bdSLorenzo Pieralisi 245*7d7299bdSLorenzo Pieralisi cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>, <&cpu4>, <&cpu5>, <&cpu6>, <&cpu7>; 246*7d7299bdSLorenzo Pieralisi arm,iaffids = /bits/ 16 <0 1 2 3 4 5 6 7>; 247*7d7299bdSLorenzo Pieralisi 248*7d7299bdSLorenzo Pieralisi its@2f120000 { 249*7d7299bdSLorenzo Pieralisi compatible = "arm,gic-v5-its"; 250*7d7299bdSLorenzo Pieralisi reg = <0x2f120000 0x10000>; // ITS_CONFIG_FRAME 251*7d7299bdSLorenzo Pieralisi reg-names = "ns-config"; 252*7d7299bdSLorenzo Pieralisi 253*7d7299bdSLorenzo Pieralisi #address-cells = <1>; 254*7d7299bdSLorenzo Pieralisi #size-cells = <1>; 255*7d7299bdSLorenzo Pieralisi ranges; 256*7d7299bdSLorenzo Pieralisi 257*7d7299bdSLorenzo Pieralisi msi-controller@2f130000 { 258*7d7299bdSLorenzo Pieralisi reg = <0x2f130000 0x10000>; // ITS_TRANSLATE_FRAME 259*7d7299bdSLorenzo Pieralisi reg-names = "ns-translate"; 260*7d7299bdSLorenzo Pieralisi 261*7d7299bdSLorenzo Pieralisi #msi-cells = <1>; 262*7d7299bdSLorenzo Pieralisi msi-controller; 263*7d7299bdSLorenzo Pieralisi }; 264*7d7299bdSLorenzo Pieralisi }; 265*7d7299bdSLorenzo Pieralisi }; 266*7d7299bdSLorenzo Pieralisi }; 267*7d7299bdSLorenzo Pieralisi... 268