diff options
Diffstat (limited to 'arch/microblaze/kernel/intc.c')
| -rw-r--r-- | arch/microblaze/kernel/intc.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c index 6eea6f92b84e..03172c1da770 100644 --- a/arch/microblaze/kernel/intc.c +++ b/arch/microblaze/kernel/intc.c | |||
| @@ -42,8 +42,16 @@ unsigned int nr_irq; | |||
| 42 | 42 | ||
| 43 | static void intc_enable_or_unmask(unsigned int irq) | 43 | static void intc_enable_or_unmask(unsigned int irq) |
| 44 | { | 44 | { |
| 45 | unsigned long mask = 1 << irq; | ||
| 45 | pr_debug("enable_or_unmask: %d\n", irq); | 46 | pr_debug("enable_or_unmask: %d\n", irq); |
| 46 | out_be32(INTC_BASE + SIE, 1 << irq); | 47 | out_be32(INTC_BASE + SIE, mask); |
| 48 | |||
| 49 | /* ack level irqs because they can't be acked during | ||
| 50 | * ack function since the handle_level_irq function | ||
| 51 | * acks the irq before calling the interrupt handler | ||
| 52 | */ | ||
| 53 | if (irq_desc[irq].status & IRQ_LEVEL) | ||
| 54 | out_be32(INTC_BASE + IAR, mask); | ||
| 47 | } | 55 | } |
| 48 | 56 | ||
| 49 | static void intc_disable_or_mask(unsigned int irq) | 57 | static void intc_disable_or_mask(unsigned int irq) |
