[U-Boot] [PATCH 10/17] x86: Allow cache before copy to RAM
Graeme Russ
graeme.russ at gmail.com
Wed Jan 4 12:29:17 CET 2012
Hi Simon,
On 04/01/12 16:40, Simon Glass wrote:
> Hi Graeme,
>
> On Sun, Jan 1, 2012 at 8:09 PM, Graeme Russ <graeme.russ at gmail.com> wrote:
>>
>> Signed-off-by: Graeme Russ <graeme.russ at gmail.com>
>> ---
>> arch/x86/lib/board.c | 15 ++++++++++-----
>> 1 files changed, 10 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
>> index ffddfbe..52e27e1 100644
>> --- a/arch/x86/lib/board.c
>> +++ b/arch/x86/lib/board.c
>> @@ -131,16 +131,11 @@ init_fnc_t *init_sequence_f[] = {
>> console_init_f,
>> dram_init_f,
>> calculate_relocation_address,
>> - copy_uboot_to_ram,
>> - clear_bss,
>> - do_elf_reloc_fixups,
>>
>> NULL,
>> };
>>
>> init_fnc_t *init_sequence_r[] = {
>> - copy_gd_to_ram,
>> - init_cache,
>> cpu_init_r, /* basic cpu dependent setup */
>> board_early_init_r, /* basic board dependent setup */
>> dram_init, /* configure available RAM banks */
>> @@ -269,6 +264,16 @@ void board_init_f(ulong boot_flags)
>>
>> void board_init_f_r(void)
>> {
>> + if (copy_gd_to_ram() != 0)
>> + hang();
>> +
>> + if (init_cache() != 0)
>> + hang();
>> +
>> + copy_uboot_to_ram();
>> + clear_bss();
>> + do_elf_reloc_fixups();
>
> Can you not just put these in the init list above? Why do they need to
> move back into this functoin?
board_init_f_r() is the intermediate step when we are running from Flash,
but with the stack and global data in RAM. If these functions are put in
init_sequence_f() we cannot enable the CPU cache (as the stack and global
data would get trashed). We can't put them in init_sequence_r because these
are the functions that actually copy U-Boot to RAM (and hence must be done
before init_sequence_r)
Regards,
Graeme
More information about the U-Boot
mailing list