[U-Boot] [PATCH 01/69] dm: timer: Correct timer init ordering after relocation

Simon Glass sjg at chromium.org
Sat Mar 12 06:04:19 CET 2016


Hi Bin,

On 10 March 2016 at 20:25, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Mon, Mar 7, 2016 at 10:27 AM, Simon Glass <sjg at chromium.org> wrote:
>> Commit 1057e6c broke use of the timer with driver model. If the timer is used
>> before relocation, then it becomes broken after relocation. This prevents
>> some x86 boards from booting. Fix it.
>
> Isn't the broken due to gd not initialized to zero?

No, gd is not set to 0. It is jtus that the timer must be recreated
after relocation. By setting gd->timer to NULL we ensure this.

>
>>
>> Fixes: 1057e6c (timer: Set up the real timer after driver model is available)
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>>  common/board_r.c | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/common/board_r.c b/common/board_r.c
>> index 52a9b26..0f068bf 100644
>> --- a/common/board_r.c
>> +++ b/common/board_r.c
>> @@ -318,11 +318,13 @@ static int initr_dm(void)
>>         /* Save the pre-reloc driver model and start a new one */
>>         gd->dm_root_f = gd->dm_root;
>>         gd->dm_root = NULL;
>> +#ifdef CONFIG_TIMER
>> +       gd->timer = NULL;
>> +#endif
>>         ret = dm_init_and_scan(false);
>>         if (ret)
>>                 return ret;
>>  #ifdef CONFIG_TIMER_EARLY
>> -       gd->timer = NULL;
>>         ret = dm_timer_init();
>>         if (ret)
>>                 return ret;
>> --
>
> Regards,
> Bin

Regards,
Simon


More information about the U-Boot mailing list