]> git.sur5r.net Git - u-boot/blobdiff - arch/x86/cpu/start.S
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[u-boot] / arch / x86 / cpu / start.S
index 781d32447ba6c53a5fe50cc341b88c36f0be870d..b0d0ac0610b158be02ac05327214e7219d2f0323 100644 (file)
@@ -13,6 +13,7 @@
 #include <config.h>
 #include <version.h>
 #include <asm/global_data.h>
+#include <asm/post.h>
 #include <asm/processor.h>
 #include <asm/processor-flags.h>
 #include <generated/generic-asm-offsets.h>
@@ -49,6 +50,8 @@ _start:
         */
        movw    $GD_FLG_COLD_BOOT, %bx
 1:
+       /* Save BIST */
+       movl    %eax, %ebp
 
        /* Load the segement registes to match the gdt loaded in start16.S */
        movl    $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
@@ -65,6 +68,7 @@ _start:
        jmp     early_board_init
 .globl early_board_init_ret
 early_board_init_ret:
+       post_code(POST_START)
 
        /* Initialise Cache-As-RAM */
        jmp     car_init
@@ -74,26 +78,29 @@ car_init_ret:
         * We now have CONFIG_SYS_CAR_SIZE bytes of Cache-As-RAM (or SRAM,
         * or fully initialised SDRAM - we really don't care which)
         * starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack
-        * and early malloc area.
+        * and early malloc area. The MRC requires some space at the top.
         *
         * Stack grows down from top of CAR. We have:
         *
         * top-> CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE
+        *      MRC area
         *      global_data
         *      x86 global descriptor table
         *      early malloc area
         *      stack
         * bottom-> CONFIG_SYS_CAR_ADDR
         */
-
-       /* Stack grows down from top of CAR */
-       movl    $(CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE), %esp
+       movl    $(CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE - 4), %esp
+#ifdef CONFIG_DCACHE_RAM_MRC_VAR_SIZE
+       subl    $CONFIG_DCACHE_RAM_MRC_VAR_SIZE, %esp
+#endif
 
        /* Reserve space on stack for global data */
        subl    $GENERATED_GBL_DATA_SIZE, %esp
 
        /* Align global data to 16-byte boundary */
        andl    $0xfffffff0, %esp
+       post_code(POST_START_STACK)
 
        /* Zero the global data since it won't happen later */
        xorl    %eax, %eax
@@ -117,9 +124,10 @@ car_init_ret:
        addl    $GD_MALLOC_BASE, %edx
        movl    %esp, (%edx)
 #endif
-
-       /* Align temporary global descriptor table to 16-byte boundary */
-       andl    $0xfffffff0, %esp
+       /* Store BIST */
+       movl    %eax, %edx
+       addl    $GD_BIST, %edx
+       movl    %ebp, (%edx)
 
        /* Set second parameter to setup_gdt */
        movl    %ecx, %edx
@@ -128,6 +136,7 @@ car_init_ret:
        call    setup_gdt
 
        /* Set parameter to board_init_f() to boot flags */
+       post_code(POST_START_DONE)
        xorl    %eax, %eax
 
        /* Enter, U-boot! */