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 1284ad6884SPeter Tyser #include <common.h> 1384ad6884SPeter Tyser #include <SA-1100.h> 1484ad6884SPeter Tyser get_timer_masked(void)15*6180ea7eSPatrick Delaunaystatic ulong get_timer_masked (void) 16*6180ea7eSPatrick Delaunay { 17*6180ea7eSPatrick Delaunay return OSCR; 18*6180ea7eSPatrick Delaunay } 19*6180ea7eSPatrick Delaunay get_timer(ulong base)2084ad6884SPeter Tyserulong get_timer (ulong base) 2184ad6884SPeter Tyser { 2284ad6884SPeter Tyser return get_timer_masked (); 2384ad6884SPeter Tyser } 2484ad6884SPeter Tyser __udelay(unsigned long usec)25aa33fe86SPatrick Delaunayvoid __udelay (unsigned long usec) 2684ad6884SPeter Tyser { 2784ad6884SPeter Tyser ulong tmo; 2884ad6884SPeter Tyser ulong endtime; 2984ad6884SPeter Tyser signed long diff; 3084ad6884SPeter Tyser 3184ad6884SPeter Tyser if (usec >= 1000) { 3284ad6884SPeter Tyser tmo = usec / 1000; 3384ad6884SPeter Tyser tmo *= CONFIG_SYS_HZ; 3484ad6884SPeter Tyser tmo /= 1000; 3584ad6884SPeter Tyser } else { 3684ad6884SPeter Tyser tmo = usec * CONFIG_SYS_HZ; 3784ad6884SPeter Tyser tmo /= (1000*1000); 3884ad6884SPeter Tyser } 3984ad6884SPeter Tyser 4084ad6884SPeter Tyser endtime = get_timer_masked () + tmo; 4184ad6884SPeter Tyser 4284ad6884SPeter Tyser do { 4384ad6884SPeter Tyser ulong now = get_timer_masked (); 4484ad6884SPeter Tyser diff = endtime - now; 4584ad6884SPeter Tyser } while (diff >= 0); 4684ad6884SPeter Tyser } 4784ad6884SPeter Tyser 4884ad6884SPeter Tyser /* 4984ad6884SPeter Tyser * This function is derived from PowerPC code (read timebase as long long). 5084ad6884SPeter Tyser * On ARM it just returns the timer value. 5184ad6884SPeter Tyser */ get_ticks(void)5284ad6884SPeter Tyserunsigned long long get_ticks(void) 5384ad6884SPeter Tyser { 5484ad6884SPeter Tyser return get_timer(0); 5584ad6884SPeter Tyser } 5684ad6884SPeter Tyser 5784ad6884SPeter Tyser /* 5884ad6884SPeter Tyser * This function is derived from PowerPC code (timebase clock frequency). 5984ad6884SPeter Tyser * On ARM it returns the number of timer ticks per second. 6084ad6884SPeter Tyser */ get_tbclk(void)6184ad6884SPeter Tyserulong get_tbclk (void) 6284ad6884SPeter Tyser { 6363a7578eSMasahiro Yamada return CONFIG_SYS_HZ; 6484ad6884SPeter Tyser } 65