Dear Graeme Russ, In message <4e1ce6ec.1030...@gmail.com> you wrote: > > Also remember that if we are looking to inherit nanosecond time base from > Linux, it will be extremely unlikely that every board will support a native > 1ns clock source. Typical examples would be 33MHz (~30ns) or 66MHz (~15ns). > In any case, there will be a lot of variance between boards, so we will > still need to cater for arbitrary resolutions
Please note that Linux makes no assumption of a 1 ns clock source. We should hav eno problems on this front. > > It's just macros. And we don't need to use them all. Actually > > time_after() is all that's needed to satisfy our current usage. > > Oh please, macro, inline function, function - They are all API 'functions' > - As you stated before, the bigger the API, the more people will abuse is > by using the wrong functions. You stated that you want to keep the public > profile of the API as small and tight as possible by rejecting the > additional functions previously proposed. OK, so let's start with time_after() only. > >> Agreed - As said before (for the time being) the return value of any > >> arbitrary call to time() means nothing. It _may_ mean the number of > >> nanoseconds since power-up, but this is by no means guaranteed. > > Actually, I do agree will Bill - time() is probably not the best name - > get_current_ns() or similar may be more meaningful (I still have not had a > chance to look at the Linux code) If you don't want to use time, then let's use get_time() please - this is close enough to the existing name so everybody familiar with the code recognizes it immediately. > > void udelay(u32 usec) > > { > > u64 then = time() + (u64)usec * (u64)1000; > > > > while (!time_after(time(), then)) > > ... do something, like trigger watchdogs etc ... > > } > > Yes, that is how I always imagined udelay() ...except that udelay() is guaranteed to be available very early in the initialization sequence, long before we have "normal" timer services which may - for example - be interrupt based. > > For 'elapsed time' it should be sufficient to store the start value of > > time() as early as possible in the (architecture specific) code. > > I did mean 'elapsed between two code locations' such as profiling the init > functions - That was what API function #3 was all about. Sounds trivial: store the value of time() and the begin and the end of the interval and compute the difference? > OK, this is a new philosophy for the mix. I think it is a good one for the > record. But since we will always use time_after(time(), then) why don't we > simplify it to: > > u64 start = time(); > ... > if (time_elapsed_since(start, TIMEOUT)) { > /* handle timeout */ > } This does not fit. time_elapsed_since() suggests it returns the length of the interval, i. e. a number of tiume units - but it does something different. I like the time_after() approach very much because it does exactly what the name says, and nothing more - so you can use it in a number of ways - I recognise good old UNIX philosophy here: do one simple thing, and do it well. Regarding the "we will always use time_after(time() ...) - we might want to check if we really have to use time() here (and in a number of other places - or if we can manage to come up with a simple timestamp variable, similar to what jiffies is in Linux. That would simplify the code even further. [Maybe "#define jiffies time()"? ;-) } > > Do we? What exactly is the needed resolution of the underlying > > hardware timer? So far, it appears sufficient to have it ticking with > > 1000 Hz or more. Are there really systems that cannot provide that? > > The only architecture I remember that seemed prolematic was NIOS - but > > then the NIOS documentation suggests that this might actually be > > solvable. > > Yes, but as stated before, there is a FPGA gate count trade-off which may > not always be possible. Plus, you break existing boards Understood. Well, how work the Linux timers on these boards, then? Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de At the source of every error which is blamed on the computer you will find at least two human errors, including the error of blaming it on the computer. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot