]> git.sur5r.net Git - u-boot/commitdiff
zynq: Use system timer implementation instead of our
authorMichal Simek <michal.simek@xilinx.com>
Mon, 20 Apr 2015 10:56:24 +0000 (12:56 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 25 May 2015 08:52:03 +0000 (10:52 +0200)
Don't use error-prone arch timer code and instead use system
timer implementation to simplify our code.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/mach-zynq/include/mach/hardware.h
arch/arm/mach-zynq/timer.c
include/configs/zynq-common.h

index e2e0b7321ad44e3eeb22116ae449be1e008d1c34..9a51d6ba3b5e23102c8c09f4e9db1d18b028e850 100644 (file)
@@ -12,7 +12,6 @@
 #define ZYNQ_SYS_CTRL_BASEADDR         0xF8000000
 #define ZYNQ_DEV_CFG_APB_BASEADDR      0xF8007000
 #define ZYNQ_SCU_BASEADDR              0xF8F00000
-#define ZYNQ_SCUTIMER_BASEADDR         0xF8F00600
 #define ZYNQ_GEM_BASEADDR0             0xE000B000
 #define ZYNQ_GEM_BASEADDR1             0xE000C000
 #define ZYNQ_SDHCI_BASEADDR0           0xE0100000
index 5ed9642df9b331d2723864edd7a0d12cadc1737c..8ff82dc9306e10c15f3d7c07f025dfa36bd8960a 100644 (file)
@@ -77,92 +77,11 @@ int timer_init(void)
        return 0;
 }
 
-/*
- * This function is derived from PowerPC code (read timebase as long long).
- * On ARM it just returns the timer value.
- */
-ulong get_timer_masked(void)
-{
-       ulong now;
-
-       now = readl(&timer_base->counter) /
-                       (gd->arch.timer_rate_hz / CONFIG_SYS_HZ);
-
-       if (gd->arch.lastinc >= now) {
-               /* Normal mode */
-               gd->arch.tbl += gd->arch.lastinc - now;
-       } else {
-               /* We have an overflow ... */
-               gd->arch.tbl += gd->arch.lastinc + (TIMER_LOAD_VAL /
-                               (gd->arch.timer_rate_hz / CONFIG_SYS_HZ)) -
-                               now + 1;
-       }
-       gd->arch.lastinc = now;
-
-       return gd->arch.tbl;
-}
-
-void __udelay(unsigned long usec)
-{
-       u32 countticks;
-       u32 timeend;
-       u32 timediff;
-       u32 timenow;
-
-       if (usec == 0)
-               return;
-
-       countticks = lldiv(((unsigned long long)gd->arch.timer_rate_hz * usec),
-                          1000000);
-
-       /* decrementing timer */
-       timeend = readl(&timer_base->counter) - countticks;
-
-#if TIMER_LOAD_VAL != 0xFFFFFFFF
-       /* do not manage multiple overflow */
-       if (countticks >= TIMER_LOAD_VAL)
-               countticks = TIMER_LOAD_VAL - 1;
-#endif
-
-       do {
-               timenow = readl(&timer_base->counter);
-
-               if (timenow >= timeend) {
-                       /* normal case */
-                       timediff = timenow - timeend;
-               } else {
-                       if ((TIMER_LOAD_VAL - timeend + timenow) <=
-                                                               countticks) {
-                               /* overflow */
-                               timediff = TIMER_LOAD_VAL - timeend + timenow;
-                       } else {
-                               /* missed the exact match */
-                               break;
-                       }
-               }
-       } while (timediff > 0);
-}
-
-/* Timer without interrupts */
-ulong get_timer(ulong base)
-{
-       return get_timer_masked() - base;
-}
-
-/*
- * This function is derived from PowerPC code (read timebase as long long).
- * On ARM it just returns the timer value.
- */
-unsigned long long get_ticks(void)
-{
-       return get_timer(0);
-}
-
 /*
  * This function is derived from PowerPC code (timebase clock frequency).
  * On ARM it returns the number of timer ticks per second.
  */
 ulong get_tbclk(void)
 {
-       return CONFIG_SYS_HZ;
+       return gd->arch.timer_rate_hz;
 }
index 926b381580654d8c6144609da3174d3dff75695b..be77e509e55897089bf94ae3381c0e6863ded1b4 100644 (file)
 # define CONFIG_SYS_PL310_BASE         0xf8f02000
 #endif
 
+#define ZYNQ_SCUTIMER_BASEADDR         0xF8F00600
+#define CONFIG_SYS_TIMERBASE           ZYNQ_SCUTIMER_BASEADDR
+#define CONFIG_SYS_TIMER_COUNTS_DOWN
+#define CONFIG_SYS_TIMER_COUNTER       (CONFIG_SYS_TIMERBASE + 0x4)
+
 /* Serial drivers */
 #define CONFIG_BAUDRATE                115200
 /* The following table includes the supported baudrates */