[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