Skip to content
Snippets Groups Projects
Commit c87dc38d authored by Simon Glass's avatar Simon Glass Committed by Tom Rini
Browse files

bootstage: Require timer_get_boot_us() to be defined


At present we provide a default version of this function for use by
bootstage. However it uses the system timer and therefore likely requires
driver model. This makes it impossible to time driver-model init.

Drop the function and require boards to provide their own. Add a sandbox
version also. There is a default implememtation in lib/time.c for boards
which use CONFIG_SYS_TIMER_COUNTER.

Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 9fb34b01
No related branches found
No related tags found
No related merge requests found
...@@ -139,3 +139,14 @@ done: ...@@ -139,3 +139,14 @@ done:
return 0; return 0;
} }
ulong timer_get_boot_us(void)
{
static uint64_t base_count;
uint64_t count = os_get_nsec();
if (!base_count)
base_count = count;
return (count - base_count) / 1000;
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
/* /*
* This module records the progress of boot and arbitrary commands, and * This module records the progress of boot and arbitrary commands, and
* permits accurate timestamping of each. * permits accurate timestamping of each.
* *
* TBD: Pass timings to kernel in the FDT * TBD: Pass timings to kernel in the FDT
*/ */
...@@ -292,23 +292,6 @@ void bootstage_report(void) ...@@ -292,23 +292,6 @@ void bootstage_report(void)
} }
} }
ulong __timer_get_boot_us(void)
{
static ulong base_time;
/*
* We can't implement this properly. Return 0 on the first call and
* larger values after that.
*/
if (base_time)
return get_timer(base_time) * 1000;
base_time = get_timer(0);
return 0;
}
ulong timer_get_boot_us(void)
__attribute__((weak, alias("__timer_get_boot_us")));
/** /**
* Append data to a memory buffer * Append data to a memory buffer
* *
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* This file implements recording of each stage of the boot process. It is * This file implements recording of each stage of the boot process. It is
* intended to implement timing of each stage, reporting this information * intended to implement timing of each stage, reporting this information
* to the user and passing it to the OS for logging / further analysis. * to the user and passing it to the OS for logging / further analysis.
* Note that it requires timer_get_boot_us() to be defined by the board
* *
* Copyright (c) 2011 The Chromium OS Authors. * Copyright (c) 2011 The Chromium OS Authors.
* *
...@@ -209,7 +210,7 @@ enum bootstage_id { ...@@ -209,7 +210,7 @@ enum bootstage_id {
/* /*
* Return the time since boot in microseconds, This is needed for bootstage * Return the time since boot in microseconds, This is needed for bootstage
* and should be defined in CPU- or board-specific code. If undefined then * and should be defined in CPU- or board-specific code. If undefined then
* millisecond resolution will be used (the standard get_timer()). * you will get a link error.
*/ */
ulong timer_get_boot_us(void); ulong timer_get_boot_us(void);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment