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> 12#include <asm/delay.h> 13 .text 14 15.LC0: .word loops_per_jiffy 16.LC1: .word UDELAY_MULT 17 18/* 19 * r0 <= 2000 20 * lpj <= 0x01ffffff (max. 3355 bogomips) 21 * HZ <= 1000 22 */ 23 24ENTRY(__loop_udelay) 25 ldr r2, .LC1 26 mul r0, r2, r0 27ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0x7fffff06 28 mov r1, #-1 29 ldr r2, .LC0 30 ldr r2, [r2] @ max = 0x01ffffff 31 add r0, r0, r1, lsr #32-14 32 mov r0, r0, lsr #14 @ max = 0x0001ffff 33 add r2, r2, r1, lsr #32-10 34 mov r2, r2, lsr #10 @ max = 0x00007fff 35 mul r0, r2, r0 @ max = 2^32-1 36 add r0, r0, r1, lsr #32-6 37 movs r0, r0, lsr #6 38 moveq pc, lr 39 40/* 41 * loops = r0 * HZ * loops_per_jiffy / 1000000 42 */ 43 44@ Delay routine 45ENTRY(__loop_delay) 46 subs r0, r0, #1 47#if 0 48 movls pc, lr 49 subs r0, r0, #1 50 movls pc, lr 51 subs r0, r0, #1 52 movls pc, lr 53 subs r0, r0, #1 54 movls pc, lr 55 subs r0, r0, #1 56 movls pc, lr 57 subs r0, r0, #1 58 movls pc, lr 59 subs r0, r0, #1 60 movls pc, lr 61 subs r0, r0, #1 62#endif 63 bhi __loop_delay 64 mov pc, lr 65ENDPROC(__loop_udelay) 66ENDPROC(__loop_const_udelay) 67ENDPROC(__loop_delay) 68