bootstage: Require timer_get_boot_us() to be defined
authorSimon Glass <sjg@chromium.org>
Mon, 22 May 2017 11:05:23 +0000 (05:05 -0600)
committerTom Rini <trini@konsulko.com>
Mon, 5 Jun 2017 18:13:04 +0000 (14:13 -0400)
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 <sjg@chromium.org>
arch/sandbox/cpu/cpu.c
common/bootstage.c
include/bootstage.h

index 3fe99b8..eefed2e 100644 (file)
@@ -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;
+}
index 35bce3d..bcfbda9 100644 (file)
@@ -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
  *
index a589be6..6ee923c 100644 (file)
@@ -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);