]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - arch/openrisc/lib/delay.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[mirror_ubuntu-hirsute-kernel.git] / arch / openrisc / lib / delay.c
CommitLineData
d2912cb1 1// SPDX-License-Identifier: GPL-2.0-only
224cd129
JB
2/*
3 * OpenRISC Linux
4 *
5 * Linux architectural port borrowing liberally from similar works of
6 * others. All original copyrights apply as per the original source
7 * declaration.
8 *
9 * Modifications for the OpenRISC architecture:
10 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
11 *
224cd129
JB
12 * Precise Delay Loops
13 */
14
15#include <linux/kernel.h>
1938852d 16#include <linux/export.h>
224cd129 17#include <linux/init.h>
1938852d 18#include <asm/param.h>
224cd129
JB
19#include <asm/delay.h>
20#include <asm/timex.h>
21#include <asm/processor.h>
22
b881bc46 23int read_current_timer(unsigned long *timer_value)
224cd129 24{
8e6d08e0 25 *timer_value = get_cycles();
224cd129
JB
26 return 0;
27}
28
29void __delay(unsigned long cycles)
30{
807607f7 31 cycles_t start = get_cycles();
224cd129 32
807607f7 33 while ((get_cycles() - start) < cycles)
224cd129
JB
34 cpu_relax();
35}
36EXPORT_SYMBOL(__delay);
37
38inline void __const_udelay(unsigned long xloops)
39{
40 unsigned long long loops;
41
43916466 42 loops = (unsigned long long)xloops * loops_per_jiffy * HZ;
224cd129
JB
43
44 __delay(loops >> 32);
45}
46EXPORT_SYMBOL(__const_udelay);
47
48void __udelay(unsigned long usecs)
49{
50 __const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */
51}
52EXPORT_SYMBOL(__udelay);
53
54void __ndelay(unsigned long nsecs)
55{
56 __const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */
57}
58EXPORT_SYMBOL(__ndelay);