diff mbox series

[v2,2/2] efi_loader: make the UEFI boot manager configurable

Message ID 20210119170936.106904-3-xypron.glpk@gmx.de
State Superseded, archived
Delegated to: Heinrich Schuchardt
Headers show
Series efi_loader: make the UEFI boot manager configurable | expand

Commit Message

Heinrich Schuchardt Jan. 19, 2021, 5:09 p.m. UTC
Some boards are very tight on the binary size. Booting via UEFI is possible
without using the boot manager.

Provide a configuration option to make the boot manager available.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
v2:
	move stuff from patch 2 to patch 1
---
 cmd/bootefi.c           | 13 +++++++++----
 cmd/efidebug.c          |  8 ++++++--
 lib/efi_loader/Kconfig  |  8 ++++++++
 lib/efi_loader/Makefile |  2 +-
 4 files changed, 24 insertions(+), 7 deletions(-)

--
2.29.2

Comments

Michael Walle Jan. 19, 2021, 10:51 p.m. UTC | #1
Hi,

Am 2021-01-19 18:09, schrieb Heinrich Schuchardt:
> Some boards are very tight on the binary size. Booting via UEFI is 
> possible
> without using the boot manager.
> 
> Provide a configuration option to make the boot manager available.

include/config_distro_bootcmd.h needs to be updated too, no? "bootefi 
bootmgr"
is called unconditionally there.

-michael
Heinrich Schuchardt Jan. 20, 2021, 4:18 a.m. UTC | #2
Am 19. Januar 2021 23:51:46 MEZ schrieb Michael Walle <michael@walle.cc>:
>Hi,
>
>Am 2021-01-19 18:09, schrieb Heinrich Schuchardt:
>> Some boards are very tight on the binary size. Booting via UEFI is 
>> possible
>> without using the boot manager.
>> 
>> Provide a configuration option to make the boot manager available.
>
>include/config_distro_bootcmd.h needs to be updated too, no? "bootefi 
>bootmgr"
>is called unconditionally there.

Yes, we can avoid unnecessary output by not calling the unimplemented command.

>
>-michael
diff mbox series

Patch

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index fe70eec625..c8eb5c32b0 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -631,10 +631,12 @@  static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
 	else if (ret != EFI_SUCCESS)
 		return CMD_RET_FAILURE;

-	if (!strcmp(argv[1], "bootmgr"))
-		return do_efibootmgr();
+	if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) {
+		if (!strcmp(argv[1], "bootmgr"))
+			return do_efibootmgr();
+	}
 #ifdef CONFIG_CMD_BOOTEFI_SELFTEST
-	else if (!strcmp(argv[1], "selftest"))
+	if (!strcmp(argv[1], "selftest"))
 		return do_efi_selftest();
 #endif

@@ -657,11 +659,14 @@  static char bootefi_help_text[] =
 	"    Use environment variable efi_selftest to select a single test.\n"
 	"    Use 'setenv efi_selftest list' to enumerate all tests.\n"
 #endif
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
 	"bootefi bootmgr [fdt address]\n"
 	"  - load and boot EFI payload based on BootOrder/BootXXXX variables.\n"
 	"\n"
 	"    If specified, the device tree located at <fdt address> gets\n"
-	"    exposed as EFI configuration table.\n";
+	"    exposed as EFI configuration table.\n"
+#endif
+	;
 #endif

 U_BOOT_CMD(
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index 6de81cab00..9a2d4ddd5e 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -1367,8 +1367,8 @@  static int do_efi_boot_opt(struct cmd_tbl *cmdtp, int flag,
  *
  *     efidebug test bootmgr
  */
-static int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, int flag,
-			       int argc, char * const argv[])
+static __maybe_unused int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, int flag,
+					      int argc, char * const argv[])
 {
 	efi_handle_t image;
 	efi_uintn_t exit_data_size = 0;
@@ -1392,8 +1392,10 @@  static int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, int flag,
 }

 static struct cmd_tbl cmd_efidebug_test_sub[] = {
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
 	U_BOOT_CMD_MKENT(bootmgr, CONFIG_SYS_MAXARGS, 1, do_efi_test_bootmgr,
 			 "", ""),
+#endif
 };

 /**
@@ -1581,8 +1583,10 @@  static char efidebug_help_text[] =
 	"  - show UEFI memory map\n"
 	"efidebug tables\n"
 	"  - show UEFI configuration tables\n"
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
 	"efidebug test bootmgr\n"
 	"  - run simple bootmgr for test\n"
+#endif
 	"efidebug query [-nv][-bs][-rt][-at]\n"
 	"  - show size of UEFI variables store\n";
 #endif
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index fdf245dea3..106f789b4d 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -27,6 +27,14 @@  config EFI_LOADER

 if EFI_LOADER

+config CMD_BOOTEFI_BOOTMGR
+	bool "UEFI Boot Manager"
+	default y
+	help
+	  Select this option if you want to select the UEFI binary to be booted
+	  via UEFI variables Boot####, BootOrder, and BootNext. This enables the
+	  'bootefi bootmgr' command.
+
 config EFI_SETUP_EARLY
 	bool
 	default n
diff --git a/lib/efi_loader/Makefile b/lib/efi_loader/Makefile
index 0216eb83dc..a6355d240a 100644
--- a/lib/efi_loader/Makefile
+++ b/lib/efi_loader/Makefile
@@ -21,7 +21,7 @@  targets += helloworld.o
 endif

 obj-$(CONFIG_CMD_BOOTEFI_HELLO) += helloworld_efi.o
-obj-y += efi_bootmgr.o
+obj-$(CONFIG_CMD_BOOTEFI_BOOTMGR) += efi_bootmgr.o
 obj-y += efi_boottime.o
 obj-$(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) += efi_capsule.o
 obj-$(CONFIG_EFI_CAPSULE_FIRMWARE) += efi_firmware.o