[U-Boot] [PATCH 08/16] timer: Provide an early timer

Simon Glass sjg at chromium.org
Tue Feb 23 07:37:53 CET 2016


Hi Bin,

On 16 February 2016 at 02:21, Bin Meng <bmeng.cn at gmail.com> wrote:
> 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.

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


More information about the U-Boot mailing list