Hi Bin, On 16 February 2016 at 02:21, Bin Meng <bmeng...@gmail.com> wrote: > Hi Simon, > > On Mon, Feb 15, 2016 at 9:36 AM, Simon Glass <s...@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 <s...@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.
Possibly, although the FDT is available pretty early. I doubt anyone would need to call the timer that early. > >> + */ >> +unsigned long timer_early_get_rate(void); >> + >> #endif /* _TIMER_H_ */ > > [snip] > > Regards, > Bin Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot