[U-Boot] Do we really need CONFIG_ARCH_CPU_INIT ?

Graeme Russ graeme.russ at gmail.com
Thu Mar 1 23:19:03 CET 2012

Hi Simon, Fabio, Stefano, Marek, Albert

On Fri, Mar 2, 2012 at 8:28 AM, Simon Glass <sjg at chromium.org> wrote:
> +Graeme
> Hi,
> On Thu, Mar 1, 2012 at 5:23 AM, Fabio Estevam <festevam at gmail.com> wrote:
>> Hi,
>> Currently CONFIG_ARCH_CPU_INIT is used to select arch_cpu_init() function.
>> arch_cpu_init() does CPU level initialization, so why do we need to
>> include CONFIG_ARCH_CPU_INIT in the include/configs/boardXYZ files,
>> which are board related files ?
>> For example:
>> Let's say boards X, Y and Z are based on SoC S:
>> 1. If processor S has a arch_cpu_init() defined, then it means that
>> X,Y,Z need the code from arch_cpu_init() and then we need to define
>> CONFIG_ARCH_CPU_INIT for each of these boards (actually all the boards
>> based on this processor would need CONFIG_ARCH_CPU_INIT)
>> 2. If not all boards need the code inside arch_cpu_init() for
>> processor S, then it means that this code is not really CPU specific
>> and then it should be moved to board code.
>> I was thinking in doing the following:
>> --- a/arch/arm/lib/board.c
>> +++ b/arch/arm/lib/board.c
>> @@ -224,10 +224,15 @@ void __dram_init_banksize(void)
>>  void dram_init_banksize(void)
>>        __attribute__((weak, alias("__dram_init_banksize")));
>> +int __arch_cpu_init(void)
>> +{
>> +       return 0;
>> +}
>> +int arch_cpu_init(void)
>> +       __attribute__((weak, alias("__arch_cpu_init")));
>> +
>>  init_fnc_t *init_sequence[] = {
>> -#if defined(CONFIG_ARCH_CPU_INIT)
>>        arch_cpu_init,          /* basic arch cpu dependent setup */
>> -#endif
>>  #if defined(CONFIG_BOARD_EARLY_INIT_F)
>>        board_early_init_f,
>>  #endif
>> ,so that CONFIG_ARCH_CPU_INIT is not needed anymore.
>> Before I go further in this route to remove CONFIG_ARCH_CPU_INIT from
>> other places, I would like to know if this makes sense.
> I consider arch_cpu_init() to be an architecture function, which
> should be defined in arch/arm/cpu/ somewhere. For tegra, the function
> is in arch/arm/cpu/armv7/tegra2/board.c
> If it is a board function then it should be renamed to
> board_cpu_init() or similar.
> So regarding your proposed change, I feel that the code size impact is
> small and it seems reasonable.
> However, Graeme's forthcoming initcall mechanism may anyway may your
> change obsolete, since then architectures that need it can insert the
> call into the initcall sequence, and other archs need not.

I have been following this thread but have not had time to respond...

Simon's assesment is correct - My new INIT_CALL architecture (which I am
still working on ... slowly ...) will move the visibility of CPU, SoC and
arch specific initialisation away from the board configuration

It will also get rid of that #if defined(CONFIG_BOARD_EARLY_INIT_F) as
well (and every other #ifdef in the init sequence arrays)

> Finally, if we accept this change, then my generic board init series
> could/should be changed in the same way.

so it comes down to how to proceed - Live with the current implementation
until INIT_CALL gets implemented (assuming it gets approved) or accept this
proposed patch as a temporary 'solution' until INIT_CALL gets implemented

I think I should just post what I have of the INIT_CALL patches even
though they are very rough and totally incomplete, at least you can all
see how it is designed to work...



More information about the U-Boot mailing list