diff mbox

[U-Boot] powerpc, mpc5xxx: fix missing bootflag init

Message ID 1448441179-6214-1-git-send-email-hs@denx.de
State Accepted
Delegated to: York Sun
Headers show

Commit Message

Heiko Schocher Nov. 25, 2015, 8:46 a.m. UTC
since:
commit: f05ad9ba "Add a way to skip relocation"

tqm5200s board fails to boot. Reason is that
board_init_f has a function parameter bootflag,
which is not setup in
in arch/powerpc/cpu/mpc5xxx/start.S _start

So board_init_f gets a undefined bootflag,
currently the gd pointer address. Unfortunately
this address sets the GD_FLG_SKIP_RELOC bit,
so u-boot code gets not relocated and u-boot
does not boot ...

Init bootflag with 0, and tqm5200 boots fine again.

Signed-off-by: Heiko Schocher <hs@denx.de>
---
I added a nightly build to:
http://xeidos.ddns.net/buildbot/waterfall
http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub

What does this nightly build:
- checkout current u-boot mainline code
- compile u-boot for tqm5200s board
- install u-boot image on the board with bdi
- run the image, and look if u-boot boots
ToDo:
- add more tbot [1] tests for this board

Currently failing, as this patch is not in mainline,
but it should go to green, if this patch is applied,
cross your fingers ;-)

[1] https://github.com/hsdenx/tbot

 arch/powerpc/cpu/mpc5xxx/start.S | 2 ++
 1 file changed, 2 insertions(+)

Comments

Simon Glass Nov. 26, 2015, 5:49 p.m. UTC | #1
On 25 November 2015 at 01:46, Heiko Schocher <hs@denx.de> wrote:
> since:
> commit: f05ad9ba "Add a way to skip relocation"
>
> tqm5200s board fails to boot. Reason is that
> board_init_f has a function parameter bootflag,
> which is not setup in
> in arch/powerpc/cpu/mpc5xxx/start.S _start
>
> So board_init_f gets a undefined bootflag,
> currently the gd pointer address. Unfortunately
> this address sets the GD_FLG_SKIP_RELOC bit,
> so u-boot code gets not relocated and u-boot
> does not boot ...
>
> Init bootflag with 0, and tqm5200 boots fine again.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
> ---
> I added a nightly build to:
> http://xeidos.ddns.net/buildbot/waterfall
> http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub
>
> What does this nightly build:
> - checkout current u-boot mainline code
> - compile u-boot for tqm5200s board
> - install u-boot image on the board with bdi
> - run the image, and look if u-boot boots
> ToDo:
> - add more tbot [1] tests for this board
>
> Currently failing, as this patch is not in mainline,
> but it should go to green, if this patch is applied,
> cross your fingers ;-)
>
> [1] https://github.com/hsdenx/tbot
>
>  arch/powerpc/cpu/mpc5xxx/start.S | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S
> index 94eb0d3..54793f0 100644
> --- a/arch/powerpc/cpu/mpc5xxx/start.S
> +++ b/arch/powerpc/cpu/mpc5xxx/start.S
> @@ -91,6 +91,7 @@ _start:
>         li      r5,GD_SIZE      /* parameter 3:  count                  */
>         bl      memset
>
> +       li      r3, 0           /* parameter 1:  bootflag               */
>         bl      board_init_f    /* run 1st part of board init code (in Flash)*/
>         /* NOTREACHED - board_init_f() does not return */
>  #else
> @@ -169,6 +170,7 @@ lowboot_reentry:
>         /* r3: IMMR */
>         bl      cpu_init_f      /* run low-level CPU init code (in Flash)*/
>
> +       li      r3, 0           /* parameter 1:  bootflag               */
>         bl      board_init_f    /* run 1st part of board init code (in Flash)*/
>
>         /* NOTREACHED - board_init_f() does not return */
> --
> 2.1.0
>

Funny, these latent bugs!

Reviewed-by: Simon Glass <sjg@chromium.org>
Heiko Schocher Nov. 27, 2015, 5:23 a.m. UTC | #2
Hello Simon,

