xref: /linux/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v5.yaml (revision 63eb28bb1402891b1ad2be02a530f29a9dd7f1cd)
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