aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-ns9xxx/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-ns9xxx/time.c')
-rw-r--r--arch/arm/mach-ns9xxx/time.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/arm/mach-ns9xxx/time.c b/arch/arm/mach-ns9xxx/time.c
index b97d0c54a38..3327d302618 100644
--- a/arch/arm/mach-ns9xxx/time.c
+++ b/arch/arm/mach-ns9xxx/time.c
@@ -24,10 +24,24 @@ static u32 usecs_per_tick;
static irqreturn_t
ns9xxx_timer_interrupt(int irq, void *dev_id)
{
+ int timerno = irq - IRQ_TIMER0;
+ u32 tc;
+
write_seqlock(&xtime_lock);
timer_tick();
write_sequnlock(&xtime_lock);
+ /* clear irq */
+ tc = SYS_TC(timerno);
+ if (REGGET(tc, SYS_TCx, REN) == SYS_TCx_REN_DIS) {
+ REGSET(tc, SYS_TCx, TEN, DIS);
+ SYS_TC(timerno) = tc;
+ }
+ REGSET(tc, SYS_TCx, INTC, SET);
+ SYS_TC(timerno) = tc;
+ REGSET(tc, SYS_TCx, INTC, UNSET);
+ SYS_TC(timerno) = tc;
+
return IRQ_HANDLED;
}