diff options
author | Rob Herring <rob.herring@calxeda.com> | 2013-10-04 15:22:46 (GMT) |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2013-11-04 16:23:45 (GMT) |
commit | 23ab7ee0ffa9d5efd0b4ad830befba306d24a327 (patch) | |
tree | 8bc9d332823a587396c579d5c81c4cf48a576386 | |
parent | b3a7f22b3e096f3699d3262e114110d6e7183816 (diff) | |
download | u-boot-23ab7ee0ffa9d5efd0b4ad830befba306d24a327.tar.xz |
ARM: socfpga: convert to common timer code
Convert socfpga to use the commmon timer code.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
-rw-r--r-- | arch/arm/cpu/armv7/socfpga/timer.c | 72 | ||||
-rw-r--r-- | include/configs/socfpga_cyclone5.h | 5 |
2 files changed, 3 insertions, 74 deletions
diff --git a/arch/arm/cpu/armv7/socfpga/timer.c b/arch/arm/cpu/armv7/socfpga/timer.c index 09f6f14..58fc789 100644 --- a/arch/arm/cpu/armv7/socfpga/timer.c +++ b/arch/arm/cpu/armv7/socfpga/timer.c @@ -8,8 +8,6 @@ #include <asm/io.h> #include <asm/arch/timer.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct socfpga_timer *timer_base = (void *)CONFIG_SYS_TIMERBASE; /* @@ -22,73 +20,3 @@ int timer_init(void) writel(readl(&timer_base->ctrl) | 0x3, &timer_base->ctrl); return 0; } - -static u32 read_timer(void) -{ - return readl(&timer_base->curr_val); -} - -/* - * Delay x useconds - */ -void __udelay(unsigned long usec) -{ - unsigned long now, last; - /* - * get the tmo value based on timer clock speed - * tmo = delay required / period of timer clock - */ - long tmo = usec * CONFIG_TIMER_CLOCK_KHZ / 1000; - - last = read_timer(); - while (tmo > 0) { - now = read_timer(); - if (last >= now) - /* normal mode (non roll) */ - tmo -= last - now; - else - /* we have overflow of the count down timer */ - tmo -= TIMER_LOAD_VAL - last + now; - last = now; - } -} - -/* - * Get the timer value - */ -ulong get_timer(ulong base) -{ - return get_timer_masked() - base; -} - -/* - * Timer : get the time difference - * Unit of tick is based on the CONFIG_SYS_HZ - */ -ulong get_timer_masked(void) -{ - /* current tick value */ - ulong now = read_timer() / (CONFIG_TIMER_CLOCK_KHZ/CONFIG_SYS_HZ); - if (gd->arch.lastinc >= now) { - /* normal mode (non roll) */ - /* move stamp forward with absolute diff ticks */ - gd->arch.tbl += gd->arch.lastinc - now; - } else { - /* we have overflow of the count down timer */ - gd->arch.tbl += TIMER_LOAD_VAL - gd->arch.lastinc + now; - } - gd->arch.lastinc = now; - return gd->arch.tbl; -} - -/* - * Reset the timer - */ -void reset_timer(void) -{ - /* capture current decrementer value time */ - gd->arch.lastinc = read_timer() / - (CONFIG_TIMER_CLOCK_KHZ / CONFIG_SYS_HZ); - /* start "advancing" time stamp from 0 */ - gd->arch.tbl = 0; -} diff --git a/include/configs/socfpga_cyclone5.h b/include/configs/socfpga_cyclone5.h index dc74ad0..980636c 100644 --- a/include/configs/socfpga_cyclone5.h +++ b/include/configs/socfpga_cyclone5.h @@ -197,10 +197,11 @@ #define TIMER_LOAD_VAL 0xFFFFFFFF /* Timer info */ #ifdef CONFIG_SOCFPGA_VIRTUAL_TARGET -#define CONFIG_TIMER_CLOCK_KHZ 2400 +#define CONFIG_SYS_TIMER_RATE 2400000 #else -#define CONFIG_TIMER_CLOCK_KHZ 25000 +#define CONFIG_SYS_TIMER_RATE 25000000 #endif +#define CONFIG_SYS_TIMER_COUNTER (CONFIG_SYS_TIMERBASE + 0x4) #define CONFIG_ENV_IS_NOWHERE |