Current implementation works fine if "usec * get_tbclk()" fits in 32 bits. Otherwise result will be cut down to 32-bit.
Fix is obvious - first extend data type of either operand. Signed-off-by: Alexey Brodkin <abrod...@synopsys.com> Cc: Rob Herring <rob.herr...@calxeda.com> Cc: Mischa Jonker <mjon...@synopsys.com> --- lib/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/time.c b/lib/time.c index 09bb05a..80003c3 100644 --- a/lib/time.c +++ b/lib/time.c @@ -71,7 +71,7 @@ unsigned long __weak notrace timer_get_us(void) } static unsigned long long usec_to_tick(unsigned long usec) { - uint64_t tick = usec * get_tbclk(); + uint64_t tick = (uint64_t)usec * get_tbclk(); usec *= get_tbclk(); do_div(tick, 1000000); return tick; -- 1.8.4.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot