Commit 33d9ff59 authored by steve@digidescorp.com's avatar steve@digidescorp.com Committed by Michal Simek

microblaze: Fix level interrupt ACKing

Level interrupts need to be ack'd in the unmask handler, as in powerpc.
Among other issues, this bug causes the system clock to appear to run at
double-speed.
Signed-off-by: default avatarSteven J. Magnani <steve@digidescorp.com>
Signed-off-by: default avatarMichal Simek <monstr@monstr.eu>
parent 833d0d8d
...@@ -42,8 +42,16 @@ unsigned int nr_irq; ...@@ -42,8 +42,16 @@ unsigned int nr_irq;
static void intc_enable_or_unmask(unsigned int irq) static void intc_enable_or_unmask(unsigned int irq)
{ {
unsigned long mask = 1 << irq;
pr_debug("enable_or_unmask: %d\n", 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) static void intc_disable_or_mask(unsigned int irq)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment