On Wed, Apr 10, 2019 at 2:01 PM Marek Vasut <[email protected]> wrote: > > 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 <[email protected]> > Cc: Chin Liang See <[email protected]> > Cc: Dinh Nguyen <[email protected]> > Cc: Ley Foon Tan <[email protected]> > Cc: Simon Goldschmidt <[email protected]> > Cc: Tien Fong Chee <[email protected]>
Reviewed-by: Simon Goldschmidt <[email protected]> > --- > drivers/timer/dw-apb-timer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > 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; > } > -- > 2.20.1 > _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

