summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2019-10-29 15:17:57 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2020-10-16 15:35:10 +0200
commit58b1beded81ce29555aa494c56453a61840fc56b (patch)
treef53654cee3a551c84c22cdefd0c5e5119fcae486
parent620cdcb542e7b0656e8388817953e0b7de8a9c5d (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 1d96e3b221..068c631af1 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);