Commit 079a4601 authored by Andrew Bresticker's avatar Andrew Bresticker Committed by Ralf Baechle

MIPS: i8259: Use IRQ domains

Create a legacy IRQ domain for the 16 i8259 interrupts.
Signed-off-by: default avatarAndrew Bresticker <abrestic@chromium.org>
Reviewed-by: default avatarQais Yousef <qais.yousef@imgtec.com>
Tested-by: default avatarQais Yousef <qais.yousef@imgtec.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: Jeffrey Deans <jeffrey.deans@imgtec.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Qais Yousef <qais.yousef@imgtec.com>
Cc: Jonas Gorski <jogo@openwrt.org>
Cc: John Crispin <blogic@openwrt.org>
Cc: David Daney <ddaney.cavm@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/7804/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent f64e55dc
...@@ -975,6 +975,7 @@ config SYS_SUPPORTS_HOTPLUG_CPU ...@@ -975,6 +975,7 @@ config SYS_SUPPORTS_HOTPLUG_CPU
config I8259 config I8259
bool bool
select IRQ_DOMAIN
config MIPS_BONITO64 config MIPS_BONITO64
bool bool
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/syscore_ops.h> #include <linux/syscore_ops.h>
...@@ -308,6 +309,19 @@ static struct resource pic2_io_resource = { ...@@ -308,6 +309,19 @@ static struct resource pic2_io_resource = {
.flags = IORESOURCE_BUSY .flags = IORESOURCE_BUSY
}; };
static int i8259A_irq_domain_map(struct irq_domain *d, unsigned int virq,
irq_hw_number_t hw)
{
irq_set_chip_and_handler(virq, &i8259A_chip, handle_level_irq);
irq_set_probe(virq);
return 0;
}
static struct irq_domain_ops i8259A_ops = {
.map = i8259A_irq_domain_map,
.xlate = irq_domain_xlate_onecell,
};
/* /*
* On systems with i8259-style interrupt controllers we assume for * On systems with i8259-style interrupt controllers we assume for
* driver compatibility reasons interrupts 0 - 15 to be the i8259 * driver compatibility reasons interrupts 0 - 15 to be the i8259
...@@ -315,17 +329,17 @@ static struct resource pic2_io_resource = { ...@@ -315,17 +329,17 @@ static struct resource pic2_io_resource = {
*/ */
void __init init_i8259_irqs(void) void __init init_i8259_irqs(void)
{ {
int i; struct irq_domain *domain;
insert_resource(&ioport_resource, &pic1_io_resource); insert_resource(&ioport_resource, &pic1_io_resource);
insert_resource(&ioport_resource, &pic2_io_resource); insert_resource(&ioport_resource, &pic2_io_resource);
init_8259A(0); init_8259A(0);
for (i = I8259A_IRQ_BASE; i < I8259A_IRQ_BASE + 16; i++) { domain = irq_domain_add_legacy(NULL, 16, I8259A_IRQ_BASE, 0,
irq_set_chip_and_handler(i, &i8259A_chip, handle_level_irq); &i8259A_ops, NULL);
irq_set_probe(i); if (!domain)
} panic("Failed to add i8259 IRQ domain");
setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2); setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment