x86: Set cold/warm boot flag
authorGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:30 +0000 (20:03 +1100)
committerGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:30 +0000 (20:03 +1100)
arch/i386/cpu/start.S
arch/i386/cpu/start16.S
arch/i386/include/asm/global_data.h

index cff463758940ebbdda7992e57b11e81c3d5daef9..8fdcd81c1ea6306ad21286264c6f80f86795c8f6 100644 (file)
@@ -51,7 +51,7 @@ _i386boot_start:
        wbinvd
 
        /* Tell 32-bit code it is being entered from an in-RAM copy */
-       movw    $0x0000, %bx
+       movw    $GD_FLG_WARM_BOOT, %bx
 _start:
        /* This is the 32-bit cold-reset entry point */
 
@@ -66,18 +66,10 @@ _start:
        /* Clear the interupt vectors */
        lidt    blank_idt_ptr
 
-       /*
-        * Skip low-level board and memory initialization if not starting
-        * from cold-reset. This allows us to do a fail safe boot-strap
-        * into a new build of U-Boot from a known-good boot flash
-        */
-       movw    $0x0001, %ax
-       cmpw    %ax, %bx
-       jne     mem_init_ret
-
-       /* We call a few functions in the board support package
-        * since we have no stack yet we'll have to use %ebp
-        * to store the return address */
+       /* Skip low-level initialization if not starting from cold-reset */
+       movl    %ebx, %ecx
+       andl    $GD_FLG_COLD_BOOT, %ecx
+       jz      skip_mem_init
 
        /* Early platform init (setup gpio, etc ) */
        jmp     early_board_init
@@ -89,6 +81,7 @@ early_board_init_ret:
 .globl mem_init_ret
 mem_init_ret:
 
+skip_mem_init:
        /* fetch memory size (into %eax) */
        jmp     get_mem_size
 .globl get_mem_size_ret
index 0de4d09398c1fcbc161ab2e5a3c91924d595e7b4..0a5823d3c29ff32c071daf006bc099c972e44293 100644 (file)
@@ -22,6 +22,7 @@
  * MA 02111-1307 USA
  */
 
+#include <asm/global_data.h>
 
 #define BOOT_SEG       0xffff0000      /* linear segment of boot code */
 #define a32            .byte 0x67;
@@ -31,6 +32,9 @@
 .code16
 .globl start16
 start16:
+       /* Set the Cold Boot / Hard Reset flag */
+       movl    $GD_FLG_COLD_BOOT, %ebx
+
        /*
         * First we let the BSP do some early initialization
         * this code have to map the flash to its final position
@@ -57,9 +61,6 @@ o32 cs        lgdt    gdt_ptr
        /* Flush the prefetch queue */
        jmp     ff
 ff:
-       /* Tell 32-bit code it is being entered from hard-reset */
-       movw    $0x0001, %bx
-
        /* Finally jump to the 32bit initialization code */
        movw    $code32start, %ax
        movw    %ax, %bp
index 456f606ec88f1d3ae5a92dee20bbffc91006d4e0..a15c5981c6baa17c4e75c8ce022cbb9f422d52d4 100644 (file)
@@ -82,6 +82,9 @@ extern gd_t *gd;
 #define        GD_FLG_LOGINIT          0x00020 /* Log Buffer has been initialized      */
 #define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out)           */
 #define GD_FLG_ENV_READY       0x00080 /* Environment imported into hash table */
+#define GD_FLG_COLD_BOOT       0x00100 /* Cold Boot */
+#define GD_FLG_WARM_BOOT       0x00200 /* Warm Boot */
+
 
 #define DECLARE_GLOBAL_DATA_PTR