Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc
[pandora-kernel.git] / arch / arm / lib / delay.S
index 3c7f7e6..930a702 100644 (file)
@@ -9,28 +9,32 @@
  */
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/param.h>
                .text
 
-LC0:           .word   loops_per_jiffy
+.LC0:          .word   loops_per_jiffy
+.LC1:          .word   (2199023*HZ)>>11
 
 /*
- * 0 <= r0 <= 2000
+ * r0  <= 2000
+ * lpj <= 0x01ffffff (max. 3355 bogomips)
+ * HZ  <= 1000
  */
+
 ENTRY(__udelay)
-               mov     r2,     #0x6800
-               orr     r2, r2, #0x00db
+               ldr     r2, .LC1
                mul     r0, r2, r0
-ENTRY(__const_udelay)                          @ 0 <= r0 <= 0x01ffffff
-               ldr     r2, LC0
-               ldr     r2, [r2]                @ max = 0x0fffffff
-               mov     r0, r0, lsr #11         @ max = 0x00003fff
-               mov     r2, r2, lsr #11         @ max = 0x0003ffff
+ENTRY(__const_udelay)                          @ 0 <= r0 <= 0x7fffff06
+               ldr     r2, .LC0
+               ldr     r2, [r2]                @ max = 0x01ffffff
+               mov     r0, r0, lsr #14         @ max = 0x0001ffff
+               mov     r2, r2, lsr #10         @ max = 0x00007fff
                mul     r0, r2, r0              @ max = 2^32-1
                movs    r0, r0, lsr #6
-               RETINSTR(moveq,pc,lr)
+               moveq   pc, lr
 
 /*
- * loops = (r0 * 0x10c6 * 100 * loops_per_jiffy) / 2^32
+ * loops = r0 * HZ * loops_per_jiffy / 1000000
  *
  * Oh, if only we had a cycle counter...
  */
@@ -39,20 +43,20 @@ ENTRY(__const_udelay)                               @ 0 <= r0 <= 0x01ffffff
 ENTRY(__delay)
                subs    r0, r0, #1
 #if 0
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
 #endif
                bhi     __delay
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr