summaryrefslogtreecommitdiff
path: root/bsps/sparc/leon3/clock/ckinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/sparc/leon3/clock/ckinit.c')
-rw-r--r--bsps/sparc/leon3/clock/ckinit.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/bsps/sparc/leon3/clock/ckinit.c b/bsps/sparc/leon3/clock/ckinit.c
index 613ad3509d..9f45d9814b 100644
--- a/bsps/sparc/leon3/clock/ckinit.c
+++ b/bsps/sparc/leon3/clock/ckinit.c
@@ -42,7 +42,7 @@
#include <bsp.h>
#include <bsp/fatal.h>
#include <bsp/irq.h>
-#include <leon.h>
+#include <bsp/leon3.h>
#include <rtems/rtems/intr.h>
#include <grlib/ambapp.h>
#include <grlib/irqamp.h>
@@ -148,7 +148,7 @@ static void leon3_tc_do_tick(void)
do { \
/* Assume timer found during BSP initialization */ \
if (LEON3_Timer_Regs) { \
- clkirq = (LEON3_Timer_Regs->cfg & 0xf8) >> 3; \
+ clkirq = (grlib_load_32(&LEON3_Timer_Regs->config) & 0xf8) >> 3; \
\
Adjust_clkirq_for_node(); \
} \
@@ -185,19 +185,22 @@ static void bsp_clock_handler_install(rtems_interrupt_handler isr)
static void leon3_clock_initialize(void)
{
irqamp_timestamp *irqmp_ts;
- volatile struct gptimer_regs *gpt;
+ gptimer_timer *timer;
struct timecounter *tc;
- irqmp_ts = irqamp_get_timestamp_registers(LEON3_IrqCtrl_Regs);
- gpt = LEON3_Timer_Regs;
- tc = &leon3_tc;
+ timer = &LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX];
- gpt->timer[LEON3_CLOCK_INDEX].reload =
- rtems_configuration_get_microseconds_per_tick() - 1;
- gpt->timer[LEON3_CLOCK_INDEX].ctrl =
- GPTIMER_TIMER_CTRL_EN | GPTIMER_TIMER_CTRL_RS |
- GPTIMER_TIMER_CTRL_LD | GPTIMER_TIMER_CTRL_IE;
+ grlib_store_32(
+ &timer->trldval,
+ rtems_configuration_get_microseconds_per_tick() - 1
+ );
+ grlib_store_32(
+ &timer->tctrl,
+ GPTIMER_TCTRL_EN | GPTIMER_TCTRL_RS | GPTIMER_TCTRL_LD | GPTIMER_TCTRL_IE
+ );
+ irqmp_ts = irqamp_get_timestamp_registers(LEON3_IrqCtrl_Regs);
+ tc = &leon3_tc;
leon3_up_counter_enable();
if (leon3_up_counter_is_available()) {
@@ -231,8 +234,10 @@ static void leon3_clock_initialize(void)
* controller. At least on SMP configurations we must use a second timer
* in free running mode for the timecounter.
*/
- gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].ctrl =
- GPTIMER_TIMER_CTRL_EN | GPTIMER_TIMER_CTRL_IE;
+ grlib_store_32(
+ &LEON3_Timer_Regs->timer[LEON3_COUNTER_GPTIMER_INDEX].tctrl,
+ GPTIMER_TCTRL_EN | GPTIMER_TCTRL_IE
+ );
tc->tc_get_timecount = _SPARC_Get_timecount_down;
#else
@@ -241,7 +246,7 @@ static void leon3_clock_initialize(void)
counter = &_SPARC_Counter_mutable;
counter->read_isr_disabled = _SPARC_Counter_read_clock_isr_disabled;
counter->read = _SPARC_Counter_read_clock;
- counter->counter_register = &gpt->timer[LEON3_CLOCK_INDEX].value;
+ counter->counter_register = &timer->tcntval;
counter->pending_register = grlib_load_32(&LEON3_IrqCtrl_Regs->ipend);
counter->pending_mask = UINT32_C(1) << clkirq;
counter->accumulated = rtems_configuration_get_microseconds_per_tick();