[BUG?] vic MULTI_IRQ_HANDLER (was [PATCH] ep93xx: Implement double buffering for M2M DMA channels)
Mika Westerberg
mika.westerberg at iki.fi
Tue Apr 3 13:43:07 EDT 2012
On Tue, Apr 03, 2012 at 06:08:12PM +0100, Will Deacon wrote:
> diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c
> index dcb004a..cb6b49a 100644
> --- a/arch/arm/common/vic.c
> +++ b/arch/arm/common/vic.c
> @@ -441,11 +441,9 @@ static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
> u32 stat, irq;
> int handled = 0;
>
> - stat = readl_relaxed(vic->base + VIC_IRQ_STATUS);
> - while (stat) {
> + while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) {
> irq = ffs(stat) - 1;
> handle_IRQ(irq_domain_to_irq(&vic->domain, irq), regs);
> - stat &= ~(1 << irq);
> handled = 1;
> }
>
I can confirm that the above patch fixes spurious interrupts on ep93xx.
More information about the linux-arm-kernel
mailing list