Message ID | 1346568592-6832-1-git-send-email-bocui107@gmail.com |
---|---|
State | Accepted |
Delegated to: | Albert ARIBAUD |
Headers | show |
Sorry, Add Albert to the thread. Thanks, hongbo On 02/09/12 14:49, Zhong Hongbo wrote: > From: Zhong Hongbo <bocui107@gmail.com> > > When the u-boot address of destination equal to __start, > no relocation. relocation offset(r9) = 0. > > Signed-off-by: Zhong Hongbo <bocui107@gmail.com> > --- > Change for V3: > - Drop the change of arm720t, It has already merge the change. > Change for V2: > - Clean a line for arm1176. > --- > arch/arm/cpu/arm1136/start.S | 1 + > arch/arm/cpu/arm1176/start.S | 1 + > arch/arm/cpu/arm920t/start.S | 1 + > arch/arm/cpu/arm925t/start.S | 1 + > arch/arm/cpu/arm926ejs/start.S | 1 + > arch/arm/cpu/arm946es/start.S | 1 + > arch/arm/cpu/arm_intcm/start.S | 1 + > arch/arm/cpu/ixp/start.S | 1 + > arch/arm/cpu/lh7a40x/start.S | 1 + > arch/arm/cpu/pxa/start.S | 1 + > arch/arm/cpu/s3c44b0/start.S | 1 + > arch/arm/cpu/sa1100/start.S | 1 + > 12 files changed, 12 insertions(+) > > diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S > index 2483c63..3752af9 100644 > --- a/arch/arm/cpu/arm1136/start.S > +++ b/arch/arm/cpu/arm1136/start.S > @@ -190,6 +190,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S > index d613641..667a0e0 100644 > --- a/arch/arm/cpu/arm1176/start.S > +++ b/arch/arm/cpu/arm1176/start.S > @@ -252,6 +252,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S > index 9b8604e..14c9156 100644 > --- a/arch/arm/cpu/arm920t/start.S > +++ b/arch/arm/cpu/arm920t/start.S > @@ -210,6 +210,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/arm925t/start.S b/arch/arm/cpu/arm925t/start.S > index 1a54416..3a483f6 100644 > --- a/arch/arm/cpu/arm925t/start.S > +++ b/arch/arm/cpu/arm925t/start.S > @@ -204,6 +204,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S > index 6f05f1a..1b530dc 100644 > --- a/arch/arm/cpu/arm926ejs/start.S > +++ b/arch/arm/cpu/arm926ejs/start.S > @@ -235,6 +235,7 @@ stack_setup: > 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 */ > mov r1, r6 /* r1 <- scratch for copy loop */ > ldr r3, _bss_start_ofs > diff --git a/arch/arm/cpu/arm946es/start.S b/arch/arm/cpu/arm946es/start.S > index b4d1d2d..30e2183 100644 > --- a/arch/arm/cpu/arm946es/start.S > +++ b/arch/arm/cpu/arm946es/start.S > @@ -175,6 +175,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/arm_intcm/start.S b/arch/arm/cpu/arm_intcm/start.S > index b85e7d4..a133d19 100644 > --- a/arch/arm/cpu/arm_intcm/start.S > +++ b/arch/arm/cpu/arm_intcm/start.S > @@ -171,6 +171,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/ixp/start.S b/arch/arm/cpu/ixp/start.S > index 59c359a..c12f1a7 100644 > --- a/arch/arm/cpu/ixp/start.S > +++ b/arch/arm/cpu/ixp/start.S > @@ -273,6 +273,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/lh7a40x/start.S b/arch/arm/cpu/lh7a40x/start.S > index bd68cd4..33b9269 100644 > --- a/arch/arm/cpu/lh7a40x/start.S > +++ b/arch/arm/cpu/lh7a40x/start.S > @@ -184,6 +184,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S > index 33c73f6..536cf5c 100644 > --- a/arch/arm/cpu/pxa/start.S > +++ b/arch/arm/cpu/pxa/start.S > @@ -197,6 +197,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/s3c44b0/start.S b/arch/arm/cpu/s3c44b0/start.S > index 8daf26c..323b923 100644 > --- a/arch/arm/cpu/s3c44b0/start.S > +++ b/arch/arm/cpu/s3c44b0/start.S > @@ -156,6 +156,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 > diff --git a/arch/arm/cpu/sa1100/start.S b/arch/arm/cpu/sa1100/start.S > index bcea2a8..1ea92d1 100644 > --- a/arch/arm/cpu/sa1100/start.S > +++ b/arch/arm/cpu/sa1100/start.S > @@ -160,6 +160,7 @@ stack_setup: > > adr r0, _start > cmp r0, r6 > + 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 >
Dear Zhong Hongbo, > From: Zhong Hongbo <bocui107@gmail.com> > > When the u-boot address of destination equal to __start, > no relocation. relocation offset(r9) = 0. Good, now what kind of issue does this patch fix? > Signed-off-by: Zhong Hongbo <bocui107@gmail.com> > --- > Change for V3: > - Drop the change of arm720t, It has already merge the change. > Change for V2: > - Clean a line for arm1176. [...] Best regards, Marek Vasut
On 03/09/12 08:14, Marek Vasut wrote: > Dear Zhong Hongbo, > >> From: Zhong Hongbo <bocui107@gmail.com> >> >> When the u-boot address of destination equal to __start, >> no relocation. relocation offset(r9) = 0. > > Good, now what kind of issue does this patch fix? Hi Marek When you adopt CONFIG_SPL_BUILD framework, no CONFIG_NAND_SPL, if the addr of destination is equal to _start, we should skip u-boot relocation. In the last, u-boot will count the dest addr, see the below: adr r1, _start add lr, r0, r1 add lr, lr, r9 Here, lr = lr + r9, r9 is the offset of u-boot, So when it do not neet to reolocat, we need to set the zero value for r9 register. /* setup parameters for board_init_r */ mov r0, r5 /* gd_t */ mov r1, r6 /* dest_addr */ /* jump to it ... */ mov pc, lr Thanks, hongbo > >> Signed-off-by: Zhong Hongbo <bocui107@gmail.com> >> --- >> Change for V3: >> - Drop the change of arm720t, It has already merge the change. >> Change for V2: >> - Clean a line for arm1176. > > [...] > > Best regards, > Marek Vasut >
On 04/09/2012 16:03, Zhong Hongbo wrote: > On 03/09/12 08:14, Marek Vasut wrote: >> Dear Zhong Hongbo, >> >>> From: Zhong Hongbo <bocui107@gmail.com> >>> >>> When the u-boot address of destination equal to __start, >>> no relocation. relocation offset(r9) = 0. >> >> Good, now what kind of issue does this patch fix? > Hi Marek > > When you adopt CONFIG_SPL_BUILD framework, no CONFIG_NAND_SPL, if the > addr of destination is equal to _start, we should skip u-boot relocation. > > In the last, u-boot will count the dest addr, see the below: > > > adr r1, _start > add lr, r0, r1 > add lr, lr, r9 > > Here, lr = lr + r9, r9 is the offset of u-boot, So when it do not neet > to reolocat, we need to set the zero value for r9 register. > > /* setup parameters for board_init_r */ > mov r0, r5 /* gd_t */ > mov r1, r6 /* dest_addr */ > /* jump to it ... */ > mov pc, lr I can confirm this issue - I see this when I ported SPL to a MX35 board. However, clearing r9 was not enough. I had to fix also _rel_dyn_* to make SPL working, and I did changing the start.S in the same way start.S for arv7 is built. Do you not have these issues ? Regards, Stefano
On 04/09/12 23:57, Stefano Babic wrote: > On 04/09/2012 16:03, Zhong Hongbo wrote: >> On 03/09/12 08:14, Marek Vasut wrote: >>> Dear Zhong Hongbo, >>> >>>> From: Zhong Hongbo <bocui107@gmail.com> >>>> >>>> When the u-boot address of destination equal to __start, >>>> no relocation. relocation offset(r9) = 0. >>> >>> Good, now what kind of issue does this patch fix? >> Hi Marek >> >> When you adopt CONFIG_SPL_BUILD framework, no CONFIG_NAND_SPL, if the >> addr of destination is equal to _start, we should skip u-boot relocation. >> >> In the last, u-boot will count the dest addr, see the below: >> >> >> adr r1, _start >> add lr, r0, r1 >> add lr, lr, r9 >> >> Here, lr = lr + r9, r9 is the offset of u-boot, So when it do not neet >> to reolocat, we need to set the zero value for r9 register. >> >> /* setup parameters for board_init_r */ >> mov r0, r5 /* gd_t */ >> mov r1, r6 /* dest_addr */ >> /* jump to it ... */ >> mov pc, lr > > I can confirm this issue - I see this when I ported SPL to a MX35 board. > However, clearing r9 was not enough. I had to fix also _rel_dyn_* to > make SPL working, and I did changing the start.S in the same way start.S > for arv7 is built. > > Do you not have these issues ? Hi Stefano, That is enough for my smdk6400 board. Thanks, hongbo > > Regards, > Stefano >
On 05/09/2012 16:45, Zhong Hongbo wrote: > On 04/09/12 23:57, Stefano Babic wrote: >> On 04/09/2012 16:03, Zhong Hongbo wrote: >>> On 03/09/12 08:14, Marek Vasut wrote: >>>> Dear Zhong Hongbo, >>>> >>>>> From: Zhong Hongbo <bocui107@gmail.com> >>>>> >>>>> When the u-boot address of destination equal to __start, >>>>> no relocation. relocation offset(r9) = 0. >>>> >>>> Good, now what kind of issue does this patch fix? >>> Hi Marek >>> >>> When you adopt CONFIG_SPL_BUILD framework, no CONFIG_NAND_SPL, if the >>> addr of destination is equal to _start, we should skip u-boot relocation. >>> >>> In the last, u-boot will count the dest addr, see the below: >>> >>> >>> adr r1, _start >>> add lr, r0, r1 >>> add lr, lr, r9 >>> >>> Here, lr = lr + r9, r9 is the offset of u-boot, So when it do not neet >>> to reolocat, we need to set the zero value for r9 register. >>> >>> /* setup parameters for board_init_r */ >>> mov r0, r5 /* gd_t */ >>> mov r1, r6 /* dest_addr */ >>> /* jump to it ... */ >>> mov pc, lr >> >> I can confirm this issue - I see this when I ported SPL to a MX35 board. >> However, clearing r9 was not enough. I had to fix also _rel_dyn_* to >> make SPL working, and I did changing the start.S in the same way start.S >> for arv7 is built. >> >> Do you not have these issues ? > Hi Stefano, > > That is enough for my smdk6400 board. Ok, thanks. Then I will post a patch on top of yours, but here my: Tested-by: Stefano Babic <sbabic@denx.de> Tested on a i.MX35 board (ARM1136) with SPL. Regards, Stefano
On 06/09/12 03:22, Stefano Babic wrote: > On 05/09/2012 16:45, Zhong Hongbo wrote: >> On 04/09/12 23:57, Stefano Babic wrote: >>> On 04/09/2012 16:03, Zhong Hongbo wrote: >>>> On 03/09/12 08:14, Marek Vasut wrote: >>>>> Dear Zhong Hongbo, >>>>> >>>>>> From: Zhong Hongbo <bocui107@gmail.com> >>>>>> >>>>>> When the u-boot address of destination equal to __start, >>>>>> no relocation. relocation offset(r9) = 0. >>>>> >>>>> Good, now what kind of issue does this patch fix? >>>> Hi Marek >>>> >>>> When you adopt CONFIG_SPL_BUILD framework, no CONFIG_NAND_SPL, if the >>>> addr of destination is equal to _start, we should skip u-boot relocation. >>>> >>>> In the last, u-boot will count the dest addr, see the below: >>>> >>>> >>>> adr r1, _start >>>> add lr, r0, r1 >>>> add lr, lr, r9 >>>> >>>> Here, lr = lr + r9, r9 is the offset of u-boot, So when it do not neet >>>> to reolocat, we need to set the zero value for r9 register. >>>> >>>> /* setup parameters for board_init_r */ >>>> mov r0, r5 /* gd_t */ >>>> mov r1, r6 /* dest_addr */ >>>> /* jump to it ... */ >>>> mov pc, lr >>> >>> I can confirm this issue - I see this when I ported SPL to a MX35 board. >>> However, clearing r9 was not enough. I had to fix also _rel_dyn_* to >>> make SPL working, and I did changing the start.S in the same way start.S >>> for arv7 is built. >>> >>> Do you not have these issues ? >> Hi Stefano, >> >> That is enough for my smdk6400 board. > > Hi Stefano, > Ok, thanks. Then I will post a patch on top of yours, but here my: > > Tested-by: Stefano Babic <sbabic@denx.de> > > Tested on a i.MX35 board (ARM1136) with SPL. Ok, Thanks, BR, hongbo > > Regards, > Stefano > >
diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S index 2483c63..3752af9 100644 --- a/arch/arm/cpu/arm1136/start.S +++ b/arch/arm/cpu/arm1136/start.S @@ -190,6 +190,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S index d613641..667a0e0 100644 --- a/arch/arm/cpu/arm1176/start.S +++ b/arch/arm/cpu/arm1176/start.S @@ -252,6 +252,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S index 9b8604e..14c9156 100644 --- a/arch/arm/cpu/arm920t/start.S +++ b/arch/arm/cpu/arm920t/start.S @@ -210,6 +210,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/arm925t/start.S b/arch/arm/cpu/arm925t/start.S index 1a54416..3a483f6 100644 --- a/arch/arm/cpu/arm925t/start.S +++ b/arch/arm/cpu/arm925t/start.S @@ -204,6 +204,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/arm926ejs/start.S b/arch/arm/cpu/arm926ejs/start.S index 6f05f1a..1b530dc 100644 --- a/arch/arm/cpu/arm926ejs/start.S +++ b/arch/arm/cpu/arm926ejs/start.S @@ -235,6 +235,7 @@ stack_setup: 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 */ mov r1, r6 /* r1 <- scratch for copy loop */ ldr r3, _bss_start_ofs diff --git a/arch/arm/cpu/arm946es/start.S b/arch/arm/cpu/arm946es/start.S index b4d1d2d..30e2183 100644 --- a/arch/arm/cpu/arm946es/start.S +++ b/arch/arm/cpu/arm946es/start.S @@ -175,6 +175,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/arm_intcm/start.S b/arch/arm/cpu/arm_intcm/start.S index b85e7d4..a133d19 100644 --- a/arch/arm/cpu/arm_intcm/start.S +++ b/arch/arm/cpu/arm_intcm/start.S @@ -171,6 +171,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/ixp/start.S b/arch/arm/cpu/ixp/start.S index 59c359a..c12f1a7 100644 --- a/arch/arm/cpu/ixp/start.S +++ b/arch/arm/cpu/ixp/start.S @@ -273,6 +273,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/lh7a40x/start.S b/arch/arm/cpu/lh7a40x/start.S index bd68cd4..33b9269 100644 --- a/arch/arm/cpu/lh7a40x/start.S +++ b/arch/arm/cpu/lh7a40x/start.S @@ -184,6 +184,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S index 33c73f6..536cf5c 100644 --- a/arch/arm/cpu/pxa/start.S +++ b/arch/arm/cpu/pxa/start.S @@ -197,6 +197,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/s3c44b0/start.S b/arch/arm/cpu/s3c44b0/start.S index 8daf26c..323b923 100644 --- a/arch/arm/cpu/s3c44b0/start.S +++ b/arch/arm/cpu/s3c44b0/start.S @@ -156,6 +156,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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 diff --git a/arch/arm/cpu/sa1100/start.S b/arch/arm/cpu/sa1100/start.S index bcea2a8..1ea92d1 100644 --- a/arch/arm/cpu/sa1100/start.S +++ b/arch/arm/cpu/sa1100/start.S @@ -160,6 +160,7 @@ stack_setup: adr r0, _start cmp r0, r6 + 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