Skip to content

Commit dc855b7

Browse files
committed
Merge tag 'irq-drivers-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq chip driver updates from Thomas Gleixner: - Add support for the Renesas RZ/V2N SoC - Add a new driver for the Renesas RZ/[TN]2H SoCs - Preserve the register state of the RISCV APLIC interrupt controller accross suspend/resume - Reinitialize the RISCV IMSIC registers after suspend/resume - Make the various Loongson interrupt chip drivers 32/64-bit aware - Handle the number of hardware interrupts in the SIFIVE PLIC driver correctly The hardware interrupt 0 is reserved which resulted in inconsistent accounting. That went unnoticed as the off by one is only noticable when the number of device interrupts is a multiple of 32 - The usual device tree updates, cleanups and improvements all over the place * tag 'irq-drivers-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (24 commits) irqchip/gic-v5: Fix spelling mistake "ouside" -> "outside" dt-bindings: interrupt-controller: sifive,plic: Clarify the riscv,ndev meaning in PLIC irqchip/sifive-plic: Handle number of hardware interrupts correctly irqchip/aspeed-scu-ic: Remove unused variable mask irqchip/ti-sci-intr: Allow parsing interrupt-types per-line dt-bindings: interrupt-controller: ti,sci-intr: Per-line interrupt-types irqchip/renesas-rzv2h: Add suspend/resume support irqchip/aslint-sswi: Fix error check of of_io_request_and_map() result irqchip: Allow LoongArch irqchip drivers on both 32BIT/64BIT irqchip/loongson-pch-pic: Adjust irqchip driver for 32BIT/64BIT irqchip/loongson-pch-msi: Adjust irqchip driver for 32BIT/64BIT irqchip/loongson-htvec: Adjust irqchip driver for 32BIT/64BIT irqchip/loongson-eiointc: Adjust irqchip driver for 32BIT/64BIT irqchip/loongson-liointc: Adjust irqchip driver for 32BIT/64BIT irqchip/loongarch-avec: Adjust irqchip driver for 32BIT/64BIT irqchip/riscv-aplic: Preserve APLIC states across suspend/resume irqchip/riscv-imsic: Add a CPU pm notifier to restore the IMSIC on exit arm64: dts: renesas: r9a09g087: Add ICU support arm64: dts: renesas: r9a09g077: Add ICU support irqchip: Add RZ/{T2H,N2H} Interrupt Controller (ICU) driver ...
2 parents 66bbe4a + 6054b10 commit dc855b7

27 files changed

