Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e851b58c authored by Catalin Marinas's avatar Catalin Marinas
Browse files

arm64: Use irqchip_init() for interrupt controller initialisation



This patch uses the generic irqchip_init() function for initialising the
interrupt controller on arm64. It also adds several definitions required
by the ARM GIC irqchip driver but does not enable ARM_GIC yet.

Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent a9a193ff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -19,5 +19,6 @@
#define __ASM_EXCEPTION_H

#define __exception	__attribute__((section(".exception.text")))
#define __exception_irq_entry	__exception

#endif	/* __ASM_EXCEPTION_H */
+5 −0
Original line number Diff line number Diff line
@@ -49,4 +49,9 @@ static inline void ack_bad_irq(unsigned int irq)

extern void handle_IRQ(unsigned int, struct pt_regs *);

/*
 * No arch-specific IRQ flags.
 */
#define set_irq_flags(irq, flags)

#endif /* __ASM_HARDIRQ_H */
+1 −0
Original line number Diff line number Diff line
@@ -4,5 +4,6 @@
#include <asm-generic/irq.h>

extern void (*handle_arch_irq)(struct pt_regs *);
extern void set_handle_irq(void (*handle_irq)(struct pt_regs *));

#endif
+9 −10
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
#include <linux/irq.h>
#include <linux/smp.h>
#include <linux/init.h>
#include <linux/of_irq.h>
#include <linux/irqchip.h>
#include <linux/seq_file.h>
#include <linux/ratelimit.h>

@@ -67,18 +67,17 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs)
	set_irq_regs(old_regs);
}

/*
 * Interrupt controllers supported by the kernel.
 */
static const struct of_device_id intctrl_of_match[] __initconst = {
	/* IRQ controllers { .compatible, .data } info to go here */
	{}
};
void __init set_handle_irq(void (*handle_irq)(struct pt_regs *))
{
	if (handle_arch_irq)
		return;

	handle_arch_irq = handle_irq;
}

void __init init_IRQ(void)
{
	of_irq_init(intctrl_of_match);

	irqchip_init();
	if (!handle_arch_irq)
		panic("No interrupt controller found.");
}