The efidebug command was conceived for testing purposes.
The manipulation of boot options does better fit to the bootefi command
that is used to invoke the boot manager.

Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
---
 cmd/bootefi.c                                 | 672 +++++++++++++++++-
 cmd/efidebug.c                                | 662 +----------------
 doc/develop/uefi/uefi.rst                     |   4 +-
 include/efi_loader.h                          |   2 -
 lib/efi_selftest/efi_selftest_tcg2.c          |   8 +-
 .../test_efi_capsule/test_capsule_firmware.py |  12 +-
 test/py/tests/test_efi_secboot/test_signed.py |  48 +-
 .../test_efi_secboot/test_signed_intca.py     |  22 +-
 .../tests/test_efi_secboot/test_unsigned.py   |  22 +-
 9 files changed, 723 insertions(+), 729 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 83eab0bd7f..003aa5265e 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -12,10 +12,13 @@
 #include <charset.h>
 #include <command.h>
 #include <dm.h>
+#include <efi_load_initrd.h>
 #include <efi_loader.h>
 #include <efi_selftest.h>
+#include <efi_variable.h>
 #include <env.h>
 #include <errno.h>
+#include <hexdump.h>
 #include <image.h>
 #include <log.h>
 #include <malloc.h>
@@ -47,6 +50,620 @@ static void efi_clear_bootdev(void)
        image_size = 0;
 }
 
