From c87dc38d8f860710f5f624d9dae6cefded285b8d Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 22 May 2017 05:05:23 -0600 Subject: [PATCH] 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: Simon Glass --- arch/sandbox/cpu/cpu.c | 11 +++++++++++ common/bootstage.c | 19 +------------------ include/bootstage.h | 3 ++- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index 3fe99b853d..eefed2ebd9 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -139,3 +139,14 @@ done: 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; +} diff --git a/common/bootstage.c b/common/bootstage.c index 35bce3d881..bcfbda99e5 100644 --- a/common/bootstage.c +++ b/common/bootstage.c @@ -8,7 +8,7 @@ /* * This module records the progress of boot and arbitrary commands, and * permits accurate timestamping of each. - * + * * TBD: Pass timings to kernel in the FDT */ @@ -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 * diff --git a/include/bootstage.h b/include/bootstage.h index a589be6316..6ee923c2eb 100644 --- a/include/bootstage.h +++ b/include/bootstage.h @@ -2,6 +2,7 @@ * This file implements recording of each stage of the boot process. It is * intended to implement timing of each stage, reporting this information * 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. * @@ -209,7 +210,7 @@ enum bootstage_id { /* * 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 - * millisecond resolution will be used (the standard get_timer()). + * you will get a link error. */ ulong timer_get_boot_us(void); -- 2.25.1