Re: [PATCH] Re: omap1510 MPU interupt BUG

Tony Lindgren
2006-01-20T18:43:08Z

[-- Attachment #1: Type: text/plain, Size: 837 bytes --]

* palmtt2 <palmtt2@mail.ru> [060116 01:01]:
> Dirk Behme wrote:
> >------------------------------------------------------------------------
> >
> >--- ./arch/arm/plat-omap/gpio.c_orig 2006-01-06 19:37:32.602154520 +0100
> >+++ ./arch/arm/plat-omap/gpio.c 2006-01-06 19:44:03.917665520 +0100
> >@@ -767,6 +767,9 @@ static void gpio_irq_handler(unsigned in
> > OMAP24XX_GPIO_LEVELDETECT0) |
> > __raw_readl(bank->base +
> > OMAP24XX_GPIO_LEVELDETECT1);
> >+ if(cpu_is_omap15xx())
> >+ if(bank->method == METHOD_MPUIO)
> >+ level_mask = 0xffff0000;
> >
> > /* clear edge sensitive interrupts before handler(s) are
> > called so that we don't miss any interrupt occurred while
> >
> >
> >
> >
> Patch to fixed MPUIO interrupt.
> Tested on linux-2.6.15-omap1.

Thanks, I'll push a slightly modified version below.

[-- Attachment #2: patch-1510-gpio-mpu-fix-modified --]
[-- Type: text/plain, Size: 462 bytes --]

diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index cf5ad29..cb740c3 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 in
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 =