diff mbox series

[05/10] board_f: mips: Factor out mips-specific bdinfo setup

Message ID 20200709080457.26850-5-ovidiu.panait@windriver.com
State Superseded
Delegated to: Tom Rini
Headers show
Series [01/10] board_f: Introduce arch_setup_bdinfo initcall | expand

Commit Message

Ovidiu Panait July 9, 2020, 8:04 a.m. UTC
Factor out mips-specific bdinfo setup from generic init sequence to
arch_setup_bdinfo in arch/mips/lib/boot.c.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

 arch/mips/lib/boot.c | 18 ++++++++++++++++++
 common/board_f.c     | 25 +------------------------
 2 files changed, 19 insertions(+), 24 deletions(-)

Comments

Heinrich Schuchardt July 9, 2020, 9:15 a.m. UTC | #1
On 09.07.20 10:04, Ovidiu Panait wrote:
> Factor out mips-specific bdinfo setup from generic init sequence to
> arch_setup_bdinfo in arch/mips/lib/boot.c.
>
> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
> ---
>
>  arch/mips/lib/boot.c | 18 ++++++++++++++++++
>  common/board_f.c     | 25 +------------------------
>  2 files changed, 19 insertions(+), 24 deletions(-)
>
> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
> index db862f6379..b3a48ce10f 100644
> --- a/arch/mips/lib/boot.c
> +++ b/arch/mips/lib/boot.c
> @@ -9,6 +9,24 @@
>
>  DECLARE_GLOBAL_DATA_PTR;
>
> +int arch_setup_bdinfo(void)
> +{
> +	bd_t *bd = gd->bd;
> +
> +	/*
> +	 * Save local variables to board info struct
> +	 */
> +	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
> +	bd->bi_memsize = gd->ram_size;			/* size in bytes */
> +
> +#ifdef CONFIG_SYS_SRAM_BASE

We want to get rid of #ifdef where possible. So it is preferable to write:

if IS_ENABLED(CONFIG_SYS_SRAM_BASE) {

One benefit is that static code analysis will consider the code.

Best regards

Heinrich

> +	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
> +	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
> +#endif
> +
> +	return 0;
> +}
> +
>  unsigned long do_go_exec(ulong (*entry)(int, char * const []),
>  			 int argc, char * const argv[])
>  {
> diff --git a/common/board_f.c b/common/board_f.c
> index 9bfcd6b236..fd7e6a17ad 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -602,26 +602,6 @@ __weak int arch_setup_bdinfo(void)
>  	return 0;
>  }
>
> -#if defined(CONFIG_MIPS)
> -static int setup_board_part1(void)
> -{
> -	bd_t *bd = gd->bd;
> -
> -	/*
> -	 * Save local variables to board info struct
> -	 */
> -	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
> -	bd->bi_memsize = gd->ram_size;			/* size in bytes */
> -
> -#ifdef CONFIG_SYS_SRAM_BASE
> -	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
> -	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
> -#endif
> -
> -	return 0;
> -}
> -#endif
> -
>  #ifdef CONFIG_POST
>  static int init_post(void)
>  {
> @@ -942,11 +922,8 @@ static const init_fnc_t init_sequence_f[] = {
>  	reserve_stacks,
>  	dram_init_banksize,
>  	show_dram_config,
> -	arch_setup_bdinfo,
> -#if defined(CONFIG_MIPS)
> -	setup_board_part1,
>  	INIT_FUNC_WATCHDOG_RESET
> -#endif
> +	arch_setup_bdinfo,
>  	display_new_sp,
>  #ifdef CONFIG_OF_BOARD_FIXUP
>  	fix_fdt,
>
Ovidiu Panait July 9, 2020, 10:27 a.m. UTC | #2
Hi,

On 09.07.2020 12:15, Heinrich Schuchardt wrote:
> On 09.07.20 10:04, Ovidiu Panait wrote:
>> Factor out mips-specific bdinfo setup from generic init sequence to
>> arch_setup_bdinfo in arch/mips/lib/boot.c.
>>
>> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
>> ---
>>
>>   arch/mips/lib/boot.c | 18 ++++++++++++++++++
>>   common/board_f.c     | 25 +------------------------
>>   2 files changed, 19 insertions(+), 24 deletions(-)
>>
>> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
>> index db862f6379..b3a48ce10f 100644
>> --- a/arch/mips/lib/boot.c
>> +++ b/arch/mips/lib/boot.c
>> @@ -9,6 +9,24 @@
>>
>>   DECLARE_GLOBAL_DATA_PTR;
>>
>> +int arch_setup_bdinfo(void)
>> +{
>> +	bd_t *bd = gd->bd;
>> +
>> +	/*
>> +	 * Save local variables to board info struct
>> +	 */
>> +	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
>> +	bd->bi_memsize = gd->ram_size;			/* size in bytes */
>> +
>> +#ifdef CONFIG_SYS_SRAM_BASE
> We want to get rid of #ifdef where possible. So it is preferable to write:
>
> if IS_ENABLED(CONFIG_SYS_SRAM_BASE) {
>
> One benefit is that static code analysis will consider the code.
>
> Best regards
>
> Heinrich

My understanding is that IS_ENABLED() only works with with boolean and 
tristate options.

In this case, CONFIG_SYS_SRAM_BASE is a hex value:

include/configs/pic32mzdask.h:22:#define CONFIG_SYS_SRAM_BASE     0x80000000


Switching to IS_ENABLED() produces the following build errors for qemu mips:

$ git diff
diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
index b3a48ce10f..aa047335ec 100644
--- a/arch/mips/lib/boot.c
+++ b/arch/mips/lib/boot.c
@@ -19,10 +19,10 @@ int arch_setup_bdinfo(void)
         bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;        /* start of 
memory */
         bd->bi_memsize = gd->ram_size;                  /* size in bytes */

-#ifdef CONFIG_SYS_SRAM_BASE
-       bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;        /* start of SRAM */
-       bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;         /* size  of SRAM */
-#endif
+       if (IS_ENABLED(CONFIG_SYS_SRAM_BASE)) {
+               bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of SRAM */
+               bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; /* size  of SRAM */
+       }

         return 0;
  }

$ make

...

arch/mips/lib/boot.c: In function 'arch_setup_bdinfo':
   CC      common/init/board_init.o
arch/mips/lib/boot.c:23:22: error: 'CONFIG_SYS_SRAM_BASE' undeclared 
(first use in this function); did you mean 'CONFIG_SYS_SDRAM_BASE'?
    23 |   bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of SRAM */
       |                      ^~~~~~~~~~~~~~~~~~~~
       |                      CONFIG_SYS_SDRAM_BASE
arch/mips/lib/boot.c:23:22: note: each undeclared identifier is reported 
only once for each function it appears in
arch/mips/lib/boot.c:24:21: error: 'CONFIG_SYS_SRAM_SIZE' undeclared 
(first use in this function); did you mean 'CONFIG_SYS_SDRAM_BASE'?
    24 |   bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;  /* size  of SRAM */
       |                     ^~~~~~~~~~~~~~~~~~~~
       |                     CONFIG_SYS_SDRAM_BASE

Thanks,

Ovidiu

>> +	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
>> +	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
>> +#endif
>> +
>> +	return 0;
>> +}
>> +
>>   unsigned long do_go_exec(ulong (*entry)(int, char * const []),
>>   			 int argc, char * const argv[])
>>   {
>> diff --git a/common/board_f.c b/common/board_f.c
>> index 9bfcd6b236..fd7e6a17ad 100644
>> --- a/common/board_f.c
>> +++ b/common/board_f.c
>> @@ -602,26 +602,6 @@ __weak int arch_setup_bdinfo(void)
>>   	return 0;
>>   }
>>
>> -#if defined(CONFIG_MIPS)
>> -static int setup_board_part1(void)
>> -{
>> -	bd_t *bd = gd->bd;
>> -
>> -	/*
>> -	 * Save local variables to board info struct
>> -	 */
>> -	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
>> -	bd->bi_memsize = gd->ram_size;			/* size in bytes */
>> -
>> -#ifdef CONFIG_SYS_SRAM_BASE
>> -	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
>> -	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
>> -#endif
>> -
>> -	return 0;
>> -}
>> -#endif
>> -
>>   #ifdef CONFIG_POST
>>   static int init_post(void)
>>   {
>> @@ -942,11 +922,8 @@ static const init_fnc_t init_sequence_f[] = {
>>   	reserve_stacks,
>>   	dram_init_banksize,
>>   	show_dram_config,
>> -	arch_setup_bdinfo,
>> -#if defined(CONFIG_MIPS)
>> -	setup_board_part1,
>>   	INIT_FUNC_WATCHDOG_RESET
>> -#endif
>> +	arch_setup_bdinfo,
>>   	display_new_sp,
>>   #ifdef CONFIG_OF_BOARD_FIXUP
>>   	fix_fdt,
>>
Heinrich Schuchardt July 9, 2020, 12:27 p.m. UTC | #3
On 09.07.20 12:27, Ovidiu Panait wrote:
> Hi,
>
> On 09.07.2020 12:15, Heinrich Schuchardt wrote:
>> On 09.07.20 10:04, Ovidiu Panait wrote:
>>> Factor out mips-specific bdinfo setup from generic init sequence to
>>> arch_setup_bdinfo in arch/mips/lib/boot.c.
>>>
>>> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
>>> ---
>>>
>>>   arch/mips/lib/boot.c | 18 ++++++++++++++++++
>>>   common/board_f.c     | 25 +------------------------
>>>   2 files changed, 19 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
>>> index db862f6379..b3a48ce10f 100644
>>> --- a/arch/mips/lib/boot.c
>>> +++ b/arch/mips/lib/boot.c
>>> @@ -9,6 +9,24 @@
>>>
>>>   DECLARE_GLOBAL_DATA_PTR;
>>>
>>> +int arch_setup_bdinfo(void)
>>> +{
>>> +    bd_t *bd = gd->bd;
>>> +
>>> +    /*
>>> +     * Save local variables to board info struct
>>> +     */
>>> +    bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;    /* start of memory */
>>> +    bd->bi_memsize = gd->ram_size;            /* size in bytes */
>>> +
>>> +#ifdef CONFIG_SYS_SRAM_BASE
>> We want to get rid of #ifdef where possible. So it is preferable to
>> write:
>>
>> if IS_ENABLED(CONFIG_SYS_SRAM_BASE) {
>>
>> One benefit is that static code analysis will consider the code.
>>
>> Best regards
>>
>> Heinrich
>
> My understanding is that IS_ENABLED() only works with with boolean and
> tristate options.
>
> In this case, CONFIG_SYS_SRAM_BASE is a hex value:
>
> include/configs/pic32mzdask.h:22:#define CONFIG_SYS_SRAM_BASE    
> 0x80000000
>
>
> Switching to IS_ENABLED() produces the following build errors for qemu
> mips:

You could add the following helper macro to include/linux/kconfig.h

#define config_defined(cfg) _config_defined(cfg, #cfg)
#define _config_defined(a1, a2) !!__builtin_strcmp(#a1, a2)

config_defined(cfg) evaluates to true if:
* cfg is defined and
* cfg is not defined as cfg.

As long as optimization is switch on __builtin_strcmp() is evaluated at
compile time.

Best regards

Heinrich

>
> $ git diff
> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
> index b3a48ce10f..aa047335ec 100644
> --- a/arch/mips/lib/boot.c
> +++ b/arch/mips/lib/boot.c
> @@ -19,10 +19,10 @@ int arch_setup_bdinfo(void)
>         bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;        /* start of
> memory */
>         bd->bi_memsize = gd->ram_size;                  /* size in bytes */
>
> -#ifdef CONFIG_SYS_SRAM_BASE
> -       bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;        /* start of SRAM */
> -       bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;         /* size  of SRAM */
> -#endif
> +       if (IS_ENABLED(CONFIG_SYS_SRAM_BASE)) {
> +               bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of
> SRAM */
> +               bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; /* size  of SRAM */
> +       }
>
>         return 0;
>  }
>
> $ make
>
> ...
>
> arch/mips/lib/boot.c: In function 'arch_setup_bdinfo':
>   CC      common/init/board_init.o
> arch/mips/lib/boot.c:23:22: error: 'CONFIG_SYS_SRAM_BASE' undeclared
> (first use in this function); did you mean 'CONFIG_SYS_SDRAM_BASE'?
>    23 |   bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; /* start of SRAM */
>       |                      ^~~~~~~~~~~~~~~~~~~~
>       |                      CONFIG_SYS_SDRAM_BASE
> arch/mips/lib/boot.c:23:22: note: each undeclared identifier is reported
> only once for each function it appears in
> arch/mips/lib/boot.c:24:21: error: 'CONFIG_SYS_SRAM_SIZE' undeclared
> (first use in this function); did you mean 'CONFIG_SYS_SDRAM_BASE'?
>    24 |   bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;  /* size  of SRAM */
>       |                     ^~~~~~~~~~~~~~~~~~~~
>       |                     CONFIG_SYS_SDRAM_BASE
>
> Thanks,
>
> Ovidiu
>
>>> +    bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;    /* start of SRAM */
>>> +    bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;        /* size  of SRAM */
>>> +#endif
>>> +
>>> +    return 0;
>>> +}
>>> +
>>>   unsigned long do_go_exec(ulong (*entry)(int, char * const []),
>>>                int argc, char * const argv[])
>>>   {
>>> diff --git a/common/board_f.c b/common/board_f.c
>>> index 9bfcd6b236..fd7e6a17ad 100644
>>> --- a/common/board_f.c
>>> +++ b/common/board_f.c
>>> @@ -602,26 +602,6 @@ __weak int arch_setup_bdinfo(void)
>>>       return 0;
>>>   }
>>>
>>> -#if defined(CONFIG_MIPS)
>>> -static int setup_board_part1(void)
>>> -{
>>> -    bd_t *bd = gd->bd;
>>> -
>>> -    /*
>>> -     * Save local variables to board info struct
>>> -     */
>>> -    bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;    /* start of memory */
>>> -    bd->bi_memsize = gd->ram_size;            /* size in bytes */
>>> -
>>> -#ifdef CONFIG_SYS_SRAM_BASE
>>> -    bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;    /* start of SRAM */
>>> -    bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;        /* size  of SRAM */
>>> -#endif
>>> -
>>> -    return 0;
>>> -}
>>> -#endif
>>> -
>>>   #ifdef CONFIG_POST
>>>   static int init_post(void)
>>>   {
>>> @@ -942,11 +922,8 @@ static const init_fnc_t init_sequence_f[] = {
>>>       reserve_stacks,
>>>       dram_init_banksize,
>>>       show_dram_config,
>>> -    arch_setup_bdinfo,
>>> -#if defined(CONFIG_MIPS)
>>> -    setup_board_part1,
>>>       INIT_FUNC_WATCHDOG_RESET
>>> -#endif
>>> +    arch_setup_bdinfo,
>>>       display_new_sp,
>>>   #ifdef CONFIG_OF_BOARD_FIXUP
>>>       fix_fdt,
>>>
Simon Glass July 10, 2020, 12:35 a.m. UTC | #4
Hi,

On Thu, 9 Jul 2020 at 06:28, Heinrich Schuchardt <xypron.debian@gmx.de> wrote:
>
> On 09.07.20 12:27, Ovidiu Panait wrote:
> > Hi,
> >
> > On 09.07.2020 12:15, Heinrich Schuchardt wrote:
> >> On 09.07.20 10:04, Ovidiu Panait wrote:
> >>> Factor out mips-specific bdinfo setup from generic init sequence to
> >>> arch_setup_bdinfo in arch/mips/lib/boot.c.
> >>>
> >>> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
> >>> ---
> >>>
> >>>   arch/mips/lib/boot.c | 18 ++++++++++++++++++
> >>>   common/board_f.c     | 25 +------------------------
> >>>   2 files changed, 19 insertions(+), 24 deletions(-)
> >>>
> >>> diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
> >>> index db862f6379..b3a48ce10f 100644
> >>> --- a/arch/mips/lib/boot.c
> >>> +++ b/arch/mips/lib/boot.c
> >>> @@ -9,6 +9,24 @@
> >>>
> >>>   DECLARE_GLOBAL_DATA_PTR;
> >>>
> >>> +int arch_setup_bdinfo(void)
> >>> +{
> >>> +    bd_t *bd = gd->bd;
> >>> +
> >>> +    /*
> >>> +     * Save local variables to board info struct
> >>> +     */
> >>> +    bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;    /* start of memory */
> >>> +    bd->bi_memsize = gd->ram_size;            /* size in bytes */
> >>> +
> >>> +#ifdef CONFIG_SYS_SRAM_BASE
> >> We want to get rid of #ifdef where possible. So it is preferable to
> >> write:
> >>
> >> if IS_ENABLED(CONFIG_SYS_SRAM_BASE) {
> >>
> >> One benefit is that static code analysis will consider the code.
> >>
> >> Best regards
> >>
> >> Heinrich
> >
> > My understanding is that IS_ENABLED() only works with with boolean and
> > tristate options.
> >
> > In this case, CONFIG_SYS_SRAM_BASE is a hex value:
> >
> > include/configs/pic32mzdask.h:22:#define CONFIG_SYS_SRAM_BASE
> > 0x80000000
> >
> >
> > Switching to IS_ENABLED() produces the following build errors for qemu
> > mips:
>
> You could add the following helper macro to include/linux/kconfig.h
>
> #define config_defined(cfg) _config_defined(cfg, #cfg)
> #define _config_defined(a1, a2) !!__builtin_strcmp(#a1, a2)
>
> config_defined(cfg) evaluates to true if:
> * cfg is defined and
> * cfg is not defined as cfg.
>
> As long as optimization is switch on __builtin_strcmp() is evaluated at
> compile time.

I think we should have a new CONFIG_SYS_HAS_SRAM.

Regards,
Simon
diff mbox series

Patch

diff --git a/arch/mips/lib/boot.c b/arch/mips/lib/boot.c
index db862f6379..b3a48ce10f 100644
--- a/arch/mips/lib/boot.c
+++ b/arch/mips/lib/boot.c
@@ -9,6 +9,24 @@ 
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int arch_setup_bdinfo(void)
+{
+	bd_t *bd = gd->bd;
+
+	/*
+	 * Save local variables to board info struct
+	 */
+	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
+	bd->bi_memsize = gd->ram_size;			/* size in bytes */
+
+#ifdef CONFIG_SYS_SRAM_BASE
+	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
+	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
+#endif
+
+	return 0;
+}
+
 unsigned long do_go_exec(ulong (*entry)(int, char * const []),
 			 int argc, char * const argv[])
 {
diff --git a/common/board_f.c b/common/board_f.c
index 9bfcd6b236..fd7e6a17ad 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -602,26 +602,6 @@  __weak int arch_setup_bdinfo(void)
 	return 0;
 }
 
-#if defined(CONFIG_MIPS)
-static int setup_board_part1(void)
-{
-	bd_t *bd = gd->bd;
-
-	/*
-	 * Save local variables to board info struct
-	 */
-	bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;	/* start of memory */
-	bd->bi_memsize = gd->ram_size;			/* size in bytes */
-
-#ifdef CONFIG_SYS_SRAM_BASE
-	bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;	/* start of SRAM */
-	bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;		/* size  of SRAM */
-#endif
-
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_POST
 static int init_post(void)
 {
@@ -942,11 +922,8 @@  static const init_fnc_t init_sequence_f[] = {
 	reserve_stacks,
 	dram_init_banksize,
 	show_dram_config,
-	arch_setup_bdinfo,
-#if defined(CONFIG_MIPS)
-	setup_board_part1,
 	INIT_FUNC_WATCHDOG_RESET
-#endif
+	arch_setup_bdinfo,
 	display_new_sp,
 #ifdef CONFIG_OF_BOARD_FIXUP
 	fix_fdt,