Proposal: FIT support for extension boards / overlays
Simon Glass
sjg at chromium.org
Wed Dec 27 18:48:54 CET 2023
Hi Heinrich,
On Tue, Dec 12, 2023 at 3:43 PM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> 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?
I don't think so.
>
> How do you specify optional and required but otherwise unrelated
> extensions for a configuration?
Do we actually need to know which extensions are required or optional?
Do you have an example?
>
> > };
> > };
> >
> > 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?
Yes, I mean "optionally extending ext2". Again, I don't consider
required extensions here.
>
> 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?
Yes, that's right, by applying overlays.
>
> Why can't we simply write the compatible constraint into the overlay
> definition (fdto-#) and enumerate the overlays in the configuration?
Yes, that is the example quoted below.
>
> On some busses detection is problematic. Two alternative add-ons may use
> the same SPI address but need different FDT overlays.
If there is no way to detect the extension, then it cannot work anyway, right?
BTW I am not suggesting that the bus is used for detection, although I
suppose this is possible. More likely there are GPIOs which can be
decoded to indicate the extension, or perhaps an I2C EEPROM.
>
> 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-Custodians
mailing list