[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