Skip to content

Commit 8a13b02

Browse files
committed
Merge tag 'irqchip-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip updates from Marc Zyngier: - Second batch of the GICv4.1 support saga - Level triggered interrupt support for the stm32 controller - Versatile-fpga chained interrupt fixes - DT support for cascaded VIC interrupt controller - RPi irqchip initialization fixes - Multi-instance support for the Xilinx interrupt controller - Multi-instance support for the PLIC interrupt controller - CPU hotplug support for the PLIC interrupt controller - Ingenic X1000 TCU support - Small fixes all over the shop (GICv3, GICv4, Xilinx, Atmel, sa1111) - Cleanups (setup_irq removal, zero-length array removal)
2 parents ba94724 + 771df8c commit 8a13b02

31 files changed

+964
-236
lines changed

arch/arm/common/sa1111.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,13 @@ static int sa1111_retrigger_irq(struct irq_data *d)
302302
break;
303303
}
304304

305-
if (i == 8)
305+
if (i == 8) {
306306
pr_err("Danger Will Robinson: failed to re-trigger IRQ%d\n",
307307
d->irq);
308-
return i == 8 ? -1 : 0;
308+
return 0;
309+
}
310+
311+
return 1;
309312
}
310313

311314
static int sa1111_type_irq(struct irq_data *d, unsigned int flags)

arch/microblaze/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ config MICROBLAZE
4747
select CPU_NO_EFFICIENT_FFS
4848
select MMU_GATHER_NO_RANGE if MMU
4949
select SPARSE_IRQ
50+
select GENERIC_IRQ_MULTI_HANDLER
51+
select HANDLE_DOMAIN_IRQ
5052

5153
# Endianness selection
5254
choice

arch/microblaze/include/asm/irq.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,4 @@
1414
struct pt_regs;
1515
extern void do_IRQ(struct pt_regs *regs);
1616

17-
/* should be defined in each interrupt controller driver */
18-
extern unsigned int xintc_get_irq(void);
19-
2017
#endif /* _ASM_MICROBLAZE_IRQ_H */

arch/microblaze/kernel/irq.c

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,10 @@
2020
#include <linux/irqchip.h>
2121
#include <linux/of_irq.h>
2222

23-
static u32 concurrent_irq;
24-
2523
void __irq_entry do_IRQ(struct pt_regs *regs)
2624
{
27-
unsigned int irq;
28-
struct pt_regs *old_regs = set_irq_regs(regs);
2925
trace_hardirqs_off();
30-
31-
irq_enter();
32-
irq = xintc_get_irq();
33-
next_irq:
34-
BUG_ON(!irq);
35-
generic_handle_irq(irq);
36-
37-
irq = xintc_get_irq();
38-
if (irq != -1U) {
39-
pr_debug("next irq: %d\n", irq);
40-
++concurrent_irq;
41-
goto next_irq;
42-
}
43-
44-
irq_exit();
45-
set_irq_regs(old_regs);
26+
handle_arch_irq(regs);
4627
trace_hardirqs_on();
4728
}
4829

arch/riscv/kernel/traps.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,5 @@ void __init trap_init(void)
157157
/* Set the exception vector address */
158158
csr_write(CSR_TVEC, &handle_exception);
159159
/* Enable interrupts */
160-
csr_write(CSR_IE, IE_SIE | IE_EIE);
160+
csr_write(CSR_IE, IE_SIE);
161161
}

drivers/irqchip/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ config IMX_IRQSTEER
458458
Support for the i.MX IRQSTEER interrupt multiplexer/remapper.
459459

460460
config IMX_INTMUX
461-
def_bool y if ARCH_MXC
461+
def_bool y if ARCH_MXC || COMPILE_TEST
462462
select IRQ_DOMAIN
463463
help
464464
Support for the i.MX INTMUX interrupt multiplexer.

drivers/irqchip/irq-atmel-aic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static int aic_retrigger(struct irq_data *d)
8383
irq_reg_writel(gc, d->mask, AT91_AIC_ISCR);
8484
irq_gc_unlock(gc);
8585

86-
return 0;
86+
return 1;
8787
}
8888

8989
static int aic_set_type(struct irq_data *d, unsigned type)

drivers/irqchip/irq-atmel-aic5.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ static int aic5_retrigger(struct irq_data *d)
128128
irq_reg_writel(bgc, 1, AT91_AIC5_ISCR);
129129
irq_gc_unlock(bgc);
130130

131-
return 0;
131+
return 1;
132132
}
133133

134134
static int aic5_set_type(struct irq_data *d, unsigned type)

drivers/irqchip/irq-bcm2835.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
| SHORTCUT1_MASK | SHORTCUT2_MASK)
6262

6363
#define REG_FIQ_CONTROL 0x0c
64+
#define FIQ_CONTROL_ENABLE BIT(7)
6465

6566
#define NR_BANKS 3
6667
#define IRQS_PER_BANK 32
@@ -135,6 +136,7 @@ static int __init armctrl_of_init(struct device_node *node,
135136
{
136137
void __iomem *base;
137138
int irq, b, i;
139+
u32 reg;
138140

139141
base = of_iomap(node, 0);
140142
if (!base)
@@ -157,6 +159,19 @@ static int __init armctrl_of_init(struct device_node *node,
157159
handle_level_irq);
158160
irq_set_probe(irq);
159161
}
162+
163+
reg = readl_relaxed(intc.enable[b]);
164+
if (reg) {
165+
writel_relaxed(reg, intc.disable[b]);
166+
pr_err(FW_BUG "Bootloader left irq enabled: "
167+
"bank %d irq %*pbl\n", b, IRQS_PER_BANK, &reg);
168+
}
169+
}
170+
171+
reg = readl_relaxed(base + REG_FIQ_CONTROL);
172+
if (reg & FIQ_CONTROL_ENABLE) {
173+
writel_relaxed(0, base + REG_FIQ_CONTROL);
174+
pr_err(FW_BUG "Bootloader left fiq enabled\n");
160175
}
161176

162177
if (is_2836) {

drivers/irqchip/irq-bcm7038-l1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct bcm7038_l1_chip {
5050

5151
struct bcm7038_l1_cpu {
5252
void __iomem *map_base;
53-
u32 mask_cache[0];
53+
u32 mask_cache[];
5454
};
5555

5656
/*

0 commit comments

Comments
 (0)