Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  linux/arch/arm/lib/delay.S
0004  *
0005  *  Copyright (C) 1995, 1996 Russell King
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  * loops = r0 * HZ * loops_per_jiffy / 1000000
0018  *
0019  * r0  <= 2000
0020  * HZ  <= 1000
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)