xref: /rk3399_rockchip-uboot/arch/arm/cpu/arm1136/mx31/timer.c (revision 93a0ea501e1eca1ae5d7d2624906b656c765e5e8)
184ad6884SPeter Tyser /*
284ad6884SPeter Tyser  * (C) Copyright 2007
384ad6884SPeter Tyser  * Sascha Hauer, Pengutronix
484ad6884SPeter Tyser  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
684ad6884SPeter Tyser  */
784ad6884SPeter Tyser 
884ad6884SPeter Tyser #include <common.h>
986271115SStefano Babic #include <asm/arch/imx-regs.h>
102cf36ae7SStefano Babic #include <asm/io.h>
1184ad6884SPeter Tyser 
1284ad6884SPeter Tyser #define TIMER_BASE 0x53f90000 /* General purpose timer 1 */
1384ad6884SPeter Tyser 
1484ad6884SPeter Tyser /* General purpose timers registers */
1584ad6884SPeter Tyser #define GPTCR	__REG(TIMER_BASE)		/* Control register	*/
1684ad6884SPeter Tyser #define GPTPR	__REG(TIMER_BASE + 0x4)		/* Prescaler register	*/
1784ad6884SPeter Tyser #define GPTSR	__REG(TIMER_BASE + 0x8)		/* Status register	*/
1884ad6884SPeter Tyser #define GPTCNT	__REG(TIMER_BASE + 0x24)	/* Counter register	*/
1984ad6884SPeter Tyser 
2084ad6884SPeter Tyser /* General purpose timers bitfields */
2184ad6884SPeter Tyser #define GPTCR_SWR		(1 << 15)	/* Software reset	*/
2284ad6884SPeter Tyser #define GPTCR_FRR		(1 << 9)	/* Freerun / restart	*/
2384ad6884SPeter Tyser #define GPTCR_CLKSOURCE_32	(4 << 6)	/* Clock source		*/
2484ad6884SPeter Tyser #define GPTCR_TEN		1		/* Timer enable		*/
2584ad6884SPeter Tyser 
26c44bf4e8SHeiko Schocher DECLARE_GLOBAL_DATA_PTR;
2784ad6884SPeter Tyser 
2884ad6884SPeter Tyser /* The 32768Hz 32-bit timer overruns in 131072 seconds */
2984ad6884SPeter Tyser int timer_init(void)
3084ad6884SPeter Tyser {
3184ad6884SPeter Tyser 	int i;
3284ad6884SPeter Tyser 
3384ad6884SPeter Tyser 	/* setup GP Timer 1 */
3484ad6884SPeter Tyser 	GPTCR = GPTCR_SWR;
3584ad6884SPeter Tyser 	for (i = 0; i < 100; i++)
3684ad6884SPeter Tyser 		GPTCR = 0; /* We have no udelay by now */
3784ad6884SPeter Tyser 	GPTPR = 0; /* 32Khz */
3884ad6884SPeter Tyser 	/* Freerun Mode, PERCLK1 input */
3984ad6884SPeter Tyser 	GPTCR |= GPTCR_CLKSOURCE_32 | GPTCR_TEN;
4084ad6884SPeter Tyser 
4184ad6884SPeter Tyser 	return 0;
4284ad6884SPeter Tyser }
4384ad6884SPeter Tyser 
44*93a0ea50SAndrew Ruder unsigned long timer_read_counter(void)
4584ad6884SPeter Tyser {
46*93a0ea50SAndrew Ruder 	return GPTCNT;
4760ebcffbSStefano Babic }
48