From 7ebc28cd1ae6648cb02c7db6c62e53d9a0110f14 Mon Sep 17 00:00:00 2001 From: Daniel Hellstrom Date: Mon, 19 Nov 2012 15:24:21 +0100 Subject: GPTIMER: Only probe pending bit on timer0 --- c/src/lib/libbsp/sparc/shared/timer/gptimer.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'c/src/lib/libbsp/sparc/shared') diff --git a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c index d093ca1bb2..2314a3b236 100644 --- a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c +++ b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c @@ -177,6 +177,7 @@ int gptimer_init1(struct drvmgr_dev *dev) int i, size; struct gptimer_timer *timer; union drvmgr_key_value *value; + unsigned char irq_ack_mask; #if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP) char timer_index[7]; #endif @@ -267,6 +268,16 @@ int gptimer_init1(struct drvmgr_dev *dev) /* Get Frequency that the timers are operating in (after prescaler) */ priv->base_freq = priv->base_clk / (priv->regs->scaler_reload + 1); + /* Stop Timer and probe Pending bit. In newer hardware the + * timer has pending bit is cleared by writing a one to it, + * whereas older versions it is cleared with a zero. + */ + priv->regs->timer[0].ctrl = GPTIMER_CTRL_IP; + if ((priv->regs->timer[0].ctrl & GPTIMER_CTRL_IP) != 0) + irq_ack_mask = ~GPTIMER_CTRL_IP; + else + irq_ack_mask = ~0; + priv->timer_cnt = timer_cnt; for (i=0; itimers[i]; @@ -274,16 +285,7 @@ int gptimer_init1(struct drvmgr_dev *dev) timer->tindex = i + timer_start; timer->tregs = ®s->timer[(int)timer->tindex]; timer->tdev.drv = &gptimer_tlib_drv; - - /* Stop Timer and probe Pending bit. In newer hardware the - * timer has pending bit is cleared by writing a one to it, - * whereas older versions it is cleared with a zero. - */ - timer->tregs->ctrl = GPTIMER_CTRL_IP; - if ((timer->tregs->ctrl & GPTIMER_CTRL_IP) != 0) - timer->irq_ack_mask = ~GPTIMER_CTRL_IP; - else - timer->irq_ack_mask = ~0; + timer->irq_ack_mask = irq_ack_mask; /* Register Timer at Timer Library */ #if defined(LEON3) && defined(RTEMS_DRVMGR_STARTUP) -- cgit v1.2.3