mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
bsps/leon3: Move code blocks
Move code blocks to simplify C preprocessor usage. Update #4954.
This commit is contained in:
@@ -48,8 +48,22 @@ static uint32_t leon3_timecounter_get_asr_22_23_up_counter(
|
|||||||
{
|
{
|
||||||
return leon3_up_counter_low();
|
return leon3_up_counter_low();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void leon3_counter_use_asr_22_23_up_counter(leon3_timecounter *tc)
|
||||||
|
{
|
||||||
|
tc->base.tc_get_timecount = leon3_timecounter_get_asr_22_23_up_counter;
|
||||||
|
tc->base.tc_frequency = leon3_up_counter_frequency();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following code blocks provide different CPU counter implementations.
|
||||||
|
* The implementation used is defined by build configuration options. For a
|
||||||
|
* particular chip, the best available hardware counter module may be selected
|
||||||
|
* by build configuration options. The default implementation tries to select
|
||||||
|
* the best module at runtime.
|
||||||
|
*/
|
||||||
|
|
||||||
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
|
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
|
||||||
|
|
||||||
CPU_Counter_ticks _CPU_Counter_read(void)
|
CPU_Counter_ticks _CPU_Counter_read(void)
|
||||||
@@ -91,7 +105,31 @@ static uint32_t leon3_timecounter_get_counter_down(struct timecounter *base)
|
|||||||
return -(*tc->counter_register);
|
return -(*tc->counter_register);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void leon3_counter_use_gptimer(
|
||||||
|
leon3_timecounter *tc,
|
||||||
|
gptimer *gpt
|
||||||
|
)
|
||||||
|
{
|
||||||
|
gptimer_timer *timer;
|
||||||
|
|
||||||
|
timer = &gpt->timer[LEON3_COUNTER_GPTIMER_INDEX];
|
||||||
|
|
||||||
|
/* Make timer free-running */
|
||||||
|
grlib_store_32(&timer->trldval, 0xffffffff);
|
||||||
|
grlib_store_32(&timer->tctrl, GPTIMER_TCTRL_EN | GPTIMER_TCTRL_RS);
|
||||||
|
|
||||||
|
tc->counter_register = &timer->tcntval;
|
||||||
|
tc->base.tc_get_timecount = leon3_timecounter_get_counter_down;
|
||||||
|
#if defined(LEON3_PLB_FREQUENCY_DEFINED_BY_GPTIMER)
|
||||||
|
tc->base.tc_frequency = LEON3_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER;
|
||||||
|
#else
|
||||||
|
tc->base.tc_frequency = ambapp_freq_get(ambapp_plb(), LEON3_Timer_Adev) /
|
||||||
|
(grlib_load_32(&gpt->sreload) + 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
|
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
|
||||||
|
|
||||||
static uint32_t leon3_timecounter_get_counter_up(struct timecounter *base)
|
static uint32_t leon3_timecounter_get_counter_up(struct timecounter *base)
|
||||||
{
|
{
|
||||||
leon3_timecounter *tc;
|
leon3_timecounter *tc;
|
||||||
@@ -99,8 +137,25 @@ static uint32_t leon3_timecounter_get_counter_up(struct timecounter *base)
|
|||||||
tc = (leon3_timecounter *) base;
|
tc = (leon3_timecounter *) base;
|
||||||
return *tc->counter_register;
|
return *tc->counter_register;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
static void leon3_counter_use_irqamp_timestamp(
|
||||||
|
leon3_timecounter *tc,
|
||||||
|
irqamp_timestamp *irqmp_ts
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/* Enable interrupt timestamping for an arbitrary interrupt line */
|
||||||
|
grlib_store_32(&irqmp_ts->itstmpc, IRQAMP_ITSTMPC_TSISEL(1));
|
||||||
|
|
||||||
|
tc->counter_register = &irqmp_ts->itcnt;
|
||||||
|
tc->base.tc_get_timecount = leon3_timecounter_get_counter_up;
|
||||||
|
#if defined(LEON3_PLB_FREQUENCY_DEFINED_BY_GPTIMER)
|
||||||
|
tc->base.tc_frequency = leon3_processor_local_bus_frequency();
|
||||||
|
#else
|
||||||
|
tc->base.tc_frequency = ambapp_freq_get(ambapp_plb(), LEON3_IrqCtrl_Adev);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* LEON3_IRQAMP_PROBE_TIMESTAMP */
|
||||||
#endif /* LEON3_HAS_ASR_22_23_UP_COUNTER */
|
#endif /* LEON3_HAS_ASR_22_23_UP_COUNTER */
|
||||||
|
|
||||||
static uint32_t leon3_timecounter_get_dummy(struct timecounter *base)
|
static uint32_t leon3_timecounter_get_dummy(struct timecounter *base)
|
||||||
@@ -128,59 +183,6 @@ uint32_t _CPU_Counter_frequency(void)
|
|||||||
return leon3_timecounter_instance.base.tc_frequency;
|
return leon3_timecounter_instance.base.tc_frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER) || \
|
|
||||||
defined(LEON3_PROBE_ASR_22_23_UP_COUNTER)
|
|
||||||
static void leon3_counter_use_asr_22_23_up_counter(leon3_timecounter *tc)
|
|
||||||
{
|
|
||||||
tc->base.tc_get_timecount = leon3_timecounter_get_asr_22_23_up_counter;
|
|
||||||
tc->base.tc_frequency = leon3_up_counter_frequency();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
|
|
||||||
static void leon3_counter_use_irqamp_timestamp(
|
|
||||||
leon3_timecounter *tc,
|
|
||||||
irqamp_timestamp *irqmp_ts
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Enable interrupt timestamping for an arbitrary interrupt line */
|
|
||||||
grlib_store_32(&irqmp_ts->itstmpc, IRQAMP_ITSTMPC_TSISEL(1));
|
|
||||||
|
|
||||||
tc->counter_register = &irqmp_ts->itcnt;
|
|
||||||
tc->base.tc_get_timecount = leon3_timecounter_get_counter_up;
|
|
||||||
#if defined(LEON3_PLB_FREQUENCY_DEFINED_BY_GPTIMER)
|
|
||||||
tc->base.tc_frequency = leon3_processor_local_bus_frequency();
|
|
||||||
#else
|
|
||||||
tc->base.tc_frequency = ambapp_freq_get(ambapp_plb(), LEON3_IrqCtrl_Adev);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
|
|
||||||
static void leon3_counter_use_gptimer(
|
|
||||||
leon3_timecounter *tc,
|
|
||||||
gptimer *gpt
|
|
||||||
)
|
|
||||||
{
|
|
||||||
gptimer_timer *timer;
|
|
||||||
|
|
||||||
timer = &gpt->timer[LEON3_COUNTER_GPTIMER_INDEX];
|
|
||||||
|
|
||||||
/* Make timer free-running */
|
|
||||||
grlib_store_32(&timer->trldval, 0xffffffff);
|
|
||||||
grlib_store_32(&timer->tctrl, GPTIMER_TCTRL_EN | GPTIMER_TCTRL_RS);
|
|
||||||
|
|
||||||
tc->counter_register = &timer->tcntval;
|
|
||||||
tc->base.tc_get_timecount = leon3_timecounter_get_counter_down;
|
|
||||||
#if defined(LEON3_PLB_FREQUENCY_DEFINED_BY_GPTIMER)
|
|
||||||
tc->base.tc_frequency = LEON3_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER;
|
|
||||||
#else
|
|
||||||
tc->base.tc_frequency = ambapp_freq_get(ambapp_plb(), LEON3_Timer_Adev) /
|
|
||||||
(grlib_load_32(&gpt->sreload) + 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void leon3_counter_initialize(void)
|
static void leon3_counter_initialize(void)
|
||||||
{
|
{
|
||||||
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
|
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
|
||||||
@@ -190,6 +192,8 @@ static void leon3_counter_initialize(void)
|
|||||||
|
|
||||||
#else /* !LEON3_HAS_ASR_22_23_UP_COUNTER */
|
#else /* !LEON3_HAS_ASR_22_23_UP_COUNTER */
|
||||||
|
|
||||||
|
/* Try to find the best CPU counter available */
|
||||||
|
|
||||||
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
|
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
|
||||||
irqamp_timestamp *irqmp_ts;
|
irqamp_timestamp *irqmp_ts;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user