summaryrefslogtreecommitdiff
path: root/drivers/timer
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2019-04-10 13:44:05 +0200
committerMarek Vasut <marex@denx.de>2019-04-17 22:20:18 +0200
commite09c1a133155724d3369e150f3ab7b63c875101c (patch)
tree81e0d1d30128fbf2a15881d3622c8d0e25506a8d /drivers/timer
parent2c494e62c31a34746d88511e075aa187ac3f7d10 (diff)
timer: dw-apb: Add missing 64bit up-conversion
The generic timer count is an incrementing 64bit value and a timer driver must return an incrementing 64bit value. The DW APB timer only provides a 32bit timer counting down, thus the result must be inverted and converted to a 64bit value. The current implementation is however missing the 64bit up-conversion and this results in random timer roll-overs, which in turn triggers random timeouts throughout the codebase. This patch adds the missing 64bit up-conversion to fix the issue. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Chin Liang See <chin.liang.see@intel.com> Cc: Dinh Nguyen <dinguyen@kernel.org> Cc: Ley Foon Tan <ley.foon.tan@intel.com> Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com> Cc: Tien Fong Chee <tien.fong.chee@intel.com>
Diffstat (limited to 'drivers/timer')
-rw-r--r--drivers/timer/dw-apb-timer.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/timer/dw-apb-timer.c b/drivers/timer/dw-apb-timer.c
index 085bfb02c5..cb48801af1 100644
--- a/drivers/timer/dw-apb-timer.c
+++ b/drivers/timer/dw-apb-timer.c
@@ -32,7 +32,7 @@ static int dw_apb_timer_get_count(struct udevice *dev, u64 *count)
* requires the count to be incrementing. Invert the
* result.
*/
- *count = ~readl(priv->regs + DW_APB_CURR_VAL);
+ *count = timer_conv_64(~readl(priv->regs + DW_APB_CURR_VAL));
return 0;
}