Wolfgang Denk schrieb:
> Dear Reinhard Meyer,
> 
> In message <4cc67ca1.9090...@emk-elektronik.de> you wrote:
>> If implemented with true 64 bits for get_ticks() that function is useable
>> for timeout programming:
>>
>>      ulong timeval = get_timer (0);
>>
>>      do {
>>              ...
>>      } while (get_timer (timeval) < TIMEOUT);
>>
>> It appears that the "base" parameter and return value is in CONFIG_SYS_HZ
>> units, and not in native ticks. That causes 64 bit mul/div every
>> time get_timer() is called. Won't hurt in a timeout loop, though.
> 
> But it will hurt in othe rplaces.
> 
> Also, this code _is_ a bit different, as "get_timer(0)" makes sure
> the counter starts ticking again at 0

Nope, it does not reset the counter itself. It returns the current
counter value (recalculated into CONFIG_SYS_HZ units).
Maybe you mean reset_timer() instead?

In arm9226ejs/omap/timer.c udelay() is implemented with reset_timer()
and get_timer(). Since those functions are inherently not nestable,
beware of base=get_timer(0); do { ... udelay(xx); ... } while (get_timer(base) 
< TIMEOUT);
constructs!

> , and get_timer() is defined to
> have millisecond resolution.

Actually CONFIG_SYS_HZ (whatever that is).

> So you have a guaranteed 2^32
> milliseconds or 4294967 seconds or about 3.3 years available which
> indeed should be sufficient to implement standard timeouts.

I think it is necessary to summarize all implicit or explicit documented
"defined to have's" regarding the timer and then to verify that all
implementations adhere to them.

Reinhard
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to