]> git.sur5r.net Git - u-boot/blobdiff - cpu/at32ap/interrupts.c
Merge branch 'master' into next
[u-boot] / cpu / at32ap / interrupts.c
index c9e04993c777a1344147acf2d108ca5e02d2604a..c6d8d16e39e8aecd95abbd2cf866b88b6438ca53 100644 (file)
@@ -20,8 +20,8 @@
  * MA 02111-1307 USA
  */
 #include <common.h>
+#include <div64.h>
 
-#include <asm/div64.h>
 #include <asm/errno.h>
 #include <asm/io.h>
 #include <asm/processor.h>
@@ -82,7 +82,7 @@ void set_timer(unsigned long t)
        unsigned long long ticks = t;
        unsigned long lo, hi, hi_new;
 
-       ticks = (ticks * get_tbclk()) / CFG_HZ;
+       ticks = (ticks * get_tbclk()) / CONFIG_SYS_HZ;
        hi = ticks >> 32;
        lo = ticks & 0xffffffffUL;
 
@@ -96,20 +96,18 @@ void set_timer(unsigned long t)
 /*
  * For short delays only. It will overflow after a few seconds.
  */
-void udelay(unsigned long usec)
+void __udelay(unsigned long usec)
 {
-       unsigned long now, end;
+       unsigned long cycles;
+       unsigned long base;
+       unsigned long now;
 
-       now = sysreg_read(COUNT);
+       base = sysreg_read(COUNT);
+       cycles = ((usec * (get_tbclk() / 10000)) + 50) / 100;
 
-       end = ((usec * (get_tbclk() / 10000)) + 50) / 100;
-       end += now;
-
-       while (now > end)
-               now = sysreg_read(COUNT);
-
-       while (now < end)
+       do {
                now = sysreg_read(COUNT);
+       } while ((now - base) < cycles);
 }
 
 static int set_interrupt_handler(unsigned int nr, void (*handler)(void),
@@ -139,7 +137,7 @@ void timer_init(void)
 
        sysreg_write(COUNT, 0);
 
-       tmp = (u64)CFG_HZ << 32;
+       tmp = (u64)CONFIG_SYS_HZ << 32;
        tmp += gd->cpu_hz / 2;
        do_div(tmp, gd->cpu_hz);
        tb_factor = (u32)tmp;