patch-2.4.22 linux-2.4.22/arch/arm/lib/delay.S
Next file: linux-2.4.22/arch/arm/lib/longlong.h
Previous file: linux-2.4.22/arch/arm/lib/csumpartial.S
Back to the patch index
Back to the overall index
- Lines: 88
- Date:
2003-08-25 04:44:39.000000000 -0700
- Orig file:
linux-2.4.21/arch/arm/lib/delay.S
- Orig date:
2001-04-12 12:20:31.000000000 -0700
diff -urN linux-2.4.21/arch/arm/lib/delay.S linux-2.4.22/arch/arm/lib/delay.S
@@ -1,7 +1,7 @@
/*
* linux/arch/arm/lib/delay.S
*
- * Copyright (C) 1995, 1996 Russell King
+ * Copyright (C) 1995-2003 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -9,45 +9,52 @@
*/
#include <linux/linkage.h>
#include <asm/assembler.h>
- .text
+#include <asm/delay.h>
-LC0: .word SYMBOL_NAME(loops_per_jiffy)
+ .text
/*
- * 0 <= r0 <= 2000
+ * See linux/include/asm-arm/delay.h for a description of the maths.
*/
-ENTRY(udelay)
- mov r2, #0x6800
- orr r2, r2, #0x00db
+
+#if NDELAY_FACTOR > 255
+#error NDELAY_FACTOR out of range
+#endif
+#if UDELAY_FACTOR > 65535
+#error UDELAY_FACTOR out of range
+#endif
+
+LC0: .word SYMBOL_NAME(loops_per_jiffy)
+
+ENTRY(__const_delay)
+ ldr r3, LC0
+ mov r1, r0, lsr #11
+ ldr r2, [r3, #0]
+ b 2f
+
+ENTRY(__ndelay)
+ mov r2, #NDELAY_FACTOR
+ b 1f
+
+ENTRY(__udelay)
+ mov r2, #UDELAY_FACTOR & 0xff00
+ orr r2, r2, #UDELAY_FACTOR & 0x00ff
+1: ldr r3, LC0
mul r1, r0, r2
- ldr r2, LC0
- ldr r2, [r2]
+ ldr r2, [r3, #0]
mov r1, r1, lsr #11
- mov r2, r2, lsr #11
+2: mov r2, r2, lsr #12
mul r0, r1, r2
- movs r0, r0, lsr #6
+ movs r0, r0, lsr #5
RETINSTR(moveq,pc,lr)
/*
- * loops = (r0 * 0x10c6 * 100 * loops_per_jiffie) / 2^32
+ * loops = (r0 * 0x10c6 * HZ * loops_per_jiffy) / 2^32
+ *
+ * Oh, if only we had a cycle counter...
*/
-@ Delay routine
ENTRY(__delay)
subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
- RETINSTR(movcc,pc,lr)
- subs r0, r0, #1
bcs SYMBOL_NAME(__delay)
RETINSTR(mov,pc,lr)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)