]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] ARM: OMAP: omap1510 MPU interrupt BUG
authorPetukhov Nikolay <palmtt2@mail.ru>
Fri, 20 Jan 2006 18:41:18 +0000 (10:41 -0800)
committerTony Lindgren <tony@atomide.com>
Fri, 20 Jan 2006 18:41:18 +0000 (10:41 -0800)
__raw_readl return 32bit, but MPU have 16 bit registers

example:
MPU isr=0x0001, but __raw_readl() return isr=0x00010001 -> virtual interrupt 16
desc_handle_irq(0, d, regs) - handled ok
desc_handle_irq(16, d, regs) - interrupt handler = NULL

arch/arm/plat-omap/gpio.c

index cf5ad2965c21c21af3839279c6205d11657a8176..cb740c32ad370bbeb13cfd9c686ded6815036e60 100644 (file)
@@ -764,6 +764,10 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc,
                u32 isr_saved, level_mask = 0;
 
                isr_saved = isr = __raw_readl(isr_reg);
+
+               if (cpu_is_omap15xx() && (bank->method == METHOD_MPUIO))
+                       isr &= 0x0000ffff;
+
                if (cpu_is_omap24xx())
                        level_mask =
                                __raw_readl(bank->base +