summaryrefslogtreecommitdiff
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorGraeme Russ <graeme.russ@gmail.com>2012-11-27 15:38:36 +0000
committerSimon Glass <sjg@chromium.org>2012-11-28 11:40:03 -0800
commit8d61625d6a73307857f80002949583105545dbbc (patch)
tree2f5da8cb7d9df09564e2c35818c429f247076582 /arch/x86/lib
parente4fb6116495eafbeee5ea8ff7ea245eb5e96d012 (diff)
downloadu-boot-imx-8d61625d6a73307857f80002949583105545dbbc.zip
u-boot-imx-8d61625d6a73307857f80002949583105545dbbc.tar.gz
u-boot-imx-8d61625d6a73307857f80002949583105545dbbc.tar.bz2
x86: Put global data on the stack
Putting global data on the stack simplifies the init process (and makes it slightly quicker). During the 'flash' stage of the init sequence, global data is in the CAR stack. After SDRAM is initialised, global data is copied from CAR to the SDRAM stack Signed-off-by: Graeme Russ <graeme.russ@gmail.com> Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r--arch/x86/lib/board.c2
-rw-r--r--arch/x86/lib/init_helpers.c37
2 files changed, 2 insertions, 37 deletions
diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
index e5caf13..a13f5c0 100644
--- a/arch/x86/lib/board.c
+++ b/arch/x86/lib/board.c
@@ -36,6 +36,7 @@
#include <stdio_dev.h>
#include <asm/u-boot-x86.h>
#include <asm/relocate.h>
+#include <asm/processor.h>
#include <asm/init_helpers.h>
#include <asm/init_wrappers.h>
@@ -121,7 +122,6 @@ init_fnc_t *init_sequence_f[] = {
* initialise the CPU caches (to speed up the relocation process)
*/
init_fnc_t *init_sequence_f_r[] = {
- copy_gd_to_ram_f_r,
init_cache_f_r,
copy_uboot_to_ram,
clear_bss,
diff --git a/arch/x86/lib/init_helpers.c b/arch/x86/lib/init_helpers.c
index 2f718d7..87c7263 100644
--- a/arch/x86/lib/init_helpers.c
+++ b/arch/x86/lib/init_helpers.c
@@ -83,18 +83,8 @@ int calculate_relocation_address(void)
* requirements
*/
- /* Global Data is at top of available memory */
+ /* Stack is at top of available memory */
dest_addr = gd->ram_size;
- dest_addr -= GENERATED_GBL_DATA_SIZE;
- dest_addr &= ~15;
- gd->new_gd_addr = dest_addr;
-
- /* GDT is below Global Data */
- dest_addr -= X86_GDT_SIZE;
- dest_addr &= ~15;
- gd->gdt_addr = dest_addr;
-
- /* Stack is below GDT */
gd->start_addr_sp = dest_addr;
/* U-Boot is below the stack */
@@ -107,31 +97,6 @@ int calculate_relocation_address(void)
return 0;
}
-int copy_gd_to_ram_f_r(void)
-{
- gd_t *ram_gd;
-
- /*
- * Global data is still in temporary memory (the CPU cache).
- * calculate_relocation_address() has set gd->new_gd_addr to
- * where the global data lives in RAM but getting it there
- * safely is a bit tricky due to the 'F-Segment Hack' that
- * we need to use for x86
- */
- ram_gd = (gd_t *)gd->new_gd_addr;
- memcpy((void *)ram_gd, gd, sizeof(gd_t));
-
- /*
- * Reload the Global Descriptor Table so FS points to the
- * in-RAM copy of Global Data (calculate_relocation_address()
- * has already calculated the in-RAM location of the GDT)
- */
- ram_gd->gd_addr = ram_gd;
- init_gd(ram_gd, (u64 *)gd->gdt_addr);
-
- return 0;
-}
-
int init_cache_f_r(void)
{
/* Initialise the CPU cache(s) */