timer: Provide an early timer
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>
This commit is contained in:
28
lib/time.c
28
lib/time.c
@@ -43,11 +43,17 @@ extern unsigned long __weak timer_read_counter(void);
|
||||
#ifdef CONFIG_TIMER
|
||||
ulong notrace get_tbclk(void)
|
||||
{
|
||||
int ret;
|
||||
if (!gd->timer) {
|
||||
#ifdef CONFIG_TIMER_EARLY
|
||||
return timer_early_get_rate();
|
||||
#else
|
||||
int ret;
|
||||
|
||||
ret = dm_timer_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = dm_timer_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
return timer_get_rate(gd->timer);
|
||||
}
|
||||
@@ -57,9 +63,17 @@ uint64_t notrace get_ticks(void)
|
||||
u64 count;
|
||||
int ret;
|
||||
|
||||
ret = dm_timer_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
if (!gd->timer) {
|
||||
#ifdef CONFIG_TIMER_EARLY
|
||||
return timer_early_get_count();
|
||||
#else
|
||||
int ret;
|
||||
|
||||
ret = dm_timer_init();
|
||||
if (ret)
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
ret = timer_get_count(gd->timer, &count);
|
||||
if (ret)
|
||||
|
||||
Reference in New Issue
Block a user