efi_loader: make the UEFI boot manager configurable
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 15 Jan 2021 18:02:50 +0000 (19:02 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 20 Jan 2021 07:09:34 +0000 (08:09 +0100)
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>
cmd/bootefi.c
cmd/efidebug.c
include/config_distro_bootcmd.h
lib/efi_loader/Kconfig
lib/efi_loader/Makefile

index fe70eec..c8eb5c3 100644 (file)
@@ -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(
index 6de81ca..9a2d4dd 100644 (file)
@@ -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
index c986226..2627c2a 100644 (file)
 #endif
 #endif
 
-
-#define BOOTENV_SHARED_EFI                                                \
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
+#define BOOTENV_EFI_BOOTMGR                                               \
        "boot_efi_bootmgr="                                               \
                "if fdt addr ${fdt_addr_r}; then "                        \
                        "bootefi bootmgr ${fdt_addr_r};"                  \
                "else "                                                   \
                        "bootefi bootmgr;"                                \
-               "fi\0"                                                    \
+               "fi\0"
+#else
+#define BOOTENV_EFI_BOOTMGR
+#endif
+
+#define BOOTENV_SHARED_EFI                                                \
+       BOOTENV_EFI_BOOTMGR                                               \
        \
        "boot_efi_binary="                                                \
                "load ${devtype} ${devnum}:${distro_bootpart} "           \
index fdf245d..106f789 100644 (file)
@@ -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
index 0216eb8..a6355d2 100644 (file)
@@ -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