+/**
+ * create_initrd_dp() - Create a special device for our Boot### option
+ *
+ * @dev:       Device
+ * @part:      Disk partition
+ * @file:      Filename
+ * Return:     Pointer to the device path or ERR_PTR
+ *
+ */
+static
+struct efi_device_path *create_initrd_dp(const char *dev, const char *part,
+                                        const char *file)
+
+{
+       struct efi_device_path *tmp_dp = NULL, *tmp_fp = NULL;
+       struct efi_device_path *initrd_dp = NULL;
+       efi_status_t ret;
+       const struct efi_initrd_dp id_dp = {
+               .vendor = {
+                       {
+                       DEVICE_PATH_TYPE_MEDIA_DEVICE,
+                       DEVICE_PATH_SUB_TYPE_VENDOR_PATH,
+                       sizeof(id_dp.vendor),
+                       },
+                       EFI_INITRD_MEDIA_GUID,
+               },
+               .end = {
+                       DEVICE_PATH_TYPE_END,
+                       DEVICE_PATH_SUB_TYPE_END,
+                       sizeof(id_dp.end),
+               }
+       };
+
+       ret = efi_dp_from_name(dev, part, file, &tmp_dp, &tmp_fp);
+       if (ret != EFI_SUCCESS) {
+               printf("Cannot create device path for \"%s %s\"\n", part, file);
+               goto out;
+       }
+
+       initrd_dp = efi_dp_append((const struct efi_device_path *)&id_dp,
+                                 tmp_fp);
+
+out:
+       efi_free_pool(tmp_dp);
+       efi_free_pool(tmp_fp);
+       return initrd_dp;
+}
+
+/**
+ * do_efi_boot_add() - set UEFI load option
+ *
+ * @cmdtp:     Command table
+ * @flag:      Command flag
+ * @argc:      Number of arguments
+ * @argv:      Argument array
+ * Return:     CMD_RET_SUCCESS on success,
+ *             CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure
+ *
+ * Implement "add" sub-command. Create or change UEFI load option.
+ *
+ * booteif add -b <id> <label> <interface> <devnum>[:<part>] <file>
+ *             -i <file> <interface2> <devnum2>[:<part>] <initrd>
+ *             -s '<options>'
+ */
+static int do_efi_boot_add(struct cmd_tbl *cmdtp, int flag,
+                          int argc, char *const argv[])
+{
+       int id;
+       char *endp;
+       u16 var_name16[9];
+       efi_guid_t guid;
+       size_t label_len, label_len16;
+       u16 *label;
+       struct efi_device_path *device_path = NULL, *file_path = NULL;
+       struct efi_device_path *final_fp = NULL;
+       struct efi_device_path *initrd_dp = NULL;
+       struct efi_load_option lo;
+       void *data = NULL;
+       efi_uintn_t size;
+       efi_uintn_t fp_size = 0;
+       efi_status_t ret;
+       int r = CMD_RET_SUCCESS;
+
+       guid = efi_global_variable_guid;
+
+       /* attributes */
+       lo.attributes = LOAD_OPTION_ACTIVE; /* always ACTIVE */
+       lo.optional_data = NULL;
+       lo.label = NULL;
+
+       argc--;
+       argv++; /* 'add' */
+       for (; argc > 0; argc--, argv++) {
+               if (!strcmp(argv[0], "-b")) {
+                       if (argc <  5 || lo.label) {
+                               r = CMD_RET_USAGE;
+                               goto out;
+                       }
+                       id = (int)hextoul(argv[1], &endp);
+                       if (*endp != '\0' || id > 0xffff)
+                               return CMD_RET_USAGE;
+
+                       efi_create_indexed_name(var_name16, sizeof(var_name16),
+                                               "Boot", id);
+
+                       /* label */
+                       label_len = strlen(argv[2]);
+                       label_len16 = utf8_utf16_strnlen(argv[2], label_len);
+                       label = malloc((label_len16 + 1) * sizeof(u16));
+                       if (!label)
+                               return CMD_RET_FAILURE;
+                       lo.label = label; /* label will be changed below */
+                       utf8_utf16_strncpy(&label, argv[2], label_len);
+
+                       /* file path */
+                       ret = efi_dp_from_name(argv[3], argv[4], argv[5],
+                                              &device_path, &file_path);
+                       if (ret != EFI_SUCCESS) {
+                               printf("Cannot create device path for \"%s 
%s\"\n",
+                                      argv[3], argv[4]);
+                               r = CMD_RET_FAILURE;
+                               goto out;
+                       }
+                       fp_size += efi_dp_size(file_path) +
+                               sizeof(struct efi_device_path);
+                       argc -= 5;
+                       argv += 5;
+               } else if (!strcmp(argv[0], "-i")) {
+                       if (argc < 3 || initrd_dp) {
+                               r = CMD_RET_USAGE;
+                               goto out;
+                       }
+
+                       initrd_dp = create_initrd_dp(argv[1], argv[2], argv[3]);
+                       if (!initrd_dp) {
+                               printf("Cannot add an initrd\n");
+                               r = CMD_RET_FAILURE;
+                               goto out;
+                       }
+                       argc -= 3;
+                       argv += 3;
+                       fp_size += efi_dp_size(initrd_dp) +
+                               sizeof(struct efi_device_path);
+               } else if (!strcmp(argv[0], "-s")) {
+                       if (argc < 1 || lo.optional_data) {
+                               r = CMD_RET_USAGE;
+                               goto out;
+                       }
+                       lo.optional_data = (const u8 *)argv[1];
+                       argc -= 1;
+                       argv += 1;
+               } else {
+                       r = CMD_RET_USAGE;
+                       goto out;
+               }
+       }
+
+       if (!file_path) {
+               printf("Missing binary\n");
+               r = CMD_RET_USAGE;
+               goto out;
+       }
+
+       final_fp = efi_dp_concat(file_path, initrd_dp);
+       if (!final_fp) {
+               printf("Cannot create final device path\n");
+               r = CMD_RET_FAILURE;
+               goto out;
+       }
+
+       lo.file_path = final_fp;
+       lo.file_path_length = fp_size;
+
+       size = efi_serialize_load_option(&lo, (u8 **)&data);
+       if (!size) {
+               r = CMD_RET_FAILURE;
+               goto out;
+       }
+
+       ret = efi_set_variable_int(var_name16, &guid,
+                                  EFI_VARIABLE_NON_VOLATILE |
+                                  EFI_VARIABLE_BOOTSERVICE_ACCESS |
+                                  EFI_VARIABLE_RUNTIME_ACCESS,
+                                  size, data, false);
+       if (ret != EFI_SUCCESS) {
+               printf("Cannot set %ls\n", var_name16);
+               r = CMD_RET_FAILURE;
+       }
+
+out:
+       free(data);
+       efi_free_pool(final_fp);
+       efi_free_pool(initrd_dp);
+       efi_free_pool(device_path);
+       efi_free_pool(file_path);
+       free(lo.label);
+
+       return r;
+}
+
+/**
+ * do_efi_boot_rm() - delete UEFI load options
+ *
+ * @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 "rm" sub-command.
+ * Delete UEFI load options.
+ *
+ *     bootefi rm <id> ...
+ */
+static int do_efi_boot_rm(struct cmd_tbl *cmdtp, int flag,
+                         int argc, char *const argv[])
+{
+       efi_guid_t guid;
+       int id, i;
+       char *endp;
+       u16 var_name16[9];
+       efi_status_t ret;
+
+       if (argc == 1)
+               return CMD_RET_USAGE;
+
+       guid = efi_global_variable_guid;
+       for (i = 1; i < argc; i++, argv++) {
+               id = (int)hextoul(argv[1], &endp);
+               if (*endp != '\0' || id > 0xffff)
+                       return CMD_RET_FAILURE;
+
+               efi_create_indexed_name(var_name16, sizeof(var_name16),
+                                       "Boot", id);
+               ret = efi_set_variable_int(var_name16, &guid, 0, 0, NULL,
+                                          false);
+               if (ret) {
+                       printf("Cannot remove %ls\n", var_name16);
+                       return CMD_RET_FAILURE;
+               }
+       }
+
+       return CMD_RET_SUCCESS;
+}
+
+/**
+ * show_efi_boot_opt_data() - dump UEFI load option
+ *
+ * @varname16: variable name
+ * @data:      value of UEFI load option variable
+ * @size:      size of the boot option
+ *
+ * Decode the value of UEFI load option variable and print information.
+ */
+static void show_efi_boot_opt_data(u16 *varname16, void *data, size_t *size)
+{
+       struct efi_device_path *initrd_path = NULL;
+       struct efi_load_option lo;
+       efi_status_t ret;
+
+       ret = efi_deserialize_load_option(&lo, data, size);
+       if (ret != EFI_SUCCESS) {
+               printf("%ls: invalid load option\n", varname16);
+               return;
+       }
+
+       printf("%ls:\nattributes: %c%c%c (0x%08x)\n",
+              varname16,
+              /* ACTIVE */
+              lo.attributes & LOAD_OPTION_ACTIVE ? 'A' : '-',
+              /* FORCE RECONNECT */
+              lo.attributes & LOAD_OPTION_FORCE_RECONNECT ? 'R' : '-',
+              /* HIDDEN */
+              lo.attributes & LOAD_OPTION_HIDDEN ? 'H' : '-',
+              lo.attributes);
+       printf("  label: %ls\n", lo.label);
+
+       printf("  file_path: %pD\n", lo.file_path);
+
+       initrd_path = efi_dp_from_lo(&lo, &efi_lf2_initrd_guid);
+       if (initrd_path) {
+               printf("  initrd_path: %pD\n", initrd_path);
+               efi_free_pool(initrd_path);
+       }
+
+       printf("  data:\n");
+       print_hex_dump("    ", DUMP_PREFIX_OFFSET, 16, 1,
+                      lo.optional_data, *size, true);
+}
+
+/**
+ * show_efi_boot_opt() - dump UEFI load option
+ *
+ * @varname16: variable name
+ *
+ * Dump information defined by UEFI load option.
+ */
+static void show_efi_boot_opt(u16 *varname16)
+{
+       void *data;
+       efi_uintn_t size;
+       efi_status_t ret;
+
+       size = 0;
+       ret = EFI_CALL(efi_get_variable(varname16, &efi_global_variable_guid,
+                                       NULL, &size, NULL));
+       if (ret == EFI_BUFFER_TOO_SMALL) {
+               data = malloc(size);
+               if (!data) {
+                       printf("ERROR: Out of memory\n");
+                       return;
+               }
+               ret = EFI_CALL(efi_get_variable(varname16,
+                                               &efi_global_variable_guid,
+                                               NULL, &size, data));
+               if (ret == EFI_SUCCESS)
+                       show_efi_boot_opt_data(varname16, data, &size);
+               free(data);
+       }
+}
+
+static int u16_tohex(u16 c)
+{
+       if (c >= '0' && c <= '9')
+               return c - '0';
+       if (c >= 'A' && c <= 'F')
+               return c - 'A' + 10;
+
+       /* not hexadecimal */
+       return -1;
+}
+
+/**
+ * show_efi_boot_dump() - dump all UEFI load options
+ *
+ * @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 "dump" sub-command.
+ * Dump information of all UEFI load options defined.
+ *
+ *     bootefi dump
+ */
+static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
+                           int argc, char *const argv[])
+{
+       u16 *var_name16, *p;
+       efi_uintn_t buf_size, size;
+       efi_guid_t guid;
+       int id, i, digit;
+       efi_status_t ret;
+
+       if (argc > 1)
+               return CMD_RET_USAGE;
+
+       buf_size = 128;
+       var_name16 = malloc(buf_size);
+       if (!var_name16)
+               return CMD_RET_FAILURE;
+
+       var_name16[0] = 0;
+       for (;;) {
+               size = buf_size;
+               ret = EFI_CALL(efi_get_next_variable_name(&size, var_name16,
+                                                         &guid));
+               if (ret == EFI_NOT_FOUND)
+                       break;
+               if (ret == EFI_BUFFER_TOO_SMALL) {
+                       buf_size = size;
+                       p = realloc(var_name16, buf_size);
+                       if (!p) {
+                               free(var_name16);
+                               return CMD_RET_FAILURE;
+                       }
+                       var_name16 = p;
+                       ret = EFI_CALL(efi_get_next_variable_name(&size,
+                                                                 var_name16,
+                                                                 &guid));
+               }
+               if (ret != EFI_SUCCESS) {
+                       free(var_name16);
+                       return CMD_RET_FAILURE;
+               }
+
+               if (memcmp(var_name16, L"Boot", 8))
+                       continue;
+
+               for (id = 0, i = 0; i < 4; i++) {
+                       digit = u16_tohex(var_name16[4 + i]);
+                       if (digit < 0)
+                               break;
+                       id = (id << 4) + digit;
+               }
+               if (i == 4 && !var_name16[8])
+                       show_efi_boot_opt(var_name16);
+       }
+
+       free(var_name16);
+
+       return CMD_RET_SUCCESS;
+}
+
+/**
+ * show_efi_boot_order() - show order of UEFI load options
+ *
+ * Return:     CMD_RET_SUCCESS on success, CMD_RET_RET_FAILURE on failure
+ *
+ * Show order of UEFI load options defined by BootOrder variable.
+ */
+static int show_efi_boot_order(void)
+{
+       u16 *bootorder;
+       efi_uintn_t size;
+       int num, i;
+       u16 var_name16[9];
+       void *data;
+       struct efi_load_option lo;
+       efi_status_t ret;
+
+       size = 0;
+       ret = EFI_CALL(efi_get_variable(L"BootOrder", &efi_global_variable_guid,
+                                       NULL, &size, NULL));
+       if (ret != EFI_BUFFER_TOO_SMALL) {
+               if (ret == EFI_NOT_FOUND) {
+                       printf("BootOrder not defined\n");
+                       return CMD_RET_SUCCESS;
+               } else {
+                       return CMD_RET_FAILURE;
+               }
+       }
+       bootorder = malloc(size);
+       if (!bootorder) {
+               printf("ERROR: Out of memory\n");
+               return CMD_RET_FAILURE;
+       }
+       ret = EFI_CALL(efi_get_variable(L"BootOrder", &efi_global_variable_guid,
+                                       NULL, &size, bootorder));
+       if (ret != EFI_SUCCESS) {
+               ret = CMD_RET_FAILURE;
+               goto out;
+       }
+
+       num = size / sizeof(u16);
+       for (i = 0; i < num; i++) {
+               efi_create_indexed_name(var_name16, sizeof(var_name16),
+                                       "Boot", bootorder[i]);
+
+               size = 0;
+               ret = EFI_CALL(efi_get_variable(var_name16,
+                                               &efi_global_variable_guid, NULL,
+                                               &size, NULL));
+               if (ret != EFI_BUFFER_TOO_SMALL) {
+                       printf("%2d: %ls: (not defined)\n", i + 1, var_name16);
+                       continue;
+               }
+
+               data = malloc(size);
+               if (!data) {
+                       ret = CMD_RET_FAILURE;
+                       goto out;
+               }
+               ret = EFI_CALL(efi_get_variable(var_name16,
+                                               &efi_global_variable_guid, NULL,
+                                               &size, data));
+               if (ret != EFI_SUCCESS) {
+                       free(data);
+                       ret = CMD_RET_FAILURE;
+                       goto out;
+               }
+
+               ret = efi_deserialize_load_option(&lo, data, &size);
+               if (ret != EFI_SUCCESS) {
+                       printf("%ls: invalid load option\n", var_name16);
+                       ret = CMD_RET_FAILURE;
+                       goto out;
+               }
+
+               printf("%2d: %ls: %ls\n", i + 1, var_name16, lo.label);
+
+               free(data);
+       }
+out:
+       free(bootorder);
+
+       return ret;
+}
+
+/**
+ * do_efi_boot_next() - manage UEFI BootNext variable
+ *
+ * @cmdtp:     Command table
+ * @flag:      Command flag
+ * @argc:      Number of arguments
+ * @argv:      Argument array
+ * Return:     CMD_RET_SUCCESS on success,
+ *             CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure
+ *
+ * Implement "next" sub-command.
+ * Set BootNext variable.
+ *
+ *     bootefi next <id>
+ */
+static int do_efi_boot_next(struct cmd_tbl *cmdtp, int flag,
+                           int argc, char *const argv[])
+{
+       u16 bootnext;
+       efi_uintn_t size;
+       char *endp;
+       efi_guid_t guid;
+       efi_status_t ret;
+       int r = CMD_RET_SUCCESS;
+
+       if (argc > 2)
+               return CMD_RET_USAGE;
+
+       if (argc == 1) {
+               size = sizeof(bootnext);
+               ret = efi_get_variable_int(L"BootNext",
+                                          &efi_global_variable_guid,
+                                          NULL, &size, &bootnext, NULL);
+               if (size != 2 || ret != EFI_SUCCESS)
+                       return CMD_RET_FAILURE;
+               printf("%04X\n", bootnext);
+               return CMD_RET_SUCCESS;
+       }
+
+       bootnext = (u16)hextoul(argv[1], &endp);
+       if (*endp) {
+               printf("invalid value: %s\n", argv[1]);
+               r = CMD_RET_FAILURE;
+               goto out;
+       }
+
+       guid = efi_global_variable_guid;
+       size = sizeof(u16);
+       ret = efi_set_variable_int(L"BootNext", &guid,
+                                       EFI_VARIABLE_NON_VOLATILE |
+                                       EFI_VARIABLE_BOOTSERVICE_ACCESS |
+                                       EFI_VARIABLE_RUNTIME_ACCESS,
+                                       size, &bootnext, false);
+       if (ret != EFI_SUCCESS) {
+               printf("Cannot set BootNext\n");
+               r = CMD_RET_FAILURE;
+       }
+out:
+       return r;
+}
+
+/**
+ * do_efi_boot_order() - manage UEFI BootOrder variable
+ *
+ * @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 "order" sub-command.
+ * Show order of UEFI load options, or change it in BootOrder variable.
+ *
+ *     bootefi order [<id> ...]
+ */
+static int do_efi_boot_order(struct cmd_tbl *cmdtp, int flag,
+                            int argc, char *const argv[])
+{
+       u16 *bootorder = NULL;
+       efi_uintn_t size;
+       int id, i;
+       char *endp;
+       efi_guid_t guid;
+       efi_status_t ret;
+       int r = CMD_RET_SUCCESS;
+
+       if (argc == 1)
+               return show_efi_boot_order();
+
+       argc--;
+       argv++;
+
+       size = argc * sizeof(u16);
+       bootorder = malloc(size);
+       if (!bootorder)
+               return CMD_RET_FAILURE;
+
+       for (i = 0; i < argc; i++) {
+               id = (int)hextoul(argv[i], &endp);
+               if (*endp != '\0' || id > 0xffff) {
+                       printf("invalid value: %s\n", argv[i]);
+                       r = CMD_RET_FAILURE;
+                       goto out;
+               }
+
+               bootorder[i] = (u16)id;
+       }
+
+       guid = efi_global_variable_guid;
+       ret = efi_set_variable_int(L"BootOrder", &guid,
+                                       EFI_VARIABLE_NON_VOLATILE |
+                                       EFI_VARIABLE_BOOTSERVICE_ACCESS |
+                                       EFI_VARIABLE_RUNTIME_ACCESS,
+                                       size, bootorder, true);
+       if (ret != EFI_SUCCESS) {
+               printf("Cannot set BootOrder\n");
+               r = CMD_RET_FAILURE;
+       }
+out:
+       free(bootorder);
+
+       return r;
+}
+
 /**
  * efi_set_bootdev() - set boot device
  *
@@ -498,7 +1115,6 @@ out:
        return ret;
 }
 
-#ifdef CONFIG_CMD_BOOTEFI_SELFTEST
 static efi_status_t bootefi_run_prepare(const char *load_options_path,
                struct efi_device_path *device_path,
                struct efi_device_path *image_path,
@@ -597,7 +1213,6 @@ static int do_efi_selftest(void)
 
        return ret != EFI_SUCCESS;
 }
-#endif /* CONFIG_CMD_BOOTEFI_SELFTEST */
 
 /**
  * do_bootefi() - execute `bootefi` command
@@ -611,9 +1226,23 @@ static int do_efi_selftest(void)
 static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
                      char *const argv[])
 {
+       struct cmd_tbl *cp;
        efi_status_t ret;
        void *fdt;
 
+       static struct cmd_tbl cmd_bootefi_sub[] = {
+               U_BOOT_CMD_MKENT(add, CONFIG_SYS_MAXARGS, 1,
+                                do_efi_boot_add, "", ""),
+               U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS,
+                                1, do_efi_boot_dump, "", ""),
+               U_BOOT_CMD_MKENT(next, CONFIG_SYS_MAXARGS, 1,
+                                do_efi_boot_next, "", ""),
+               U_BOOT_CMD_MKENT(order, CONFIG_SYS_MAXARGS, 1,
+                                do_efi_boot_order, "", ""),
+               U_BOOT_CMD_MKENT(rm, CONFIG_SYS_MAXARGS, 1,
+                                do_efi_boot_rm, "", ""),
+       };
+
        if (argc < 2)
                return CMD_RET_USAGE;
 
@@ -625,7 +1254,19 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, 
int argc,
                return CMD_RET_FAILURE;
        }
 
-       if (argc > 2) {
+       if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) {
+               cp = find_cmd_tbl(argv[1], cmd_bootefi_sub,
+                                 ARRAY_SIZE(cmd_bootefi_sub));
+               if (cp) {
+                       argc--;
+                       argv++;
+                       return cp->cmd(cmdtp, flag, argc, argv);
+               }
+       }
+
+       if (argc > 3)
+               return CMD_RET_USAGE;
+       if (argc == 3) {
                uintptr_t fdt_addr;
 
                fdt_addr = hextoul(argv[2], NULL);
@@ -643,10 +1284,10 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, 
int argc,
                if (!strcmp(argv[1], "bootmgr"))
                        return do_efibootmgr();
        }
-#ifdef CONFIG_CMD_BOOTEFI_SELFTEST
-       if (!strcmp(argv[1], "selftest"))
-               return do_efi_selftest();
-#endif
+       if (IS_ENABLED(CONFIG_CMD_BOOTEFI_SELFTEST)) {
+               if (!strcmp(argv[1], "selftest"))
+                       return do_efi_selftest();
+       }
 
        return do_bootefi_image(argv[1]);
 }
@@ -668,6 +1309,21 @@ static char bootefi_help_text[] =
        "    Use 'setenv efi_selftest list' to enumerate all tests.\n"
 #endif
 #ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
+       "bootefi add "
+       "-b <bootid> <label> <interface> <devnum>[:<part>] <file path> "
+       "-i <interface> <devnum>[:<part>] <initrd file path> "
+       "-s '<optional data>'\n"
+       "  - set UEFI BootXXXX variable\n"
+       "    <load options> will be passed to UEFI application\n"
+       "bootefi rm <bootid#1> [<bootid#2> [<bootid#3> [...]]]\n"
+       "  - delete UEFI BootXXXX variables\n"
+       "bootefi dump\n"
+       "  - dump all UEFI BootXXXX variables\n"
+       "bootefi next [bootid]\n"
+       "  - set/show UEFI BootNext variable\n"
+       "bootefi order [<bootid#1> [<bootid#2> [<bootid#3> [...]]]]\n"
+       "  - set/show UEFI boot order\n"
+       "\n"
        "bootefi bootmgr [fdt address]\n"
        "  - load and boot EFI payload based on BootOrder/BootXXXX variables.\n"
        "\n"
@@ -678,7 +1334,7 @@ static char bootefi_help_text[] =
 #endif
 
 U_BOOT_CMD(
-       bootefi, 3, 0, do_bootefi,
+       bootefi, CONFIG_SYS_MAXARGS, 0, do_bootefi,
        "Boots an EFI payload from memory",
        bootefi_help_text
 );
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index a977ca9c72..121906a336 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -9,12 +9,10 @@
 #include <common.h>
 #include <command.h>
 #include <efi_dt_fixup.h>
-#include <efi_load_initrd.h>
 #include <efi_loader.h>
-#include <efi_rng.h>
 #include <efi_variable.h>
+#include <efi_rng.h>
 #include <exports.h>
-#include <hexdump.h>
 #include <log.h>
 #include <malloc.h>
 #include <mapmem.h>
@@ -885,648 +883,6 @@ static int do_efi_show_tables(struct cmd_tbl *cmdtp, int 
flag,
        return CMD_RET_SUCCESS;
 }
 
-/**
- * create_initrd_dp() - Create a special device for our Boot### option
- *
- * @dev:       Device
- * @part:      Disk partition
- * @file:      Filename
- * Return:     Pointer to the device path or ERR_PTR
- *
- */
-static
-struct efi_device_path *create_initrd_dp(const char *dev, const char *part,
-                                        const char *file)
-
-{
-       struct efi_device_path *tmp_dp = NULL, *tmp_fp = NULL;
-       struct efi_device_path *initrd_dp = NULL;
-       efi_status_t ret;
-       const struct efi_initrd_dp id_dp = {
-               .vendor = {
-                       {
-                       DEVICE_PATH_TYPE_MEDIA_DEVICE,
-                       DEVICE_PATH_SUB_TYPE_VENDOR_PATH,
-                       sizeof(id_dp.vendor),
-                       },
-                       EFI_INITRD_MEDIA_GUID,
-               },
-               .end = {
-                       DEVICE_PATH_TYPE_END,
-                       DEVICE_PATH_SUB_TYPE_END,
-                       sizeof(id_dp.end),
-               }
-       };
-
-       ret = efi_dp_from_name(dev, part, file, &tmp_dp, &tmp_fp);
-       if (ret != EFI_SUCCESS) {
-               printf("Cannot create device path for \"%s %s\"\n", part, file);
-               goto out;
-       }
-
-       initrd_dp = efi_dp_append((const struct efi_device_path *)&id_dp,
-                                 tmp_fp);
-
-out:
-       efi_free_pool(tmp_dp);
-       efi_free_pool(tmp_fp);
-       return initrd_dp;
-}
-
-/**
- * do_efi_boot_add() - set UEFI load option
- *
- * @cmdtp:     Command table
- * @flag:      Command flag
- * @argc:      Number of arguments
- * @argv:      Argument array
- * Return:     CMD_RET_SUCCESS on success,
- *             CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure
- *
- * Implement efidebug "boot add" sub-command. Create or change UEFI load 
option.
- *
- * efidebug boot add -b <id> <label> <interface> <devnum>[:<part>] <file>
- *                   -i <file> <interface2> <devnum2>[:<part>] <initrd>
- *                   -s '<options>'
- */
-static int do_efi_boot_add(struct cmd_tbl *cmdtp, int flag,
-                          int argc, char *const argv[])
-{
-       int id;
-       char *endp;
-       u16 var_name16[9];
-       efi_guid_t guid;
-       size_t label_len, label_len16;
-       u16 *label;
-       struct efi_device_path *device_path = NULL, *file_path = NULL;
-       struct efi_device_path *final_fp = NULL;
-       struct efi_device_path *initrd_dp = NULL;
-       struct efi_load_option lo;
-       void *data = NULL;
-       efi_uintn_t size;
-       efi_uintn_t fp_size = 0;
-       efi_status_t ret;
-       int r = CMD_RET_SUCCESS;
-
-       guid = efi_global_variable_guid;
-
-       /* attributes */
-       lo.attributes = LOAD_OPTION_ACTIVE; /* always ACTIVE */
-       lo.optional_data = NULL;
-       lo.label = NULL;
-
-       argc--;
-       argv++; /* 'add' */
-       for (; argc > 0; argc--, argv++) {
-               if (!strcmp(argv[0], "-b")) {
-                       if (argc <  5 || lo.label) {
-                               r = CMD_RET_USAGE;
-                               goto out;
-                       }
-                       id = (int)hextoul(argv[1], &endp);
-                       if (*endp != '\0' || id > 0xffff)
-                               return CMD_RET_USAGE;
-
-                       efi_create_indexed_name(var_name16, sizeof(var_name16),
-                                               "Boot", id);
-
-                       /* label */
-                       label_len = strlen(argv[2]);
-                       label_len16 = utf8_utf16_strnlen(argv[2], label_len);
-                       label = malloc((label_len16 + 1) * sizeof(u16));
-                       if (!label)
-                               return CMD_RET_FAILURE;
-                       lo.label = label; /* label will be changed below */
-                       utf8_utf16_strncpy(&label, argv[2], label_len);
-
-                       /* file path */
-                       ret = efi_dp_from_name(argv[3], argv[4], argv[5],
-                                              &device_path, &file_path);
-                       if (ret != EFI_SUCCESS) {
-                               printf("Cannot create device path for \"%s 
%s\"\n",
-                                      argv[3], argv[4]);
-                               r = CMD_RET_FAILURE;
-                               goto out;
-                       }
-                       fp_size += efi_dp_size(file_path) +
-                               sizeof(struct efi_device_path);
-                       argc -= 5;
-                       argv += 5;
-               } else if (!strcmp(argv[0], "-i")) {
-                       if (argc < 3 || initrd_dp) {
-                               r = CMD_RET_USAGE;
-                               goto out;
-                       }
-
-                       initrd_dp = create_initrd_dp(argv[1], argv[2], argv[3]);
-                       if (!initrd_dp) {
-                               printf("Cannot add an initrd\n");
-                               r = CMD_RET_FAILURE;
-                               goto out;
-                       }
-                       argc -= 3;
-                       argv += 3;
-                       fp_size += efi_dp_size(initrd_dp) +
-                               sizeof(struct efi_device_path);
-               } else if (!strcmp(argv[0], "-s")) {
-                       if (argc < 1 || lo.optional_data) {
-                               r = CMD_RET_USAGE;
-                               goto out;
-                       }
-                       lo.optional_data = (const u8 *)argv[1];
-                       argc -= 1;
-                       argv += 1;
-               } else {
-                       r = CMD_RET_USAGE;
-                       goto out;
-               }
-       }
-
-       if (!file_path) {
-               printf("Missing binary\n");
-               r = CMD_RET_USAGE;
-               goto out;
-       }
-
-       final_fp = efi_dp_concat(file_path, initrd_dp);
-       if (!final_fp) {
-               printf("Cannot create final device path\n");
-               r = CMD_RET_FAILURE;
-               goto out;
-       }
-
-       lo.file_path = final_fp;
-       lo.file_path_length = fp_size;
-
-       size = efi_serialize_load_option(&lo, (u8 **)&data);
-       if (!size) {
-               r = CMD_RET_FAILURE;
-               goto out;
-       }
-
-       ret = efi_set_variable_int(var_name16, &guid,
-                                  EFI_VARIABLE_NON_VOLATILE |
-                                  EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                                  EFI_VARIABLE_RUNTIME_ACCESS,
-                                  size, data, false);
-       if (ret != EFI_SUCCESS) {
-               printf("Cannot set %ls\n", var_name16);
-               r = CMD_RET_FAILURE;
-       }
-
-out:
-       free(data);
-       efi_free_pool(final_fp);
-       efi_free_pool(initrd_dp);
-       efi_free_pool(device_path);
-       efi_free_pool(file_path);
-       free(lo.label);
-
-       return r;
-}
-
-/**
- * do_efi_boot_rm() - delete UEFI load options
- *
- * @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 "boot rm" sub-command.
- * Delete UEFI load options.
- *
- *     efidebug boot rm <id> ...
- */
-static int do_efi_boot_rm(struct cmd_tbl *cmdtp, int flag,
-                         int argc, char *const argv[])
-{
-       efi_guid_t guid;
-       int id, i;
-       char *endp;
-       u16 var_name16[9];
-       efi_status_t ret;
-
-       if (argc == 1)
-               return CMD_RET_USAGE;
-
-       guid = efi_global_variable_guid;
-       for (i = 1; i < argc; i++, argv++) {
-               id = (int)hextoul(argv[1], &endp);
-               if (*endp != '\0' || id > 0xffff)
-                       return CMD_RET_FAILURE;
-
-               efi_create_indexed_name(var_name16, sizeof(var_name16),
-                                       "Boot", id);
-               ret = efi_set_variable_int(var_name16, &guid, 0, 0, NULL,
-                                          false);
-               if (ret) {
-                       printf("Cannot remove %ls\n", var_name16);
-                       return CMD_RET_FAILURE;
-               }
-       }
-
-       return CMD_RET_SUCCESS;
-}
-
-/**
- * show_efi_boot_opt_data() - dump UEFI load option
- *
- * @varname16: variable name
- * @data:      value of UEFI load option variable
- * @size:      size of the boot option
- *
- * Decode the value of UEFI load option variable and print information.
- */
-static void show_efi_boot_opt_data(u16 *varname16, void *data, size_t *size)
-{
-       struct efi_device_path *initrd_path = NULL;
-       struct efi_load_option lo;
-       efi_status_t ret;
-
-       ret = efi_deserialize_load_option(&lo, data, size);
-       if (ret != EFI_SUCCESS) {
-               printf("%ls: invalid load option\n", varname16);
-               return;
-       }
-
-       printf("%ls:\nattributes: %c%c%c (0x%08x)\n",
-              varname16,
-              /* ACTIVE */
-              lo.attributes & LOAD_OPTION_ACTIVE ? 'A' : '-',
-              /* FORCE RECONNECT */
-              lo.attributes & LOAD_OPTION_FORCE_RECONNECT ? 'R' : '-',
-              /* HIDDEN */
-              lo.attributes & LOAD_OPTION_HIDDEN ? 'H' : '-',
-              lo.attributes);
-       printf("  label: %ls\n", lo.label);
-
-       printf("  file_path: %pD\n", lo.file_path);
-
-       initrd_path = efi_dp_from_lo(&lo, &efi_lf2_initrd_guid);
-       if (initrd_path) {
-               printf("  initrd_path: %pD\n", initrd_path);
-               efi_free_pool(initrd_path);
-       }
-
-       printf("  data:\n");
-       print_hex_dump("    ", DUMP_PREFIX_OFFSET, 16, 1,
-                      lo.optional_data, *size, true);
-}
-
-/**
- * show_efi_boot_opt() - dump UEFI load option
- *
- * @varname16: variable name
- *
- * Dump information defined by UEFI load option.
- */
-static void show_efi_boot_opt(u16 *varname16)
-{
-       void *data;
-       efi_uintn_t size;
-       efi_status_t ret;
-
-       size = 0;
-       ret = EFI_CALL(efi_get_variable(varname16, &efi_global_variable_guid,
-                                       NULL, &size, NULL));
-       if (ret == EFI_BUFFER_TOO_SMALL) {
-               data = malloc(size);
-               if (!data) {
-                       printf("ERROR: Out of memory\n");
-                       return;
-               }
-               ret = EFI_CALL(efi_get_variable(varname16,
-                                               &efi_global_variable_guid,
-                                               NULL, &size, data));
-               if (ret == EFI_SUCCESS)
-                       show_efi_boot_opt_data(varname16, data, &size);
-               free(data);
-       }
-}
-
-static int u16_tohex(u16 c)
-{
-       if (c >= '0' && c <= '9')
-               return c - '0';
-       if (c >= 'A' && c <= 'F')
-               return c - 'A' + 10;
-
-       /* not hexadecimal */
-       return -1;
-}
-
-/**
- * show_efi_boot_dump() - dump all UEFI load options
- *
- * @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 "boot dump" sub-command.
- * Dump information of all UEFI load options defined.
- *
- *     efidebug boot dump
- */
-static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
-                           int argc, char *const argv[])
-{
-       u16 *var_name16, *p;
-       efi_uintn_t buf_size, size;
-       efi_guid_t guid;
-       int id, i, digit;
-       efi_status_t ret;
-
-       if (argc > 1)
-               return CMD_RET_USAGE;
-
-       buf_size = 128;
-       var_name16 = malloc(buf_size);
-       if (!var_name16)
-               return CMD_RET_FAILURE;
-
-       var_name16[0] = 0;
-       for (;;) {
-               size = buf_size;
-               ret = EFI_CALL(efi_get_next_variable_name(&size, var_name16,
-                                                         &guid));
-               if (ret == EFI_NOT_FOUND)
-                       break;
-               if (ret == EFI_BUFFER_TOO_SMALL) {
-                       buf_size = size;
-                       p = realloc(var_name16, buf_size);
-                       if (!p) {
-                               free(var_name16);
-                               return CMD_RET_FAILURE;
-                       }
-                       var_name16 = p;
-                       ret = EFI_CALL(efi_get_next_variable_name(&size,
-                                                                 var_name16,
-                                                                 &guid));
-               }
-               if (ret != EFI_SUCCESS) {
-                       free(var_name16);
-                       return CMD_RET_FAILURE;
-               }
-
-               if (memcmp(var_name16, L"Boot", 8))
-                       continue;
-
-               for (id = 0, i = 0; i < 4; i++) {
-                       digit = u16_tohex(var_name16[4 + i]);
-                       if (digit < 0)
-                               break;
-                       id = (id << 4) + digit;
-               }
-               if (i == 4 && !var_name16[8])
-                       show_efi_boot_opt(var_name16);
-       }
-
-       free(var_name16);
-
-       return CMD_RET_SUCCESS;
-}
-
-/**
- * show_efi_boot_order() - show order of UEFI load options
- *
- * Return:     CMD_RET_SUCCESS on success, CMD_RET_RET_FAILURE on failure
- *
- * Show order of UEFI load options defined by BootOrder variable.
- */
-static int show_efi_boot_order(void)
-{
-       u16 *bootorder;
-       efi_uintn_t size;
-       int num, i;
-       u16 var_name16[9];
-       void *data;
-       struct efi_load_option lo;
-       efi_status_t ret;
-
-       size = 0;
-       ret = EFI_CALL(efi_get_variable(L"BootOrder", &efi_global_variable_guid,
-                                       NULL, &size, NULL));
-       if (ret != EFI_BUFFER_TOO_SMALL) {
-               if (ret == EFI_NOT_FOUND) {
-                       printf("BootOrder not defined\n");
-                       return CMD_RET_SUCCESS;
-               } else {
-                       return CMD_RET_FAILURE;
-               }
-       }
-       bootorder = malloc(size);
-       if (!bootorder) {
-               printf("ERROR: Out of memory\n");
-               return CMD_RET_FAILURE;
-       }
-       ret = EFI_CALL(efi_get_variable(L"BootOrder", &efi_global_variable_guid,
-                                       NULL, &size, bootorder));
-       if (ret != EFI_SUCCESS) {
-               ret = CMD_RET_FAILURE;
-               goto out;
-       }
-
-       num = size / sizeof(u16);
-       for (i = 0; i < num; i++) {
-               efi_create_indexed_name(var_name16, sizeof(var_name16),
-                                       "Boot", bootorder[i]);
-
-               size = 0;
-               ret = EFI_CALL(efi_get_variable(var_name16,
-                                               &efi_global_variable_guid, NULL,
-                                               &size, NULL));
-               if (ret != EFI_BUFFER_TOO_SMALL) {
-                       printf("%2d: %ls: (not defined)\n", i + 1, var_name16);
-                       continue;
-               }
-
-               data = malloc(size);
-               if (!data) {
-                       ret = CMD_RET_FAILURE;
-                       goto out;
-               }
-               ret = EFI_CALL(efi_get_variable(var_name16,
-                                               &efi_global_variable_guid, NULL,
-                                               &size, data));
-               if (ret != EFI_SUCCESS) {
-                       free(data);
-                       ret = CMD_RET_FAILURE;
-                       goto out;
-               }
-
-               ret = efi_deserialize_load_option(&lo, data, &size);
-               if (ret != EFI_SUCCESS) {
-                       printf("%ls: invalid load option\n", var_name16);
-                       ret = CMD_RET_FAILURE;
-                       goto out;
-               }
-
-               printf("%2d: %ls: %ls\n", i + 1, var_name16, lo.label);
-
-               free(data);
-       }
-out:
-       free(bootorder);
-
-       return ret;
-}
-
-/**
- * do_efi_boot_next() - manage UEFI BootNext variable
- *
- * @cmdtp:     Command table
- * @flag:      Command flag
- * @argc:      Number of arguments
- * @argv:      Argument array
- * Return:     CMD_RET_SUCCESS on success,
- *             CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure
- *
- * Implement efidebug "boot next" sub-command.
- * Set BootNext variable.
- *
- *     efidebug boot next <id>
- */
-static int do_efi_boot_next(struct cmd_tbl *cmdtp, int flag,
-                           int argc, char *const argv[])
-{
-       u16 bootnext;
-       efi_uintn_t size;
-       char *endp;
-       efi_guid_t guid;
-       efi_status_t ret;
-       int r = CMD_RET_SUCCESS;
-
-       if (argc != 2)
-               return CMD_RET_USAGE;
-
-       bootnext = (u16)hextoul(argv[1], &endp);
-       if (*endp) {
-               printf("invalid value: %s\n", argv[1]);
-               r = CMD_RET_FAILURE;
-               goto out;
-       }
-
-       guid = efi_global_variable_guid;
-       size = sizeof(u16);
-       ret = efi_set_variable_int(L"BootNext", &guid,
-                                       EFI_VARIABLE_NON_VOLATILE |
-                                       EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                                       EFI_VARIABLE_RUNTIME_ACCESS,
-                                       size, &bootnext, false);
-       if (ret != EFI_SUCCESS) {
-               printf("Cannot set BootNext\n");
-               r = CMD_RET_FAILURE;
-       }
-out:
-       return r;
-}
-
-/**
- * do_efi_boot_order() - manage UEFI BootOrder variable
- *
- * @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 "boot order" sub-command.
- * Show order of UEFI load options, or change it in BootOrder variable.
- *
- *     efidebug boot order [<id> ...]
- */
-static int do_efi_boot_order(struct cmd_tbl *cmdtp, int flag,
-                            int argc, char *const argv[])
-{
-       u16 *bootorder = NULL;
-       efi_uintn_t size;
-       int id, i;
-       char *endp;
-       efi_guid_t guid;
-       efi_status_t ret;
-       int r = CMD_RET_SUCCESS;
-
-       if (argc == 1)
-               return show_efi_boot_order();
-
-       argc--;
-       argv++;
-
-       size = argc * sizeof(u16);
-       bootorder = malloc(size);
-       if (!bootorder)
-               return CMD_RET_FAILURE;
-
-       for (i = 0; i < argc; i++) {
-               id = (int)hextoul(argv[i], &endp);
-               if (*endp != '\0' || id > 0xffff) {
-                       printf("invalid value: %s\n", argv[i]);
-                       r = CMD_RET_FAILURE;
-                       goto out;
-               }
-
-               bootorder[i] = (u16)id;
-       }
-
-       guid = efi_global_variable_guid;
-       ret = efi_set_variable_int(L"BootOrder", &guid,
-                                       EFI_VARIABLE_NON_VOLATILE |
-                                       EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                                       EFI_VARIABLE_RUNTIME_ACCESS,
-                                       size, bootorder, true);
-       if (ret != EFI_SUCCESS) {
-               printf("Cannot set BootOrder\n");
-               r = CMD_RET_FAILURE;
-       }
-out:
-       free(bootorder);
-
-       return r;
-}
-
-static struct cmd_tbl cmd_efidebug_boot_sub[] = {
-       U_BOOT_CMD_MKENT(add, CONFIG_SYS_MAXARGS, 1, do_efi_boot_add, "", ""),
-       U_BOOT_CMD_MKENT(rm, CONFIG_SYS_MAXARGS, 1, do_efi_boot_rm, "", ""),
-       U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS, 1, do_efi_boot_dump, "", ""),
-       U_BOOT_CMD_MKENT(next, CONFIG_SYS_MAXARGS, 1, do_efi_boot_next, "", ""),
-       U_BOOT_CMD_MKENT(order, CONFIG_SYS_MAXARGS, 1, do_efi_boot_order,
-                        "", ""),
-};
-
-/**
- * do_efi_boot_opt() - manage UEFI load options
- *
- * @cmdtp:     Command table
- * @flag:      Command flag
- * @argc:      Number of arguments
- * @argv:      Argument array
- * Return:     CMD_RET_SUCCESS on success,
- *             CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure
- *
- * Implement efidebug "boot" sub-command.
- */
-static int do_efi_boot_opt(struct cmd_tbl *cmdtp, int flag,
-                          int argc, char *const argv[])
-{
-       struct cmd_tbl *cp;
-
-       if (argc < 2)
-               return CMD_RET_USAGE;
-
-       argc--; argv++;
-
-       cp = find_cmd_tbl(argv[0], cmd_efidebug_boot_sub,
-                         ARRAY_SIZE(cmd_efidebug_boot_sub));
-       if (!cp)
-               return CMD_RET_USAGE;
-
-       return cp->cmd(cmdtp, flag, argc, argv);
-}
-
 /**
  * do_efi_test_bootmgr() - run simple bootmgr for test
  *
@@ -1656,7 +1012,6 @@ static int do_efi_query_info(struct cmd_tbl *cmdtp, int 
flag,
 }
 
 static struct cmd_tbl cmd_efidebug_sub[] = {
-       U_BOOT_CMD_MKENT(boot, CONFIG_SYS_MAXARGS, 1, do_efi_boot_opt, "", ""),
 #ifdef CONFIG_EFI_HAVE_CAPSULE_SUPPORT
        U_BOOT_CMD_MKENT(capsule, CONFIG_SYS_MAXARGS, 1, do_efi_capsule,
                         "", ""),
@@ -1723,21 +1078,6 @@ static int do_efidebug(struct cmd_tbl *cmdtp, int flag,
 static char efidebug_help_text[] =
        "  - UEFI Shell-like interface to configure UEFI environment\n"
        "\n"
-       "efidebug boot add "
-       "-b <bootid> <label> <interface> <devnum>[:<part>] <file path> "
-       "-i <interface> <devnum>[:<part>] <initrd file path> "
-       "-s '<optional data>'\n"
-       "  - set UEFI BootXXXX variable\n"
-       "    <load options> will be passed to UEFI application\n"
-       "efidebug boot rm <bootid#1> [<bootid#2> [<bootid#3> [...]]]\n"
-       "  - delete UEFI BootXXXX variables\n"
-       "efidebug boot dump\n"
-       "  - dump all UEFI BootXXXX variables\n"
-       "efidebug boot next <bootid>\n"
-       "  - set UEFI BootNext variable\n"
-       "efidebug boot order [<bootid#1> [<bootid#2> [<bootid#3> [...]]]]\n"
-       "  - set/show UEFI boot order\n"
-       "\n"
 #ifdef CONFIG_EFI_HAVE_CAPSULE_SUPPORT
        "efidebug capsule update [-v] <capsule address>\n"
        "  - process a capsule\n"
diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst
index 43fb10f797..205755446f 100644
--- a/doc/develop/uefi/uefi.rst
+++ b/doc/develop/uefi/uefi.rst
@@ -178,13 +178,13 @@ Now in U-Boot install the keys on your board::
 
 Set up boot parameters on your board::
 
-    efidebug boot add -b 1 HELLO mmc 0:1 /helloworld.efi.signed ""
+    bootefi boot add -b 1 HELLO mmc 0:1 /helloworld.efi.signed ""
 
 Since kernel 5.7 there's an alternative way of loading an initrd using
 LoadFile2 protocol if CONFIG_EFI_LOAD_FILE2_INITRD is enabled.
 The initrd path can be specified with::
 
-    efidebug boot add -b ABE0 'kernel' mmc 0:1 Image -i mmc 0:1 initrd
+    bootefi boot add -b ABE0 'kernel' mmc 0:1 Image -i mmc 0:1 initrd
 
 Now your board can run the signed image via the boot manager (see below).
 You can also try this sequence by running Pytest, test_efi_secboot,
diff --git a/include/efi_loader.h b/include/efi_loader.h
index f4860e87fc..d369b112c3 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -798,14 +798,12 @@ efi_status_t __efi_runtime EFIAPI efi_get_time(
 
 efi_status_t __efi_runtime EFIAPI efi_set_time(struct efi_time *time);
 
-#ifdef CONFIG_CMD_BOOTEFI_SELFTEST
 /*
  * Entry point for the tests of the EFI API.
  * It is called by 'bootefi selftest'
  */
 efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
                                 struct efi_system_table *systab);
