xref: /rk3399_rockchip-uboot/arch/arm/cpu/armv8/generic_timer.c (revision 0ae7653128c80a4f2920cbe9b124792c2fd9d9e0)
1*0ae76531SDavid Feng /*
2*0ae76531SDavid Feng  * (C) Copyright 2013
3*0ae76531SDavid Feng  * David Feng <fenghua@phytium.com.cn>
4*0ae76531SDavid Feng  *
5*0ae76531SDavid Feng  * SPDX-License-Identifier:	GPL-2.0+
6*0ae76531SDavid Feng  */
7*0ae76531SDavid Feng 
8*0ae76531SDavid Feng #include <common.h>
9*0ae76531SDavid Feng #include <command.h>
10*0ae76531SDavid Feng #include <asm/system.h>
11*0ae76531SDavid Feng 
12*0ae76531SDavid Feng /*
13*0ae76531SDavid Feng  * Generic timer implementation of get_tbclk()
14*0ae76531SDavid Feng  */
15*0ae76531SDavid Feng unsigned long get_tbclk(void)
16*0ae76531SDavid Feng {
17*0ae76531SDavid Feng 	unsigned long cntfrq;
18*0ae76531SDavid Feng 	asm volatile("mrs %0, cntfrq_el0" : "=r" (cntfrq));
19*0ae76531SDavid Feng 	return cntfrq;
20*0ae76531SDavid Feng }
21*0ae76531SDavid Feng 
22*0ae76531SDavid Feng /*
23*0ae76531SDavid Feng  * Generic timer implementation of timer_read_counter()
24*0ae76531SDavid Feng  */
25*0ae76531SDavid Feng unsigned long timer_read_counter(void)
26*0ae76531SDavid Feng {
27*0ae76531SDavid Feng 	unsigned long cntpct;
28*0ae76531SDavid Feng 	isb();
29*0ae76531SDavid Feng 	asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
30*0ae76531SDavid Feng 	return cntpct;
31*0ae76531SDavid Feng }
32