[RFC 1/1] efi_loader: rename 'efidebug boot' 'bootefi'

AKASHI Takahiro takahiro.akashi at linaro.org
Mon Jan 17 02:16:51 CET 2022


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.schuchardt at 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
> 


More information about the U-Boot mailing list