0001
0002
0003
0004
0005
0006
0007 #include <linux/linkage.h>
0008 #include <asm/assembler.h>
0009 #include <asm/delay.h>
0010
0011 .text
0012
0013 .LC0: .word loops_per_jiffy
0014 .LC1: .word UDELAY_MULT
0015
0016
0017
0018
0019
0020
0021
0022
0023 ENTRY(__loop_udelay)
0024 ldr r2, .LC1
0025 mul r0, r2, r0 @ r0 = delay_us * UDELAY_MULT
0026 ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0xfffffaf0
0027 ldr r2, .LC0
0028 ldr r2, [r2]
0029 umull r1, r0, r2, r0 @ r0-r1 = r0 * loops_per_jiffy
0030 adds r1, r1, #0xffffffff @ rounding up ...
0031 adcs r0, r0, r0 @ and right shift by 31
0032 reteq lr
0033
0034 .align 3
0035
0036 @ Delay routine
0037 ENTRY(__loop_delay)
0038 subs r0, r0, #1
0039 #if 0
0040 retls lr
0041 subs r0, r0, #1
0042 retls lr
0043 subs r0, r0, #1
0044 retls lr
0045 subs r0, r0, #1
0046 retls lr
0047 subs r0, r0, #1
0048 retls lr
0049 subs r0, r0, #1
0050 retls lr
0051 subs r0, r0, #1
0052 retls lr
0053 subs r0, r0, #1
0054 #endif
0055 bhi __loop_delay
0056 ret lr
0057 ENDPROC(__loop_udelay)
0058 ENDPROC(__loop_const_udelay)
0059 ENDPROC(__loop_delay)