Merge master.kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[pandora-kernel.git] / arch / mips / gt64120 / wrppmc / irq.c
index 8605687..d3d9659 100644 (file)
 #include <asm/irq_cpu.h>
 #include <asm/gt64120.h>
 
-extern asmlinkage void handle_IRQ(void);
+asmlinkage void plat_irq_dispatch(void)
+{
+       unsigned int pending = read_c0_status() & read_c0_cause();
+
+       if (pending & STATUSF_IP7)
+               do_IRQ(WRPPMC_MIPS_TIMER_IRQ);  /* CPU Compare/Count internal timer */
+       else if (pending & STATUSF_IP6)
+               do_IRQ(WRPPMC_UART16550_IRQ);   /* UART 16550 port */
+       else if (pending & STATUSF_IP3)
+               do_IRQ(WRPPMC_PCI_INTA_IRQ);    /* PCI INT_A */
+       else
+               spurious_interrupt();
+}
 
 /**
  * Initialize GT64120 Interrupt Controller
@@ -50,14 +62,8 @@ void gt64120_init_pic(void)
 
 void __init arch_init_irq(void)
 {
-       /* enable all CPU interrupt bits. */
-       set_c0_status(ST0_IM);  /* IE bit is still 0 */
-
-       /* Install MIPS Interrupt Trap Vector */
-       set_except_vector(0, handle_IRQ);
-
        /* IRQ 0 - 7 are for MIPS common irq_cpu controller */
-       mips_cpu_irq_init(0);
+       mips_cpu_irq_init();
 
        gt64120_init_pic();
 }