Hi Heinrich, FWIW reading at this, I don't see a point of having it overall. It has a nice feature of trying to load external DTBs from a path though. I think in the future we can move the dtb selection in bootmeth_efi_mgr.c and delete this one
On Thu, 4 Apr 2024 at 14:49, Heinrich Schuchardt <heinrich.schucha...@canonical.com> wrote: > > * The sandbox must not use an arbitrary file name bootsbox.efi but the > file name matching the host architecture to properly boot the respective > file. We already have an include which provides a macro with the name of > the EFI binary. Use it. > > * The path to the EFI binary should be absolute. > > * The path and the file name must be capitalized to conform to the UEFI > specification. This is important when reading from case sensitive > file systems. > > Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> > --- > v2: > new patch > --- > boot/bootmeth_efi.c | 44 +++----------------------------------------- > test/boot/bootflow.c | 4 +++- > 2 files changed, 6 insertions(+), 42 deletions(-) > > diff --git a/boot/bootmeth_efi.c b/boot/bootmeth_efi.c > index a46b6c9c805..aebc5207fc0 100644 > --- a/boot/bootmeth_efi.c > +++ b/boot/bootmeth_efi.c > @@ -14,6 +14,7 @@ > #include <bootmeth.h> > #include <command.h> > #include <dm.h> > +#include <efi_default_filename.h> > #include <efi_loader.h> > #include <fs.h> > #include <malloc.h> > @@ -23,43 +24,7 @@ > #include <pxe_utils.h> > #include <linux/sizes.h> > > -#define EFI_DIRNAME "efi/boot/" > - > -/** > - * get_efi_leafname() - Get the leaf name for the EFI file we expect > - * > - * @str: Place to put leaf name for this architecture, e.g. "bootaa64.efi". > - * Must have at least 16 bytes of space > - * @max_len: Length of @str, must be >=16 > - */ > -static int get_efi_leafname(char *str, int max_len) > -{ > - const char *base; > - > - if (max_len < 16) > - return log_msg_ret("spc", -ENOSPC); > - if (IS_ENABLED(CONFIG_ARM64)) > - base = "bootaa64"; > - else if (IS_ENABLED(CONFIG_ARM)) > - base = "bootarm"; > - else if (IS_ENABLED(CONFIG_X86_RUN_32BIT)) > - base = "bootia32"; > - else if (IS_ENABLED(CONFIG_X86_RUN_64BIT)) > - base = "bootx64"; > - else if (IS_ENABLED(CONFIG_ARCH_RV32I)) > - base = "bootriscv32"; > - else if (IS_ENABLED(CONFIG_ARCH_RV64I)) > - base = "bootriscv64"; > - else if (IS_ENABLED(CONFIG_SANDBOX)) > - base = "bootsbox"; > - else > - return -EINVAL; > - > - strcpy(str, base); > - strcat(str, ".efi"); > - > - return 0; > -} > +#define EFI_DIRNAME "/EFI/BOOT/" > > static int get_efi_pxe_arch(void) > { > @@ -259,10 +224,7 @@ static int distro_efi_try_bootflow_files(struct udevice > *dev, > return -ENOENT; > > strcpy(fname, EFI_DIRNAME); > - ret = get_efi_leafname(fname + strlen(fname), > - sizeof(fname) - strlen(fname)); > - if (ret) > - return log_msg_ret("leaf", ret); > + strcat(fname, BOOTEFI_NAME); > > if (bflow->blk) > desc = dev_get_uclass_plat(bflow->blk); > diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c > index e60e9309fa9..674d4c05f83 100644 > --- a/test/boot/bootflow.c > +++ b/test/boot/bootflow.c > @@ -13,6 +13,7 @@ > #include <bootstd.h> > #include <cli.h> > #include <dm.h> > +#include <efi_default_filename.h> > #include <expo.h> > #ifdef CONFIG_SANDBOX > #include <asm/test.h> > @@ -179,7 +180,8 @@ static int bootflow_cmd_scan_e(struct unit_test_state > *uts) > ut_assert_nextline(" 3 efi media mmc 0 > mmc1.bootdev.whole "); > ut_assert_nextline(" ** No partition found, err=-2: No such file > or directory"); > ut_assert_nextline(" 4 extlinux ready mmc 1 > mmc1.bootdev.part_1 /extlinux/extlinux.conf"); > - ut_assert_nextline(" 5 efi fs mmc 1 > mmc1.bootdev.part_1 efi/boot/bootsbox.efi"); > + ut_assert_nextline(" 5 efi fs mmc 1 > mmc1.bootdev.part_1 /EFI/BOOT/" > + BOOTEFI_NAME); > > ut_assert_skip_to_line("Scanning bootdev 'mmc0.bootdev':"); > ut_assert_skip_to_line( > -- > 2.43.0 > Reviewed-by: Ilias Apalodimas <ilias.apalodi...@linaro.org> Tested-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>