All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Rini <trini@konsulko.com>
To: Mark Kettenis <mark.kettenis@xs4all.nl>
Cc: sjg@chromium.org, vagrant@debian.org, pbrobinson@gmail.com,
	ilias.apalodimas@linaro.org, xypron.glpk@gmx.de,
	u-boot@lists.denx.de, hl@rock-chips.com,
	jeffy.chen@rock-chips.com, kever.yang@rock-chips.com,
	philipp.tomsich@theobroma-systems.com
Subject: Re: [PATCH v5 3/8] bootstd: Support booting EFI where multiple options exist
Date: Fri, 7 Apr 2023 15:38:48 -0400	[thread overview]
Message-ID: <20230407193848.GF1134230@bill-the-cat> (raw)
In-Reply-To: <87355eat78.fsf@bloch.sibelius.xs4all.nl>

[-- Attachment #1: Type: text/plain, Size: 5626 bytes --]

On Wed, Apr 05, 2023 at 11:56:59PM +0200, Mark Kettenis wrote:
> > Date: Wed, 5 Apr 2023 10:47:59 -0400
> > From: Tom Rini <trini@konsulko.com>
> > 
> > On Wed, Apr 05, 2023 at 05:28:07PM +1200, Simon Glass wrote:
> > > Hi Tom,
> > > 
> > > On Tue, 4 Apr 2023, 02:17 Tom Rini, <trini@konsulko.com> wrote:
> > > 
> > > > On Mon, Apr 03, 2023 at 12:56:49PM +0300, Ilias Apalodimas wrote:
> > > > > On Sat, Apr 01, 2023 at 07:31:49PM +1300, Simon Glass wrote:
> > > > > > Hi Tom,
> > > > > >
> > > > > > On Sat, 1 Apr 2023 at 07:02, Tom Rini <trini@konsulko.com> wrote:
> > > > > > >
> > > > > > > On Fri, Mar 31, 2023 at 10:25:56AM +1300, Simon Glass wrote:
> > > > > > >
> > > > > > > > The current EFI implementation has a strange quirk where it watches
> > > > > > > > loaded files and uses the last-loaded file to determine the device
> > > > that
> > > > > > > > is being booted from.
> > > > > > > >
> > > > > > > > This is confusing with bootstd, where multiple options may exist.
> > > > Even
> > > > > > > > loading a device tree will cause it to go wrong. There is no API
> > > > for
> > > > > > > > passing this information, since the only entry into booting an EFI
> > > > image
> > > > > > > > is the 'bootefi' command.
> > > > > > > >
> > > > > > > > To work around this, call efi_set_bootdev() for EFI images, if
> > > > possible,
> > > > > > > > just before booting.
> > > > > > > >
> > > > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > >
> > > > > > > Shouldn't this all be a simple wrapper around the EFI Standard
> > > > > > > BootDeviceOrder or whatever that's called?
> > > > > >
> > > > > > I think you are referring to boot manager, which isn't used here. This
> > > > > > is replicating the existing distroboot functionality in standard boot.
> > > > >
> > > > > The distroboot functionality *was* trying to behave like the EFI spec
> > > > > expects the bootmanager to behave.  Unfortunately I haven't had time to
> > > > > review the distroboot patches closely, but back when this started, my
> > > > point
> > > > > was that EFI doesn't need anything.  Whenever the EFI flow is added
> > > > bootstd
> > > > > should 'just' call the bootmanager.
> > > >
> > > > Yes, this. We're trying make things cleaner overall, so the EFI portion
> > > > of bootstd distro boot should just be "call EFI bootmanager" as that has
> > > > a well defined standard way to specify what devices to try in what
> > > > order.
> > > >
> > > 
> > > We already call bootmgr in standard boot, if it is enabled.
> > > 
> > > But I am not sure how widely that is used...
> > > 
> > > This patch is about corner cases in the distro scripts. If we are to turn
> > > these down we do need to try to do the same thing.
> > 
> > We probably need some distro people to chime in about what they're doing
> > / expecting at this point in time? I would have sworn that the long term
> > part of EFI "distro boot" would be using bootmgr since that's the
> > standards based way to set boot order. And if you don't have a device
> > tree in U-Boot, and want the distribution one, aren't you then using
> > something like grub which has a "dtb" keyword to handle that on its own?
> > That's not saying that "distro boot" doesn't need to load the device
> > tree, for when it's then calling booti/bootz/bootm, but not for the EFI
> > case these days? Or no?
> 
> The short anserwer is no.
> 
> The long answer:
> 
> OpenBSD requires EFI (booti/bootz/bootm only support booting Linux
> kernels in various forms) but also relies on a proper device tree
> being provided to its EFI bootloader.  While we have made significant
> progress in having U-Boot provide a fully synched up device tree for
> most of the SoCs that OpenBSD supports, we're not quite there yet, so
> some people rely on U-Boot loading (and tweaking) an updated
> device-tree from the EFI System Partition.
> 
> Our bootloader does have a "mach dtb" command to load a device tree
> from the OpenBSD root partition, but this is considered to be a
> debugging command and can't load a device tree from the EFI System
> Partition.  Loading a device tree this way means the device tree does
> not get tweaked by U-Boot, which is problematic on some SoCs/boards.
> 
> We now have the EFI_DT_FIXUP_PROTOCOL, but our bootloader doesn't use
> this yet.  If the consensus is that distroboot-with-efiboot needs to
> deprecated I can work on supporting that protocol in our bootloader.
> But a release of OpenBSD with support for that will not be available
> until november 2023.
> 
> Alternatively bootmgr could implement the device tree loading and
> fixup.  Or the bootstd stuff could do this before starting bootmgr.  I
> understand the concerns about loading device trees from disk when
> secure boot is enabled.  So maybe this should only be done when secure
> boot is disabled.
> 
> Also note that setting the BootOrder EFI variable from inside the OS
> isn't supported by most (all?) boards currently supported by U-Boot.
> So a convenient way to set the BootOrder EFI variable from within
> U-Boot is needed.
> 
> Cheers,
> 
> Mark
> 
> P.S. Does grub support the EFI_DT_FIXUP_PROTOCOL these days?  If not
>      (or if your Linux distro still ships with an older version of
>      grub) you'll face the same issue as OpenBSD regarding the lack of
>      fixups for loaded devictrees.

I just want to chime in and say thanks for explaining your use case, so
we can make sure what we're doing will actually work for everyone.

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

  parent reply	other threads:[~2023-04-07 19:39 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-30 21:25 [PATCH v5 1/8] bootstd: Tweak bootflow logic for device tree Simon Glass
2023-03-30 21:25 ` [PATCH v5 2/8] virtio: Ensure PCI is set up first Simon Glass
2023-03-30 21:25 ` [PATCH v5 3/8] bootstd: Support booting EFI where multiple options exist Simon Glass
2023-03-31 18:02   ` Tom Rini
2023-04-01  6:31     ` Simon Glass
2023-04-03  9:56       ` Ilias Apalodimas
2023-04-03 14:17         ` Tom Rini
2023-04-03 16:26           ` Heinrich Schuchardt
2023-04-04  6:09             ` Ilias Apalodimas
2023-04-05  5:28           ` Simon Glass
2023-04-05 14:47             ` Tom Rini
2023-04-05 21:56               ` Mark Kettenis
2023-04-06  5:42                 ` Heinrich Schuchardt
2023-04-07 19:38                 ` Tom Rini [this message]
2023-04-07 18:55               ` Simon Glass
2023-04-07 19:39                 ` Tom Rini
2023-04-07 19:44                   ` Ilias Apalodimas
2023-04-07 19:56                     ` Simon Glass
2023-04-07 19:57                     ` Tom Rini
2023-03-30 21:25 ` [PATCH v5 4/8] rockchip: Move to standard boot Simon Glass
2023-03-30 21:25 ` [PATCH v5 5/8] rockchip: Use the same boot_targets for all boards Simon Glass
2023-03-30 21:25 ` [PATCH v5 6/8] bootstd: Show a message sometimes if no bootflows are found Simon Glass
2023-03-30 21:26 ` [PATCH v5 7/8] bootstd: Report missing labels only when asked Simon Glass
2023-03-30 21:26 ` [PATCH v5 8/8] bootstd: Enable BOOTSTD_DEFAULTS by default Simon Glass
2023-03-31 18:00   ` Tom Rini
2023-04-01  6:31     ` Simon Glass
2023-04-03 14:33       ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230407193848.GF1134230@bill-the-cat \
    --to=trini@konsulko.com \
    --cc=hl@rock-chips.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=jeffy.chen@rock-chips.com \
    --cc=kever.yang@rock-chips.com \
    --cc=mark.kettenis@xs4all.nl \
    --cc=pbrobinson@gmail.com \
    --cc=philipp.tomsich@theobroma-systems.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    --cc=vagrant@debian.org \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.