[U-Boot] [PATCH 3/9] time: create default __udelay

Rob Herring robherring2 at gmail.com
Sun Sep 8 22:12:48 CEST 2013


From: Rob Herring <rob.herring at calxeda.com>

Implement a default __udelay using get_tbclk and get_ticks.

Signed-off-by: Rob Herring <rob.herring at calxeda.com>
---
 lib/time.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/lib/time.c b/lib/time.c
index 68b8ff4..55f05bb 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -7,11 +7,32 @@
 
 #include <common.h>
 #include <watchdog.h>
+#include <div64.h>
 
 #ifndef CONFIG_WD_PERIOD
 # define CONFIG_WD_PERIOD	(10 * 1000 * 1000)	/* 10 seconds default*/
 #endif
 
+static unsigned long long usec_to_tick(unsigned long usec)
+{
+	unsigned long long tick = usec * get_tbclk();
+	usec *= get_tbclk();
+	do_div(tick, 1000000);
+	return tick;
+}
+
+void __weak __udelay(unsigned long usec)
+{
+	unsigned long long tmp;
+	ulong tmo;
+
+	tmo = usec_to_tick(usec);
+	tmp = get_ticks() + tmo;	/* get current timestamp */
+
+	while (get_ticks() < tmp)	/* loop till event */
+		 /*NOP*/;
+}
+
 /* ------------------------------------------------------------------------- */
 
 void udelay(unsigned long usec)
-- 
1.8.1.2



More information about the U-Boot mailing list