[U-Boot] [PATCH v3 11/15] timer: add microsecond boot func

Simon Glass sjg at chromium.org
Sun Jan 15 02:24:54 CET 2012


Define timer_get_boot_us() which returns the number of microseconds
since boot. If undefined then we use get_timer() * 1000.

We can fit this in a 32-bit register which keeps everyone happy on
the efficiency side. It will wrap around after about an hour. If we
are still looking at it after an hour then we had better not be
timing the boot.

There is some scope to join bootstage and post, but for now they are
separate things with separate CONFIGs, and you don't have to enable
one to get the other.

Signed-off-by: Simon Glass <sjg at chromium.org>
---
Changes in v3:
- Rename timer patch to remove bootstage: tag

 include/common.h |    7 +++++++
 lib/time.c       |   17 +++++++++++++++++
 2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/include/common.h b/include/common.h
index ae38784..c23087a 100644
--- a/include/common.h
+++ b/include/common.h
@@ -207,6 +207,13 @@ typedef void (interrupt_handler_t)(void *);
 #endif /* CONFIG_SERIAL_MULTI */
 
 /*
+ * 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()).
+ */
+ulong timer_get_boot_us(void);
+
+/*
  * General Purpose Utilities
  */
 #define min(X, Y)				\
diff --git a/lib/time.c b/lib/time.c
index 6e2937b..69edc3d 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -47,3 +47,20 @@ void mdelay(unsigned long msec)
 	while (msec--)
 		udelay(1000);
 }
+
+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")));
-- 
1.7.7.3



More information about the U-Boot mailing list