summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2016-03-21 15:02:58 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2016-03-21 15:06:47 +0100
commitbb195c31cac8cf9767b4848ce41cfde3d49219ca (patch)
treefe1b3551e3eed7977ec42533a57b1638ad099236
parent9b4457dae716842143403c9fe790e78cb90aabba (diff)
leon: GPTIMER start/reset must take RS and IP into account
-rw-r--r--c/src/lib/libbsp/sparc/shared/timer/gptimer.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
index 9b09e26645..dd4a7695c5 100644
--- a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
+++ b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
@@ -422,7 +422,8 @@ void gptimer_tlib_reset(struct tlib_dev *hand)
{
struct gptimer_timer *timer = (struct gptimer_timer *)hand;
- timer->tregs->ctrl = 0;
+ timer->tregs->ctrl = (timer->tregs->ctrl & timer->irq_ack_mask) &
+ GPTIMER_CTRL_IP;
timer->tregs->reload = 0xffffffff;
timer->tregs->ctrl = GPTIMER_CTRL_LD;
}
@@ -493,7 +494,8 @@ void gptimer_tlib_start(struct tlib_dev *hand, int once)
ctrl = GPTIMER_CTRL_LD | GPTIMER_CTRL_EN;
if ( once == 0 )
ctrl |= GPTIMER_CTRL_RS; /* Restart Timer */
- timer->tregs->ctrl |= ctrl;
+ timer->tregs->ctrl = ctrl | (timer->tregs->ctrl & timer->irq_ack_mask &
+ ~GPTIMER_CTRL_RS);
}
void gptimer_tlib_stop(struct tlib_dev *hand)