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. > + */ > +unsigned long timer_early_get_rate(void); > + > #endif /* _TIMER_H_ */ [snip] Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot