Move inline assembly related to querying and counter value as well as
getting and setting counter frequency register into asm/system.h as
well as converting it inot helper functions. This is done to make the
code availible to other parts of the system.

Signed-off-by: Andrey Smirnov <[email protected]>
---
 arch/arm/include/asm/system.h     | 24 ++++++++++++++++++++++++
 drivers/clocksource/armv8-timer.c | 13 ++-----------
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
index 57c76186b..5cf828ea3 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -77,6 +77,30 @@ static inline unsigned long read_mpidr(void)
 
        return val;
 }
+
+static inline void set_cntfrq(unsigned long cntfrq)
+{
+       asm volatile("msr cntfrq_el0, %0" : : "r" (cntfrq) : "memory");
+}
+
+static inline unsigned long get_cntfrq(void)
+{
+       unsigned long cntfrq;
+
+       asm volatile("mrs %0, cntfrq_el0" : "=r" (cntfrq));
+       return cntfrq;
+}
+
+static inline unsigned long get_cntpct(void)
+{
+       unsigned long cntpct;
+
+       isb();
+       asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
+
+       return cntpct;
+}
+
 #endif
 static inline unsigned int get_cr(void)
 {
diff --git a/drivers/clocksource/armv8-timer.c 
b/drivers/clocksource/armv8-timer.c
index 57b0b694c..c5306dcd2 100644
--- a/drivers/clocksource/armv8-timer.c
+++ b/drivers/clocksource/armv8-timer.c
@@ -22,12 +22,7 @@
 
 uint64_t armv8_clocksource_read(void)
 {
-       unsigned long cntpct;
-
-       isb();
-       asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
-
-       return cntpct;
+       return get_cntpct();
 }
 
 static struct clocksource cs = {
@@ -38,11 +33,7 @@ static struct clocksource cs = {
 
 static int armv8_timer_probe(struct device_d *dev)
 {
-       unsigned long cntfrq;
-
-       asm volatile("mrs %0, cntfrq_el0" : "=r" (cntfrq));
-
-       cs.mult = clocksource_hz2mult(cntfrq, cs.shift);
+       cs.mult = clocksource_hz2mult(get_cntfrq(), cs.shift);
 
        return init_clock(&cs);
 }
-- 
2.17.0


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to