summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-03 19:50:48 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-11-10 10:06:12 +0100
commit928eefed441c56eaebc1331b1e3ba52608339947 (patch)
treeb767468acefe3f234b09b28f875705ba120161f8
parentdafc12028da1fec5cc6a93132fdafcacca0f6415 (diff)
bsp/leon3: Add LEON3_PROBE_ASR_22_23_UP_COUNTER
-rw-r--r--bsps/sparc/leon3/clock/ckinit.c5
-rw-r--r--bsps/sparc/leon3/start/cpucounter.c5
-rw-r--r--spec/build/bsps/sparc/leon3/grp.yml2
-rw-r--r--spec/build/bsps/sparc/leon3/optasrupcntprobe.yml20
4 files changed, 32 insertions, 0 deletions
diff --git a/bsps/sparc/leon3/clock/ckinit.c b/bsps/sparc/leon3/clock/ckinit.c
index ba70b1ac00..e82f3c768b 100644
--- a/bsps/sparc/leon3/clock/ckinit.c
+++ b/bsps/sparc/leon3/clock/ckinit.c
@@ -164,6 +164,8 @@ static void bsp_clock_handler_install(rtems_interrupt_handler isr)
#define Clock_driver_support_set_interrupt_affinity(online_processors) \
bsp_interrupt_set_affinity(clkirq, online_processors)
+#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER) || \
+ defined(LEON3_PROBE_ASR_22_23_UP_COUNTER)
static void leon3_clock_use_up_counter(struct timecounter *tc)
{
tc->tc_get_timecount = _SPARC_Get_timecount_asr23;
@@ -179,6 +181,7 @@ static void leon3_clock_use_up_counter(struct timecounter *tc)
rtems_timecounter_install(tc);
}
+#endif
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
static void leon3_clock_use_irqamp_timestamp(
@@ -270,11 +273,13 @@ static void leon3_clock_initialize(void)
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
leon3_clock_use_up_counter(tc);
#else /* LEON3_HAS_ASR_22_23_UP_COUNTER */
+#if defined(LEON3_PROBE_ASR_22_23_UP_COUNTER)
if (leon3_up_counter_is_available()) {
/* Use the LEON4 up-counter if available */
leon3_clock_use_up_counter(tc);
return;
}
+#endif
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
irqmp_ts = irqamp_get_timestamp_registers(LEON3_IrqCtrl_Regs);
diff --git a/bsps/sparc/leon3/start/cpucounter.c b/bsps/sparc/leon3/start/cpucounter.c
index d325e7f65a..14eadba782 100644
--- a/bsps/sparc/leon3/start/cpucounter.c
+++ b/bsps/sparc/leon3/start/cpucounter.c
@@ -20,6 +20,8 @@ uint32_t _CPU_Counter_frequency(void)
return leon3_counter_frequency;
}
+#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER) || \
+ defined(LEON3_PROBE_ASR_22_23_UP_COUNTER)
static void leon3_counter_use_up_counter(SPARC_Counter *counter)
{
counter->read_isr_disabled = _SPARC_Counter_read_asr23;
@@ -27,6 +29,7 @@ static void leon3_counter_use_up_counter(SPARC_Counter *counter)
leon3_counter_frequency = leon3_up_counter_frequency();
}
+#endif
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
static void leon3_counter_use_irqamp_timestamp(
@@ -89,11 +92,13 @@ static void leon3_counter_initialize(void)
#if defined(LEON3_HAS_ASR_22_23_UP_COUNTER)
leon3_counter_use_up_counter(counter);
#else /* LEON3_HAS_ASR_22_23_UP_COUNTER */
+#if defined(LEON3_PROBE_ASR_22_23_UP_COUNTER)
if (leon3_up_counter_is_available()) {
/* Use the LEON4 up-counter if available */
leon3_counter_use_up_counter(counter);
return;
}
+#endif
#if defined(LEON3_IRQAMP_PROBE_TIMESTAMP)
irqmp_ts = irqamp_get_timestamp_registers(LEON3_IrqCtrl_Regs);
diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml
index b0e9f379c3..3649d052e5 100644
--- a/spec/build/bsps/sparc/leon3/grp.yml
+++ b/spec/build/bsps/sparc/leon3/grp.yml
@@ -39,6 +39,8 @@ links:
- role: build-dependency
uid: optasrupcnt
- role: build-dependency
+ uid: optasrupcntprobe
+- role: build-dependency
uid: optgptimerbase
- role: build-dependency
uid: optirqampbase
diff --git a/spec/build/bsps/sparc/leon3/optasrupcntprobe.yml b/spec/build/bsps/sparc/leon3/optasrupcntprobe.yml
new file mode 100644
index 0000000000..46f40ee238
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optasrupcntprobe.yml
@@ -0,0 +1,20 @@
+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: true
+default-by-variant:
+- value: false
+ variants:
+ - sparc/gr712rc
+ - sparc/gr740
+enabled-by: true
+links: []
+name: LEON3_PROBE_ASR_22_23_UP_COUNTER
+description: |
+ If this option is set to true, then it will be probed if the %asr22 and
+ %asr23 up-counter is available.
+type: build