Proposal: FIT support for extension boards / overlays
Heinrich Schuchardt
xypron.glpk at gmx.de
Tue Dec 12 16:43:13 CET 2023
On 12.12.23 15:05, Simon Glass wrote:
> Hi,
>
> The devicetree files for a board can be quite large, perhaps around
> 60KB. To boot on any supported board, many of them need to be
> provided, typically hundreds.
>
> All boards for a particular SoC share common parts. It would be
> helpful to use overlays for common pieces, to reduce the overall size.
>
> Some boards have extension add-ons which have their own devicetree
> overlays. It would be helpful to know which ones should be applied for
> a particular extension.
>
> I propose implementing extensions in FIT. This has a new '/extensions'
> node, so you can specify what extensions are available for each FIT
> configuration.
>
> For example:
>
> / {
> images {
> kernel {
> // common kernel
> };
>
> fdt-1 {
> // FDT for board1
> };
>
> fdto-1 {
> // FDT overlay
> };
>
> fdto-2 {
> // FDT overlay
> };
>
> fdto-3 {
> // FDT overlay
> };
> };
>
> configurations {
> conf-1 {
> compatible = ...
> fdt = "fdt-1";
> extensions = "ext1", "ext-2";
Shouldn't there be braces around the item list?
How do you specify optional and required but otherwise unrelated
extensions for a configuration?
> };
> };
>
> extensions {
> ext-1 {
> fdto = "fdto-1"; // FDT overlay for this 'cape' or 'hat'
> kernel = "kernel-1";
> compatible = "vendor,combined-device1";
> extensions = "ext-3";
> };
>
> ext-2 {
> fdto = "fdto-2"; // fdt overlay for this 'cape'
> compatible = "vendor,device2";
> };
>
> ext-3 {
> fdto = "fdto-3";
> compatible = "vendor,device3";
> };
> };
> };
>
> So FIT configurations have a list of supported extensions. The
> extensions are hierarchical so that you can have ext-1 which can
> optionally have ext-2 as well. This allows boards to share a common
ext2 seems not to be related to ext-3. Do you mean ext-3 optionally
extending ext-1? How would you specify that ext-n is required for ext-m
to work?
The sequence of applying overlays may make a difference. I cannot see
that your current suggestion defines a sequence in which the overlays
are applied.
> SoC to add in overlays as needed by their board. It also allows common
> 'capes' or 'hats' to be specified only once and used by a group of
> boards which share the same interface.
>
> Within U-Boot, extensions actually present are declared by a sysinfo
> driver for the board, with new methods:
>
> get_compat() - determine the compatible strings for the current platform
> get_ext() - get a list of compatible strings for extensions which are
> actually present
Do you expect U-Boot to have code that injects device-tree fragments
with a compatible string into the control FDT after discovering add-ons?
Why can't we simply write the compatible constraint into the overlay
definition (fdto-#) and enumerate the overlays in the configuration?
On some busses detection is problematic. Two alternative add-ons may use
the same SPI address but need different FDT overlays.
Best regards
Heinrich
>
> The extension compatible-strings are used to select the correct things
> from the FIT, apply the overlays and produce the final DT.
>
> To make this simpler for the common case (without extensions), we can
> allow multiple FDT images for a configuration, with the first one
> being the base SoC .dtb and the others being the .dtbo overlay(s) for
> the board:
>
> confi-1 {
> compatible = ...
> fdt = "fdt-1", "fdto-1";
> };
>
> Comments welcome.
>
> Regards,
> Simon
More information about the U-Boot
mailing list