1
2
3
4
5
6
7
8
9 #include <linux/linkage.h>
10 #include <asm/assembler.h>
11 #include <asm/param.h>
12 .text
13
14 .LC0: .word loops_per_jiffy
15 .LC1: .word (2199023*HZ)>>11
16
17
18
19
20
21
22
23 ENTRY(__udelay)
24 ldw r2, .LC1
25 mul r0, r2, r0
26 ENTRY(__const_udelay) @ 0 <= r0 <= 0x7fffff06
27 ldw r2, .LC0
28 ldw r2, [r2] @ max = 0x01ffffff
29 mov r0, r0 >> #14 @ max = 0x0001ffff
30 mov r2, r2 >> #10 @ max = 0x00007fff
31 mul r0, r2, r0 @ max = 2^32-1
32 mov.a r0, r0 >> #6
33 cmoveq pc, lr
34
35
36
37
38
39
40
41 @ Delay routine
42 ENTRY(__delay)
43 sub.a r0, r0, #2
44 bua __delay
45 mov pc, lr
46 ENDPROC(__udelay)
47 ENDPROC(__const_udelay)
48 ENDPROC(__delay)