Patchwork [U-Boot] blackfin: Fix using gd->baudrate before setting its value

login
register
mail settings
Submitter Axel Lin
Date June 29, 2013, 12:34 a.m.
Message ID <1372466081.3675.3.camel@phoenix>
Download mbox | patch
Permalink /patch/255699/
State Accepted, archived
Delegated to: Sonic Zhang
Headers show

Comments

Axel Lin - June 29, 2013, 12:34 a.m.
Current code uses gd->baudrate before setting its value.
Besides, I got below build warning which is introduced by
commit ddb5c5be "blackfin: add baudrate to bdinfo".

board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes pointer from integer without a cast [enabled by default]
include/vsprintf.h:27:7: note: expected 'const char *' but argument is of type 'unsigned int'

This patch moves the code using gd->baudrate to be after init_baudrate() call,
this ensures we get the baudrate setting before using it.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
---
I forgot to CC u-boot mail list. here is a resend.

Hi,
I don't have this hardware to test.
I'd appreciate if someone can test it.

Thanks,
Axel
 arch/blackfin/lib/board.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
Marek Vasut - June 29, 2013, 8:26 a.m.
Dear Axel Lin,

> Current code uses gd->baudrate before setting its value.
> Besides, I got below build warning which is introduced by
> commit ddb5c5be "blackfin: add baudrate to bdinfo".
> 
> board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes
> pointer from integer without a cast [enabled by default]
> include/vsprintf.h:27:7: note: expected 'const char *' but argument is of
> type 'unsigned int'
> 
> This patch moves the code using gd->baudrate to be after init_baudrate()
> call, this ensures we get the baudrate setting before using it.
> 
> Signed-off-by: Axel Lin <axel.lin@ingics.com>
> ---
> I forgot to CC u-boot mail list. here is a resend.
> 
> Hi,
> I don't have this hardware to test.
> I'd appreciate if someone can test it.
> 
> Thanks,
> Axel
>  arch/blackfin/lib/board.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
> index f1d5547..9e2e9de 100644
> --- a/arch/blackfin/lib/board.c
> +++ b/arch/blackfin/lib/board.c
> @@ -231,8 +231,6 @@ static int global_board_data_init(void)
>  	bd->bi_sclk = get_sclk();
>  	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
>  	bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
> -	bd->bi_baudrate = (gd->baudrate > 0)
> -		? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;


I'd rather say the fix here is to use (gd->baudrate > 0) ? gd->baudrate ? 
CONFIG_BAUDRATE ;

Otherwise you're changing the logic of the code and for that, you'd need Mikes' 
ack.

>  	return 0;
>  }
> @@ -299,6 +297,7 @@ void board_init_f(ulong bootflag)
>  	env_init();
>  	serial_early_puts("Baudrate init\n");
>  	init_baudrate();
> +	gd->bd->bi_baudrate = gd->baudrate;
>  	serial_early_puts("Serial init\n");
>  	serial_init();
>  	serial_initialize();

Best regards,
Marek Vasut
Axel Lin - June 29, 2013, 8:49 a.m.
2013/6/29 Marek Vasut <marex@denx.de>:
> Dear Axel Lin,
>
>> Current code uses gd->baudrate before setting its value.
>> Besides, I got below build warning which is introduced by
>> commit ddb5c5be "blackfin: add baudrate to bdinfo".
>>
>> board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes
>> pointer from integer without a cast [enabled by default]
>> include/vsprintf.h:27:7: note: expected 'const char *' but argument is of
>> type 'unsigned int'
>>
>> This patch moves the code using gd->baudrate to be after init_baudrate()
>> call, this ensures we get the baudrate setting before using it.
>>
>> Signed-off-by: Axel Lin <axel.lin@ingics.com>
>> ---
>> I forgot to CC u-boot mail list. here is a resend.
>>
>> Hi,
>> I don't have this hardware to test.
>> I'd appreciate if someone can test it.
>>
>> Thanks,
>> Axel
>>  arch/blackfin/lib/board.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
>> index f1d5547..9e2e9de 100644
>> --- a/arch/blackfin/lib/board.c
>> +++ b/arch/blackfin/lib/board.c
>> @@ -231,8 +231,6 @@ static int global_board_data_init(void)
>>       bd->bi_sclk = get_sclk();
>>       bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
>>       bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
>> -     bd->bi_baudrate = (gd->baudrate > 0)
>> -             ? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
>
>
> I'd rather say the fix here is to use (gd->baudrate > 0) ? gd->baudrate ?
> CONFIG_BAUDRATE ;
>
> Otherwise you're changing the logic of the code and for that, you'd need Mikes'
> ack.
Hi Marek,

