On 14/11/10 11:07, Wolfgang Denk wrote:
> Dear Reinhard Meyer,
> 
> In message <4cdf15bb.1090...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to