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:
parent
c06326c73b
commit
ec01481ddc
|
@ -95,11 +95,12 @@ void udelay(unsigned long usec)
|
||||||
int timer_init(void)
|
int timer_init(void)
|
||||||
{
|
{
|
||||||
*pTCNTL = 0x1;
|
*pTCNTL = 0x1;
|
||||||
|
CSYNC();
|
||||||
*pTSCALE = 0x0;
|
*pTSCALE = 0x0;
|
||||||
*pTCOUNT = MAX_TIM_LOAD;
|
*pTCOUNT = MAX_TIM_LOAD;
|
||||||
*pTPERIOD = MAX_TIM_LOAD;
|
*pTPERIOD = MAX_TIM_LOAD;
|
||||||
*pTCNTL = 0x7;
|
*pTCNTL = 0x7;
|
||||||
asm("CSYNC;");
|
CSYNC();
|
||||||
|
|
||||||
timestamp = 0;
|
timestamp = 0;
|
||||||
last_time = 0;
|
last_time = 0;
|
||||||
|
@ -151,5 +152,5 @@ ulong get_timer(ulong base)
|
||||||
|
|
||||||
void reset_timer(void)
|
void reset_timer(void)
|
||||||
{
|
{
|
||||||
timestamp = 0;
|
timer_init();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue