diff options
author | Matthias Kaehlcke <matthias@kaehlcke.net> | 2010-03-09 22:13:33 +0100 |
---|---|---|
committer | trix <trix@windriver.com> | 2010-03-22 11:58:28 -0500 |
commit | d650da2dd4af99967aabc43cccbd8f160eb4cea6 (patch) | |
tree | ee5b30aa272d6fb1abc65ecd1dae11087d17556a | |
parent | 7e67fb5bf27a07d3b8d6b97c76f7195f7d68af58 (diff) |
ep93xx timer: Fix resolution of get_ticks()
ep93xx timer: Make get_ticks() return a value in CONFIG_SYS_HZ resolution,
as announced by get_tbclk()
Signed-off-by: Matthias Kaehlcke <matthias@kaehlcke.net>
-rw-r--r-- | cpu/arm920t/ep93xx/timer.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/cpu/arm920t/ep93xx/timer.c b/cpu/arm920t/ep93xx/timer.c index bc4ec8fcd4..31304b7f97 100644 --- a/cpu/arm920t/ep93xx/timer.c +++ b/cpu/arm920t/ep93xx/timer.c @@ -69,7 +69,7 @@ static inline unsigned long read_timer(void) } /* - * timer without interrupts + * Get the number of ticks (in CONFIG_SYS_HZ resolution) */ unsigned long long get_ticks(void) { @@ -83,12 +83,12 @@ unsigned long long get_ticks(void) timer.last_update = now; - return timer.ticks; + return clk_to_systicks(timer.ticks); } unsigned long get_timer_masked(void) { - return clk_to_systicks(get_ticks()); + return get_ticks(); } unsigned long get_timer(unsigned long base) @@ -109,10 +109,13 @@ void reset_timer(void) void __udelay(unsigned long usec) { - const unsigned long target = get_ticks() + usecs_to_ticks(usec); + /* read the timer and update timer.ticks */ + get_ticks(); - while (get_ticks() < target) - /* noop */; + const unsigned long long target = timer.ticks + usecs_to_ticks(usec); + + while (timer.ticks < target) + get_ticks(); } int timer_init(void) |