Am 26.11.2015 um 18:49 schrieb Simon Glass:
> On 25 November 2015 at 01:46, Heiko Schocher <hs@denx.de> wrote:
>> since:
>> commit: f05ad9ba "Add a way to skip relocation"
>>
>> tqm5200s board fails to boot. Reason is that
>> board_init_f has a function parameter bootflag,
>> which is not setup in
>> in arch/powerpc/cpu/mpc5xxx/start.S _start
>>
>> So board_init_f gets a undefined bootflag,
>> currently the gd pointer address. Unfortunately
>> this address sets the GD_FLG_SKIP_RELOC bit,
>> so u-boot code gets not relocated and u-boot
>> does not boot ...
>>
>> Init bootflag with 0, and tqm5200 boots fine again.
>>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>> ---
>> I added a nightly build to:
>> http://xeidos.ddns.net/buildbot/waterfall
>> http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub
>>
>> What does this nightly build:
>> - checkout current u-boot mainline code
>> - compile u-boot for tqm5200s board
>> - install u-boot image on the board with bdi
>> - run the image, and look if u-boot boots
>> ToDo:
>> - add more tbot [1] tests for this board
>>
>> Currently failing, as this patch is not in mainline,
>> but it should go to green, if this patch is applied,
>> cross your fingers ;-)
>>
>> [1] https://github.com/hsdenx/tbot
>>
>>   arch/powerpc/cpu/mpc5xxx/start.S | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S
>> index 94eb0d3..54793f0 100644
>> --- a/arch/powerpc/cpu/mpc5xxx/start.S
>> +++ b/arch/powerpc/cpu/mpc5xxx/start.S
>> @@ -91,6 +91,7 @@ _start:
>>          li      r5,GD_SIZE      /* parameter 3:  count                  */
>>          bl      memset
>>
>> +       li      r3, 0           /* parameter 1:  bootflag               */
>>          bl      board_init_f    /* run 1st part of board init code (in Flash)*/
>>          /* NOTREACHED - board_init_f() does not return */
>>   #else
>> @@ -169,6 +170,7 @@ lowboot_reentry:
>>          /* r3: IMMR */
>>          bl      cpu_init_f      /* run low-level CPU init code (in Flash)*/
>>
>> +       li      r3, 0           /* parameter 1:  bootflag               */
>>          bl      board_init_f    /* run 1st part of board init code (in Flash)*/
>>
>>          /* NOTREACHED - board_init_f() does not return */
>> --
>> 2.1.0
>>
>
> Funny, these latent bugs!

That;s the salt in our programming life ;-)

BTW: I wonder if this bootflag is really used?

> Reviewed-by: Simon Glass <sjg@chromium.org>

bye,
Heiko
Simon Glass Nov. 27, 2015, 6:28 p.m. UTC | #3
Hi Heiko,

On 26 November 2015 at 21:23, Heiko Schocher <hs@denx.de> wrote:
> Hello Simon,
>
>
> Am 26.11.2015 um 18:49 schrieb Simon Glass:
>>
>> On 25 November 2015 at 01:46, Heiko Schocher <hs@denx.de> wrote:
>>>
>>> since:
>>> commit: f05ad9ba "Add a way to skip relocation"
>>>
>>> tqm5200s board fails to boot. Reason is that
>>> board_init_f has a function parameter bootflag,
>>> which is not setup in
>>> in arch/powerpc/cpu/mpc5xxx/start.S _start
>>>
>>> So board_init_f gets a undefined bootflag,
>>> currently the gd pointer address. Unfortunately
>>> this address sets the GD_FLG_SKIP_RELOC bit,
>>> so u-boot code gets not relocated and u-boot
>>> does not boot ...
>>>
>>> Init bootflag with 0, and tqm5200 boots fine again.
>>>
>>> Signed-off-by: Heiko Schocher <hs@denx.de>
>>> ---
>>> I added a nightly build to:
>>> http://xeidos.ddns.net/buildbot/waterfall
>>> http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub
>>>
>>> What does this nightly build:
>>> - checkout current u-boot mainline code
>>> - compile u-boot for tqm5200s board
>>> - install u-boot image on the board with bdi
>>> - run the image, and look if u-boot boots
>>> ToDo:
>>> - add more tbot [1] tests for this board
>>>
>>> Currently failing, as this patch is not in mainline,
>>> but it should go to green, if this patch is applied,
>>> cross your fingers ;-)
>>>
>>> [1] https://github.com/hsdenx/tbot
>>>
>>>   arch/powerpc/cpu/mpc5xxx/start.S | 2 ++
>>>   1 file changed, 2 insertions(+)
>>>
>>> diff --git a/arch/powerpc/cpu/mpc5xxx/start.S
>>> b/arch/powerpc/cpu/mpc5xxx/start.S
>>> index 94eb0d3..54793f0 100644
>>> --- a/arch/powerpc/cpu/mpc5xxx/start.S
>>> +++ b/arch/powerpc/cpu/mpc5xxx/start.S
>>> @@ -91,6 +91,7 @@ _start:
>>>          li      r5,GD_SIZE      /* parameter 3:  count
>>> */
>>>          bl      memset
>>>
>>> +       li      r3, 0           /* parameter 1:  bootflag
>>> */
>>>          bl      board_init_f    /* run 1st part of board init code (in
>>> Flash)*/
>>>          /* NOTREACHED - board_init_f() does not return */
>>>   #else
>>> @@ -169,6 +170,7 @@ lowboot_reentry:
>>>          /* r3: IMMR */
>>>          bl      cpu_init_f      /* run low-level CPU init code (in
>>> Flash)*/
>>>
>>> +       li      r3, 0           /* parameter 1:  bootflag
>>> */
>>>          bl      board_init_f    /* run 1st part of board init code (in
>>> Flash)*/
>>>
>>>          /* NOTREACHED - board_init_f() does not return */
>>> --
>>> 2.1.0
>>>
>>
>> Funny, these latent bugs!
>
>
> That;s the salt in our programming life ;-)
>
> BTW: I wonder if this bootflag is really used?

