Hi Heinrich, On Wed, 19 Jan 2022 at 04:47, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > On 1/19/22 02:43, Simon Glass wrote: > > Add a bootmeth driver which handles EFI boot manager, using EFI_LOADER. > > > > In effect, this provides the same functionality as the 'bootefi bootmgr' > > command and shares the same code. But the interface into it is via a > > bootmeth, so it does not require any special scripts, etc. > > > > For now this requires the 'bootefi' command be enabled. Future work may > > tidy this up so that it can be used without CONFIG_CMDLINE being enabled. > > > > Signed-off-by: Simon Glass <s...@chromium.org> > > --- > > > > Changes in v3: > > - Add a log category > > > > boot/Makefile | 3 ++ > > boot/bootmeth_efi_mgr.c | 86 +++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 89 insertions(+) > > create mode 100644 boot/bootmeth_efi_mgr.c > > > > diff --git a/boot/Makefile b/boot/Makefile > > index 795665f7ce5..38b10d81f0d 100644 > > --- a/boot/Makefile > > +++ b/boot/Makefile > > @@ -31,6 +31,9 @@ obj-$(CONFIG_$(SPL_TPL_)BOOTSTD) += bootstd-uclass.o > > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_DISTRO) += bootmeth_distro.o > > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_DISTRO_PXE) += bootmeth_pxe.o > > obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_EFILOADER) += bootmeth_efi.o > > +ifdef CONFIG_$(SPL_TPL_)BOOTSTD_FULL > > +obj-$(CONFIG_$(SPL_TPL_)CMD_BOOTEFI_BOOTMGR) += bootmeth_efi_mgr.o > > +endif > > > > obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += image-fdt.o > > obj-$(CONFIG_$(SPL_TPL_)FIT_SIGNATURE) += fdt_region.o > > diff --git a/boot/bootmeth_efi_mgr.c b/boot/bootmeth_efi_mgr.c > > new file mode 100644 > > index 00000000000..a6914466db7 > > --- /dev/null > > +++ b/boot/bootmeth_efi_mgr.c > > @@ -0,0 +1,86 @@ > > +// SPDX-License-Identifier: GPL-2.0+ > > +/* > > + * Bootmethod for EFI boot manager > > + * > > + * Copyright 2021 Google LLC > > + * Written by Simon Glass <s...@chromium.org> > > + */ > > + > > +#define LOG_CATEGORY UCLASS_BOOTSTD > > + > > +#include <common.h> > > +#include <bootdev.h> > > +#include <bootflow.h> > > +#include <bootmeth.h> > > +#include <command.h> > > +#include <dm.h> > > + > > +static int efi_mgr_check(struct udevice *dev, struct bootflow_iter *iter) > > +{ > > + int ret; > > + > > + /* Must be an bootstd device */ > > + ret = bootflow_iter_uses_system(iter); > > + if (ret) > > + return log_msg_ret("net", ret); > > + > > + return 0; > > +} > > + > > +static int efi_mgr_read_bootflow(struct udevice *dev, struct bootflow > > *bflow) > > +{ > > + /* > > + * Just assume there is something to boot since we don't have any way > > + * of knowing in advance > > + */ > > + bflow->state = BOOTFLOWST_READY; > > + > > + return 0; > > +} > > + > > +static int efi_mgr_read_file(struct udevice *dev, struct bootflow *bflow, > > + const char *file_path, ulong addr, ulong > > *sizep) > > +{ > > + /* Files are loaded by the 'bootefi bootmgr' command */ > > + > > + return -ENOSYS; > > +} > > + > > +static int efi_mgr_boot(struct udevice *dev, struct bootflow *bflow) > > +{ > > + int ret; > > + > > + /* Booting is handled by the 'bootefi bootmgr' command */ > > + ret = run_command("bootefi bootmgr", 0); > > You are missing to provide the device tree.
OK well I can deal with that when I get to it, I suppose. Which distro can I try with? Regards, Simon