summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-09-15 11:11:31 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-09-18 10:49:06 +0200
commit9747331dcbc538831ec6b64dd2a6a42d20bc5949 (patch)
tree1b4a55ec75bc97e17633df7b6ae9feedbf6bbcc1
parent5c6bc410a53a75e117e6aaa6355e19228a7d092a (diff)
bsps/leon3: Make GPTIMER fall back mandatory
Using the auto reload counter which generates the clock ticks for the timecounter or CPU counter is quite difficult and only works in uniprocessor configurations. Update #4954.
-rw-r--r--bsps/sparc/leon3/clock/ckinit.c35
-rw-r--r--bsps/sparc/leon3/include/bsp/leon3.h4
-rw-r--r--bsps/sparc/leon3/start/cpucounter.c2
3 files changed, 3 insertions, 38 deletions
diff --git a/bsps/sparc/leon3/clock/ckinit.c b/bsps/sparc/leon3/clock/ckinit.c
index eea4649fa3..d800f01e4a 100644
--- a/bsps/sparc/leon3/clock/ckinit.c
+++ b/bsps/sparc/leon3/clock/ckinit.c
@@ -69,19 +69,6 @@ static struct timecounter leon3_tc;
static void leon3_tc_tick_default(void)
{
-#if !defined(RTEMS_SMP)
- SPARC_Counter *counter;
- rtems_interrupt_level level;
-
- counter = &_SPARC_Counter;
- rtems_interrupt_local_disable(level);
-
- grlib_store_32(&LEON3_IrqCtrl_Regs->iclear, counter->pending_mask);
- counter->accumulated += counter->interval;
-
- rtems_interrupt_local_enable(level);
-#endif
-
rtems_timecounter_tick();
}
@@ -238,29 +225,11 @@ static void leon3_clock_use_gptimer(
gptimer_timer *timer
)
{
-#ifdef RTEMS_SMP
/*
- * The GR712RC for example has no timestamp unit in the interrupt
- * controller. At least on SMP configurations we must use a second timer
- * in free running mode for the timecounter. The timer is initialized by
- * leon3_counter_initialize().
+ * As a fall back, use a second timer in free-running mode for the
+ * timecounter. The timer is initialized by leon3_counter_initialize().
*/
tc->tc_get_timecount = _SPARC_Get_timecount_down;
-#else
- SPARC_Counter *counter;
-
- counter = &_SPARC_Counter;
- counter->read_isr_disabled = _SPARC_Counter_read_clock_isr_disabled;
- counter->read = _SPARC_Counter_read_clock;
- counter->counter_register = &timer->tcntval;
- counter->pending_register = &LEON3_IrqCtrl_Regs->ipend;
- counter->pending_mask = UINT32_C(1) << clkirq;
- counter->accumulated = rtems_configuration_get_microseconds_per_tick();
- counter->interval = rtems_configuration_get_microseconds_per_tick();
-
- tc->tc_get_timecount = _SPARC_Get_timecount_clock;
-#endif
-
tc->tc_frequency = LEON3_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER,
rtems_timecounter_install(tc);
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h
index fdb43b5817..84790b590f 100644
--- a/bsps/sparc/leon3/include/bsp/leon3.h
+++ b/bsps/sparc/leon3/include/bsp/leon3.h
@@ -188,11 +188,7 @@ static inline uint32_t leon3_get_cpu_count( const irqamp *regs )
* @brief This constant defines the index of the GPTIMER timer used by the
* CPU counter if the CPU counter uses the GPTIMER.
*/
-#if defined(RTEMS_SMP)
#define LEON3_COUNTER_GPTIMER_INDEX ( LEON3_CLOCK_INDEX + 1 )
-#else
-#define LEON3_COUNTER_GPTIMER_INDEX LEON3_CLOCK_INDEX
-#endif
/**
* @brief This constant defines the frequency set by the boot loader of the
diff --git a/bsps/sparc/leon3/start/cpucounter.c b/bsps/sparc/leon3/start/cpucounter.c
index a6db7677a3..374e43c9b1 100644
--- a/bsps/sparc/leon3/start/cpucounter.c
+++ b/bsps/sparc/leon3/start/cpucounter.c
@@ -89,7 +89,7 @@ static void leon3_counter_use_gptimer(SPARC_Counter *counter, gptimer *gpt)
counter->read = _SPARC_Counter_read_down;
counter->counter_register = &timer->tcntval;
- /* Make timer free running */
+ /* Make timer free-running */
grlib_store_32(&timer->trldval, 0xffffffff);
grlib_store_32(&timer->tctrl, GPTIMER_TCTRL_EN | GPTIMER_TCTRL_RS);