1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2002 4 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 5 * Marius Groeger <mgroeger@sysgo.de> 6 * 7 * (C) Copyright 2002 8 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 9 * Alex Zuepke <azu@sysgo.de> 10 * 11 * (C) Copyright 2002 12 * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 13 */ 14 15 #include <common.h> 16 #if defined (CONFIG_IMX) 17 18 #include <asm/arch/imx-regs.h> 19 20 int timer_init (void) 21 { 22 int i; 23 /* setup GP Timer 1 */ 24 TCTL1 = TCTL_SWR; 25 for ( i=0; i<100; i++) TCTL1 = 0; /* We have no udelay by now */ 26 TPRER1 = get_PERCLK1() / 1000000; /* 1 MHz */ 27 TCTL1 |= TCTL_FRR | (1<<1); /* Freerun Mode, PERCLK1 input */ 28 29 /* Reset the timer */ 30 TCTL1 &= ~TCTL_TEN; 31 TCTL1 |= TCTL_TEN; /* Enable timer */ 32 33 return (0); 34 } 35 36 /* 37 * timer without interrupts 38 */ 39 static ulong get_timer_masked (void) 40 { 41 return TCN1; 42 } 43 44 ulong get_timer (ulong base) 45 { 46 return get_timer_masked() - base; 47 } 48 49 void __udelay (unsigned long usec) 50 { 51 ulong endtime = get_timer_masked() + usec; 52 signed long diff; 53 54 do { 55 ulong now = get_timer_masked (); 56 diff = endtime - now; 57 } while (diff >= 0); 58 } 59 60 /* 61 * This function is derived from PowerPC code (read timebase as long long). 62 * On ARM it just returns the timer value. 63 */ 64 unsigned long long get_ticks(void) 65 { 66 return get_timer(0); 67 } 68 69 /* 70 * This function is derived from PowerPC code (timebase clock frequency). 71 * On ARM it returns the number of timer ticks per second. 72 */ 73 ulong get_tbclk (void) 74 { 75 return CONFIG_SYS_HZ; 76 } 77 78 /* 79 * Reset the cpu by setting up the watchdog timer and let him time out 80 */ 81 void reset_cpu (ulong ignored) 82 { 83 /* Disable watchdog and set Time-Out field to 0 */ 84 WCR = 0x00000000; 85 86 /* Write Service Sequence */ 87 WSR = 0x00005555; 88 WSR = 0x0000AAAA; 89 90 /* Enable watchdog */ 91 WCR = 0x00000001; 92 93 while (1); 94 /*NOTREACHED*/ 95 } 96 97 #endif /* defined (CONFIG_IMX) */ 98