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

Reply via email to