libpayload: Add a timer_us() function.
This function returns the number of microseconds scaled from the number of raw timer ticks. It accepts a base parameter which is subtracted from the current time, which makes it easy to keep track of relative times. BUG=None TEST=With a corresponding change in depthcharge, built and booted on link. BRANCH=None Change-Id: I55f2f9e90c0e12cda430bbe88b044f12b0b563c8 Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: https://chromium-review.googlesource.com/179600 Reviewed-by: Ronald Minnich <rminnich@chromium.org> Commit-Queue: Gabe Black <gabeblack@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org>
This commit is contained in:
parent
a1761f24e9
commit
4dd549e18d
2 changed files with 18 additions and 0 deletions
|
|
@ -416,6 +416,7 @@ int lib_get_sysinfo(void);
|
|||
unsigned int get_cpu_speed(void);
|
||||
uint64_t timer_hz(void);
|
||||
uint64_t timer_raw_value(void);
|
||||
uint64_t timer_us(uint64_t base);
|
||||
/* Generic. */
|
||||
void ndelay(unsigned int n);
|
||||
void udelay(unsigned int n);
|
||||
|
|
|
|||
|
|
@ -189,3 +189,20 @@ void delay(unsigned int s)
|
|||
{
|
||||
_delay((uint64_t)s * timer_hz());
|
||||
}
|
||||
|
||||
u64 timer_us(u64 base)
|
||||
{
|
||||
static u64 hz;
|
||||
|
||||
// Only check timer_hz once. Assume it doesn't change.
|
||||
if (hz == 0) {
|
||||
hz = timer_hz();
|
||||
if (hz < 1000000) {
|
||||
printf("Timer frequency %lld is too low, "
|
||||
"must be at least 1MHz.\n", hz);
|
||||
halt();
|
||||
}
|
||||
}
|
||||
|
||||
return timer_raw_value() / (hz / 1000000) - base;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue