Skip to content

Commit 5c2b050

Browse files
committed
Merge tag 'irq-core-2024-11-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull interrupt subsystem updates from Thomas Gleixner: "Tree wide: - Make nr_irqs static to the core code and provide accessor functions to remove existing and prevent future aliasing problems with local variables or function arguments of the same name. Core code: - Prevent freeing an interrupt in the devres code which is not managed by devres in the first place. - Use seq_put_decimal_ull_width() for decimal values output in /proc/interrupts which increases performance significantly as it avoids parsing the format strings over and over. - Optimize raising the timer and hrtimer soft interrupts by using the 'set bit only' variants instead of the combined version which checks whether ksoftirqd should be woken up. The latter is a pointless exercise as both soft interrupts are raised in the context of the timer interrupt and therefore never wake up ksoftirqd. - Delegate timer/hrtimer soft interrupt processing to a dedicated thread on RT. Timer and hrtimer soft interrupts are always processed in ksoftirqd on RT enabled kernels. This can lead to high latencies when other soft interrupts are delegated to ksoftirqd as well. The separate thread allows to run them seperately under a RT scheduling policy to reduce the latency overhead. Drivers: - New drivers or extensions of existing drivers to support Renesas RZ/V2H(P), Aspeed AST27XX, T-HEAD C900 and ATMEL sam9x7 interrupt chips - Support for multi-cluster GICs on MIPS. MIPS CPUs can come with multiple CPU clusters, where each CPU cluster has its own GIC (Generic Interrupt Controller). This requires to access the GIC of a remote cluster through a redirect register block. This is encapsulated into a set of helper functions to keep the complexity out of the actual code paths which handle the GIC details. - Support for encrypted guests in the ARM GICV3 ITS driver The ITS page needs to be shared with the hypervisor and therefore must be decrypted. - Small cleanups and fixes all over the place" * tag 'irq-core-2024-11-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (50 commits) irqchip/riscv-aplic: Prevent crash when MSI domain is missing genirq/proc: Use seq_put_decimal_ull_width() for decimal values softirq: Use a dedicated thread for timer wakeups on PREEMPT_RT. timers: Use __raise_softirq_irqoff() to raise the softirq. hrtimer: Use __raise_softirq_irqoff() to raise the softirq riscv: defconfig: Enable T-HEAD C900 ACLINT SSWI drivers irqchip: Add T-HEAD C900 ACLINT SSWI driver dt-bindings: interrupt-controller: Add T-HEAD C900 ACLINT SSWI device irqchip/stm32mp-exti: Use of_property_present() for non-boolean properties irqchip/mips-gic: Fix selection of GENERIC_IRQ_EFFECTIVE_AFF_MASK irqchip/mips-gic: Prevent indirect access to clusters without CPU cores irqchip/mips-gic: Multi-cluster support irqchip/mips-gic: Setup defaults in each cluster irqchip/mips-gic: Support multi-cluster in for_each_online_cpu_gic() irqchip/mips-gic: Replace open coded online CPU iterations genirq/irqdesc: Use str_enabled_disabled() helper in wakeup_show() genirq/devres: Don't free interrupt which is not managed by devres irqchip/gic-v3-its: Fix over allocation in itt_alloc_pool() irqchip/aspeed-intc: Add AST27XX INTC support dt-bindings: interrupt-controller: Add support for ASPEED AST27XX INTC ...
2 parents fb1dd14 + 1f181d1 commit 5c2b050

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1945
-134
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/interrupt-controller/aspeed,ast2700-intc.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Aspeed AST2700 Interrupt Controller
8+
9+
description:
10+
This interrupt controller hardware is second level interrupt controller that
11+
is hooked to a parent interrupt controller. It's useful to combine multiple
12+
interrupt sources into 1 interrupt to parent interrupt controller.
13+
14+
maintainers:
15+
- Kevin Chen <kevin_chen@aspeedtech.com>
16+
17+
properties:
18+
compatible:
19+
enum:
20+
- aspeed,ast2700-intc-ic
21+
22+
reg:
23+
maxItems: 1
24+
25+
interrupt-controller: true
26+
27+
'#interrupt-cells':
28+
const: 2
29+
description:
30+
The first cell is the IRQ number, the second cell is the trigger
31+
type as defined in interrupt.txt in this directory.
32+
33+
interrupts:
34+
maxItems: 6
35+
description: |
36+
Depend to which INTC0 or INTC1 used.
37+
INTC0 and INTC1 are two kinds of interrupt controller with enable and raw
38+
status registers for use.
39+
INTC0 is used to assert GIC if interrupt in INTC1 asserted.
40+
INTC1 is used to assert INTC0 if interrupt of modules asserted.
41+
+-----+ +-------+ +---------+---module0
42+
| GIC |---| INTC0 |--+--| INTC1_0 |---module2
43+
| | | | | | |---...
44+
+-----+ +-------+ | +---------+---module31
45+
|
46+
| +---------+---module0
47+
+---| INTC1_1 |---module2
48+
| | |---...
49+
| +---------+---module31
50+
...
51+
| +---------+---module0
52+
+---| INTC1_5 |---module2
53+
| |---...
54+
+---------+---module31
55+
56+
57+
required:
58+
- compatible
59+
- reg
60+
- interrupt-controller
61+
- '#interrupt-cells'
62+
- interrupts
63+
64+
additionalProperties: false
65+
66+
examples:
67+
- |
68+
#include <dt-bindings/interrupt-controller/arm-gic.h>
69+
70+
bus {
71+
#address-cells = <2>;
72+
#size-cells = <2>;
73+
74+
interrupt-controller@12101b00 {
75+
compatible = "aspeed,ast2700-intc-ic";
76+
reg = <0 0x12101b00 0 0x10>;
77+
#interrupt-cells = <2>;
78+
interrupt-controller;
79+
interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>,
80+
<GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>,
81+
<GIC_SPI 194 IRQ_TYPE_LEVEL_HIGH>,
82+
<GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>,
83+
<GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
84+
<GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
85+
};
86+
};

