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