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 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel