xref: /rk3399_rockchip-uboot/arch/arm/mach-uniphier/arm32/timer.c (revision 9902c113ade2c9af701785b982a1a4db4a2395ec)
1*fe5ea57bSMasahiro Yamada /*
2*fe5ea57bSMasahiro Yamada  * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3*fe5ea57bSMasahiro Yamada  *
4*fe5ea57bSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
5*fe5ea57bSMasahiro Yamada  */
6*fe5ea57bSMasahiro Yamada 
7*fe5ea57bSMasahiro Yamada #include <common.h>
8*fe5ea57bSMasahiro Yamada #include <linux/io.h>
9*fe5ea57bSMasahiro Yamada 
10*fe5ea57bSMasahiro Yamada #include "arm-mpcore.h"
11*fe5ea57bSMasahiro Yamada 
12*fe5ea57bSMasahiro Yamada #define PERIPHCLK (50 * 1000 * 1000) /* 50 MHz */
13*fe5ea57bSMasahiro Yamada #define PRESCALER ((PERIPHCLK) / (CONFIG_SYS_TIMER_RATE) - 1)
14*fe5ea57bSMasahiro Yamada 
get_global_timer_base(void)15*fe5ea57bSMasahiro Yamada static void *get_global_timer_base(void)
16*fe5ea57bSMasahiro Yamada {
17*fe5ea57bSMasahiro Yamada 	void *val;
18*fe5ea57bSMasahiro Yamada 
19*fe5ea57bSMasahiro Yamada 	asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (val) : : "memory");
20*fe5ea57bSMasahiro Yamada 
21*fe5ea57bSMasahiro Yamada 	return val + GLOBAL_TIMER_OFFSET;
22*fe5ea57bSMasahiro Yamada }
23*fe5ea57bSMasahiro Yamada 
timer_read_counter(void)24*fe5ea57bSMasahiro Yamada unsigned long timer_read_counter(void)
25*fe5ea57bSMasahiro Yamada {
26*fe5ea57bSMasahiro Yamada 	/*
27*fe5ea57bSMasahiro Yamada 	 * ARM 64bit Global Timer is too much for our purpose.
28*fe5ea57bSMasahiro Yamada 	 * We use only lower 32 bit of the timer counter.
29*fe5ea57bSMasahiro Yamada 	 */
30*fe5ea57bSMasahiro Yamada 	return readl(get_global_timer_base() + GTIMER_CNT_L);
31*fe5ea57bSMasahiro Yamada }
32*fe5ea57bSMasahiro Yamada 
timer_init(void)33*fe5ea57bSMasahiro Yamada int timer_init(void)
34*fe5ea57bSMasahiro Yamada {
35*fe5ea57bSMasahiro Yamada 	/* enable timer */
36*fe5ea57bSMasahiro Yamada 	writel(PRESCALER << 8 | 1, get_global_timer_base() + GTIMER_CTRL);
37*fe5ea57bSMasahiro Yamada 
38*fe5ea57bSMasahiro Yamada 	return 0;
39*fe5ea57bSMasahiro Yamada }
40