CRIS: v32: Better irq mapping code
authorJesper Nilsson <jesper.nilsson@axis.com>
Tue, 3 Aug 2010 11:52:45 +0000 (13:52 +0200)
committerJesper Nilsson <jesper.nilsson@axis.com>
Wed, 4 Aug 2010 11:00:45 +0000 (13:00 +0200)
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
arch/cris/arch-v32/kernel/irq.c

index 0b1febe..2ed48ae 100644 (file)
@@ -97,7 +97,11 @@ extern void breakh_BUG(void);
 /*
  * Build the IRQ handler stubs using macros from irq.h.
  */
+#ifdef CONFIG_CRIS_MACH_ARTPEC3
+BUILD_TIMER_IRQ(0x31, 0)
+#else
 BUILD_IRQ(0x31)
+#endif
 BUILD_IRQ(0x32)
 BUILD_IRQ(0x33)
 BUILD_IRQ(0x34)
@@ -123,7 +127,11 @@ BUILD_IRQ(0x47)
 BUILD_IRQ(0x48)
 BUILD_IRQ(0x49)
 BUILD_IRQ(0x4a)
+#ifdef CONFIG_ETRAXFS
+BUILD_TIMER_IRQ(0x4b, 0)
+#else
 BUILD_IRQ(0x4b)
+#endif
 BUILD_IRQ(0x4c)
 BUILD_IRQ(0x4d)
 BUILD_IRQ(0x4e)
@@ -199,25 +207,20 @@ block_irq(int irq, int cpu)
         unsigned long flags;
 
        spin_lock_irqsave(&irq_lock, flags);
-       if (irq - FIRST_IRQ < 32)
+       /* Remember, 1 let thru, 0 block. */
+       if (irq - FIRST_IRQ < 32) {
                intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
                        rw_mask, 0);
-       else
-               intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
-                       rw_mask, 1);
-
-       /* Remember; 1 let thru, 0 block. */
-       if (irq - FIRST_IRQ < 32)
                intr_mask &= ~(1 << (irq - FIRST_IRQ));
-       else
-               intr_mask &= ~(1 << (irq - FIRST_IRQ - 32));
-
-       if (irq - FIRST_IRQ < 32)
                REG_WR_INT_VECT(intr_vect, irq_regs[cpu], rw_mask,
                        0, intr_mask);
-       else
+       } else {
+               intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
+                       rw_mask, 1);
+               intr_mask &= ~(1 << (irq - FIRST_IRQ - 32));
                REG_WR_INT_VECT(intr_vect, irq_regs[cpu], rw_mask,
                        1, intr_mask);
+       }
         spin_unlock_irqrestore(&irq_lock, flags);
 }
 
@@ -228,26 +231,20 @@ unblock_irq(int irq, int cpu)
         unsigned long flags;
 
         spin_lock_irqsave(&irq_lock, flags);
-       if (irq - FIRST_IRQ < 32)
+       /* Remember, 1 let thru, 0 block. */
+       if (irq - FIRST_IRQ < 32) {
                intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
                        rw_mask, 0);
-       else
-               intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
-                       rw_mask, 1);
-
-       /* Remember; 1 let thru, 0 block. */
-       if (irq - FIRST_IRQ < 32)
                intr_mask |= (1 << (irq - FIRST_IRQ));
-       else
-               intr_mask |= (1 << (irq - FIRST_IRQ - 32));
-
-       if (irq - FIRST_IRQ < 32)
                REG_WR_INT_VECT(intr_vect, irq_regs[cpu], rw_mask,
                        0, intr_mask);
-       else
+       } else {
+               intr_mask = REG_RD_INT_VECT(intr_vect, irq_regs[cpu],
+                       rw_mask, 1);
+               intr_mask |= (1 << (irq - FIRST_IRQ - 32));
                REG_WR_INT_VECT(intr_vect, irq_regs[cpu], rw_mask,
                        1, intr_mask);
-
+       }
         spin_unlock_irqrestore(&irq_lock, flags);
 }