|
@@ -42,8 +42,16 @@ unsigned int nr_irq;
|
|
|
|
|
|
static void intc_enable_or_unmask(unsigned int irq)
|
|
|
{
|
|
|
+ unsigned long mask = 1 << irq;
|
|
|
pr_debug("enable_or_unmask: %d\n", irq);
|
|
|
- out_be32(INTC_BASE + SIE, 1 << irq);
|
|
|
+ out_be32(INTC_BASE + SIE, mask);
|
|
|
+
|
|
|
+ /* ack level irqs because they can't be acked during
|
|
|
+ * ack function since the handle_level_irq function
|
|
|
+ * acks the irq before calling the interrupt handler
|
|
|
+ */
|
|
|
+ if (irq_desc[irq].status & IRQ_LEVEL)
|
|
|
+ out_be32(INTC_BASE + IAR, mask);
|
|
|
}
|
|
|
|
|
|
static void intc_disable_or_mask(unsigned int irq)
|