1/* 2 * (C) Copyright 2002 3 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 4 * Marius Groeger <mgroeger@sysgo.de> 5 * 6 * (C) Copyright 2002 7 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 8 * Alex Zuepke <azu@sysgo.de> 9 * 10 * SPDX-License-Identifier: GPL-2.0+ 11 */ 12 13#include <common.h> 14#include <SA-1100.h> 15 16ulong get_timer (ulong base) 17{ 18 return get_timer_masked (); 19} 20 21void __udelay (unsigned long usec) 22{ 23 udelay_masked (usec); 24} 25 26ulong get_timer_masked (void) 27{ 28 return OSCR; 29} 30 31void udelay_masked (unsigned long usec) 32{ 33 ulong tmo; 34 ulong endtime; 35 signed long diff; 36 37 if (usec >= 1000) { 38 tmo = usec / 1000; 39 tmo *= CONFIG_SYS_HZ; 40 tmo /= 1000; 41 } else { 42 tmo = usec * CONFIG_SYS_HZ; 43 tmo /= (1000*1000); 44 } 45 46 endtime = get_timer_masked () + tmo; 47 48 do { 49 ulong now = get_timer_masked (); 50 diff = endtime - now; 51 } while (diff >= 0); 52} 53 54/* 55 * This function is derived from PowerPC code (read timebase as long long). 56 * On ARM it just returns the timer value. 57 */ 58unsigned long long get_ticks(void) 59{ 60 return get_timer(0); 61} 62 63/* 64 * This function is derived from PowerPC code (timebase clock frequency). 65 * On ARM it returns the number of timer ticks per second. 66 */ 67ulong get_tbclk (void) 68{ 69 ulong tbclk; 70 71 tbclk = CONFIG_SYS_HZ; 72 return tbclk; 73} 74