From mboxrd@z Thu Jan 1 00:00:00 1970 From: Graeme Russ Date: Wed, 04 Jan 2012 22:29:17 +1100 Subject: [U-Boot] [PATCH 10/17] x86: Allow cache before copy to RAM In-Reply-To: References: <1325477374-6417-1-git-send-email-graeme.russ@gmail.com> <1325477374-6417-11-git-send-email-graeme.russ@gmail.com> Message-ID: <4F04380D.5000904@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Simon, On 04/01/12 16:40, Simon Glass wrote: > Hi Graeme, > > On Sun, Jan 1, 2012 at 8:09 PM, Graeme Russ wrote: >> >> Signed-off-by: Graeme Russ >> --- >> 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