Merge branch 'next' of ../next
[platform/kernel/u-boot.git] / cpu / i386 / start.S
index 264ac09..25d32e6 100644 (file)
@@ -55,7 +55,7 @@ early_board_init_ret:
        /* so we try to indicate progress */
        movw    $0x01, %ax
        movl    $.progress0, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress0:
 
        /* size memory */
@@ -63,34 +63,28 @@ early_board_init_ret:
        jmp     mem_init
 mem_init_ret:
 
-       /* check ammount of configured memory
-        * (we need atleast bss start+bss size+stack size) */
-       movl    $_i386boot_bss_start, %ecx        /* BSS start */
-       addl    $_i386boot_bss_size, %ecx         /* BSS size */
-       addl    $CFG_STACK_SIZE, %ecx
+       /* Check we have enough memory for stack */
+       movl    $CONFIG_SYS_STACK_SIZE, %ecx
        cmpl    %ecx, %eax
        jae     mem_ok
 
        /* indicate (lack of) progress */
        movw    $0x81, %ax
        movl    $.progress0a, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress0a:
        jmp     die
 mem_ok:
+       /* Set stack pointer to upper memory limit*/
+       movl    %eax, %esp
 
        /* indicate progress */
        movw    $0x02, %ax
        movl    $.progress1, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress1:
 
-       /* create a stack after the bss */
-       movl    $_i386boot_bss_start, %eax
-       addl    $_i386boot_bss_size, %eax
-       addl    $CFG_STACK_SIZE, %eax
-       movl    %eax, %esp
-
+       /* Test the stack */
        pushl   $0
        popl    %eax
        cmpl    $0, %eax
@@ -104,7 +98,7 @@ no_stack:
        /* indicate (lack of) progress */
        movw    $0x82, %ax
        movl    $.progress1a, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress1a:
        jmp die
 
@@ -113,82 +107,27 @@ stack_ok:
        /* indicate progress */
        movw    $0x03, %ax
        movl    $.progress2, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress2:
 
-       /* copy data section to ram, size must be 4-byte aligned */
-       movl    $_i386boot_romdata_dest, %edi     /* destination address */
-       movl    $_i386boot_romdata_start, %esi    /* source address */
-       movl    $_i386boot_romdata_size, %ecx     /* number of bytes to copy */
-       movl    %ecx, %eax
-       andl    $3, %eax
-       jnz     data_fail
-
-       shrl    $2, %ecx                          /* copy 4 byte each time */
-       cld
-       cmpl    $0, %ecx
-       je      data_ok
-data_segment:
-       movsl
-       loop    data_segment
-       jmp     data_ok
-data_fail:
-       /* indicate (lack of) progress */
-       movw    $0x83, %ax
-       movl    $.progress2a, %ebp
-       jmp     show_boot_progress
-.progress2a:
-       jmp     die
-
-data_ok:
-
-       /* indicate progress */
-       movw    $0x04, %ax
-       movl    $.progress3, %ebp
-       jmp     show_boot_progress
-.progress3:
-
-       /* clear bss section in ram, size must be 4-byte aligned  */
-       movl    $_i386boot_bss_start, %edi        /* MK_CHG BSS start */
-       movl    $_i386boot_bss_size, %ecx         /* BSS size */
-       movl    %ecx, %eax
-       andl    $3, %eax
-       jnz     bss_fail
-       shrl    $2, %ecx                          /* clear 4 byte each time */
-       cld
-       cmpl    $0, %ecx
-       je      bss_ok
-bss:
-       movl    $0, (%edi)
-       add     $4, %edi
-       loop    bss
-       jmp     bss_ok
-
-bss_fail:
-       /* indicate (lack of) progress */
-       movw    $0x84, %ax
-       movl    $.progress3a, %ebp
-       jmp     show_boot_progress
-.progress3a:
-       jmp     die
-
-bss_ok:
-
        wbinvd
 
+       /* Get upper memory limit */
+       movl %esp, %ecx
+       subl $CONFIG_SYS_STACK_SIZE, %ecx
 
-       /* indicate progress */
-       movw    $0x05, %ax
-       movl    $.progress4, %ebp
-       jmp     show_boot_progress
-.progress4:
+       /* Create a Stack Frame */
+       pushl %ebp
+       movl %esp, %ebp
 
-       call    start_i386boot  /* Enter, U-boot! */
+       /* stack_limit parameter */
+       pushl   %ecx
+       call    board_init_f    /* Enter, U-boot! */
 
        /* indicate (lack of) progress */
        movw    $0x85, %ax
        movl    $.progress4a, %ebp
-       jmp     show_boot_progress
+       jmp     show_boot_progress_asm
 .progress4a:
 
 die:   hlt