diff options
Diffstat (limited to 'cpu/i386/start.S')
| -rw-r--r-- | cpu/i386/start.S | 122 | 
1 files changed, 60 insertions, 62 deletions
| diff --git a/cpu/i386/start.S b/cpu/i386/start.S index 025555c0a..afcbb2452 100644 --- a/cpu/i386/start.S +++ b/cpu/i386/start.S @@ -1,5 +1,5 @@  /* - *  U-boot - i386 Startup Code  + *  U-boot - i386 Startup Code   *   *  Copyright (c) 2002	Omicron Ceti AB, Daniel Engström <denaiel@omicron.se>   * @@ -26,71 +26,71 @@  #include <config.h>  #include <version.h> -	 +  .section .text  .code32  .globl _start -.type _start, @function	 +.type _start, @function  .globl _i386boot_start  _i386boot_start: -_start:		 -        movl    $0x18,%eax         	/* Load our segement registes, the -                                         * gdt have already been loaded by start16.S */ -        movw    %ax,%fs +_start: +	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 -        movw    %ax,%es -        movw    %ax,%ss -	 +	movw    %ax,%gs +	movw    %ax,%es +	movw    %ax,%ss +  	/* 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 */ -	 +  	/* Early platform init (setup gpio, etc ) */  	mov     $early_board_init_ret, %ebp  	jmp	early_board_init  early_board_init_ret: -	 +  	/* The __port80 entry-point should be usabe by now */  	/* so we try to indicate progress */ -	movw	$0x01, %ax     +	movw	$0x01, %ax  	movl	$.progress0, %ebp  	jmp	__show_boot_progress -.progress0:  	 +.progress0:  	/* size memory */  	mov	$mem_init_ret, %ebp -	jmp     mem_init		 +	jmp     mem_init  mem_init_ret: -	 -	/* check ammount of configured memory  -	 * (we need atleast bss start+bss size+stack size) */		 + +	/* 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	$_i386boot_bss_size, %ecx         /* BSS size */  	addl	$CFG_STACK_SIZE, %ecx -	cmpl	%ecx, %eax  +	cmpl	%ecx, %eax  	jae	mem_ok -	 +  	/* indicate (lack of) progress */ -	movw	$0x81, %ax     +	movw	$0x81, %ax  	movl	$.progress0a, %ebp  	jmp	__show_boot_progress -.progress0a:  	 +.progress0a:  	jmp 	die -mem_ok:	 +mem_ok:  	/* indicate progress */ -	movw	$0x02, %ax     +	movw	$0x02, %ax  	movl	$.progress1, %ebp  	jmp	__show_boot_progress -.progress1:  	 +.progress1:  	/* create a stack after the bss */ -        movl    $_i386boot_bss_start, %eax +	movl    $_i386boot_bss_start, %eax  	addl	$_i386boot_bss_size, %eax  	addl	$CFG_STACK_SIZE, %eax -        movl    %eax, %esp -	 +	movl    %eax, %esp +  	pushl	$0  	popl	%eax  	cmpl	$0, %eax @@ -102,83 +102,83 @@ mem_ok:  no_stack:  	/* indicate (lack of) progress */ -	movw	$0x82, %ax     +	movw	$0x82, %ax  	movl	$.progress1a, %ebp  	jmp	__show_boot_progress -.progress1a:  	 +.progress1a:  	jmp die -	 -	 -stack_ok:	 + + +stack_ok:  	/* indicate progress */ -	movw	$0x03, %ax     +	movw	$0x03, %ax  	movl	$.progress2, %ebp  	jmp	__show_boot_progress -.progress2:  	 +.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_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	  +	cld  	cmpl	$0, %ecx -	je	data_ok	 -data_segment:	 -	movsl		 +	je	data_ok +data_segment: +	movsl  	loop	data_segment  	jmp	data_ok  data_fail:  	/* indicate (lack of) progress */ -	movw	$0x83, %ax     +	movw	$0x83, %ax  	movl	$.progress2a, %ebp  	jmp	__show_boot_progress -.progress2a:  	 +.progress2a:  	jmp 	die -data_ok:	 +data_ok:  	/* indicate progress */ -	movw	$0x04, %ax     +	movw	$0x04, %ax  	movl	$.progress3, %ebp  	jmp	__show_boot_progress -.progress3:  	 +.progress3:  	/* clear bss section in ram, size must be 4-byte aligned  */  	movl	$_i386boot_bss_start, %eax        /* BSS start */ -	movl	$_i386boot_bss_size, %ecx         /* BSS size */	 +	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		       +	cld  	cmpl	$0, %ecx -	je	bss_ok	 -bss:	 +	je	bss_ok +bss:  	movl	$0, (%edi) -	add	$4, %edi			 +	add	$4, %edi  	loop	bss  	jmp 	bss_ok  bss_fail:  	/* indicate (lack of) progress */ -	movw	$0x84, %ax     +	movw	$0x84, %ax  	movl	$.progress3a, %ebp  	jmp	__show_boot_progress -.progress3a:  	 +.progress3a:  	jmp 	die -bss_ok:	 +bss_ok: -	wbinvd	  +	wbinvd  	/* indicate progress */ -	movw	$0x05, %ax     +	movw	$0x05, %ax  	movl	$.progress4, %ebp  	jmp	__show_boot_progress  .progress4: @@ -186,13 +186,11 @@ bss_ok:  	call	start_i386boot  /* Enter, U-boot! */  	/* indicate (lack of) progress */ -	movw	$0x85, %ax     +	movw	$0x85, %ax  	movl	$.progress4a, %ebp  	jmp	__show_boot_progress  .progress4a:  die:	hlt  	jmp	die -	hlt                      - - +	hlt |