xref: /rk3399_rockchip-uboot/arch/arm/cpu/arm926ejs/mx25/timer.c (revision 3dae5b510eb966214a3cc32476ca4e45029f087e)
184ad6884SPeter Tyser /*
284ad6884SPeter Tyser  * (C) Copyright 2002
384ad6884SPeter Tyser  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
484ad6884SPeter Tyser  * Marius Groeger <mgroeger@sysgo.de>
584ad6884SPeter Tyser  *
684ad6884SPeter Tyser  * (C) Copyright 2002
784ad6884SPeter Tyser  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
884ad6884SPeter Tyser  * Alex Zuepke <azu@sysgo.de>
984ad6884SPeter Tyser  *
1084ad6884SPeter Tyser  * (C) Copyright 2002
1184ad6884SPeter Tyser  * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
1284ad6884SPeter Tyser  *
1384ad6884SPeter Tyser  * (C) Copyright 2009
1484ad6884SPeter Tyser  * Ilya Yanok, Emcraft Systems Ltd, <yanok@emcraft.com>
1584ad6884SPeter Tyser  *
1684ad6884SPeter Tyser  * (C) Copyright 2009 DENX Software Engineering
1784ad6884SPeter Tyser  * Author: John Rigby <jrigby@gmail.com>
1884ad6884SPeter Tyser  *	Add support for MX25
1984ad6884SPeter Tyser  *
20*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
2184ad6884SPeter Tyser  */
2284ad6884SPeter Tyser 
2384ad6884SPeter Tyser #include <common.h>
2484ad6884SPeter Tyser #include <asm/io.h>
2584ad6884SPeter Tyser #include <asm/arch/imx-regs.h>
2684ad6884SPeter Tyser 
2784ad6884SPeter Tyser /* nothing really to do with interrupts, just starts up a counter. */
2884ad6884SPeter Tyser /* The 32KHz 32-bit timer overruns in 134217 seconds */
timer_init(void)2984ad6884SPeter Tyser int timer_init(void)
3084ad6884SPeter Tyser {
3184ad6884SPeter Tyser 	int i;
3284ad6884SPeter Tyser 	struct gpt_regs *gpt = (struct gpt_regs *)IMX_GPT1_BASE;
3384ad6884SPeter Tyser 	struct ccm_regs *ccm = (struct ccm_regs *)IMX_CCM_BASE;
3484ad6884SPeter Tyser 
3584ad6884SPeter Tyser 	/* setup GP Timer 1 */
3684ad6884SPeter Tyser 	writel(GPT_CTRL_SWR, &gpt->ctrl);
3784ad6884SPeter Tyser 
3884ad6884SPeter Tyser 	writel(readl(&ccm->cgr1) | CCM_CGR1_GPT1, &ccm->cgr1);
3984ad6884SPeter Tyser 
4084ad6884SPeter Tyser 	for (i = 0; i < 100; i++)
4184ad6884SPeter Tyser 		writel(0, &gpt->ctrl); /* We have no udelay by now */
4284ad6884SPeter Tyser 	writel(0, &gpt->pre); /* prescaler = 1 */
4384ad6884SPeter Tyser 	/* Freerun Mode, 32KHz input */
4484ad6884SPeter Tyser 	writel(readl(&gpt->ctrl) | GPT_CTRL_CLKSOURCE_32 | GPT_CTRL_FRR,
4584ad6884SPeter Tyser 			&gpt->ctrl);
4684ad6884SPeter Tyser 	writel(readl(&gpt->ctrl) | GPT_CTRL_TEN, &gpt->ctrl);
4784ad6884SPeter Tyser 
4884ad6884SPeter Tyser 	return 0;
4984ad6884SPeter Tyser }
50