+1172
-120
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/interrupt-controller/renesas,r9a09g077-icu.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Renesas RZ/{T2H,N2H} Interrupt Controller
8+
9+
maintainers:
10+
- Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
11+
12+
allOf:
13+
- $ref: /schemas/interrupt-controller.yaml#
14+
15+
description:
16+
The Interrupt Controller (ICU) handles software-triggered interrupts
17+
(INTCPU), external interrupts (IRQ and SEI), error interrupts and DMAC
18+
requests.
19+
20+
properties:
21+
compatible:
22+
oneOf:
23+
- const: renesas,r9a09g077-icu # RZ/T2H
24+
25+
- items:
26+
- enum:
27+
- renesas,r9a09g087-icu # RZ/N2H
28+
- const: renesas,r9a09g077-icu
29+
30+
reg:
31+
items:
32+
- description: Non-safety registers (INTCPU0-13, IRQ0-13)
33+
- description: Safety registers (INTCPU14-15, IRQ14-15, SEI)
34+
35+
'#interrupt-cells':
36+
description: The first cell is the SPI number of the interrupt, as per user
37+
manual. The second cell is used to specify the flag.
38+
const: 2
39+
40+
'#address-cells':
41+
const: 0
42+
43+
interrupt-controller: true
44+
45+
interrupts:
46+
items:
47+
- description: Software interrupt 0
48+
- description: Software interrupt 1
49+
- description: Software interrupt 2
50+
- description: Software interrupt 3
51+
- description: Software interrupt 4
52+
- description: Software interrupt 5
53+
- description: Software interrupt 6
54+
- description: Software interrupt 7
55+
- description: Software interrupt 8
56+
- description: Software interrupt 9
57+
- description: Software interrupt 10
58+
- description: Software interrupt 11
59+
- description: Software interrupt 12
60+
- description: Software interrupt 13
61+
- description: Software interrupt 14
62+
- description: Software interrupt 15
63+
- description: External pin interrupt 0
64+
- description: External pin interrupt 1
65+
- description: External pin interrupt 2
66+
- description: External pin interrupt 3
67+
- description: External pin interrupt 4
68+
- description: External pin interrupt 5
69+
- description: External pin interrupt 6
70+
- description: External pin interrupt 7
71+
- description: External pin interrupt 8
72+
- description: External pin interrupt 9
73+
- description: External pin interrupt 10
74+
- description: External pin interrupt 11
75+
- description: External pin interrupt 12
76+
- description: External pin interrupt 13
77+
- description: External pin interrupt 14
78+
- description: External pin interrupt 15
79+
- description: System error interrupt
80+
- description: Cortex-A55 error event 0
81+
- description: Cortex-A55 error event 1
82+
- description: Cortex-R52 CPU 0 error event 0
83+
- description: Cortex-R52 CPU 0 error event 1
84+
- description: Cortex-R52 CPU 1 error event 0
85+
- description: Cortex-R52 CPU 1 error event 1
86+
- description: Peripherals error event 0
87+
- description: Peripherals error event 1
88+
- description: DSMIF error event 0
89+
- description: DSMIF error event 1
90+
- description: ENCIF error event 0
91+
- description: ENCIF error event 1
92+
93+
interrupt-names:
94+
items:
95+
- const: intcpu0
96+
- const: intcpu1
97+
- const: intcpu2
98+
- const: intcpu3
99+
- const: intcpu4
100+
- const: intcpu5
101+
- const: intcpu6
102+
- const: intcpu7
103+
- const: intcpu8
104+
- const: intcpu9
105+
- const: intcpu10
106+
- const: intcpu11
107+
- const: intcpu12
108+
- const: intcpu13
109+
- const: intcpu14
110+
- const: intcpu15
111+
- const: irq0
112+
- const: irq1
113+
- const: irq2
114+
- const: irq3
115+
- const: irq4
116+
- const: irq5
117+
- const: irq6
118+
- const: irq7
119+
- const: irq8
120+
- const: irq9
121+
- const: irq10
122+
- const: irq11
123+
- const: irq12
124+
- const: irq13
125+
- const: irq14
126+
- const: irq15
127+
- const: sei
128+
- const: ca55-err0
129+
- const: ca55-err1
130+
- const: cr520-err0
131+
- const: cr520-err1
132+
- const: cr521-err0
133+
- const: cr521-err1
134+
- const: peri-err0
135+
- const: peri-err1
136+
- const: dsmif-err0
137+
- const: dsmif-err1
138+
- const: encif-err0
139+
- const: encif-err1
140+
141+
clocks:
142+
maxItems: 1
143+
144+
power-domains:
145+
maxItems: 1
146+
147+
required:
148+
- compatible
149+
- reg
150+
- '#interrupt-cells'
151+
- '#address-cells'
152+
- interrupt-controller
153+
- interrupts
154+
- interrupt-names
155+
- clocks
156+
- power-domains
157+
158+
unevaluatedProperties: false
159+
160+
examples:
161+
- |
162+
#include <dt-bindings/interrupt-controller/arm-gic.h>
163+
#include <dt-bindings/clock/renesas,r9a09g077-cpg-mssr.h>
164+
165+
icu: interrupt-controller@802a0000 {
166+
compatible = "renesas,r9a09g077-icu";
167+
reg = <0x802a0000 0x10000>,
168+
<0x812a0000 0x50>;
169+
#interrupt-cells = <2>;
170+
#address-cells = <0>;
171+
interrupt-controller;
172+
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>,
173+
<GIC_SPI 1 IRQ_TYPE_EDGE_RISING>,
174+
<GIC_SPI 2 IRQ_TYPE_EDGE_RISING>,
175+
<GIC_SPI 3 IRQ_TYPE_EDGE_RISING>,
176+
<GIC_SPI 4 IRQ_TYPE_EDGE_RISING>,
177+
<GIC_SPI 5 IRQ_TYPE_EDGE_RISING>,
178+
<GIC_SPI 6 IRQ_TYPE_EDGE_RISING>,
179+
<GIC_SPI 7 IRQ_TYPE_EDGE_RISING>,
180+
<GIC_SPI 8 IRQ_TYPE_EDGE_RISING>,
181+
<GIC_SPI 9 IRQ_TYPE_EDGE_RISING>,
182+
<GIC_SPI 10 IRQ_TYPE_EDGE_RISING>,
183+
<GIC_SPI 11 IRQ_TYPE_EDGE_RISING>,
184+
<GIC_SPI 12 IRQ_TYPE_EDGE_RISING>,
185+
<GIC_SPI 13 IRQ_TYPE_EDGE_RISING>,
186+
<GIC_SPI 14 IRQ_TYPE_EDGE_RISING>,
187+
<GIC_SPI 15 IRQ_TYPE_EDGE_RISING>,
188+
<GIC_SPI 16 IRQ_TYPE_EDGE_RISING>,
189+
<GIC_SPI 17 IRQ_TYPE_EDGE_RISING>,
190+
<GIC_SPI 18 IRQ_TYPE_EDGE_RISING>,
191+
<GIC_SPI 19 IRQ_TYPE_EDGE_RISING>,
192+
<GIC_SPI 20 IRQ_TYPE_EDGE_RISING>,
193+
<GIC_SPI 21 IRQ_TYPE_EDGE_RISING>,
194+
<GIC_SPI 22 IRQ_TYPE_EDGE_RISING>,
195+
<GIC_SPI 23 IRQ_TYPE_EDGE_RISING>,
196+
<GIC_SPI 24 IRQ_TYPE_EDGE_RISING>,
197+
<GIC_SPI 25 IRQ_TYPE_EDGE_RISING>,
198+
<GIC_SPI 26 IRQ_TYPE_EDGE_RISING>,
199+
<GIC_SPI 27 IRQ_TYPE_EDGE_RISING>,
200+
<GIC_SPI 28 IRQ_TYPE_EDGE_RISING>,
201+
<GIC_SPI 29 IRQ_TYPE_EDGE_RISING>,
202+
<GIC_SPI 30 IRQ_TYPE_EDGE_RISING>,
203+
<GIC_SPI 31 IRQ_TYPE_EDGE_RISING>,
204+
<GIC_SPI 406 IRQ_TYPE_EDGE_RISING>,
205+
<GIC_SPI 407 IRQ_TYPE_EDGE_RISING>,
206+
<GIC_SPI 408 IRQ_TYPE_EDGE_RISING>,
207+
<GIC_SPI 409 IRQ_TYPE_EDGE_RISING>,
208+
<GIC_SPI 410 IRQ_TYPE_EDGE_RISING>,
209+
<GIC_SPI 411 IRQ_TYPE_EDGE_RISING>,
210+
<GIC_SPI 412 IRQ_TYPE_EDGE_RISING>,
211+
<GIC_SPI 413 IRQ_TYPE_EDGE_RISING>,
212+
<GIC_SPI 414 IRQ_TYPE_EDGE_RISING>,
213+
<GIC_SPI 415 IRQ_TYPE_EDGE_RISING>,
214+
<GIC_SPI 416 IRQ_TYPE_EDGE_RISING>,
215+
<GIC_SPI 417 IRQ_TYPE_EDGE_RISING>,
216+
<GIC_SPI 418 IRQ_TYPE_EDGE_RISING>;
217+
interrupt-names = "intcpu0", "intcpu1", "intcpu2",
218+
"intcpu3", "intcpu4", "intcpu5",
219+
"intcpu6", "intcpu7", "intcpu8",
220+
"intcpu9", "intcpu10", "intcpu11",
221+
"intcpu12", "intcpu13", "intcpu14",
222+
"intcpu15",
223+
"irq0", "irq1", "irq2", "irq3",
224+
"irq4", "irq5", "irq6", "irq7",
225+
"irq8", "irq9", "irq10", "irq11",
226+
"irq12", "irq13", "irq14", "irq15",
227+
"sei",
228+
"ca55-err0", "ca55-err1",
229+
"cr520-err0", "cr520-err1",
230+
"cr521-err0", "cr521-err1",
231+
"peri-err0", "peri-err1",
232+
"dsmif-err0", "dsmif-err1",
233+
"encif-err0", "encif-err1";
234+
clocks = <&cpg CPG_CORE R9A09G077_CLK_PCLKM>;
235+
power-domains = <&cpg>;
236+
};