-#endif
 
 efi_status_t EFIAPI efi_get_variable(u16 *variable_name,
                                     const efi_guid_t *vendor, u32 *attributes,
diff --git a/lib/efi_selftest/efi_selftest_tcg2.c 
b/lib/efi_selftest/efi_selftest_tcg2.c
index c5b0b7dd02..eb3bcafd1f 100644
--- a/lib/efi_selftest/efi_selftest_tcg2.c
+++ b/lib/efi_selftest/efi_selftest_tcg2.c
@@ -70,7 +70,7 @@ static struct efi_runtime_services *runtime;
                      EFI_VARIABLE_BOOTSERVICE_ACCESS | \
                      EFI_VARIABLE_RUNTIME_ACCESS)
 
-/* "efidebug boot add -b 1000 test1000 virtio 0:1 /EFI/debian/grubaa64.efi" */
+/* "bootefi add -b 1000 test1000 virtio 0:1 /EFI/debian/grubaa64.efi" */
 static const u8 boot_1000[] = {
 0x01, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
 0x74, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x04, 0x14, 0x00, 0xb9, 0x73,
@@ -87,7 +87,7 @@ static const u8 boot_1000[] = {
 0x00, 0x2e, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x7f,
 0xff, 0x04, 0x00 };
 
-/* "efidebug boot add -b 1001 test1001 virtio 0:1 /EFI/debian/grubaa64.efi" */
+/* "bootefi add -b 1001 test1001 virtio 0:1 /EFI/debian/grubaa64.efi" */
 static const u8 boot_1001[] = {
 0x01, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
 0x74, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x04, 0x14, 0x00, 0xb9, 0x73,
@@ -104,7 +104,7 @@ static const u8 boot_1001[] = {
 0x00, 0x2e, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x7f,
 0xff, 0x04, 0x00 };
 
-/* "efidebug boot add -b 1002 test1002 virtio 0:1 /EFI/debian/grubaa64.efi" */
+/* "bootefi add -b 1002 test1002 virtio 0:1 /EFI/debian/grubaa64.efi" */
 static const u8 boot_1002[] = {
 0x01, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00,
 0x74, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x04, 0x14, 0x00, 0xb9, 0x73,
@@ -121,7 +121,7 @@ static const u8 boot_1002[] = {
 0x00, 0x2e, 0x00, 0x65, 0x00, 0x66, 0x00, 0x69, 0x00, 0x00, 0x00, 0x7f,
 0xff, 0x04, 0x00};
 
-/* "efidebug boot order 1002 1000 1001" */
+/* "bootefi order 1002 1000 1001" */
 static u8 boot_order[] = {0x02, 0x10, 0x00, 0x10, 0x01, 0x10};
 
 static void *orig_smbios_table;
diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py 
b/test/py/tests/test_efi_capsule/test_capsule_firmware.py
index 9eeaae27d6..ac54b14aa6 100644
--- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py
+++ b/test/py/tests/test_efi_capsule/test_capsule_firmware.py
@@ -39,8 +39,8 @@ class TestEfiCapsuleFirmwareFit(object):
         with u_boot_console.log.section('Test Case 1-a, before reboot'):
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
-                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
-                'efidebug boot order 1',
+                'bootefi add -b 1 TEST host 0:1 /helloworld.efi -s ""',
+                'bootefi order 1',
                 'env set -e OsIndications',
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 
0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
@@ -114,8 +114,8 @@ class TestEfiCapsuleFirmwareFit(object):
         with u_boot_console.log.section('Test Case 2-a, before reboot'):
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
-                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
-                'efidebug boot order 1',
+                'bootefi add -b 1 TEST host 0:1 /helloworld.efi -s ""',
+                'bootefi order 1',
                 'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 
0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
@@ -188,8 +188,8 @@ class TestEfiCapsuleFirmwareFit(object):
         with u_boot_console.log.section('Test Case 3-a, before reboot'):
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
-                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
-                'efidebug boot order 1',
+                'bootefi add -b 1 TEST host 0:1 /helloworld.efi -s ""',
+                'bootefi order 1',
                 'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 
0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
diff --git a/test/py/tests/test_efi_secboot/test_signed.py 
b/test/py/tests/test_efi_secboot/test_signed.py
index 0aee34479f..4af4d90d4c 100644
--- a/test/py/tests/test_efi_secboot/test_signed.py
+++ b/test/py/tests/test_efi_secboot/test_signed.py
@@ -28,16 +28,16 @@ class TestEfiSignedImage(object):
             # Test Case 1a, run signed image if no PK
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
-                'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed 
-s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s 
""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
         with u_boot_console.log.section('Test Case 1b'):
             # Test Case 1b, run unsigned image if no PK
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 2',
+                'bootefi add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""',
+                'bootefi next 2',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -58,14 +58,14 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed 
-s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s 
""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert('\'HELLO1\' failed' in ''.join(output))
             assert('efi_start_image() returned: 26' in ''.join(output))
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 2',
+                'bootefi add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""',
+                'bootefi next 2',
                 'efidebug test bootmgr'])
             assert '\'HELLO2\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -77,12 +77,12 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 2',
+                'bootefi next 2',
                 'efidebug test bootmgr'])
             assert '\'HELLO2\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -104,8 +104,8 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed 
