[U-Boot] [U-Boot, 36/36] rockchip: add common board file for rockchip platform

Dr. Philipp Tomsich philipp.tomsich at theobroma-systems.com
Fri Apr 13 13:32:08 UTC 2018


Kever,

> On 13 Apr 2018, at 09:51, Kever Yang <kever.yang at rock-chips.com> wrote:
> On 04/08/2018 09:45 AM, Kever Yang wrote:
> 
>>>> +__weak int arch_cpu_init(void)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +__weak int rk_board_init_f(void)
>>>> +{
>>>> +    return 0;
>>>> +}
>>> This doesn't really help in modularising our board-support and I am
>>> not a fan of adding something like 'rk_board_init_f' in the first place.
>>> 
>>> Instead this should be implemented in a way that actually makes the
>>> code structure easier and more resilient for the future (having __weak
>>> functions at the architecture-level doesn't really help)... in fact
>>> the only other uses of __weak in the U-Boot source-base are within
>>> SPL, as there's no other way to provide hooks there.
>> I know your proposal is to use DM for board init, then could you make it
>> more
>> clear about how to handle this in your solution?
>> We need to do:
>> - same board init flow for all rockchip platform;
>> - something different but common in soc level;
>> - something different in board level;
> 
> I didn't see your response for this, could you send out your patches?

This isn’t at the stage of a patch-set yet… I had asked for comments to
this, so we could design this in a way that benefits all platforms.

> I admit that I'm not very clear about the limitation of '__weak' function,
> but I do see there are many '__weak' function in common/board_f/r.c,
> and my common board file is connect to the board_r.c.

I like __weak as a way to provide a hook for something that is part of the
common API (so it’s ok, if spl.c uses this).  However, I don’t want individual
platforms to suddenly expose new extension points.

And with the two examples above (arch_cpu_init and rk_board_init_f), you
basically highlight what’s wrong about using __weak at this level:
1	arch_cpu_init is an extension point to do low-level initialisation for a
	CPU (not a board).  Implementation for it usually live below arch/arm/cpu
	and takes care of things like MMU maintenance.  Now we suddenly provide
	this below arch/arm/mach-rockchip … and using a __weak function.
	This goes against everything that users will expect.  So just move it
	to arch/arm/cpu (you’ll probably need to have 2 separate ones for
	armv7 and armv8) and nothing unexpected will ever happen.
2	If we rk_board_init_f here, we are again changing the extension API
	of U-Boot: board_init_f belongs to each board (i.e. any board can expect
	to override it w/o ill effect), but now you’d suddenly create a link error.
	Instead users need to override rk_board_init_f.  This is a documentation
	nightmare (and the current solution would be to provide a common
	function that all board_init_f implementations could call as their head
	or tail…).

My question—as to whether the DM could/should be extended to CPUs,
SoCs, architectures and boards—was meant to discuss exactly these
observed issues in how boards and SoCs today interact.

I usually don’t mind to touch APIs and extend them (or the driver model),
but a solution for how to handle board/SoC/CPU init sequences is nothing
I want to start before getting an actual design discussion going and reaching
something resembling a consensus of how this aspect of U-Boot should be
structured in a year’s (or two years’) time.

> 
> @Simon, @Tom,
>     Could you kindly give some comment here?
> 
> Thanks,
> - Kever



More information about the U-Boot mailing list