Move inline assembly related to querying 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 <andrew.smirnov@xxxxxxxxx> --- 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 barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox