Hi Simon,
On Tue, 22 Oct 2024 at 15:00, Simon Glass <[email protected]> wrote: > > When the --native flag is given, pretend to be running the host > architecture rather than sandbox. > > Add an 'efidebug filename' command to report it. Heinrich does this allow you to continue your testing in native archs? > > Signed-off-by: Simon Glass <[email protected]> > --- > > Changes in v8: > - Add new patch to report host default-filename in native mode > > boot/bootmeth_efi.c | 25 ++------------------ > boot/efi_fname.c | 57 +++++++++++++++++++++++++++++++++------------ > cmd/efidebug.c | 25 ++++++++++++++++++++ > include/efi.h | 25 ++++++++++++++++++++ > 4 files changed, 94 insertions(+), 38 deletions(-) > > diff --git a/boot/bootmeth_efi.c b/boot/bootmeth_efi.c > index 371b36d550b..f836aa655f5 100644 > --- a/boot/bootmeth_efi.c > +++ b/boot/bootmeth_efi.c > @@ -25,32 +25,11 @@ > > #define EFI_DIRNAME "/EFI/BOOT/" > > -static int get_efi_pxe_arch(void) > -{ > - /* > http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */ > - if (IS_ENABLED(CONFIG_ARM64)) > - return 0xb; > - else if (IS_ENABLED(CONFIG_ARM)) > - return 0xa; > - else if (IS_ENABLED(CONFIG_X86_64)) > - return 0x6; > - else if (IS_ENABLED(CONFIG_X86)) > - return 0x7; > - else if (IS_ENABLED(CONFIG_ARCH_RV32I)) > - return 0x19; > - else if (IS_ENABLED(CONFIG_ARCH_RV64I)) > - return 0x1b; > - else if (IS_ENABLED(CONFIG_SANDBOX)) > - return 0; /* not used */ > - > - return -EINVAL; > -} > - > static int get_efi_pxe_vci(char *str, int max_len) > { > int ret; > > - ret = get_efi_pxe_arch(); > + ret = efi_get_pxe_arch(); > if (ret < 0) > return ret; > > @@ -239,7 +218,7 @@ static int distro_efi_read_bootflow_net(struct bootflow > *bflow) > ret = get_efi_pxe_vci(str, sizeof(str)); > if (ret) > return log_msg_ret("vci", ret); > - ret = get_efi_pxe_arch(); > + ret = efi_get_pxe_arch(); > if (ret < 0) > return log_msg_ret("arc", ret); > arch = ret; > diff --git a/boot/efi_fname.c b/boot/efi_fname.c > index a6b11383bba..790f9e2fa36 100644 > --- a/boot/efi_fname.c > +++ b/boot/efi_fname.c > @@ -9,29 +9,34 @@ > */ > > #include <efi.h> > +#include <errno.h> > #include <host_arch.h> > > -#ifdef CONFIG_SANDBOX > - > #if HOST_ARCH == HOST_ARCH_X86_64 > -#define BOOTEFI_NAME "BOOTX64.EFI" > +#define HOST_BOOTEFI_NAME "BOOTX64.EFI" > +#define HOST_PXE_ARCH 0x6 > #elif HOST_ARCH == HOST_ARCH_X86 > -#define BOOTEFI_NAME "BOOTIA32.EFI" > +#define HOST_BOOTEFI_NAME "BOOTIA32.EFI" > +#define HOST_PXE_ARCH 0x7 > #elif HOST_ARCH == HOST_ARCH_AARCH64 > -#define BOOTEFI_NAME "BOOTAA64.EFI" > +#define HOST_BOOTEFI_NAME "BOOTAA64.EFI" > +#define HOST_PXE_ARCH 0xb > #elif HOST_ARCH == HOST_ARCH_ARM > -#define BOOTEFI_NAME "BOOTARM.EFI" > +#define HOST_BOOTEFI_NAME "BOOTARM.EFI" > +#define HOST_PXE_ARCH 0xa > #elif HOST_ARCH == HOST_ARCH_RISCV32 > -#define BOOTEFI_NAME "BOOTRISCV32.EFI" > +#define HOST_BOOTEFI_NAME "BOOTRISCV32.EFI" > +#define HOST_PXE_ARCH 0x19 > #elif HOST_ARCH == HOST_ARCH_RISCV64 > -#define BOOTEFI_NAME "BOOTRISCV64.EFI" > +#define HOST_BOOTEFI_NAME "BOOTRISCV64.EFI" > +#define HOST_PXE_ARCH 0x1b > #else > -#error Unsupported UEFI architecture > +#error Unsupported Host architecture > #endif > > -#else > - > -#if defined(CONFIG_ARM64) > +#if defined(CONFIG_SANDBOX) > +#define BOOTEFI_NAME "BOOTSBOX.EFI" > +#elif defined(CONFIG_ARM64) > #define BOOTEFI_NAME "BOOTAA64.EFI" > #elif defined(CONFIG_ARM) > #define BOOTEFI_NAME "BOOTARM.EFI" > @@ -47,9 +52,31 @@ > #error Unsupported UEFI architecture > #endif > > -#endif > - > const char *efi_get_basename(void) > { > - return BOOTEFI_NAME; > + return efi_use_host_arch() ? HOST_BOOTEFI_NAME : BOOTEFI_NAME; > +} > + > +int efi_get_pxe_arch(void) > +{ > + if (efi_use_host_arch()) > + return HOST_PXE_ARCH; > + > + /* > http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */ > + if (IS_ENABLED(CONFIG_ARM64)) > + return 0xb; > + else if (IS_ENABLED(CONFIG_ARM)) > + return 0xa; > + else if (IS_ENABLED(CONFIG_X86_64)) > + return 0x6; > + else if (IS_ENABLED(CONFIG_X86)) > + return 0x7; > + else if (IS_ENABLED(CONFIG_ARCH_RV32I)) > + return 0x19; > + else if (IS_ENABLED(CONFIG_ARCH_RV64I)) > + return 0x1b; > + else if (IS_ENABLED(CONFIG_SANDBOX)) > + return 0; /* not used */ > + > + return -EINVAL; > } > diff --git a/cmd/efidebug.c b/cmd/efidebug.c > index e040fe75fa1..02f1e080e88 100644 > --- a/cmd/efidebug.c > +++ b/cmd/efidebug.c > @@ -511,6 +511,27 @@ static int do_efi_show_images(struct cmd_tbl *cmdtp, int > flag, > return CMD_RET_SUCCESS; > } > > +/** > + * do_efi_show_defaults() - show UEFI default filename and PXE architecture > + * > + * @cmdtp: Command table > + * @flag: Command flag > + * @argc: Number of arguments > + * @argv: Argument array > + * Return: CMD_RET_SUCCESS on success, CMD_RET_RET_FAILURE on failure > + * > + * Implement efidebug "defaults" sub-command. > + * Shows the default EFI filename and PXE architecture > + */ > +static int do_efi_show_defaults(struct cmd_tbl *cmdtp, int flag, > + int argc, char *const argv[]) > +{ > + printf("Default boot path: EFI\\BOOT\\%s\n", efi_get_basename()); > + printf("PXE arch: 0x%02x\n", efi_get_pxe_arch()); > + > + return CMD_RET_SUCCESS; > +} > + > static const char * const efi_mem_type_string[] = { > [EFI_RESERVED_MEMORY_TYPE] = "RESERVED", > [EFI_LOADER_CODE] = "LOADER CODE", > @@ -1561,6 +1582,8 @@ static struct cmd_tbl cmd_efidebug_sub[] = { > "", ""), > U_BOOT_CMD_MKENT(dh, CONFIG_SYS_MAXARGS, 1, do_efi_show_handles, > "", ""), > + U_BOOT_CMD_MKENT(defaults, CONFIG_SYS_MAXARGS, 1, > do_efi_show_defaults, > + "", ""), > U_BOOT_CMD_MKENT(images, CONFIG_SYS_MAXARGS, 1, do_efi_show_images, > "", ""), > U_BOOT_CMD_MKENT(memmap, CONFIG_SYS_MAXARGS, 1, do_efi_show_memmap, > @@ -1653,6 +1676,8 @@ U_BOOT_LONGHELP(efidebug, > " - show UEFI drivers\n" > "efidebug dh\n" > " - show UEFI handles\n" > + "efidebug defaults\n" > + " - show default EFI filename and PXE architecture\n" > "efidebug images\n" > " - show loaded images\n" > "efidebug memmap\n" > diff --git a/include/efi.h b/include/efi.h > index 1b8093bd4d3..70bb47e742f 100644 > --- a/include/efi.h > +++ b/include/efi.h > @@ -678,4 +678,29 @@ void efi_show_tables(struct efi_system_table *systab); > */ > const char *efi_get_basename(void); > > +#ifdef CONFIG_SANDBOX > +#include <asm/state.h> > +#endif > + > +static inline bool efi_use_host_arch(void) > +{ > +#ifdef CONFIG_SANDBOX #if IS_ENABLED(CONFIG_SANDBOX) is preferred no ? > + struct sandbox_state *state = state_get_current(); > + > + return state->native; > +#else > + return false; > +#endif > +} > + > +/** > + * efi_get_pxe_arch() - Get the architecture value for PXE > + * > + * See: > + * http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml > + * > + * Return: Architecture value > + */ > +int efi_get_pxe_arch(void); > + > #endif /* _LINUX_EFI_H */ > -- > 2.43.0 > Thanks /Ilias