It's because gd->baudrate is set in init_baudrate().
And if it is not found in an environment variable, the default is
CONFIG_BAUDRATE.
It's unlikely gd->baudrate is 0.

So if we have below code:
init_baudrate();
gd->bd->bi_baudrate = (gd->baudrate > 0) ? gd->baudrate : CONFIG_BAUDRATE;

In an unlikely case where baudrate environment variable is set to 0,
then we have inconsistency setting:

gd->baudrate = 0;
gd->bd->bi_baudrate = CONFIG_BAUDRATE;


Comments?

Regards,
Axel
Sonic Zhang - July 1, 2013, 3:45 a.m.
Hi Axel,

On Sat, Jun 29, 2013 at 8:34 AM, Axel Lin <axel.lin@ingics.com> wrote:
> Current code uses gd->baudrate before setting its value.
> Besides, I got below build warning which is introduced by
> commit ddb5c5be "blackfin: add baudrate to bdinfo".
>
> board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes pointer from integer without a cast [enabled by default]
> include/vsprintf.h:27:7: note: expected 'const char *' but argument is of type 'unsigned int'
>
> This patch moves the code using gd->baudrate to be after init_baudrate() call,
> this ensures we get the baudrate setting before using it.
>
> Signed-off-by: Axel Lin <axel.lin@ingics.com>
> ---
> I forgot to CC u-boot mail list. here is a resend.
>
> Hi,
> I don't have this hardware to test.
> I'd appreciate if someone can test it.
>
> Thanks,
> Axel
>  arch/blackfin/lib/board.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
> index f1d5547..9e2e9de 100644
> --- a/arch/blackfin/lib/board.c
> +++ b/arch/blackfin/lib/board.c
> @@ -231,8 +231,6 @@ static int global_board_data_init(void)
>         bd->bi_sclk = get_sclk();
>         bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
>         bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
> -       bd->bi_baudrate = (gd->baudrate > 0)
> -               ? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
>
>         return 0;
>  }
> @@ -299,6 +297,7 @@ void board_init_f(ulong bootflag)
>         env_init();
>         serial_early_puts("Baudrate init\n");
>         init_baudrate();
> +       gd->bd->bi_baudrate = gd->baudrate;

I prefer to move this line into init_baudrate().

Regards,

Sonic
Axel Lin - July 1, 2013, 4:11 a.m.
2013/7/1 Sonic Zhang <sonic.adi@gmail.com>:
> Hi Axel,
>
> On Sat, Jun 29, 2013 at 8:34 AM, Axel Lin <axel.lin@ingics.com> wrote:
>> Current code uses gd->baudrate before setting its value.
>> Besides, I got below build warning which is introduced by
>> commit ddb5c5be "blackfin: add baudrate to bdinfo".
>>
>> board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes pointer from integer without a cast [enabled by default]
>> include/vsprintf.h:27:7: note: expected 'const char *' but argument is of type 'unsigned int'
>>
>> This patch moves the code using gd->baudrate to be after init_baudrate() call,
>> this ensures we get the baudrate setting before using it.
>>
>> Signed-off-by: Axel Lin <axel.lin@ingics.com>
>> ---
>> I forgot to CC u-boot mail list. here is a resend.
>>
>> Hi,
>> I don't have this hardware to test.
>> I'd appreciate if someone can test it.
>>
>> Thanks,
>> Axel
>>  arch/blackfin/lib/board.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
>> index f1d5547..9e2e9de 100644
>> --- a/arch/blackfin/lib/board.c
>> +++ b/arch/blackfin/lib/board.c
>> @@ -231,8 +231,6 @@ static int global_board_data_init(void)
>>         bd->bi_sclk = get_sclk();
>>         bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
>>         bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
>> -       bd->bi_baudrate = (gd->baudrate > 0)
>> -               ? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
>>
>>         return 0;
>>  }
>> @@ -299,6 +297,7 @@ void board_init_f(ulong bootflag)
>>         env_init();
>>         serial_early_puts("Baudrate init\n");
>>         init_baudrate();
>> +       gd->bd->bi_baudrate = gd->baudrate;
>
> I prefer to move this line into init_baudrate().
hi Sonic,

