[U-Boot] [PATCH] time: fix usec_to_tick()
Stephen Warren
swarren at wwwdotorg.org
Thu Dec 5 20:08:09 CET 2013
From: Stephen Warren <swarren at nvidia.com>
Commit 8dfafdde88eb ("Introduce common timer functions") created a
common definition of usec_to_tick() which had a couple problems:
static unsigned long long usec_to_tick(unsigned long usec)
{
uint64_t tick = usec * get_tbclk();
That likely overflows.
usec *= get_tbclk();
That was an attempt to fix it by performing the multiply after the
promotion of usec to 64-bit, but was applied to the wrong variable,
which was never used.
This patch fixes these issues. A user-visible symptom of the problem was
the e.g. "dhcp zImage" using an ASIX USB Ethernet dongle would print:
Waiting for Ethernet connection... unable to connect.
... with no delay before "unable to connect". There are likely other
symptoms.
Signed-off-by: Stephen Warren <swarren at nvidia.com>
---
lib/time.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/time.c b/lib/time.c
index 09bb05a24d33..8085aa40d1c9 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -71,8 +71,8 @@ unsigned long __weak notrace timer_get_us(void)
}
static unsigned long long usec_to_tick(unsigned long usec)
{
- uint64_t tick = usec * get_tbclk();
- usec *= get_tbclk();
+ uint64_t tick = usec;
+ tick *= get_tbclk();
do_div(tick, 1000000);
return tick;
}
--
1.8.1.5
More information about the U-Boot
mailing list