Documentation/devicetree/bindings/interrupt-controller/atmel,aic.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ properties:
2323
- atmel,sama5d3-aic
2424
- atmel,sama5d4-aic
2525
- microchip,sam9x60-aic
26+
- microchip,sam9x7-aic
2627

2728
reg:
2829
maxItems: 1
Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
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,rzv2h-icu.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Renesas RZ/V2H(P) Interrupt Control Unit
8+
9+
maintainers:
10+
- Fabrizio Castro <fabrizio.castro.jz@renesas.com>
11+
- Geert Uytterhoeven <geert+renesas@glider.be>
12+
13+
allOf:
14+
- $ref: /schemas/interrupt-controller.yaml#
15+
16+
description:
17+
The Interrupt Control Unit (ICU) handles external interrupts (NMI, IRQ, and
18+
TINT), error interrupts, DMAC requests, GPT interrupts, and internal
19+
interrupts.
20+
21+
properties:
22+
compatible:
23+
const: renesas,r9a09g057-icu # RZ/V2H(P)
24+
25+
'#interrupt-cells':
26+
description: The first cell is the SPI number of the NMI or the
27+
PORT_IRQ[0-15] interrupt, as per user manual. The second cell is used to
28+
specify the flag.
29+
const: 2
30+
31+
'#address-cells':
32+
const: 0
33+
34+
interrupt-controller: true
35+
36+
reg:
37+
maxItems: 1
38+
39+
interrupts:
40+
minItems: 58
41+
items:
42+
- description: NMI interrupt
43+
- description: PORT_IRQ0 interrupt
44+
- description: PORT_IRQ1 interrupt
45+
- description: PORT_IRQ2 interrupt
46+
- description: PORT_IRQ3 interrupt
47+
- description: PORT_IRQ4 interrupt
48+
- description: PORT_IRQ5 interrupt
49+
- description: PORT_IRQ6 interrupt
50+
- description: PORT_IRQ7 interrupt
51+
- description: PORT_IRQ8 interrupt
52+
- description: PORT_IRQ9 interrupt
53+
- description: PORT_IRQ10 interrupt
54+
- description: PORT_IRQ11 interrupt
55+
- description: PORT_IRQ12 interrupt
56+
- description: PORT_IRQ13 interrupt
57+
- description: PORT_IRQ14 interrupt
58+
- description: PORT_IRQ15 interrupt
59+
- description: GPIO interrupt, TINT0
60+
- description: GPIO interrupt, TINT1
61+
- description: GPIO interrupt, TINT2
62+
- description: GPIO interrupt, TINT3
63+
- description: GPIO interrupt, TINT4
64+
- description: GPIO interrupt, TINT5
65+
- description: GPIO interrupt, TINT6
66+
- description: GPIO interrupt, TINT7
67+
- description: GPIO interrupt, TINT8
68+
- description: GPIO interrupt, TINT9
69+
- description: GPIO interrupt, TINT10
70+
- description: GPIO interrupt, TINT11
71+
- description: GPIO interrupt, TINT12
72+
- description: GPIO interrupt, TINT13
73+
- description: GPIO interrupt, TINT14
74+
- description: GPIO interrupt, TINT15
75+
- description: GPIO interrupt, TINT16
76+
- description: GPIO interrupt, TINT17
77+
- description: GPIO interrupt, TINT18
78+
- description: GPIO interrupt, TINT19
79+
- description: GPIO interrupt, TINT20
80+
- description: GPIO interrupt, TINT21
81+
- description: GPIO interrupt, TINT22
82+
- description: GPIO interrupt, TINT23
83+
- description: GPIO interrupt, TINT24
84+
- description: GPIO interrupt, TINT25
85+
- description: GPIO interrupt, TINT26
86+
- description: GPIO interrupt, TINT27
87+
- description: GPIO interrupt, TINT28
88+
- description: GPIO interrupt, TINT29
89+
- description: GPIO interrupt, TINT30
90+
- description: GPIO interrupt, TINT31
91+
- description: Software interrupt, INTA55_0
92+
- description: Software interrupt, INTA55_1
93+
- description: Software interrupt, INTA55_2
94+
- description: Software interrupt, INTA55_3
95+
- description: Error interrupt to CA55
96+
- description: GTCCRA compare match/input capture (U0)
97+
- description: GTCCRB compare match/input capture (U0)
98+
- description: GTCCRA compare match/input capture (U1)
99+
- description: GTCCRB compare match/input capture (U1)
100+
101+
interrupt-names:
102+
minItems: 58
103+
items:
104+
- const: nmi
105+
- const: port_irq0
106+
- const: port_irq1
107+
- const: port_irq2
108+
- const: port_irq3
109+
- const: port_irq4
110+
- const: port_irq5
111+
- const: port_irq6
112+
- const: port_irq7
113+
- const: port_irq8
114+
- const: port_irq9
115+
- const: port_irq10
116+
- const: port_irq11
117+
- const: port_irq12
118+
- const: port_irq13
119+
- const: port_irq14
120+
- const: port_irq15
121+
- const: tint0
122+
- const: tint1
123+
- const: tint2
124+
- const: tint3
125+
- const: tint4
126+
- const: tint5
127+
- const: tint6
128+
- const: tint7
129+
- const: tint8
130+
- const: tint9
131+
- const: tint10
132+
- const: tint11
133+
- const: tint12
134+
- const: tint13
135+
- const: tint14
136+
- const: tint15
137+
- const: tint16
138+
- const: tint17
139+
- const: tint18
140+
- const: tint19
141+
- const: tint20
142+
- const: tint21
143+
- const: tint22
144+
- const: tint23
145+
- const: tint24
146+
- const: tint25
147+
- const: tint26
148+
- const: tint27
149+
- const: tint28
150+
- const: tint29
151+
- const: tint30
152+
- const: tint31
153+
- const: int-ca55-0
154+
- const: int-ca55-1
155+
- const: int-ca55-2
156+
- const: int-ca55-3
157+
- const: icu-error-ca55
158+
- const: gpt-u0-gtciada
159+
- const: gpt-u0-gtciadb
160+
- const: gpt-u1-gtciada
161+
- const: gpt-u1-gtciadb
162+
163+
clocks:
164+
maxItems: 1
165+
166+
power-domains:
167+
maxItems: 1
168+
169+
resets:
170+
maxItems: 1
171+
172+
required:
173+
- compatible
174+
- reg
175+
- '#interrupt-cells'
176+
- '#address-cells'
177+
- interrupt-controller
178+
- interrupts
179+
- interrupt-names
180+
- clocks
181+
- power-domains
182+
- resets
183+
184+
unevaluatedProperties: false
185+
186+
examples:
187+
- |
188+
#include <dt-bindings/interrupt-controller/arm-gic.h>
189+
#include <dt-bindings/clock/renesas-cpg-mssr.h>
190+
191+
icu: interrupt-controller@10400000 {
192+
compatible = "renesas,r9a09g057-icu";
193+
reg = <0x10400000 0x10000>;
194+
#interrupt-cells = <2>;
195+
#address-cells = <0>;
196+
interrupt-controller;
197+
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
198+
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
199+
<GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
200+
<GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
201+
<GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
202+
<GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
203+
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
204+
<GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
205+
<GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
206+
<GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
207+
<GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
208+
<GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
209+
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
210+
<GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
211+
<GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
212+
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
213+
<GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
214+
<GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH>,
215+
<GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH>,
216+
<GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH>,
217+
<GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH>,
218+
<GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH>,
219+
<GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>,
220+
<GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH>,
221+
<GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH>,
222+
<GIC_SPI 427 IRQ_TYPE_LEVEL_HIGH>,
223+
<GIC_SPI 428 IRQ_TYPE_LEVEL_HIGH>,
224+
<GIC_SPI 429 IRQ_TYPE_LEVEL_HIGH>,
225+
<GIC_SPI 430 IRQ_TYPE_LEVEL_HIGH>,
226+
<GIC_SPI 431 IRQ_TYPE_LEVEL_HIGH>,
227+
<GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
228+
<GIC_SPI 433 IRQ_TYPE_LEVEL_HIGH>,
229+
<GIC_SPI 434 IRQ_TYPE_LEVEL_HIGH>,
230+
<GIC_SPI 435 IRQ_TYPE_LEVEL_HIGH>,
231+
<GIC_SPI 436 IRQ_TYPE_LEVEL_HIGH>,
232+
<GIC_SPI 437 IRQ_TYPE_LEVEL_HIGH>,
233+
<GIC_SPI 438 IRQ_TYPE_LEVEL_HIGH>,
234+
<GIC_SPI 439 IRQ_TYPE_LEVEL_HIGH>,
235+
<GIC_SPI 440 IRQ_TYPE_LEVEL_HIGH>,
236+
<GIC_SPI 441 IRQ_TYPE_LEVEL_HIGH>,
237+
<GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>,
238+
<GIC_SPI 443 IRQ_TYPE_LEVEL_HIGH>,
239+
<GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>,
240+
<GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH>,
241+
<GIC_SPI 446 IRQ_TYPE_LEVEL_HIGH>,
242+
<GIC_SPI 447 IRQ_TYPE_LEVEL_HIGH>,
243+
<GIC_SPI 448 IRQ_TYPE_LEVEL_HIGH>,
244+
<GIC_SPI 449 IRQ_TYPE_LEVEL_HIGH>,
245+
<GIC_SPI 450 IRQ_TYPE_LEVEL_HIGH>,
246+
<GIC_SPI 262 IRQ_TYPE_EDGE_RISING>,
247+
<GIC_SPI 263 IRQ_TYPE_EDGE_RISING>,
248+
<GIC_SPI 264 IRQ_TYPE_EDGE_RISING>,
249+
<GIC_SPI 265 IRQ_TYPE_EDGE_RISING>,
250+
<GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>,
251+
<GIC_SPI 451 IRQ_TYPE_LEVEL_HIGH>,
252+
<GIC_SPI 452 IRQ_TYPE_LEVEL_HIGH>,
253+
<GIC_SPI 453 IRQ_TYPE_LEVEL_HIGH>,
254+
<GIC_SPI 454 IRQ_TYPE_LEVEL_HIGH>;
255+
interrupt-names = "nmi",
256+
"port_irq0", "port_irq1", "port_irq2",
257+
"port_irq3", "port_irq4", "port_irq5",
258+
"port_irq6", "port_irq7", "port_irq8",
259+
"port_irq9", "port_irq10", "port_irq11",
260+
"port_irq12", "port_irq13", "port_irq14",
261+
"port_irq15",
262+
"tint0", "tint1", "tint2", "tint3",
263+
"tint4", "tint5", "tint6", "tint7",
264+
"tint8", "tint9", "tint10", "tint11",
265+
"tint12", "tint13", "tint14", "tint15",
266+
"tint16", "tint17", "tint18", "tint19",
267+
"tint20", "tint21", "tint22", "tint23",
268+
"tint24", "tint25", "tint26", "tint27",
269+
"tint28", "tint29", "tint30", "tint31",
270+
"int-ca55-0", "int-ca55-1",
271+
"int-ca55-2", "int-ca55-3",
272+
"icu-error-ca55",
273+
"gpt-u0-gtciada", "gpt-u0-gtciadb",
274+
"gpt-u1-gtciada", "gpt-u1-gtciadb";
275+
clocks = <&cpg CPG_MOD 0x5>;
276+
power-domains = <&cpg>;
277+
resets = <&cpg 0x36>;
278+
};

0 commit comments

Comments
 (0)