summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/leon3/include/leon.h
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/include/leon.h')
-rw-r--r--c/src/lib/libbsp/sparc/leon3/include/leon.h47
1 files changed, 45 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/include/leon.h b/c/src/lib/libbsp/sparc/leon3/include/leon.h
index ba0673fa75..b7511638eb 100644
--- a/c/src/lib/libbsp/sparc/leon3/include/leon.h
+++ b/c/src/lib/libbsp/sparc/leon3/include/leon.h
@@ -387,8 +387,6 @@ extern int leon3_timer_core_index;
*/
extern unsigned int leon3_timer_prescaler;
-void leon3_cpu_counter_initialize(void);
-
/* GRLIB extended IRQ controller register */
void leon3_ext_irq_init(void);
@@ -457,6 +455,51 @@ static inline bool leon3_irqmp_has_timestamp(
return (irqmp_ts->control >> 27) > 0;
}
+static inline uint32_t leon3_up_counter_low(void)
+{
+ uint32_t asr23;
+
+ __asm__ volatile (
+ "mov %%asr23, %0"
+ : "=&r" (asr23)
+ );
+
+ return asr23;
+}
+
+static inline uint32_t leon3_up_counter_high(void)
+{
+ uint32_t asr22;
+
+ __asm__ volatile (
+ "mov %%asr22, %0"
+ : "=&r" (asr22)
+ );
+
+ return asr22;
+}
+
+static inline void leon3_up_counter_enable(void)
+{
+ __asm__ volatile (
+ "mov %g0, %asr23"
+ );
+}
+
+static inline bool leon3_up_counter_is_available(void)
+{
+ return leon3_up_counter_low() != leon3_up_counter_low();
+}
+
+static inline uint32_t leon3_up_counter_frequency(void)
+{
+ /*
+ * For simplicity, assume that the interrupt controller uses the processor
+ * clock. This is at least true on the GR740.
+ */
+ return ambapp_freq_get(&ambapp_plb, LEON3_IrqCtrl_Adev);
+}
+
#endif /* !ASM */
#ifdef __cplusplus