[rtems commit] leon, gptimer: start/reset must take RS and IP into account
    Daniel Hellstrom 
    danielh at rtems.org
       
    Mon Mar  6 06:58:44 UTC 2017
    
    
  
Module:    rtems
Branch:    master
Commit:    61cc024aca55960225e5d2f2f4f90128dc39267a
Changeset: http://git.rtems.org/rtems/commit/?id=61cc024aca55960225e5d2f2f4f90128dc39267a
Author:    Daniel Hellstrom <daniel at gaisler.com>
Date:      Mon Mar 21 15:02:58 2016 +0100
leon, gptimer: start/reset must take RS and IP into account
---
 c/src/lib/libbsp/sparc/shared/timer/gptimer.c | 6 ++++--
 1 file 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 0553f5d..f8c6da2 100644
--- a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
+++ b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
@@ -377,7 +377,8 @@ static 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;
 }
@@ -464,7 +465,8 @@ static 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);
 }
 
 static void gptimer_tlib_stop(struct tlib_dev *hand)
    
    
More information about the vc
mailing list