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 Tyserint 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 Ruderunsigned long timer_read_counter(void) 4584ad6884SPeter Tyser { 46*93a0ea50SAndrew Ruder return GPTCNT; 4760ebcffbSStefano Babic } 48