public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH, RESEND] microblaze: Fix level interrupt ACKing
@ 2009-11-17 14:43 steve
  2009-11-20 11:07 ` Michal Simek
  0 siblings, 1 reply; 4+ messages in thread
From: steve @ 2009-11-17 14:43 UTC (permalink / raw)
  To: microblaze-uclinux; +Cc: monstr, linux-kernel, Steven J. Magnani

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: Steven J. Magnani <steve@digidescorp.com>
---
diff -uprN a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c
--- a/arch/microblaze/kernel/intc.c	2009-06-02 15:26:28.000000000 -0500
+++ b/arch/microblaze/kernel/intc.c	2009-06-02 15:27:39.000000000 -0500
@@ -41,8 +41,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)


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-11-24 12:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-17 14:43 [PATCH, RESEND] microblaze: Fix level interrupt ACKing steve
2009-11-20 11:07 ` Michal Simek
2009-11-20 18:49   ` Steven J. Magnani
2009-11-24 12:45     ` Michal Simek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox