[U-Boot] RFC: Aligning arch initialisation sequences

Graeme Russ graeme.russ at gmail.com
Sun Nov 14 01:25:47 CET 2010


On 14/11/10 11:07, Wolfgang Denk wrote:
> Dear Reinhard Meyer,
> 
> In message <4CDF15BB.1090107 at emk-elektronik.de> you wrote:
>>
>>>> Correct, that's why its even now copied over to storage in SDRAM...
>>>> (at least on ARM:
>>>> 	debug ("relocation Offset is: %08lx\n", gd->reloc_off);
>>>> 	memcpy (id, (void *)gd, sizeof (gd_t));
>>>>
>>>> 	relocate_code (addr_sp, id, addr);
>>>> )
>>>
>>> At this time board_early_init_f() has terminated long ago, i. e. the
>>> data is not available any more.
>>
>> Above code is *IN* board_early_init_f !
> 
> That's totally broken, then.
> 
> See init_sequence[] in "arch/arm/lib/board.c":
> 

> board_early_init_f() [in line 244] runs a long, long time before the
> SDRAM has been tested and initialized, which happens in dram_init()
> [in line 264].
> 
> You cannot and must not touch SDRAM in board_early_init_f(). And even
> more, you must not at all run relocate_code() there!
> 

See:
 arch/powerpc/lib/board.c
 arch/m68k/lib/board.c
 arch/arm/lib/board.c

They all malloc the final global data structure, memcpy the temporary
global data to the malloc'd global data, and call relocate_code passing a
pointer to the new global data all at the very end board_init_f() and
therefore after SDRAM has been initialised

Regards,

Graeme


More information about the U-Boot mailing list