[PATCH v2 5/8] timer: Allow delays with a 32-bit microsecond timer

Bin Meng bmeng.cn at gmail.com
Tue Jul 7 09:09:10 CEST 2020


Hi Simon,

On Sat, Jul 4, 2020 at 12:38 AM Simon Glass <sjg at chromium.org> wrote:
>
> The current get_timer_us() uses 64-bit arithmetic. When implementing
> microsecond-level timeouts, 32-bits is plenty. Add a new function to
> support this.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>  include/time.h | 11 +++++++++++
>  lib/time.c     |  5 +++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/include/time.h b/include/time.h
> index e99f9c8012..434e63b075 100644
> --- a/include/time.h
> +++ b/include/time.h
> @@ -17,6 +17,17 @@ unsigned long get_timer(unsigned long base);
>  unsigned long timer_get_us(void);
>  uint64_t get_timer_us(uint64_t base);
>
> +/**
> + * get_timer_us_long() - Get the number of elapsed microseconds
> + *
> + * This uses 32-bit arithmetic on 32-bit machines, which is enough to handle
> + * delays of over an hour.
> + *
> + *@base: Base time to consider
> + *@return elapsed time since @base
> + */
> +unsigned long get_timer_us_long(unsigned long base);

The function name does not clear indicates this is 32-bit value
because unsigned long is still 64-bit when building for 64-bit U-Boot.

> +
>  /*
>   * timer_test_add_offset()
>   *
> diff --git a/lib/time.c b/lib/time.c
> index 65db0f6cda..47f8c84327 100644
> --- a/lib/time.c
> +++ b/lib/time.c
> @@ -152,6 +152,11 @@ uint64_t __weak get_timer_us(uint64_t base)
>         return tick_to_time_us(get_ticks()) - base;
>  }
>
> +unsigned long __weak get_timer_us_long(unsigned long base)
> +{
> +       return timer_get_us() - base;
> +}
> +
>  unsigned long __weak notrace timer_get_us(void)
>  {
>         return tick_to_time(get_ticks() * 1000);
> --

Regards,
Bin


More information about the U-Boot mailing list