Merge branch 'core/speculation' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / arch / arm / lib / delay-loop.S
CommitLineData
1da177e4
LT
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>
d0a533b1 12#include <asm/delay.h>
215e362d 13
1da177e4
LT
14 .text
15
8adbb371 16.LC0: .word loops_per_jiffy
d0a533b1 17.LC1: .word UDELAY_MULT
1da177e4
LT
18
19/*
207b1150
NP
20 * loops = r0 * HZ * loops_per_jiffy / 1000000
21 *
6d4518d7 22 * r0 <= 2000
6d4518d7 23 * HZ <= 1000
1da177e4 24 */
6d4518d7 25
d0a533b1 26ENTRY(__loop_udelay)
6d4518d7 27 ldr r2, .LC1
207b1150
NP
28 mul r0, r2, r0 @ r0 = delay_us * UDELAY_MULT
29ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0xfffffaf0
8adbb371 30 ldr r2, .LC0
215e362d 31 ldr r2, [r2]
207b1150
NP
32 umull r1, r0, r2, r0 @ r0-r1 = r0 * loops_per_jiffy
33 adds r1, r1, #0xffffffff @ rounding up ...
34 adcs r0, r0, r0 @ and right shift by 31
6ebbf2ce 35 reteq lr
1da177e4 36
11d4bb1b 37 .align 3
1da177e4
LT
38
39@ Delay routine
d0a533b1 40ENTRY(__loop_delay)
1da177e4
LT
41 subs r0, r0, #1
42#if 0
6ebbf2ce 43 retls lr
1da177e4 44 subs r0, r0, #1
6ebbf2ce 45 retls lr
1da177e4 46 subs r0, r0, #1
6ebbf2ce 47 retls lr
1da177e4 48 subs r0, r0, #1
6ebbf2ce 49 retls lr
1da177e4 50 subs r0, r0, #1
6ebbf2ce 51 retls lr
1da177e4 52 subs r0, r0, #1
6ebbf2ce 53 retls lr
1da177e4 54 subs r0, r0, #1
6ebbf2ce 55 retls lr
1da177e4
LT
56 subs r0, r0, #1
57#endif
d0a533b1 58 bhi __loop_delay
6ebbf2ce 59 ret lr
d0a533b1
WD
60ENDPROC(__loop_udelay)
61ENDPROC(__loop_const_udelay)
62ENDPROC(__loop_delay)