Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / arch / arm / lib / delay-loop.S
blob33b08ca1c2422d40896ef5ee260dc11a2e272028
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  linux/arch/arm/lib/delay.S
4  *
5  *  Copyright (C) 1995, 1996 Russell King
6  */
7 #include <linux/linkage.h>
8 #include <linux/cfi_types.h>
9 #include <asm/assembler.h>
10 #include <asm/delay.h>
12 #ifdef CONFIG_ARCH_RPC
13                 .arch   armv4
14 #endif
16                 .text
18 .LC0:           .word   loops_per_jiffy
19 .LC1:           .word   UDELAY_MULT
22  * loops = r0 * HZ * loops_per_jiffy / 1000000
23  *
24  * r0  <= 2000
25  * HZ  <= 1000
26  */
28 SYM_TYPED_FUNC_START(__loop_udelay)
29                 ldr     r2, .LC1
30                 mul     r0, r2, r0              @ r0 = delay_us * UDELAY_MULT
31                 b       __loop_const_udelay
32 SYM_FUNC_END(__loop_udelay)
34 SYM_TYPED_FUNC_START(__loop_const_udelay)       @ 0 <= r0 <= 0xfffffaf0
35                 ldr     r2, .LC0
36                 ldr     r2, [r2]
37                 umull   r1, r0, r2, r0          @ r0-r1 = r0 * loops_per_jiffy
38                 adds    r1, r1, #0xffffffff     @ rounding up ...
39                 adcs    r0, r0, r0              @ and right shift by 31
40                 reteq   lr
41                 b       __loop_delay
42 SYM_FUNC_END(__loop_const_udelay)
44                 .align 3
46 @ Delay routine
47 SYM_TYPED_FUNC_START(__loop_delay)
48                 subs    r0, r0, #1
49 #if 0
50                 retls   lr
51                 subs    r0, r0, #1
52                 retls   lr
53                 subs    r0, r0, #1
54                 retls   lr
55                 subs    r0, r0, #1
56                 retls   lr
57                 subs    r0, r0, #1
58                 retls   lr
59                 subs    r0, r0, #1
60                 retls   lr
61                 subs    r0, r0, #1
62                 retls   lr
63                 subs    r0, r0, #1
64 #endif
65                 bhi     __loop_delay
66                 ret     lr
67 SYM_FUNC_END(__loop_delay)