-s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -117,7 +117,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -142,8 +142,8 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed 
-s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -169,8 +169,8 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 
/helloworld.efi.signed_2sigs -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs 
-s ""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -181,7 +181,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize db'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -193,7 +193,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -204,7 +204,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize dbx'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -227,8 +227,8 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed 
-s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -239,7 +239,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -253,7 +253,7 @@ class TestEfiSignedImage(object):
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx'])
             assert 'Failed to set EFI variable' not in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
diff --git a/test/py/tests/test_efi_secboot/test_signed_intca.py 
b/test/py/tests/test_efi_secboot/test_signed_intca.py
index d8d599d22f..b2eb6b6824 100644
--- a/test/py/tests/test_efi_secboot/test_signed_intca.py
+++ b/test/py/tests/test_efi_secboot/test_signed_intca.py
@@ -39,8 +39,8 @@ class TestEfiSignedImageIntca(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO_a host 0:1 
/helloworld.efi.signed_a -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO_a host 0:1 /helloworld.efi.signed_a -s 
""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO_a\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -48,8 +48,8 @@ class TestEfiSignedImageIntca(object):
         with u_boot_console.log.section('Test Case 1b'):
             # Test Case 1b, signed and authenticated by root CA
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 2 HELLO_ab host 0:1 
/helloworld.efi.signed_ab -s ""',
-                'efidebug boot next 2',
+                'bootefi add -b 2 HELLO_ab host 0:1 /helloworld.efi.signed_ab 
-s ""',
+                'bootefi next 2',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -70,8 +70,8 @@ class TestEfiSignedImageIntca(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO_abc host 0:1 
/helloworld.efi.signed_abc -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO_abc host 0:1 
/helloworld.efi.signed_abc -s ""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO_abc\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -81,7 +81,7 @@ class TestEfiSignedImageIntca(object):
             output = u_boot_console.run_command_list([
                 'fatload host 0:1 4000000 db_b.auth',
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db',
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO_abc\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
@@ -91,7 +91,7 @@ class TestEfiSignedImageIntca(object):
             output = u_boot_console.run_command_list([
                 'fatload host 0:1 4000000 db_c.auth',
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db',
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -116,8 +116,8 @@ class TestEfiSignedImageIntca(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO_abc host 0:1 
/helloworld.efi.signed_abc -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO_abc host 0:1 
/helloworld.efi.signed_abc -s ""',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'Hello, world!' in ''.join(output)
             # Or,
@@ -129,7 +129,7 @@ class TestEfiSignedImageIntca(object):
             output = u_boot_console.run_command_list([
                 'fatload host 0:1 4000000 dbx_c.auth',
                 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx',
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert '\'HELLO_abc\' failed' in ''.join(output)
             assert 'efi_start_image() returned: 26' in ''.join(output)
diff --git a/test/py/tests/test_efi_secboot/test_unsigned.py 
b/test/py/tests/test_efi_secboot/test_unsigned.py
index df63f0df08..8964595d85 100644
--- a/test/py/tests/test_efi_secboot/test_unsigned.py
+++ b/test/py/tests/test_efi_secboot/test_unsigned.py
@@ -35,12 +35,12 @@ class TestEfiUnsignedImage(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'efi_start_image() returned: 26' in ''.join(output)
             assert 'Hello, world!' not in ''.join(output)
@@ -64,8 +64,8 @@ class TestEfiUnsignedImage(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert 'Hello, world!' in ''.join(output)
 
@@ -88,12 +88,12 @@ class TestEfiUnsignedImage(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'efi_start_image() returned: 26' in ''.join(output)
             assert 'Hello, world!' not in ''.join(output)
@@ -106,12 +106,12 @@ class TestEfiUnsignedImage(object):
             assert 'Failed to set EFI variable' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
-                'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
-                'efidebug boot next 1',
+                'bootefi add -b 1 HELLO host 0:1 /helloworld.efi -s ""',
+                'bootefi next 1',
                 'bootefi bootmgr'])
             assert '\'HELLO\' failed' in ''.join(output)
             output = u_boot_console.run_command_list([
-                'efidebug boot next 1',
+                'bootefi next 1',
                 'efidebug test bootmgr'])
             assert 'efi_start_image() returned: 26' in ''.join(output)
             assert 'Hello, world!' not in ''.join(output)
-- 
2.33.1

Reply via email to