summaryrefslogtreecommitdiffstats
path: root/bsps/sparc/leon3/start
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-19 09:26:33 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-07-14 12:21:33 +0200
commitd85c505ab0d9699600b3e5724a4badf6dbc1314b (patch)
treef7d440f7af4a718c7db4dbf0e9f83e41195b354d /bsps/sparc/leon3/start
parentbsp/leon3: Move system control register support (diff)
downloadrtems-d85c505ab0d9699600b3e5724a4badf6dbc1314b.tar.bz2
bsp/leon3: Use new GPTIMER register block API
Diffstat (limited to 'bsps/sparc/leon3/start')
-rw-r--r--bsps/sparc/leon3/start/amba.c9
-rw-r--r--bsps/sparc/leon3/start/bspdelay.c8
-rw-r--r--bsps/sparc/leon3/start/cpucounter.c20
3 files changed, 22 insertions, 15 deletions
diff --git a/bsps/sparc/leon3/start/amba.c b/bsps/sparc/leon3/start/amba.c
index c1e26d316c..d4494224c4 100644
--- a/bsps/sparc/leon3/start/amba.c
+++ b/bsps/sparc/leon3/start/amba.c
@@ -118,7 +118,8 @@ RTEMS_SYSINIT_ITEM(
/* Pointers to Interrupt Controller configuration registers */
irqamp *LEON3_IrqCtrl_Regs;
struct ambapp_dev *LEON3_IrqCtrl_Adev;
-volatile struct gptimer_regs *LEON3_Timer_Regs;
+
+gptimer *LEON3_Timer_Regs;
struct ambapp_dev *LEON3_Timer_Adev;
/*
@@ -170,14 +171,14 @@ static void amba_initialize(void)
VENDOR_GAISLER, GAISLER_GPTIMER,
ambapp_find_by_idx, &leon3_timer_core_index);
if (adev) {
- LEON3_Timer_Regs = (volatile struct gptimer_regs *)DEV_TO_APB(adev)->start;
+ LEON3_Timer_Regs = (gptimer *)DEV_TO_APB(adev)->start;
LEON3_Timer_Adev = adev;
/* Register AMBA Bus Frequency */
ambapp_freq_init(
plb,
LEON3_Timer_Adev,
- (LEON3_Timer_Regs->scaler_reload + 1)
+ (grlib_load_32(&LEON3_Timer_Regs->sreload) + 1)
* LEON3_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER
);
/* Set user prescaler configuration. Use this to increase accuracy of timer
@@ -186,7 +187,7 @@ static void amba_initialize(void)
* GRTIMER/GPTIMER hardware. See HW manual.
*/
if (leon3_timer_prescaler)
- LEON3_Timer_Regs->scaler_reload = leon3_timer_prescaler;
+ grlib_store_32(&LEON3_Timer_Regs->sreload, leon3_timer_prescaler);
}
}
diff --git a/bsps/sparc/leon3/start/bspdelay.c b/bsps/sparc/leon3/start/bspdelay.c
index c4a880be6d..6695f76929 100644
--- a/bsps/sparc/leon3/start/bspdelay.c
+++ b/bsps/sparc/leon3/start/bspdelay.c
@@ -14,15 +14,17 @@
*/
#include <bsp.h>
-#include <leon.h>
+#include <bsp/leon3.h>
void rtems_bsp_delay(int usecs)
{
uint32_t then;
+ gptimer_timer *regs;
- then =LEON3_Timer_Regs->timer[0].value;
+ regs = &LEON3_Timer_Regs->timer[0];
+ then =grlib_load_32(&regs->tcntval);
then += usecs;
- while (LEON3_Timer_Regs->timer[0].value >= then)
+ while (grlib_load_32(&regs->tcntval) >= then)
;
}
diff --git a/bsps/sparc/leon3/start/cpucounter.c b/bsps/sparc/leon3/start/cpucounter.c
index 0a54ba9a74..5672cbbd45 100644
--- a/bsps/sparc/leon3/start/cpucounter.c
+++ b/bsps/sparc/leon3/start/cpucounter.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <leon.h>
+#include <bsp/leon3.h>
#include <grlib/irqamp.h>
#include <rtems/counter.h>
@@ -42,7 +42,7 @@ uint32_t _CPU_Counter_frequency(void)
static void leon3_counter_initialize(void)
{
irqamp_timestamp *irqmp_ts;
- volatile struct gptimer_regs *gpt;
+ gptimer *gpt;
SPARC_Counter *counter;
irqmp_ts = irqamp_get_timestamp_registers(LEON3_IrqCtrl_Regs);
@@ -68,19 +68,23 @@ static void leon3_counter_initialize(void)
leon3_counter_frequency = ambapp_freq_get(ambapp_plb(), LEON3_IrqCtrl_Adev);
} else if (gpt != NULL) {
+ gptimer_timer *timer;
+ uint32_t tctrl;
+
/* Fall back to the first GPTIMER if available */
+ timer = &gpt->timer[LEON3_COUNTER_GPTIMER_INDEX];
counter->read_isr_disabled = _SPARC_Counter_read_down;
counter->read = _SPARC_Counter_read_down;
- counter->counter_register = &gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].value;
+ counter->counter_register = &timer->tcntval;
/* Enable timer just in case no clock driver is configured */
- gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].reload = 0xffffffff;
- gpt->timer[LEON3_COUNTER_GPTIMER_INDEX].ctrl |= GPTIMER_TIMER_CTRL_EN |
- GPTIMER_TIMER_CTRL_RS |
- GPTIMER_TIMER_CTRL_LD;
+ grlib_store_32(&timer->trldval, 0xffffffff);
+ tctrl = grlib_load_32(&timer->tctrl);
+ tctrl |= GPTIMER_TCTRL_EN | GPTIMER_TCTRL_RS | GPTIMER_TCTRL_LD;
+ grlib_store_32(&timer->tctrl, tctrl);
leon3_counter_frequency = ambapp_freq_get(ambapp_plb(), LEON3_Timer_Adev) /
- (gpt->scaler_reload + 1);
+ (grlib_load_32(&gpt->sreload) + 1);
}
}