Patchwork [2/2] ARM: mcx: fix local timer interrupt handling

login
register
mail settings
Submitter Marc Zyngier
Date Nov. 2, 2011, 5:30 p.m.
Message ID <1320255049-12447-3-git-send-email-marc.zyngier@arm.com>
Download mbox | patch
Permalink /patch/123303/
State New
Headers show

Comments

Marc Zyngier - Nov. 2, 2011, 5:30 p.m.
As local timer interrupts are now handled as normal interrupts,
remove the special case in the GIC handler.

Cc: Shawn Guo <shawn.guo@linaro.org>
Cc: Sascha Hauer <kernel@pengutronix.de>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/plat-mxc/gic.c |   11 ++---------
 1 files changed, 2 insertions(+), 9 deletions(-)
Uwe Kleine-König - Nov. 2, 2011, 6:27 p.m.
$Subject ~= s/cx/xc/;

Best regards
Uwe
Shawn Guo - Nov. 3, 2011, 4:35 a.m.
On 3 November 2011 01:30, Marc Zyngier <marc.zyngier@arm.com> wrote:
> As local timer interrupts are now handled as normal interrupts,
> remove the special case in the GIC handler.
>
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Cc: Sascha Hauer <kernel@pengutronix.de>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

I also noticed this problem and had a patch fixing it.  But due to the
tight Linaro Connect agenda, I have not got the chance to send it out.
 Glad to see this patch fixing the problem.

Acked-and-tested-by: Shawn Guo <shawn.guo@linaro.org>

> ---
>  arch/arm/plat-mxc/gic.c |   11 ++---------
>  1 files changed, 2 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c
> index b3b8eed..12f8f81 100644
> --- a/arch/arm/plat-mxc/gic.c
> +++ b/arch/arm/plat-mxc/gic.c
> @@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
>                if (irqnr == 1023)
>                        break;
>
> -               if (irqnr > 29 && irqnr < 1021)
> +               if (irqnr > 15 && irqnr < 1021)
>                        handle_IRQ(irqnr, regs);
>  #ifdef CONFIG_SMP
> -               else if (irqnr < 16) {
> +               else {
>                        writel_relaxed(irqstat, gic_cpu_base_addr +
>                                                GIC_CPU_EOI);
>                        handle_IPI(irqnr, regs);
>                }
>  #endif
> -#ifdef CONFIG_LOCAL_TIMERS
> -               else if (irqnr == 29) {
> -                       writel_relaxed(irqstat, gic_cpu_base_addr +
> -                                               GIC_CPU_EOI);
> -                       handle_local_timer(regs);
> -               }
> -#endif
>        } while (1);
>  }
> --
> 1.7.0.4
>
>
>
Sascha Hauer - Nov. 3, 2011, 6:55 a.m.
On Wed, Nov 02, 2011 at 05:30:49PM +0000, Marc Zyngier wrote:
> As local timer interrupts are now handled as normal interrupts,
> remove the special case in the GIC handler.
> 
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Cc: Sascha Hauer <kernel@pengutronix.de>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Ok, I'll pick this one up.

Sascha

> ---
>  arch/arm/plat-mxc/gic.c |   11 ++---------
>  1 files changed, 2 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c
> index b3b8eed..12f8f81 100644
> --- a/arch/arm/plat-mxc/gic.c
> +++ b/arch/arm/plat-mxc/gic.c
> @@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
>  		if (irqnr == 1023)
>  			break;
>  
> -		if (irqnr > 29 && irqnr < 1021)
> +		if (irqnr > 15 && irqnr < 1021)
>  			handle_IRQ(irqnr, regs);
>  #ifdef CONFIG_SMP
> -		else if (irqnr < 16) {
> +		else {
>  			writel_relaxed(irqstat, gic_cpu_base_addr +
>  						GIC_CPU_EOI);
>  			handle_IPI(irqnr, regs);
>  		}
>  #endif
> -#ifdef CONFIG_LOCAL_TIMERS
> -		else if (irqnr == 29) {
> -			writel_relaxed(irqstat, gic_cpu_base_addr +
> -						GIC_CPU_EOI);
> -			handle_local_timer(regs);
> -		}
> -#endif
>  	} while (1);
>  }
> -- 
> 1.7.0.4
> 
> 
>

Patch

diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c
index b3b8eed..12f8f81 100644
--- a/arch/arm/plat-mxc/gic.c
+++ b/arch/arm/plat-mxc/gic.c
@@ -28,21 +28,14 @@  asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
 		if (irqnr == 1023)
 			break;
 
-		if (irqnr > 29 && irqnr < 1021)
+		if (irqnr > 15 && irqnr < 1021)
 			handle_IRQ(irqnr, regs);
 #ifdef CONFIG_SMP
-		else if (irqnr < 16) {
+		else {
 			writel_relaxed(irqstat, gic_cpu_base_addr +
 						GIC_CPU_EOI);
 			handle_IPI(irqnr, regs);
 		}
 #endif
-#ifdef CONFIG_LOCAL_TIMERS
-		else if (irqnr == 29) {
-			writel_relaxed(irqstat, gic_cpu_base_addr +
-						GIC_CPU_EOI);
-			handle_local_timer(regs);
-		}
-#endif
 	} while (1);
 }