Commit 2cd1b57220697ac47e4a63fb6a0a79eda2217f9d

Authored by Stephen Warren
Committed by Tom Rini
1 parent 74c43bb3d3

time: fix usec_to_tick()

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@nvidia.com>
Acked-by: Rob Herring <rob.herring@calxeda.com>

Showing 1 changed file with 2 additions and 2 deletions Side-by-side Diff

... ... @@ -71,8 +71,8 @@
71 71 }
72 72 static unsigned long long usec_to_tick(unsigned long usec)
73 73 {
74   - uint64_t tick = usec * get_tbclk();
75   - usec *= get_tbclk();
  74 + uint64_t tick = usec;
  75 + tick *= get_tbclk();
76 76 do_div(tick, 1000000);
77 77 return tick;
78 78 }