Not that I have noticed. If PowerPC could get a crt0.S like ARM (i.e.
rationalise all the copies of similar assembly code) then it would be
easier to drop it, or change it.

Regards,
Simon
York Sun Jan. 7, 2016, 4:58 p.m. UTC | #4
On 11/25/2015 12:46 AM, Heiko Schocher wrote:
> since:
> commit: f05ad9ba "Add a way to skip relocation"
> 
> tqm5200s board fails to boot. Reason is that
> board_init_f has a function parameter bootflag,
> which is not setup in
> in arch/powerpc/cpu/mpc5xxx/start.S _start
> 
> So board_init_f gets a undefined bootflag,
> currently the gd pointer address. Unfortunately
> this address sets the GD_FLG_SKIP_RELOC bit,
> so u-boot code gets not relocated and u-boot
> does not boot ...
> 
> Init bootflag with 0, and tqm5200 boots fine again.
> 
> Signed-off-by: Heiko Schocher <hs@denx.de>
> ---

Applied to u-boot-mpc85x. Merged upstream.

York
Wolfgang Denk Jan. 7, 2016, 7:30 p.m. UTC | #5
Dear York,

In message <AM4PR0401MB1732D7EBA1C64E62F3A403449AF50@AM4PR0401MB1732.eurprd04.prod.outlook.com> you wrote:
>
> > So board_init_f gets a undefined bootflag,
> > currently the gd pointer address. Unfortunately
> > this address sets the GD_FLG_SKIP_RELOC bit,
> > so u-boot code gets not relocated and u-boot
> > does not boot ...
> > 
> > Init bootflag with 0, and tqm5200 boots fine again.
...
> Applied to u-boot-mpc85x. Merged upstream.

Thanmks - but I think this needs a follow-up patch - Heiko is already
looking into that.  On closer inspection it appears as if the whole
passing around of "bootflag" variables is just dead code - there is no
place anywhere in U-Boot that makes real use of this data.  We should
remove all of the related code, which will make the code cleaner and
smaller - which might be especially welcome in a number of SPL
configurations.

Best regards,

Wolfgang Denk
Heiko Schocher Jan. 8, 2016, 8:07 a.m. UTC | #6
Hello Wolfgang, York,

Am 07.01.2016 um 20:30 schrieb Wolfgang Denk:
> Dear York,
>
> In message <AM4PR0401MB1732D7EBA1C64E62F3A403449AF50@AM4PR0401MB1732.eurprd04.prod.outlook.com> you wrote:
>>
>>> So board_init_f gets a undefined bootflag,
>>> currently the gd pointer address. Unfortunately
>>> this address sets the GD_FLG_SKIP_RELOC bit,
>>> so u-boot code gets not relocated and u-boot
>>> does not boot ...
>>>
>>> Init bootflag with 0, and tqm5200 boots fine again.
> ...
>> Applied to u-boot-mpc85x. Merged upstream.
>
> Thanmks - but I think this needs a follow-up patch - Heiko is already
> looking into that.  On closer inspection it appears as if the whole
> passing around of "bootflag" variables is just dead code - there is no
> place anywhere in U-Boot that makes real use of this data.  We should
> remove all of the related code, which will make the code cleaner and
> smaller - which might be especially welcome in a number of SPL
> configurations.

Yes, I am trying to look into it ...

BTW: Now with this patch applied, automated tbot test [1] is now green
-> tqm5200 board works again with current mainline :-D

bye,
Heiko
[1] http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub
     log:
     http://xeidos.ddns.net/buildbot/builders/tqm5200s_ml_ub/builds/20/steps/shell/logs/tbotlog
diff mbox

Patch

diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S
index 94eb0d3..54793f0 100644
--- a/arch/powerpc/cpu/mpc5xxx/start.S
+++ b/arch/powerpc/cpu/mpc5xxx/start.S
@@ -91,6 +91,7 @@  _start:
 	li	r5,GD_SIZE	/* parameter 3:	 count			*/
 	bl	memset
 
+	li	r3, 0		/* parameter 1:	 bootflag		*/
 	bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 	/* NOTREACHED - board_init_f() does not return */
 #else
@@ -169,6 +170,7 @@  lowboot_reentry:
 	/* r3: IMMR */
 	bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/
 
+	li	r3, 0		/* parameter 1:	 bootflag		*/
 	bl	board_init_f	/* run 1st part of board init code (in Flash)*/
 
 	/* NOTREACHED - board_init_f() does not return */