On Mon, Sep 01, 2025 at 06:23:04PM +0200, Casey Connolly wrote:
> Hi all,
> 
> Sorry for the inactivity on this one, I'm hoping we can find some
> agreeable solution.
> 
> We had some discussion on the GitHub PR [1] where Krzysztof suggested
> that this property is duplicating the compatible property, while I wish
> this were the case it is not true that the DT file names follow any kind
> of scheme that can be reliably derived from the root compatible property.
> 
> ## Problem description
> 
> I guess before trying to decide on solutions we should be able to agree
> on the problem, for which we need to agree on some facts:
> 
> Fact 1: The kernel and devicetree are not always forwards/backwards
> compatible with each other
> Fact 2: Not all ARM platforms ship with a usable firmware-provided
> devicetree
> Fact 3: Users expect to be able to install their favourite Linux distro
> with minimal effort
> 
> Given (2) and (3) we need to provide a mechanism to load the correct
> devicetree and overlays with minimal/trivial user intervention.
> 
> Given (1) we should always try to load the DT and overlays that were
> shipped with the kernel even if the platform provides its own (while
> there may be a case where this is undesirable for some reason I would
> argue that this would be an exception and not the rule and is not
> directly relevant here).

Hi Casey,

I understand the problem that you are facing, and that you are looking
for a practical solution.

In the long run, I believe that we can address this by:
- Validating firmware-provided Devicetrees.
- Making sure that newer OSes are backward compatibles with older
  Devicetrees.

If the OS wants to use another Devicetree than the firmware-provided
one, that is fine, too.

> 
> ## Potential solutions
> 
> Assuming that we can agree on the above, there is clearly the need for a
> distro-agnostic mechanism to handle loading the right DT and overlays
> for the device and kernel version that will be booted.
> 
> Since there is no standard path for the DTB files on the ESP, and the
> EFI firmware doesn't know which kernel version will be booted this task
> can't be handled by the firmware itself (and even then, it would be
> difficult to drive adoption particularly for boards already in production).
> 
> This leaves us with the following high level options:
> 
> Option 1: Create some kind of EFI driver/shim to load the DTB and rely
> on the user to keep it up to date.
> 
> Option 2: Engage with systemd-boot/GRUB developers and improve the DTB
> loading experience, e.g. by retrieving the (relative) DTB path
> (qcom/qcs6490-rb3gen2.dtb) and appending it to the distro-specific dtb
> dir (typically tied to the kernel version being selected)
> 
> Option 1 has been attempted already with dtbloader[2] which has seen
> some very minor adoption, it also causes problems with secureboot and
> other potential compatibility issues.
> 
> ## My proposal
> 
> Thus I propose Option 2, specifically introducing a devicetree-directory
> config option to the UAPI group BLS (Boot Loader Specification) that
> would specify the dtbs directory which the dtb path would be appended
> to, hopefully with a similar option added to GRUB.
> 
> This still leaves the issue of identifying the path to the DTB file (and
> potentially overlays). If there is a firmware provided DTB the root
> compatible property SOMETIMES is enough to derive the path, but often is
> not.

When the information in the Devicetree is not enough to compute the path
you need unambiguously, do you think the firmware-provided informations
at large (SMBIOS, etc.) or even hardware-provided informations are not
enough, or is this rather the OS-specific bits, which are missing?

Best regards,

Vincent Stehlé
System Architect - Arm

> 
> So what it all boils down to is that we still need a way for the user to
> manually enter the DTB path, but at least it should only be necessary to
> do it once. Ideally we can get this implemented in systemd-boot and GRUB
> so that the file can be specified once and is then stored in an EFI
> variable, so if the user boots another distro or something then the
> variable is used.
> 
> ## The devicetree-path chosen property
> 
> Lastly, and the motivation for my DT schema PR, is further optimising
> this process so that the requirement for user intervention is minimised
> where possible. My proposal would allow bootloader like U-Boot to embed
> the DTB path into the DT itself at build time, then at runtime it would
> be able to set the EFI variable so that no user intervention is
> required. This is done rather than embedding the path into the U-Boot
> binary itself since some U-Boot targets are generic across multiple boards.
> 
> The only viable alternative to adding a property like this would be to
> actually enforce that the DTB path and compatible property encode the
> same information so that the path can be derived at runtime, this would
> require huge changes on the kernel side which I don't feel is justified
> since it wouldn't even fully solve the underlying issue.
> 
> I hope this email clarifies the issue at hand and my stance on this
> topic, it definitely makes me realise there's no reason not to push
> forwards with my suggest OS loader changes.
> 
> [1]: https://github.com/devicetree-org/dt-schema/pull/167
> 
> Kind regards,
> 
> -- 
> // Casey (she/her)
> 
> _______________________________________________
> boot-architecture mailing list -- boot-architecture@lists.linaro.org
> To unsubscribe send an email to boot-architecture-le...@lists.linaro.org
_______________________________________________
boot-architecture mailing list -- boot-architecture@lists.linaro.org
To unsubscribe send an email to boot-architecture-le...@lists.linaro.org

Reply via email to