Skip to content

Commit db020be

Browse files
committed
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner: - Consolidation of softirq pending: The softirq mask and its accessors/mutators have many implementations scattered around many architectures. Most do the same things consisting in a field in a per-cpu struct (often irq_cpustat_t) accessed through per-cpu ops. We can provide instead a generic efficient version that most of them can use. In fact s390 is the only exception because the field is stored in lowcore. - Support for level!?! triggered MSI (ARM) Over the past couple of years, we've seen some SoCs coming up with ways of signalling level interrupts using a new flavor of MSIs, where the MSI controller uses two distinct messages: one that raises a virtual line, and one that lowers it. The target MSI controller is in charge of maintaining the state of the line. This allows for a much simplified HW signal routing (no need to have hundreds of discrete lines to signal level interrupts if you already have a memory bus), but results in a departure from the current idea the kernel has of MSIs. - Support for Meson-AXG GPIO irqchip - Large stm32 irqchip rework (suspend/resume, hierarchical domains) - More SPDX conversions * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits) ARM: dts: stm32: Add exti support to stm32mp157 pinctrl ARM: dts: stm32: Add exti support for stm32mp157c pinctrl/stm32: Add irq_eoi for stm32gpio irqchip irqchip/stm32: Add suspend/resume support for hierarchy domain irqchip/stm32: Add stm32mp1 support with hierarchy domain irqchip/stm32: Prepare common functions irqchip/stm32: Add host and driver data structures irqchip/stm32: Add suspend support irqchip/stm32: Add falling pending register support irqchip/stm32: Checkpatch fix irqchip/stm32: Optimizes and cleans up stm32-exti irq_domain irqchip/meson-gpio: Add support for Meson-AXG SoCs dt-bindings: interrupt-controller: New binding for Meson-AXG SoC dt-bindings: interrupt-controller: Fix the double quotes softirq/s390: Move default mutators of overwritten softirq mask to s390 softirq/x86: Switch to generic local_softirq_pending() implementation softirq/sparc: Switch to generic local_softirq_pending() implementation softirq/powerpc: Switch to generic local_softirq_pending() implementation softirq/parisc: Switch to generic local_softirq_pending() implementation softirq/ia64: Switch to generic local_softirq_pending() implementation ...
2 parents d09a8e6 + 65441ba commit db020be

File tree

35 files changed

+1079
-222
lines changed

35 files changed

+1079
-222
lines changed

Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ number of interrupt exposed depends on the SoC.
99

1010
Required properties:
1111

12-
- compatible : must have "amlogic,meson8-gpio-intc” and either
13-
“amlogic,meson8-gpio-intc” for meson8 SoCs (S802) or
14-
“amlogic,meson8b-gpio-intc” for meson8b SoCs (S805) or
15-
“amlogic,meson-gxbb-gpio-intc” for GXBB SoCs (S905) or
16-
“amlogic,meson-gxl-gpio-intc” for GXL SoCs (S905X, S912)
12+
- compatible : must have "amlogic,meson8-gpio-intc" and either
13+
"amlogic,meson8-gpio-intc" for meson8 SoCs (S802) or
14+
"amlogic,meson8b-gpio-intc" for meson8b SoCs (S805) or
15+
"amlogic,meson-gxbb-gpio-intc" for GXBB SoCs (S905) or
16+
"amlogic,meson-gxl-gpio-intc" for GXL SoCs (S905X, S912)
17+
"amlogic,meson-axg-gpio-intc" for AXG SoCs (A113D, A113X)
1718
- interrupt-parent : a phandle to the GIC the interrupts are routed to.
1819
Usually this is provided at the root level of the device tree as it is
1920
common to most of the SoC.

Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ Optional
5757
occupied by the redistributors. Required if more than one such
5858
region is present.
5959

60+
- msi-controller: Boolean property. Identifies the node as an MSI
61+
controller. Only present if the Message Based Interrupt
62+
functionnality is being exposed by the HW, and the mbi-ranges
63+
property present.
64+
65+
- mbi-ranges: A list of pairs <intid span>, where "intid" is the first
66+
SPI of a range that can be used an MBI, and "span" the size of that
67+
range. Multiple ranges can be provided. Requires "msi-controller" to
68+
be set.
69+
70+
- mbi-alias: Address property. Base address of an alias of the GICD
71+
region containing only the {SET,CLR}SPI registers to be used if
72+
isolation is required, and if supported by the HW.
73+
6074
Sub-nodes:
6175

6276
PPI affinity can be expressed as a single "ppi-partitions" node,
@@ -99,6 +113,9 @@ Examples:
99113
<0x0 0x2c020000 0 0x2000>; // GICV
100114
interrupts = <1 9 4>;
101115

