Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/lib/delay.S
10817 views
1
/*
2
* linux/arch/arm/lib/delay.S
3
*
4
* Copyright (C) 1995, 1996 Russell King
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation.
9
*/
10
#include <linux/linkage.h>
11
#include <asm/assembler.h>
12
#include <asm/param.h>
13
.text
14
15
.LC0: .word loops_per_jiffy
16
.LC1: .word (2199023*HZ)>>11
17
18
/*
19
* r0 <= 2000
20
* lpj <= 0x01ffffff (max. 3355 bogomips)
21
* HZ <= 1000
22
*/
23
24
ENTRY(__udelay)
25
ldr r2, .LC1
26
mul r0, r2, r0
27
ENTRY(__const_udelay) @ 0 <= r0 <= 0x7fffff06
28
mov r1, #-1
29
ldr r2, .LC0
30
ldr r2, [r2] @ max = 0x01ffffff
31
add r0, r0, r1, lsr #32-14
32
mov r0, r0, lsr #14 @ max = 0x0001ffff
33
add r2, r2, r1, lsr #32-10
34
mov r2, r2, lsr #10 @ max = 0x00007fff
35
mul r0, r2, r0 @ max = 2^32-1
36
add r0, r0, r1, lsr #32-6
37
movs r0, r0, lsr #6
38
moveq pc, lr
39
40
/*
41
* loops = r0 * HZ * loops_per_jiffy / 1000000
42
*
43
* Oh, if only we had a cycle counter...
44
*/
45
46
@ Delay routine
47
ENTRY(__delay)
48
subs r0, r0, #1
49
#if 0
50
movls pc, lr
51
subs r0, r0, #1
52
movls pc, lr
53
subs r0, r0, #1
54
movls pc, lr
55
subs r0, r0, #1
56
movls pc, lr
57
subs r0, r0, #1
58
movls pc, lr
59
subs r0, r0, #1
60
movls pc, lr
61
subs r0, r0, #1
62
movls pc, lr
63
subs r0, r0, #1
64
#endif
65
bhi __delay
66
mov pc, lr
67
ENDPROC(__udelay)
68
ENDPROC(__const_udelay)
69
ENDPROC(__delay)
70
71