microblaze: intc: Using irqchip
authorMichal Simek <michal.simek@xilinx.com>
Tue, 27 Aug 2013 08:49:00 +0000 (10:49 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 3 Sep 2013 09:24:48 +0000 (11:24 +0200)
- Move init_IRQ to irq.c
- Use IRQCHIP_DECLARE macro

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/microblaze/kernel/intc.c
arch/microblaze/kernel/irq.c

index ed056a0..07be937 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <asm/prom.h>
 #include <asm/irq.h>
+#include "../../drivers/irqchip/irqchip.h"
 
 static unsigned int intc_baseaddr;
 
@@ -115,13 +116,10 @@ static const struct irq_domain_ops xintc_irq_domain_ops = {
        .map = xintc_map,
 };
 
-void __init init_IRQ(void)
+static int __init xilinx_intc_of_init(struct device_node *intc,
+                                            struct device_node *parent)
 {
        u32 nr_irq, intr_mask;
-       struct device_node *intc = NULL;
-
-       intc = of_find_compatible_node(NULL, NULL, "xlnx,xps-intc-1.00.a");
-       BUG_ON(!intc);
 
        intc_baseaddr = be32_to_cpup(of_get_property(intc, "reg", NULL));
        intc_baseaddr = (unsigned long) ioremap(intc_baseaddr, PAGE_SIZE);
@@ -155,4 +153,8 @@ void __init init_IRQ(void)
                                                        (void *)intr_mask);
 
        irq_set_default_host(root_domain);
+
+       return 0;
 }
+
+IRQCHIP_DECLARE(xilinx_intc, "xlnx,xps-intc-1.00.a", xilinx_intc_of_init);
index b205b90..11e24de 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/seq_file.h>
 #include <linux/kernel_stat.h>
 #include <linux/irq.h>
+#include <linux/irqchip.h>
 #include <linux/of_irq.h>
 
 static u32 concurrent_irq;
@@ -44,3 +45,9 @@ next_irq:
        set_irq_regs(old_regs);
        trace_hardirqs_on();
 }
+
+void __init init_IRQ(void)
+{
+       /* process the entire interrupt tree in one go */
+       irqchip_init();
+}