[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