$ grep -r "int init_baudrate" -A 4 arch
It shows we have the same implementation for all supported architectures.

So I think init_baudrate() may be moved to a common place in the future.
I pernsonal prefer keep the code as is in this patch.
But if you insist on moving this line into init_baudrate(), I have no problem
to send a v2. Just let me know how do you think.

Thanks for the review,
Axel
Sonic Zhang - July 1, 2013, 4:49 a.m.
Hi Axel,

On Mon, Jul 1, 2013 at 12:11 PM, Axel Lin <axel.lin@ingics.com> wrote:
> 2013/7/1 Sonic Zhang <sonic.adi@gmail.com>:
>> Hi Axel,
>>
>> On Sat, Jun 29, 2013 at 8:34 AM, Axel Lin <axel.lin@ingics.com> wrote:
>>> Current code uses gd->baudrate before setting its value.
>>> Besides, I got below build warning which is introduced by
>>> commit ddb5c5be "blackfin: add baudrate to bdinfo".
>>>
>>> board.c:235:3: warning: passing argument 1 of 'simple_strtoul' makes pointer from integer without a cast [enabled by default]
>>> include/vsprintf.h:27:7: note: expected 'const char *' but argument is of type 'unsigned int'
>>>
>>> This patch moves the code using gd->baudrate to be after init_baudrate() call,
>>> this ensures we get the baudrate setting before using it.
>>>
>>> Signed-off-by: Axel Lin <axel.lin@ingics.com>
>>> ---
>>> I forgot to CC u-boot mail list. here is a resend.
>>>
>>> Hi,
>>> I don't have this hardware to test.
>>> I'd appreciate if someone can test it.
>>>
>>> Thanks,
>>> Axel
>>>  arch/blackfin/lib/board.c | 3 +--
>>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>>
>>> diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
>>> index f1d5547..9e2e9de 100644
>>> --- a/arch/blackfin/lib/board.c
>>> +++ b/arch/blackfin/lib/board.c
>>> @@ -231,8 +231,6 @@ static int global_board_data_init(void)
>>>         bd->bi_sclk = get_sclk();
>>>         bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
>>>         bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
>>> -       bd->bi_baudrate = (gd->baudrate > 0)
>>> -               ? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
>>>
>>>         return 0;
>>>  }
>>> @@ -299,6 +297,7 @@ void board_init_f(ulong bootflag)
>>>         env_init();
>>>         serial_early_puts("Baudrate init\n");
>>>         init_baudrate();
>>> +       gd->bd->bi_baudrate = gd->baudrate;
>>
>> I prefer to move this line into init_baudrate().
> hi Sonic,
>
> $ grep -r "int init_baudrate" -A 4 arch
> It shows we have the same implementation for all supported architectures.
>
> So I think init_baudrate() may be moved to a common place in the future.
> I pernsonal prefer keep the code as is in this patch.
> But if you insist on moving this line into init_baudrate(), I have no problem
> to send a v2. Just let me know how do you think.

Yes, please.

Regards,

Sonic

Patch

diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
index f1d5547..9e2e9de 100644
--- a/arch/blackfin/lib/board.c
+++ b/arch/blackfin/lib/board.c
@@ -231,8 +231,6 @@  static int global_board_data_init(void)
 	bd->bi_sclk = get_sclk();
 	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
 	bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
-	bd->bi_baudrate = (gd->baudrate > 0)
-		? simple_strtoul(gd->baudrate, NULL, 10) : CONFIG_BAUDRATE;
 
 	return 0;
 }
@@ -299,6 +297,7 @@  void board_init_f(ulong bootflag)
 	env_init();
 	serial_early_puts("Baudrate init\n");
 	init_baudrate();
+	gd->bd->bi_baudrate = gd->baudrate;
 	serial_early_puts("Serial init\n");
 	serial_init();
 	serial_initialize();