]> git.sur5r.net Git - u-boot/blobdiff - arch/x86/cpu/start.S
Merge git://git.denx.de/u-boot-x86
[u-boot] / arch / x86 / cpu / start.S
index 7ef8b880ec600971207ad33caed4208b36c6cdc5..e5c1733e594b0a4b2be7ae7f0f1849433382aedd 100644 (file)
@@ -41,17 +41,32 @@ _x86boot_start:
        wbinvd
 
        /* Tell 32-bit code it is being entered from an in-RAM copy */
-       movw    $GD_FLG_WARM_BOOT, %bx
+       movl    $GD_FLG_WARM_BOOT, %ebx
+
+       /*
+        * Zero the BIST (Built-In Self Test) value since we don't have it.
+        * It must be 0 or the previous loader would have reported an error.
+        */
+       movl    $0, %ebp
+
        jmp     1f
+
+       /* Add a way for tools to discover the _start entry point */
+       .align  4
+       .long   0x12345678
 _start:
        /*
         * This is the 32-bit cold-reset entry point, coming from start16.
-        * Set %bx to 0 to indicate this.
+        * Set %ebx to GD_FLG_COLD_BOOT to indicate this.
         */
-       movw    $GD_FLG_COLD_BOOT, %bx
-1:
+       movl    $GD_FLG_COLD_BOOT, %ebx
+
        /* Save BIST */
        movl    %eax, %ebp
+1:
+
+       /* Save table pointer */
+       movl    %ecx, %esi
 
        /* Load the segement registers to match the GDT loaded in start16.S */
        movl    $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
@@ -129,7 +144,13 @@ car_init_ret:
        movl    %esi, (%edx)
 
 skip_hob:
+#else
+       /* Store table pointer */
+       movl    %esp, %edx
+       addl    $GD_TABLE, %edx
+       movl    %esi, (%edx)
 #endif
+
        /* Setup first parameter to setup_gdt, pointer to global_data */
        movl    %esp, %eax