On Sat, Jan 15, 2022 at 01:49:07AM +0100, Heinrich Schuchardt wrote:
> The efidebug command was conceived for testing purposes.

Well, I initially implemented the command as an alternative of
"EFI shell" as the shell was not able to run on EFI U-Boot at that time.

> The manipulation of boot options does better fit to the bootefi command
> that is used to invoke the boot manager.

I believe that it would be best to have those two features
in separate commands(/applications) since the bootefi/bootmgr be focused
on booting EFI images while efidebug/EFI shell provides a kind of
user interfaces for manipulating the system.

*If* you dare to move the code to bootefi/bootmgr, I'd ask you to honor
and add my copyright to the file as "efidebug boot" feature is a core part
of efidebug. Or export sub-command functions from efidebug.c and import
them in bootefi.c.

-Takahiro Akashi


> 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