
Hi Simon,
On Mon, Feb 15, 2016 at 9:36 AM, Simon Glass sjg@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@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