diff --git a/arch/i386/cpu/start.S b/arch/i386/cpu/start.S index cff463758940ebbdda7992e57b11e81c3d5daef9..8fdcd81c1ea6306ad21286264c6f80f86795c8f6 100644 --- a/arch/i386/cpu/start.S +++ b/arch/i386/cpu/start.S @@ -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 diff --git a/arch/i386/cpu/start16.S b/arch/i386/cpu/start16.S index 0de4d09398c1fcbc161ab2e5a3c91924d595e7b4..0a5823d3c29ff32c071daf006bc099c972e44293 100644 --- a/arch/i386/cpu/start16.S +++ b/arch/i386/cpu/start16.S @@ -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 diff --git a/arch/i386/include/asm/global_data.h b/arch/i386/include/asm/global_data.h index 456f606ec88f1d3ae5a92dee20bbffc91006d4e0..a15c5981c6baa17c4e75c8ce022cbb9f422d52d4 100644 --- a/arch/i386/include/asm/global_data.h +++ b/arch/i386/include/asm/global_data.h @@ -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