xref: /rk3399_rockchip-uboot/arch/arm/cpu/arm1136/mx31/timer.c (revision e89d623f099c44b0b166ccf46bce2e6a0b99c984)
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 */
timer_init(void)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 
timer_read_counter(void)44*93a0ea50SAndrew Ruder unsigned long timer_read_counter(void)
4584ad6884SPeter Tyser {
46*93a0ea50SAndrew Ruder 	return GPTCNT;
4760ebcffbSStefano Babic }
48