diff mbox

[U-Boot,V3,1/6] ARM: Fix start.S when used with SPL in arm1136

Message ID 1351262934-22053-1-git-send-email-sbabic@denx.de
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Stefano Babic Oct. 26, 2012, 2:48 p.m. UTC
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>
---

Changes:
- Previous patch breaks legacy nand_spl boards
due to local u-boot.lds. Fixed it.

 arch/arm/cpu/arm1136/start.S                |   31 +++++++++++++++++----------
 board/freescale/mx31ads/u-boot.lds          |    2 ++
 nand_spl/board/freescale/mx31pdk/u-boot.lds |    2 ++
 3 files changed, 24 insertions(+), 11 deletions(-)

Comments

Fabio Estevam Oct. 26, 2012, 4:23 p.m. UTC | #1
Hi Stefano,

On Fri, Oct 26, 2012 at 12:48 PM, Stefano Babic <sbabic@denx.de> wrote:
> 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>
> ---
>
> Changes:
> - Previous patch breaks legacy nand_spl boards
> due to local u-boot.lds. Fixed it.

I would like to convert mx31pdk to the new spl mechanism.

Any suggestions? Any other mx3 board that currently builds from NAND via spl?

Thanks,

Fabio Estevam
Stefano Babic Oct. 26, 2012, 4:44 p.m. UTC | #2
Am 26/10/2012 18:23, schrieb Fabio Estevam:
> Hi Stefano,
> 
> On Fri, Oct 26, 2012 at 12:48 PM, Stefano Babic <sbabic@denx.de> wrote:
>> 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>
>> ---
>>
>> Changes:
>> - Previous patch breaks legacy nand_spl boards
>> due to local u-boot.lds. Fixed it.
> 
> I would like to convert mx31pdk to the new spl mechanism.
> 
> Any suggestions? Any other mx3 board that currently builds from NAND via spl?

I have none - the first board using the spl framework is woodburn in
this patchset (you can get a working tree checking out -next). For this
board it was asked to boot exclusively from SD.

Regards,
Stefano Babic
diff mbox

Patch

diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
index 3752af9..5d3b4c2 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 79eb7ac..91ffdbe 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 d2b08f6..a130a1f 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*)