Commit 8a13b02a authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge tag 'irqchip-5.7' of...

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)
parents ba947241 771df8cf
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -302,10 +302,13 @@ static int sa1111_retrigger_irq(struct irq_data *d)
			break;
	}

	if (i == 8)
	if (i == 8) {
		pr_err("Danger Will Robinson: failed to re-trigger IRQ%d\n",
		       d->irq);
	return i == 8 ? -1 : 0;
		return 0;
	}

	return 1;
}

static int sa1111_type_irq(struct irq_data *d, unsigned int flags)
+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ config MICROBLAZE
	select CPU_NO_EFFICIENT_FFS
	select MMU_GATHER_NO_RANGE if MMU
	select SPARSE_IRQ
	select GENERIC_IRQ_MULTI_HANDLER
	select HANDLE_DOMAIN_IRQ

# Endianness selection
choice
+0 −3
Original line number Diff line number Diff line
@@ -14,7 +14,4 @@
struct pt_regs;
extern void do_IRQ(struct pt_regs *regs);

/* should be defined in each interrupt controller driver */
extern unsigned int xintc_get_irq(void);

#endif /* _ASM_MICROBLAZE_IRQ_H */
+1 −20
Original line number Diff line number Diff line
@@ -20,29 +20,10 @@
#include <linux/irqchip.h>
#include <linux/of_irq.h>

static u32 concurrent_irq;

void __irq_entry do_IRQ(struct pt_regs *regs)
{
	unsigned int irq;
	struct pt_regs *old_regs = set_irq_regs(regs);
	trace_hardirqs_off();

	irq_enter();
	irq = xintc_get_irq();
next_irq:
	BUG_ON(!irq);
	generic_handle_irq(irq);

	irq = xintc_get_irq();
	if (irq != -1U) {
		pr_debug("next irq: %d\n", irq);
		++concurrent_irq;
		goto next_irq;
	}

	irq_exit();
	set_irq_regs(old_regs);
	handle_arch_irq(regs);
	trace_hardirqs_on();
}

+1 −1
Original line number Diff line number Diff line
@@ -157,5 +157,5 @@ void __init trap_init(void)
	/* Set the exception vector address */
	csr_write(CSR_TVEC, &handle_exception);
	/* Enable interrupts */
	csr_write(CSR_IE, IE_SIE | IE_EIE);
	csr_write(CSR_IE, IE_SIE);
}
Loading