183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 284ad6884SPeter Tyser /* 384ad6884SPeter Tyser * (C) Copyright 2002 484ad6884SPeter Tyser * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 584ad6884SPeter Tyser * Marius Groeger <mgroeger@sysgo.de> 684ad6884SPeter Tyser * 784ad6884SPeter Tyser * (C) Copyright 2002 884ad6884SPeter Tyser * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 984ad6884SPeter Tyser * Alex Zuepke <azu@sysgo.de> 1084ad6884SPeter Tyser * 1184ad6884SPeter Tyser * (C) Copyright 2002 1284ad6884SPeter Tyser * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 1384ad6884SPeter Tyser */ 1484ad6884SPeter Tyser 1584ad6884SPeter Tyser #include <common.h> 1684ad6884SPeter Tyser #if defined (CONFIG_IMX) 1784ad6884SPeter Tyser 1884ad6884SPeter Tyser #include <asm/arch/imx-regs.h> 1984ad6884SPeter Tyser timer_init(void)2084ad6884SPeter Tyserint timer_init (void) 2184ad6884SPeter Tyser { 2284ad6884SPeter Tyser int i; 2384ad6884SPeter Tyser /* setup GP Timer 1 */ 2484ad6884SPeter Tyser TCTL1 = TCTL_SWR; 2584ad6884SPeter Tyser for ( i=0; i<100; i++) TCTL1 = 0; /* We have no udelay by now */ 2684ad6884SPeter Tyser TPRER1 = get_PERCLK1() / 1000000; /* 1 MHz */ 2784ad6884SPeter Tyser TCTL1 |= TCTL_FRR | (1<<1); /* Freerun Mode, PERCLK1 input */ 2884ad6884SPeter Tyser 2917659d7dSGraeme Russ /* Reset the timer */ 3017659d7dSGraeme Russ TCTL1 &= ~TCTL_TEN; 3117659d7dSGraeme Russ TCTL1 |= TCTL_TEN; /* Enable timer */ 3284ad6884SPeter Tyser 3384ad6884SPeter Tyser return (0); 3484ad6884SPeter Tyser } 3584ad6884SPeter Tyser 3684ad6884SPeter Tyser /* 3784ad6884SPeter Tyser * timer without interrupts 3884ad6884SPeter Tyser */ get_timer_masked(void)39*6180ea7eSPatrick Delaunaystatic ulong get_timer_masked (void) 40*6180ea7eSPatrick Delaunay { 41*6180ea7eSPatrick Delaunay return TCN1; 42*6180ea7eSPatrick Delaunay } 43*6180ea7eSPatrick Delaunay get_timer(ulong base)4484ad6884SPeter Tyserulong get_timer (ulong base) 4584ad6884SPeter Tyser { 4684ad6884SPeter Tyser return get_timer_masked() - base; 4784ad6884SPeter Tyser } 4884ad6884SPeter Tyser __udelay(unsigned long usec)49aa33fe86SPatrick Delaunayvoid __udelay (unsigned long usec) 5084ad6884SPeter Tyser { 5184ad6884SPeter Tyser ulong endtime = get_timer_masked() + usec; 5284ad6884SPeter Tyser signed long diff; 5384ad6884SPeter Tyser 5484ad6884SPeter Tyser do { 5584ad6884SPeter Tyser ulong now = get_timer_masked (); 5684ad6884SPeter Tyser diff = endtime - now; 5784ad6884SPeter Tyser } while (diff >= 0); 5884ad6884SPeter Tyser } 5984ad6884SPeter Tyser 6084ad6884SPeter Tyser /* 6184ad6884SPeter Tyser * This function is derived from PowerPC code (read timebase as long long). 6284ad6884SPeter Tyser * On ARM it just returns the timer value. 6384ad6884SPeter Tyser */ get_ticks(void)6484ad6884SPeter Tyserunsigned long long get_ticks(void) 6584ad6884SPeter Tyser { 6684ad6884SPeter Tyser return get_timer(0); 6784ad6884SPeter Tyser } 6884ad6884SPeter Tyser 6984ad6884SPeter Tyser /* 7084ad6884SPeter Tyser * This function is derived from PowerPC code (timebase clock frequency). 7184ad6884SPeter Tyser * On ARM it returns the number of timer ticks per second. 7284ad6884SPeter Tyser */ get_tbclk(void)7384ad6884SPeter Tyserulong get_tbclk (void) 7484ad6884SPeter Tyser { 7563a7578eSMasahiro Yamada return CONFIG_SYS_HZ; 7684ad6884SPeter Tyser } 7784ad6884SPeter Tyser 7884ad6884SPeter Tyser /* 7984ad6884SPeter Tyser * Reset the cpu by setting up the watchdog timer and let him time out 8084ad6884SPeter Tyser */ reset_cpu(ulong ignored)8184ad6884SPeter Tyservoid reset_cpu (ulong ignored) 8284ad6884SPeter Tyser { 8384ad6884SPeter Tyser /* Disable watchdog and set Time-Out field to 0 */ 8484ad6884SPeter Tyser WCR = 0x00000000; 8584ad6884SPeter Tyser 8684ad6884SPeter Tyser /* Write Service Sequence */ 8784ad6884SPeter Tyser WSR = 0x00005555; 8884ad6884SPeter Tyser WSR = 0x0000AAAA; 8984ad6884SPeter Tyser 9084ad6884SPeter Tyser /* Enable watchdog */ 9184ad6884SPeter Tyser WCR = 0x00000001; 9284ad6884SPeter Tyser 9384ad6884SPeter Tyser while (1); 9484ad6884SPeter Tyser /*NOTREACHED*/ 9584ad6884SPeter Tyser } 9684ad6884SPeter Tyser 9784ad6884SPeter Tyser #endif /* defined (CONFIG_IMX) */ 98