summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2019-10-29 15:17:57 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2020-09-02 10:53:07 +0200
commit9862cc9bfaff3589368993e534b6216c58059ad3 (patch)
tree5c24103a2e1f039b2decca86753c546250140bec
parent0b9877601d051a64ee98754ff654af6cea87268c (diff)
leon: restart and load timer counter at initialization
Without this smp05 and smpthreadlife01 tests may fail depending on how the boot loader initialized the GPTIMER. Before the time counter stopped counting when reaching zero, but tests could work since it could take 2^32 us before stopping. The timer driver will potentially overwrite this, but it happens later due to the initialization order having RTEMS_SYSINIT_CPU_COUNTER very early.
-rw-r--r--bsps/sparc/leon3/start/cpucounter.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/bsps/sparc/leon3/start/cpucounter.c b/bsps/sparc/leon3/start/cpucounter.c
index 007bb6d8ec..4a0a5fe116 100644
--- a/bsps/sparc/leon3/start/cpucounter.c
+++ b/bsps/sparc/leon3/start/cpucounter.c
@@ -60,7 +60,10 @@ static void leon3_counter_initialize(void)
counter->counter_register = &gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].value;
/* Enable timer just in case no clock driver is configured */
- gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].ctrl |= GPTIMER_TIMER_CTRL_EN;
+ gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].reload = 0xffffffff;
+ gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].ctrl |= GPTIMER_TIMER_CTRL_EN |
+ GPTIMER_TIMER_CTRL_RS |
+ GPTIMER_TIMER_CTRL_LD;
leon3_counter_frequency = ambapp_freq_get(&ambapp_plb, LEON3_Timer_Adev) /
(gpt->scaler_reload + 1);