116+
msi-controller;
117+
mbi-ranges = <256 128>;
118+
102119
gic-its@2c200000 {
103120
compatible = "arm,gic-v3-its";
104121
msi-controller;

Documentation/devicetree/bindings/interrupt-controller/st,stm32-exti.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ Required properties:
55
- compatible: Should be:
66
"st,stm32-exti"
77
"st,stm32h7-exti"
8+
"st,stm32mp1-exti"
89
- reg: Specifies base physical address and size of the registers
910
- interrupt-controller: Indentifies the node as an interrupt controller
1011
- #interrupt-cells: Specifies the number of cells to encode an interrupt
1112
specifier, shall be 2
1213
- interrupts: interrupts references to primary interrupt controller
14+
(only needed for exti controller with multiple exti under
15+
same parent interrupt: st,stm32-exti and st,stm32h7-exti")
1316

1417
Example:
1518

arch/arm/boot/dts/stm32mp157-pinctrl.dtsi

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
#size-cells = <1>;
1313
compatible = "st,stm32mp157-pinctrl";
1414
ranges = <0 0x50002000 0xa400>;
15+
interrupt-parent = <&exti>;
16+
st,syscfg = <&exti 0x60 0xff>;
1517
pins-are-numbered;
1618

1719
gpioa: gpio@50002000 {
@@ -166,6 +168,8 @@
166168
compatible = "st,stm32mp157-z-pinctrl";
167169
ranges = <0 0x54004000 0x400>;
168170
pins-are-numbered;
171+
interrupt-parent = <&exti>;
172+
st,syscfg = <&exti 0x60 0xff>;
169173
status = "disabled";
170174

171175
gpioz: gpio@54004000 {

arch/arm/boot/dts/stm32mp157c.dtsi

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,13 @@
183183
status = "disabled";
184184
};
185185

186+
exti: interrupt-controller@5000d000 {
187+
compatible = "st,stm32mp1-exti", "syscon";
188+
interrupt-controller;
189+
#interrupt-cells = <2>;
190+
reg = <0x5000d000 0x400>;
191+
};
192+
186193
usart1: serial@5c000000 {
187194
compatible = "st,stm32h7-uart";
188195
reg = <0x5c000000 0x400>;

arch/ia64/include/asm/hardirq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
#define __ARCH_IRQ_STAT 1
1515

16-
#define local_softirq_pending() (local_cpu_data->softirq_pending)
16+
#define local_softirq_pending_ref ia64_cpu_info.softirq_pending
1717

1818
#include <linux/threads.h>
1919
#include <linux/irq.h>

arch/parisc/include/asm/hardirq.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,6 @@ DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
3434
#define __IRQ_STAT(cpu, member) (irq_stat[cpu].member)
3535
#define inc_irq_stat(member) this_cpu_inc(irq_stat.member)
3636
#define __inc_irq_stat(member) __this_cpu_inc(irq_stat.member)
37-
#define local_softirq_pending() this_cpu_read(irq_stat.__softirq_pending)
38-
39-
#define __ARCH_SET_SOFTIRQ_PENDING
40-
41-
#define set_softirq_pending(x) \
42-
this_cpu_write(irq_stat.__softirq_pending, (x))
43-
#define or_softirq_pending(x) this_cpu_or(irq_stat.__softirq_pending, (x))
44-
4537
#define ack_bad_irq(irq) WARN(1, "unexpected IRQ trap at vector %02x\n", irq)
4638

4739
#endif /* _PARISC_HARDIRQ_H */

arch/powerpc/include/asm/hardirq.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,8 @@ typedef struct {
2525
DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
2626

2727
#define __ARCH_IRQ_STAT
28-
29-
#define local_softirq_pending() __this_cpu_read(irq_stat.__softirq_pending)
30-
31-
#define __ARCH_SET_SOFTIRQ_PENDING
3228
#define __ARCH_IRQ_EXIT_IRQS_DISABLED
3329

34-
#define set_softirq_pending(x) __this_cpu_write(irq_stat.__softirq_pending, (x))
35-
#define or_softirq_pending(x) __this_cpu_or(irq_stat.__softirq_pending, (x))
36-
3730
static inline void ack_bad_irq(unsigned int irq)
3831
{
3932
printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq);

arch/s390/include/asm/hardirq.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include <asm/lowcore.h>
1515

1616
#define local_softirq_pending() (S390_lowcore.softirq_pending)
17+
#define set_softirq_pending(x) (S390_lowcore.softirq_pending = (x))
18+
#define or_softirq_pending(x) (S390_lowcore.softirq_pending |= (x))
1719

1820
#define __ARCH_IRQ_STAT
1921
#define __ARCH_HAS_DO_SOFTIRQ

arch/sh/kernel/irq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
4444

4545
seq_printf(p, "%*s: ", prec, "NMI");
4646
for_each_online_cpu(j)
47-
seq_printf(p, "%10u ", irq_stat[j].__nmi_count);
47+
seq_printf(p, "%10u ", nmi_count(j));
4848
seq_printf(p, " Non-maskable interrupts\n");
4949

5050
seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count));

0 commit comments

Comments
 (0)