]> git.sur5r.net Git - u-boot/blobdiff - cpu/i386/start.S
Merge branch 'master' into next
[u-boot] / cpu / i386 / start.S
index 51a27aa21d2ce23c32a908f8a90ffb9347f09836..25d32e658e60206915ff33573386eb4bdb0548e2 100644 (file)
@@ -34,8 +34,8 @@
 .globl _i386boot_start
 _i386boot_start:
 _start:
-       movl    $0x18,%eax              /* Load our segement registes, the
-                                        * gdt have already been loaded by start16.S */
+       movl    $0x18,%eax      /* Load our segement registes, the
+                                * gdt have already been loaded by start16.S */
        movw    %ax,%fs
        movw    %ax,%ds
        movw    %ax,%gs
@@ -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
+       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