[U-Boot] [PATCH 08/16] timer: Provide an early timer

Bin Meng bmeng.cn at gmail.com
Tue Feb 16 10:21:47 CET 2016


Hi Simon,

On Mon, Feb 15, 2016 at 9:36 AM, Simon Glass <sjg at chromium.org> wrote:
> In some cases the timer must be accessible before driver model is active.
> Examples include when using CONFIG_TRACE to trace U-Boot's execution before
> driver model is set up. Enable this option to use an early timer. These
> functions must be supported by your timer driver: timer_early_get_count()
> and timer_early_get_rate().
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  drivers/timer/Kconfig | 10 ++++++++++
>  include/timer.h       | 21 +++++++++++++++++++++
>  lib/time.c            | 28 +++++++++++++++++++++-------
>  3 files changed, 52 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/timer/Kconfig b/drivers/timer/Kconfig
> index ff65a73..cb18f12 100644
> --- a/drivers/timer/Kconfig
> +++ b/drivers/timer/Kconfig
> @@ -9,6 +9,16 @@ config TIMER
>           will be used. The timer is usually a 32 bits free-running up
>           counter. There may be no real tick, and no timer interrupt.
>
> +config TIMER_EARLY
> +       bool "Allow timer to be used early in U-Boot"
> +       depends on TIMER
> +       help
> +         In some cases the timer must be accessible before driver model is
> +         active. Examples include when using CONFIG_TRACE to trace U-Boot's
> +         execution before driver model is set up. Enable this option to
> +         use an early timer. These functions must be supported by your timer
> +         driver: timer_early_get_count() and timer_early_get_rate().
> +
>  config ALTERA_TIMER
>         bool "Altera timer support"
>         depends on TIMER
> diff --git a/include/timer.h b/include/timer.h
> index f14725c..a503bfd 100644
> --- a/include/timer.h
> +++ b/include/timer.h
> @@ -67,4 +67,25 @@ struct timer_dev_priv {
>         unsigned long clock_rate;
>  };
>
> +/**
> + * timer_early_get_count() - Implement timer_get_count() before driver model
> + *
> + * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
> + * the current timer value before the proper driver model timer is ready.
> + * It should be implemented by one of the timer values. This is mostly useful
> + * for tracing.
> + */
> +u64 timer_early_get_count(void);
> +
> +/**
> + * timer_early_get_rate() - Get the timer rate before driver model
> + *
> + * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
> + * the current timer rate  in Hz before the proper driver model timer is ready.

nits: two spaces between 'rate' and 'in'

> + * It should be implemented by one of the timer values. This is mostly useful
> + * for tracing. This corresponds to the clock_rate value in struct
> + * timer_dev_priv.

Is this supposed to be a hard-codeded value returned by the timer
driver? The timer-uclass driver gets this clock rate from device tree,
but I believe at that time when early timer is called, FDT blob might
not be available yet.

> + */
> +unsigned long timer_early_get_rate(void);
> +
>  #endif /* _TIMER_H_ */

[snip]

Regards,
Bin


More information about the U-Boot mailing list