[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