[PATCH v2 3/9] bsps/leon3: Make GPTIMER fall back mandatory
Sebastian Huber
sebastian.huber at embedded-brains.de
Thu Sep 21 15:19:28 UTC 2023
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.
---
bsps/sparc/leon3/clock/ckinit.c | 35 ++--------------------------
bsps/sparc/leon3/include/bsp/leon3.h | 4 ----
bsps/sparc/leon3/start/cpucounter.c | 2 +-
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);
--
2.35.3
More information about the devel
mailing list