diff options
author | Graf Yang <graf.yang@analog.com> | 2009-05-19 08:40:08 (GMT) |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-05-19 08:57:33 (GMT) |
commit | ec01481ddc4cf302c7f6d760b776ca94819ec21e (patch) | |
tree | 0c57e843e25af067d1cdfe16d33793e5fcc8a5ed | |
parent | c06326c73bf90e48a8e1cf8893ad31c575423f50 (diff) | |
download | u-boot-ec01481ddc4cf302c7f6d760b776ca94819ec21e.tar.xz |
Blackfin: fix timer_init()/timer_reset()
The timer_init() function was not using the right csync instruction, nor
was it doing it right after disabling the core timer.
The timer_reset() function would reset the timestamp, but not the actual
timer, so there was a common edge case where get_timer() return a jump of
one timestamp (couple milliseconds) right after resetting. This caused
many functions to improperly timeout right away.
Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r-- | cpu/blackfin/interrupts.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/cpu/blackfin/interrupts.c b/cpu/blackfin/interrupts.c index d4dd636..bf6fb4b 100644 --- a/cpu/blackfin/interrupts.c +++ b/cpu/blackfin/interrupts.c @@ -95,11 +95,12 @@ void udelay(unsigned long usec) int timer_init(void) { *pTCNTL = 0x1; + CSYNC(); *pTSCALE = 0x0; *pTCOUNT = MAX_TIM_LOAD; *pTPERIOD = MAX_TIM_LOAD; *pTCNTL = 0x7; - asm("CSYNC;"); + CSYNC(); timestamp = 0; last_time = 0; @@ -151,5 +152,5 @@ ulong get_timer(ulong base) void reset_timer(void) { - timestamp = 0; + timer_init(); } |