Documentation/devicetree/bindings/interrupt-controller/renesas,rzv2h-icu.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ properties:
2222
compatible:
2323
enum:
2424
- renesas,r9a09g047-icu # RZ/G3E
25+
- renesas,r9a09g056-icu # RZ/V2N
2526
- renesas,r9a09g057-icu # RZ/V2H(P)
2627

2728
'#interrupt-cells':

Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ properties:
108108
riscv,ndev:
109109
$ref: /schemas/types.yaml#/definitions/uint32
110110
description:
111-
Specifies how many external interrupts are supported by this controller.
111+
Specifies how many external (device) interrupts are supported by this
112+
controller. Note that source 0 is reserved in PLIC, so the valid
113+
interrupt sources are 1 to riscv,ndev inclusive.
112114

113115
clocks: true
114116

Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ allOf:
1515
description: |
1616
The Interrupt Router (INTR) module provides a mechanism to mux M
1717
interrupt inputs to N interrupt outputs, where all M inputs are selectable
18-
to be driven per N output. An Interrupt Router can either handle edge
19-
triggered or level triggered interrupts and that is fixed in hardware.
18+
to be driven per N output.
2019
2120
Interrupt Router
2221
+----------------------+
@@ -64,9 +63,14 @@ properties:
6463
interrupt-controller: true
6564

