From: Petukhov Nikolay Date: Fri, 20 Jan 2006 18:41:18 +0000 (-0800) Subject: [PATCH] ARM: OMAP: omap1510 MPU interrupt BUG X-Git-Tag: v2.6.16-omap1~122 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=6a4032de91af0a2ce941da539e41b861359ee02d;p=linux-2.6-omap-h63xx.git [PATCH] ARM: OMAP: omap1510 MPU interrupt BUG __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 --- diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index cf5ad2965c2..cb740c32ad3 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -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 +