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>
This commit is contained in:
Graf Yang 2009-05-19 04:40:08 -04:00 committed by Mike Frysinger
parent c06326c73b
commit ec01481ddc
1 changed files with 3 additions and 2 deletions

View File

@ -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();
}