]> err.no Git - linux-2.6/blobdiff - arch/ppc/syslib/cpm2_pic.c
[PPC] Remove 83xx from arch/ppc
[linux-2.6] / arch / ppc / syslib / cpm2_pic.c
index 954b07fc1df391c05dace69fa6963b34c8bc7149..fb2d5842641a34c0806dac2d009971c77f263db6 100644 (file)
@@ -37,7 +37,7 @@ static        u_char  irq_to_siureg[] = {
 static u_char  irq_to_siubit[] = {
         0, 15, 14, 13, 12, 11, 10,  9,
         8,  7,  6,  5,  4,  3,  2,  1,
-        2,  1, 15, 14, 13, 12, 11, 10,
+        2,  1,  0, 14, 13, 12, 11, 10,
         9,  8,  7,  6,  5,  4,  3,  0,
        31, 30, 29, 28, 27, 26, 25, 24,
        23, 22, 21, 20, 19, 18, 17, 16,
@@ -107,6 +107,11 @@ static void cpm2_end_irq(unsigned int irq_nr)
                simr = &(cpm2_immr->im_intctl.ic_simrh);
                ppc_cached_irq_mask[word] |= 1 << bit;
                simr[word] = ppc_cached_irq_mask[word];
+               /*
+                * Work around large numbers of spurious IRQs on PowerPC 82xx
+                * systems.
+                */
+               mb();
        }
 }
 
@@ -118,7 +123,7 @@ static struct hw_interrupt_type cpm2_pic = {
        .end = cpm2_end_irq,
 };
 
-int cpm2_get_irq(struct pt_regs *regs)
+int cpm2_get_irq(void)
 {
        int irq;
         unsigned long bits;
@@ -166,7 +171,7 @@ void cpm2_init_IRQ(void)
        /* Enable chaining to OpenPIC, and make everything level
         */
        for (i = 0; i < NR_CPM_INTS; i++) {
-               irq_desc[i+CPM_IRQ_OFFSET].handler = &cpm2_pic;
+               irq_desc[i+CPM_IRQ_OFFSET].chip = &cpm2_pic;
                irq_desc[i+CPM_IRQ_OFFSET].status |= IRQ_LEVEL;
        }
 }