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/param.h> 13 .text 14 15.LC0: .word loops_per_jiffy 16.LC1: .word (2199023*HZ)>>11 17 18/* 19 * r0 <= 2000 20 * lpj <= 0x01ffffff (max. 3355 bogomips) 21 * HZ <= 1000 22 */ 23 24ENTRY(__udelay) 25 ldr r2, .LC1 26 mul r0, r2, r0 27ENTRY(__const_udelay) @ 0 <= r0 <= 0x7fffff06 28 ldr r2, .LC0 29 ldr r2, [r2] @ max = 0x01ffffff 30 mov r0, r0, lsr #14 @ max = 0x0001ffff 31 mov r2, r2, lsr #10 @ max = 0x00007fff 32 mul r0, r2, r0 @ max = 2^32-1 33 movs r0, r0, lsr #6 34 moveq pc, lr 35 36/* 37 * loops = r0 * HZ * loops_per_jiffy / 1000000 38 * 39 * Oh, if only we had a cycle counter... 40 */ 41 42@ Delay routine 43ENTRY(__delay) 44 subs r0, r0, #1 45#if 0 46 movls pc, lr 47 subs r0, r0, #1 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#endif 61 bhi __delay 62 mov pc, lr 63ENDPROC(__udelay) 64ENDPROC(__const_udelay) 65ENDPROC(__delay) 66