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> 11 12 #ifdef CONFIG_ARCH_RPC 13 .arch armv4 14 #endif 15 16 .text 17 18 .LC0: .word loops_per_jiffy 19 .LC1: .word UDELAY_MULT 20 21 /* 22 * loops = r0 * HZ * loops_per_jiffy / 1000000 23 * 24 * r0 <= 2000 25 * HZ <= 1000 26 */ 27 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) 33 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) 43 44 .align 3 45 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)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.