]> git.sur5r.net Git - u-boot/commitdiff
x86: Reorder x86's post relocation memory layout
authorGabe Black <gabeblack@chromium.org>
Sat, 3 Nov 2012 11:41:24 +0000 (11:41 +0000)
committerSimon Glass <sjg@chromium.org>
Thu, 6 Dec 2012 22:30:41 +0000 (14:30 -0800)
This changes the layout in decreasing addresses from:

1. Stack
2. Sections in the image
3. Heap

to

1. Sections in the image
2. Heap
3. Stack

This allows the stack to grow significantly more since it isn't constrained by
the other u-boot areas. More importantly, the generic memory wipe code assumes
that the stack is the lowest addressed area used by the main part of u-boot.
In the original layout, that means that u-boot tramples all over itself. In
the new layout, it works.

Signed-off-by: Gabe Black <gabeblack@google.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
arch/x86/lib/init_helpers.c

index d10a846cfdcb73be337638b5384205cc1c1948e2..9fd87dfd2e0ecac9807417affce5879298faed6c 100644 (file)
@@ -86,15 +86,16 @@ int calculate_relocation_address(void)
 
        /* Stack is at top of available memory */
        dest_addr = gd->ram_size;
-       gd->start_addr_sp = dest_addr;
 
-       /* U-Boot is below the stack */
-       dest_addr -= CONFIG_SYS_STACK_SIZE;
+       /* U-Boot is at the top */
        dest_addr -= (bss_end - text_start);
        dest_addr &= ~15;
        gd->relocaddr = dest_addr;
        gd->reloc_off = (dest_addr - text_start);
 
+       /* Stack is at the bottom, so it can grow down */
+       gd->start_addr_sp = dest_addr - CONFIG_SYS_MALLOC_LEN;
+
        return 0;
 }