6665
'#interrupt-cells':
67-
const: 1
66+
enum: [1, 2]
6867
description: |
69-
The 1st cell should contain interrupt router input hw number.
68+
Number of cells in interrupt specifier. Depends on ti,intr-trigger-type:
69+
- If ti,intr-trigger-type is present: must be 1
70+
The 1st cell should contain interrupt router input hw number.
71+
- If ti,intr-trigger-type is absent: must be 2
72+
The 1st cell should contain interrupt router input hw number.
73+
The 2nd cell should contain interrupt trigger type (preserved by router).
7074
7175
ti,interrupt-ranges:
7276
$ref: /schemas/types.yaml#/definitions/uint32-matrix
@@ -82,9 +86,22 @@ properties:
8286
- description: |
8387
"limit" specifies the limit for translation
8488
89+
if:
90+
required:
91+
- ti,intr-trigger-type
92+
then:
93+
properties:
94+
'#interrupt-cells':
95+
const: 1
96+
description: Interrupt ID only. Interrupt type is specified globally
97+
else:
98+
properties:
99+
'#interrupt-cells':
100+
const: 2
101+
description: Interrupt ID and corresponding interrupt type
102+
85103
required:
86104
- compatible
87-
- ti,intr-trigger-type
88105
- interrupt-controller
89106
- '#interrupt-cells'
90107
- ti,sci
@@ -105,3 +122,14 @@ examples:
105122
ti,sci-dev-id = <131>;
106123
ti,interrupt-ranges = <0 360 32>;
107124
};
125+
126+
- |
127+
interrupt-controller {
128+
compatible = "ti,sci-intr";
129+
interrupt-controller;
130+
interrupt-parent = <&gic500>;
131+
#interrupt-cells = <2>;
132+
ti,sci = <&dmsc>;
133+
ti,sci-dev-id = <131>;
134+
ti,interrupt-ranges = <0 360 32>;
135+
};

0 commit comments

Comments
 (0)