diff options
Diffstat (limited to 'arch/arm/cpu/arm926ejs')
| -rw-r--r-- | arch/arm/cpu/arm926ejs/start.S | 80 | 
1 files changed, 11 insertions, 69 deletions
| diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S index 2188f7e35..3cdecd9cd 100644 --- a/arch/arm/cpu/arm926ejs/start.S +++ b/arch/arm/cpu/arm926ejs/start.S @@ -198,20 +198,7 @@ reset:  	bl	cpu_init_crit  #endif -/* Set stackpointer in internal RAM to call board_init_f */ -call_board_init_f: -#ifdef CONFIG_NAND_SPL /* deprecated, use instead CONFIG_SPL_BUILD */ -	ldr	sp, =(CONFIG_SYS_INIT_SP_ADDR) -#else -#ifdef CONFIG_SPL_BUILD -	ldr	sp, =(CONFIG_SPL_STACK) -#else -	ldr	sp, =(CONFIG_SYS_INIT_SP_ADDR) -#endif -#endif -	bic	sp, sp, #7 /* 8-byte alignment for ABI compliance */ -	ldr	r0,=0x00000000 -	bl	board_init_f +	bl	_main  /*------------------------------------------------------------------------------*/ @@ -229,15 +216,11 @@ relocate_code:  	mov	r5, r1	/* save addr of gd */  	mov	r6, r2	/* save addr of destination */ -	/* Set up the stack						    */ -stack_setup: -	mov	sp, r4 -  	adr	r0, _start  	sub	r9, r6, r0		/* r9 <- relocation offset */  	cmp	r0, r6 -	moveq	r9, #0		/* no relocation. relocation offset(r9) = 0 */ -	beq	clear_bss		/* skip relocation */ +	moveq	r9, #0			/* no relocation. offset(r9) = 0 */ +	beq	relocate_done		/* skip relocation */  	mov	r1, r6			/* r1 <- scratch for copy loop */  	ldr	r3, _bss_start_ofs  	add	r2, r0, r3		/* r2 <- source end address	    */ @@ -289,56 +272,9 @@ fixnext:  	blo	fixloop  #endif -clear_bss: -#ifdef CONFIG_SPL_BUILD -	/* No relocation for SPL */ -	ldr	r0, =__bss_start -	ldr	r1, =__bss_end__ -#else -	ldr	r0, _bss_start_ofs -	ldr	r1, _bss_end_ofs -	mov	r4, r6			/* reloc addr */ -	add	r0, r0, r4 -	add	r1, r1, r4 -#endif -	mov	r2, #0x00000000		/* clear			    */ +relocate_done: -clbss_l:cmp	r0, r1			/* clear loop... */ -	bhs	clbss_e			/* if reached end of bss, exit */ -	str	r2, [r0] -	add	r0, r0, #4 -	b	clbss_l -clbss_e: - -#ifndef CONFIG_SPL_BUILD -	bl coloured_LED_init -	bl red_led_on -#endif - -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL -	ldr     r0, _nand_boot_ofs -	mov	pc, r0 - -_nand_boot_ofs: -	.word nand_boot -#else -	ldr	r0, _board_init_r_ofs -	ldr	r1, _TEXT_BASE -	add	lr, r0, r1 -	add	lr, lr, r9 -	/* setup parameters for board_init_r */ -	mov	r0, r5		/* gd_t */ -	mov	r1, r6		/* dest_addr */ -	/* jump to it ... */ -	mov	pc, lr - -_board_init_r_ofs: -	.word board_init_r - _start -#endif +	bx	lr  _rel_dyn_start_ofs:  	.word __rel_dyn_start - _start @@ -346,8 +282,14 @@ _rel_dyn_end_ofs:  	.word __rel_dyn_end - _start  _dynsym_start_ofs:  	.word __dynsym_start - _start +  #endif +	.globl	c_runtime_cpu_setup +c_runtime_cpu_setup: + +	bx	lr +  /*   *************************************************************************   * |