xref: /rk3399_rockchip-uboot/arch/arm/cpu/armv7/arch_timer.c (revision 13ceb2afdcb6f5114908e39f0d2453728eb24e0f)
111bc7557SVitaly Andrianov /*
211bc7557SVitaly Andrianov  * (C) Copyright 2012-2014
311bc7557SVitaly Andrianov  *     Texas Instruments Incorporated, <www.ti.com>
411bc7557SVitaly Andrianov  *
511bc7557SVitaly Andrianov  * SPDX-License-Identifier:     GPL-2.0+
611bc7557SVitaly Andrianov  */
711bc7557SVitaly Andrianov 
811bc7557SVitaly Andrianov #include <common.h>
911bc7557SVitaly Andrianov #include <asm/io.h>
1011bc7557SVitaly Andrianov #include <div64.h>
1191558c81SPatrick Delaunay #include <bootstage.h>
1211bc7557SVitaly Andrianov 
1311bc7557SVitaly Andrianov DECLARE_GLOBAL_DATA_PTR;
1411bc7557SVitaly Andrianov 
timer_init(void)1511bc7557SVitaly Andrianov int timer_init(void)
1611bc7557SVitaly Andrianov {
1711bc7557SVitaly Andrianov 	gd->arch.tbl = 0;
1811bc7557SVitaly Andrianov 	gd->arch.tbu = 0;
19*13ceb2afSXuhui Lin #ifdef CONFIG_SYS_HZ_CLOCK
20dd239d30SPatrick Delaunay 	gd->arch.timer_rate_hz = CONFIG_SYS_HZ_CLOCK;
21*13ceb2afSXuhui Lin #endif
2211bc7557SVitaly Andrianov 	return 0;
2311bc7557SVitaly Andrianov }
2411bc7557SVitaly Andrianov 
get_ticks(void)2511bc7557SVitaly Andrianov unsigned long long get_ticks(void)
2611bc7557SVitaly Andrianov {
2711bc7557SVitaly Andrianov 	ulong nowl, nowu;
2811bc7557SVitaly Andrianov 
2911bc7557SVitaly Andrianov 	asm volatile("mrrc p15, 0, %0, %1, c14" : "=r" (nowl), "=r" (nowu));
3011bc7557SVitaly Andrianov 
3111bc7557SVitaly Andrianov 	gd->arch.tbl = nowl;
3211bc7557SVitaly Andrianov 	gd->arch.tbu = nowu;
3311bc7557SVitaly Andrianov 
3411bc7557SVitaly Andrianov 	return (((unsigned long long)gd->arch.tbu) << 32) | gd->arch.tbl;
3511bc7557SVitaly Andrianov }
3611bc7557SVitaly Andrianov 
3711bc7557SVitaly Andrianov 
timer_get_boot_us(void)3891558c81SPatrick Delaunay ulong timer_get_boot_us(void)
3991558c81SPatrick Delaunay {
40*13ceb2afSXuhui Lin 	return lldiv(get_ticks(), gd->arch.timer_rate_hz / 1000000);
4111bc7557SVitaly Andrianov }
4211bc7557SVitaly Andrianov 
get_tbclk(void)4311bc7557SVitaly Andrianov ulong get_tbclk(void)
4411bc7557SVitaly Andrianov {
45*13ceb2afSXuhui Lin #ifdef CONFIG_SYS_HZ_CLOCK
4670199900SXuhui Lin 	return gd->arch.timer_rate_hz ? : CONFIG_SYS_HZ_CLOCK;
47*13ceb2afSXuhui Lin #else
48*13ceb2afSXuhui Lin 	return gd->arch.timer_rate_hz;
49*13ceb2afSXuhui Lin #endif
5011bc7557SVitaly Andrianov }
51