summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-16 11:32:37 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-01-03 15:43:45 +0100
commit94845a9a6cad2448f7116abe45c82670b3425e24 (patch)
tree86a5c5ebf190ea65604b289abc929361719b44b7
parent570b597dafd6f0a5e0b344e0de92792db4d4f780 (diff)
bsp/leon3: Add LEON3_HAS_ASR_22_23_UP_COUNTER
-rw-r--r--bsps/sparc/leon3/clock/ckinit.c6
-rw-r--r--bsps/sparc/leon3/include/bsp/leon3.h2
-rw-r--r--bsps/sparc/leon3/start/cpucounter.c8
-rw-r--r--spec/build/bsps/sparc/leon3/grp.yml2
-rw-r--r--spec/build/bsps/sparc/leon3/optasrupcnt.yml19
5 files changed, 37 insertions, 0 deletions
diff --git a/bsps/sparc/leon3/clock/ckinit.c b/bsps/sparc/leon3/clock/ckinit.c
index ca6f974176..b8c0e395db 100644
--- a/bsps/sparc/leon3/clock/ckinit.c
+++ b/bsps/sparc/leon3/clock/ckinit.c
@@ -226,6 +226,7 @@ static void leon3_clock_use_irqamp_timestamp(
}
#endif
+#if !defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
static void leon3_clock_use_gptimer(
struct timecounter *tc,
gptimer_timer *timer
@@ -258,6 +259,7 @@ static void leon3_clock_use_gptimer(
rtems_timecounter_install(tc);
}
+#endif
static void leon3_clock_initialize(void)
{
@@ -284,6 +286,9 @@ static void leon3_clock_initialize(void)
leon3_up_counter_enable();
+#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
+ leon3_clock_use_up_counter(tc);
+#else /* LEON3_HAS_ASR_22_23_UP_COUNTER */
if (leon3_up_counter_is_available()) {
/* Use the LEON4 up-counter if available */
leon3_clock_use_up_counter(tc);
@@ -301,6 +306,7 @@ static void leon3_clock_initialize(void)
#endif
leon3_clock_use_gptimer(tc, timer);
+#endif /* LEON3_HAS_ASR_22_23_UP_COUNTER */
}
#define Clock_driver_support_initialize_hardware() \
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h
index ed1a9e4efe..03ec835bdd 100644
--- a/bsps/sparc/leon3/include/bsp/leon3.h
+++ b/bsps/sparc/leon3/include/bsp/leon3.h
@@ -349,6 +349,7 @@ static inline void leon3_up_counter_enable( void )
);
}
+#if !defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
/**
* @brief Checks if the LEON up-counter is available.
*
@@ -360,6 +361,7 @@ static inline bool leon3_up_counter_is_available( void )
{
return leon3_up_counter_low() != leon3_up_counter_low();
}
+#endif
/**
* @brief Gets the LEON up-counter frequency in Hz.
diff --git a/bsps/sparc/leon3/start/cpucounter.c b/bsps/sparc/leon3/start/cpucounter.c
index 6f813c5fac..5afd94f4cf 100644
--- a/bsps/sparc/leon3/start/cpucounter.c
+++ b/bsps/sparc/leon3/start/cpucounter.c
@@ -68,6 +68,7 @@ static void leon3_counter_use_irqamp_timestamp(
}
#endif
+#if !defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
static void leon3_counter_use_gptimer(SPARC_Counter *counter, gptimer *gpt)
{
gptimer_timer *timer;
@@ -88,19 +89,25 @@ static void leon3_counter_use_gptimer(SPARC_Counter *counter, gptimer *gpt)
(grlib_load_32(&gpt->sreload) + 1);
#endif
}
+#endif
static void leon3_counter_initialize(void)
{
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
irqamp_timestamp *irqmp_ts;
#endif
+#if !defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
gptimer *gpt;
+#endif
SPARC_Counter *counter;
counter = &_SPARC_Counter_mutable;
leon3_up_counter_enable();
+#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
+ leon3_counter_use_up_counter(counter);
+#else /* LEON3_HAS_ASR_22_23_UP_COUNTER */
if (leon3_up_counter_is_available()) {
/* Use the LEON4 up-counter if available */
leon3_counter_use_up_counter(counter);
@@ -123,6 +130,7 @@ static void leon3_counter_initialize(void)
/* Fall back to the first GPTIMER if available */
leon3_counter_use_gptimer(counter, gpt);
}
+#endif /* LEON3_HAS_ASR_22_23_UP_COUNTER */
}
RTEMS_SYSINIT_ITEM(
diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml
index 8aa2d7abae..8be7099e7b 100644
--- a/spec/build/bsps/sparc/leon3/grp.yml
+++ b/spec/build/bsps/sparc/leon3/grp.yml
@@ -37,6 +37,8 @@ links:
- role: build-dependency
uid: optapbuartbase
- role: build-dependency
+ uid: optasrupcnt
+- role: build-dependency
uid: optgptimerbase
- role: build-dependency
uid: optirqampbase
diff --git a/spec/build/bsps/sparc/leon3/optasrupcnt.yml b/spec/build/bsps/sparc/leon3/optasrupcnt.yml
new file mode 100644
index 0000000000..6f799496aa
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optasrupcnt.yml
@@ -0,0 +1,19 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+actions:
+- get-boolean: null
+- define-condition: null
+build-type: option
+default: false
+default-by-variant:
+- value: true
+ variants:
+ - sparc/gr740
+enabled-by: true
+links: []
+name: LEON3_HAS_ASR_22_23_UP_COUNTER
+description: |
+ If this option is set to true, then the processor has the %asr22 and %asr23
+ up-counter.
+type: build