diff options
| author | Stefano Babic <sbabic@denx.de> | 2012-10-10 21:11:41 +0000 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2012-10-26 16:27:58 +0200 | 
| commit | b736e4b929197b5141b883f4f3906c4bd38dd4f3 (patch) | |
| tree | 85d51c4fdf4571f20f11f1c06af430c581ee92a9 | |
| parent | 01968b96a24414ff8f0735111907cbb750c7af43 (diff) | |
| download | olio-uboot-2014.01-b736e4b929197b5141b883f4f3906c4bd38dd4f3.tar.xz olio-uboot-2014.01-b736e4b929197b5141b883f4f3906c4bd38dd4f3.zip | |
ARM: Fix start.S when used with SPL in arm1136
This patch modifies start.S for the arm1136 to make it
conform to start.S  in armv7 architecture, to make it
usable if the SPL framework is used.
Signed-off-by: Stefano Babic <sbabic@denx.de>
| -rw-r--r-- | arch/arm/cpu/arm1136/start.S | 31 | ||||
| -rw-r--r-- | board/freescale/mx31ads/u-boot.lds | 2 | ||||
| -rw-r--r-- | nand_spl/board/freescale/mx31pdk/u-boot.lds | 2 | 
3 files changed, 24 insertions, 11 deletions
| diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S index 3752af9dd..5d3b4c229 100644 --- a/arch/arm/cpu/arm1136/start.S +++ b/arch/arm/cpu/arm1136/start.S @@ -100,6 +100,10 @@ _TEXT_BASE:  _bss_start_ofs:  	.word __bss_start - _start +.global	_image_copy_end_ofs +_image_copy_end_ofs: +	.word 	__image_copy_end - _start +  .globl _bss_end_ofs  _bss_end_ofs:  	.word __bss_end__ - _start @@ -193,7 +197,7 @@ stack_setup:  	moveq	r9, #0		/* no relocation. relocation offset(r9) = 0 */  	beq	clear_bss		/* skip relocation */  	mov	r1, r6			/* r1 <- scratch for copy_loop */ -	ldr	r3, _bss_start_ofs +	ldr	r3, _image_copy_end_ofs  	add	r2, r0, r3		/* r2 <- source end address	    */  copy_loop: @@ -241,15 +245,28 @@ fixnext:  	add	r2, r2, #8		/* each rel.dyn entry is 8 bytes */  	cmp	r2, r3  	blo	fixloop +	b	clear_bss + +_rel_dyn_start_ofs: +	.word __rel_dyn_start - _start +_rel_dyn_end_ofs: +	.word __rel_dyn_end - _start +_dynsym_start_ofs: +	.word __dynsym_start - _start  #endif  clear_bss: -#ifndef CONFIG_SPL_BUILD +#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			    */  clbss_l:cmp	r0, r1			/* clear loop... */ @@ -258,7 +275,6 @@ clbss_l:cmp	r0, r1			/* clear loop... */  	add	r0, r0, #4  	b	clbss_l  clbss_e: -#endif	/* #ifndef CONFIG_SPL_BUILD */  /*   * We are done. Do not return, instead branch to second part of board @@ -273,7 +289,7 @@ _nand_boot_ofs:  #else  jump_2_ram:  	ldr	r0, _board_init_r_ofs -	ldr     r1, _TEXT_BASE +	adr	r1, _start  	add	lr, r0, r1  	add	lr, lr, r9  	/* setup parameters for board_init_r */ @@ -286,13 +302,6 @@ _board_init_r_ofs:  	.word board_init_r - _start  #endif -_rel_dyn_start_ofs: -	.word __rel_dyn_start - _start -_rel_dyn_end_ofs: -	.word __rel_dyn_end - _start -_dynsym_start_ofs: -	.word __dynsym_start - _start -  /*   *************************************************************************   * diff --git a/board/freescale/mx31ads/u-boot.lds b/board/freescale/mx31ads/u-boot.lds index 79eb7aca3..91ffdbefd 100644 --- a/board/freescale/mx31ads/u-boot.lds +++ b/board/freescale/mx31ads/u-boot.lds @@ -63,6 +63,8 @@ SECTIONS  	. = ALIGN(4); +	__image_copy_end = .; +  	.rel.dyn : {  		__rel_dyn_start = .;  		*(.rel*) diff --git a/nand_spl/board/freescale/mx31pdk/u-boot.lds b/nand_spl/board/freescale/mx31pdk/u-boot.lds index d2b08f60c..a130a1f9d 100644 --- a/nand_spl/board/freescale/mx31pdk/u-boot.lds +++ b/nand_spl/board/freescale/mx31pdk/u-boot.lds @@ -52,6 +52,8 @@ SECTIONS  	. = ALIGN(4); +	__image_copy_end = .; +  	.rel.dyn : {  		__rel_dyn_start = .;  		*(.rel*) |