[U-Boot] [RFC] Supporting multiple variants of an SoC

Stephen Warren swarren at wwwdotorg.org
Wed Jul 3 17:58:33 CEST 2013


On 07/02/2013 02:40 PM, Tom Rini wrote:
> On Tue, Jul 02, 2013 at 11:58:51AM -0600, Stephen Warren wrote:
>> On 07/02/2013 10:28 AM, Tom Rini wrote:
>>> Hey guys,
>>> 
>>> I'm wondering about something and looking for input.  As has
>>> come up a few times now, we have the ability for a single
>>> binary to run on a few systems (there's both i.MX examples and
>>> AM335x examples), but what we don't have is agreement on the
>>> best way to handle things that must (today) be done at build
>>> time.  For example, am335x_evm supports both the "kitchen sink"
>>> style EVM which includes NAND, and Beaglebone White/Black,
>>> which do not.  But we default to env on NAND as that was the
>>> first board up.  What might provide the best end-user
>>> experience (in their binary) would be adding a build target of
>>> am335x_evm_bbb that: - Uses eMMC for environment - Uses GPIO
>>> (since we have a button available) for skipping Falcon Mode and
>>> then adding am335x_evm_sd_only that: - Uses a file on FAT for
>>> environment - Uses a character (c) for skipping Falcon Mode and
>>> maybe even adding am335x_evm_nand that: - Uses NAND for
>>> environment (still default) - Checks environment for skipping
>>> Falcon Mode
>>> 
>>> That said, when others have suggested something like this
>>> before, Wolfgang has pointed out and NAK'd the idea of adding N
>>> different configuration as that adds (potentially) a lot of
>>> build time for custodians/etc that tend to build --soc or
>>> --arch or other group targets.  So, what do we want to do here?
>>> I guess longer term, if we are able to focus on switching to
>>> Kconfig, it would become we provide a generic defconfig for
>>> am335x (or imx6 or ...) with a best-fit-for-all set and
>>> communities can provide tweaked binaries as needed.  But do we
>>> want to think about any stop-gap solutions here?
>> 
>> Can there be a single generic binary, which is configured at
>> run-time by device-tree? Tegra and at least some Samsung Exynos
>> boards (snow I guess) seem headed that way, although the
>> conversion is nowhere near complete and hasn't yet covered the
>> specific differences you listed above.
> 
> We don't, today, support switching where environment comes from at 
> run-time, but we kind of could add that.  Same with the SPL
> related changes.  But, is it worth doing the effort now vs device
> model (which would lead to easier run time environment backing
> switching) and Kconfig and so on?

I don't think device model or Kconfig alone solve the issue. To
support the different boards, you can:

a) Build different binaries using different configuration files,
whether those config files are include/config/*.h, or Kconfig doesn't
really matter.

b) Parameterize everything at run-time, either using a DT or some
HW-specific probing method, etc.

For (a) above, I believe the main U-Boot source tree should provide
configs for all the useful board configurations. Otherwise, we get
into a situation where the build process for some boards is:

1) clone source
2) MAKEALL boardname

and the build process for other boards is:

1) clone source
2) Either manually edit include/config/*.h, or a .config file, or
download one of those from some other source.
3) Edit boards.cfg to add the board
4) MAKEALL boardname

That seems like a really bad user-experience for the poor people whose
board configuration is deemed not acceptable in the main source tree.

Also, if (2) and (3) above require someone to maintain the
instructions/diffs or alternate copies of the config files. That means
maintaining part of U-Boot out-of-tree rather than in-tree. That seems
like a bad idea; the out-of-tree code will never manage to keep fully
up-to-date with upstream.

So, my assertion is that if we do (a) above not (b) above, we simply
have to allow the U-Boot source tree to include all the config files
necessary to support all boards.


More information about the U-Boot mailing list