Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[oweals/u-boot.git] / arch / arm / cpu / sa1100 / timer.c
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
12 #include <common.h>
13 #include <SA-1100.h>
14 #include <time.h>
15 #include <linux/delay.h>
16
17 static ulong get_timer_masked (void)
18 {
19         return OSCR;
20 }
21
22 ulong get_timer (ulong base)
23 {
24         return get_timer_masked ();
25 }
26
27 void __udelay(unsigned long usec)
28 {
29         ulong tmo;
30         ulong endtime;
31         signed long diff;
32
33         if (usec >= 1000) {
34                 tmo = usec / 1000;
35                 tmo *= CONFIG_SYS_HZ;
36                 tmo /= 1000;
37         } else {
38                 tmo = usec * CONFIG_SYS_HZ;
39                 tmo /= (1000*1000);
40         }
41
42         endtime = get_timer_masked () + tmo;
43
44         do {
45                 ulong now = get_timer_masked ();
46                 diff = endtime - now;
47         } while (diff >= 0);
48 }
49
50 /*
51  * This function is derived from PowerPC code (read timebase as long long).
52  * On ARM it just returns the timer value.
53  */
54 unsigned long long get_ticks(void)
55 {
56         return get_timer(0);
57 }
58
59 /*
60  * This function is derived from PowerPC code (timebase clock frequency).
61  * On ARM it returns the number of timer ticks per second.
62  */
63 ulong get_tbclk(void)
64 {
65         return CONFIG_SYS_HZ;
66 }