xref: /rk3399_rockchip-uboot/arch/arm/mach-highbank/timer.c (revision b9cb64825b5e6efeb715abd8b48d9b12f98973e9)
1*72a8ff4bSMasahiro Yamada /*
2*72a8ff4bSMasahiro Yamada  * Copyright 2010-2011 Calxeda, Inc.
3*72a8ff4bSMasahiro Yamada  *
4*72a8ff4bSMasahiro Yamada  * Based on arm926ejs/mx27/timer.c
5*72a8ff4bSMasahiro Yamada  *
6*72a8ff4bSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
7*72a8ff4bSMasahiro Yamada  */
8*72a8ff4bSMasahiro Yamada 
9*72a8ff4bSMasahiro Yamada #include <common.h>
10*72a8ff4bSMasahiro Yamada #include <asm/io.h>
11*72a8ff4bSMasahiro Yamada #include <asm/arch-armv7/systimer.h>
12*72a8ff4bSMasahiro Yamada 
13*72a8ff4bSMasahiro Yamada #undef SYSTIMER_BASE
14*72a8ff4bSMasahiro Yamada #define SYSTIMER_BASE		0xFFF34000	/* Timer 0 and 1 base	*/
15*72a8ff4bSMasahiro Yamada 
16*72a8ff4bSMasahiro Yamada static struct systimer *systimer_base = (struct systimer *)SYSTIMER_BASE;
17*72a8ff4bSMasahiro Yamada 
18*72a8ff4bSMasahiro Yamada /*
19*72a8ff4bSMasahiro Yamada  * Start the timer
20*72a8ff4bSMasahiro Yamada  */
timer_init(void)21*72a8ff4bSMasahiro Yamada int timer_init(void)
22*72a8ff4bSMasahiro Yamada {
23*72a8ff4bSMasahiro Yamada 	/*
24*72a8ff4bSMasahiro Yamada 	 * Setup timer0
25*72a8ff4bSMasahiro Yamada 	 */
26*72a8ff4bSMasahiro Yamada 	writel(0, &systimer_base->timer0control);
27*72a8ff4bSMasahiro Yamada 	writel(SYSTIMER_RELOAD, &systimer_base->timer0load);
28*72a8ff4bSMasahiro Yamada 	writel(SYSTIMER_RELOAD, &systimer_base->timer0value);
29*72a8ff4bSMasahiro Yamada 	writel(SYSTIMER_EN | SYSTIMER_32BIT | SYSTIMER_PRESC_256,
30*72a8ff4bSMasahiro Yamada 		&systimer_base->timer0control);
31*72a8ff4bSMasahiro Yamada 
32*72a8ff4bSMasahiro Yamada 	return 0;
33*72a8ff4bSMasahiro Yamada 
34*72a8ff4bSMasahiro Yamada }
35