[U-Boot] [PATCH] timer: dw-apb: Add missing 64bit up-conversion

Simon Goldschmidt simon.k.r.goldschmidt at gmail.com
Thu Apr 11 06:25:07 UTC 2019


On Wed, Apr 10, 2019 at 2:01 PM Marek Vasut <marex at denx.de> 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 <marex at denx.de>
> Cc: Chin Liang See <chin.liang.see at intel.com>
> Cc: Dinh Nguyen <dinguyen at kernel.org>
> Cc: Ley Foon Tan <ley.foon.tan at intel.com>
> Cc: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
> Cc: Tien Fong Chee <tien.fong.chee at intel.com>

Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>

> ---
>  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
>


More information about the U-Boot mailing list