summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-07-31 00:52:37 +0300
committerTom Rini <trini@konsulko.com>2022-08-12 15:17:11 +0300
commit5fe76d460d857b00d582d7cd6cea9ac740ea912b (patch)
tree32ecaafa1d653e275683cfacac41dd2bb57efca1 /cmd
parent11361c596585bff7530e993e2d6c88c2766c0913 (diff)
downloadu-boot-5fe76d460d857b00d582d7cd6cea9ac740ea912b.tar.xz
vbe: Add a new vbe command
Add a command to look at VBE methods and their status. Provide a test for all of this as well. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/Kconfig10
-rw-r--r--cmd/Makefile1
-rw-r--r--cmd/vbe.c87
3 files changed, 98 insertions, 0 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 7d19706a8e..211ebe9c87 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -330,6 +330,16 @@ config BOOTM_RTEMS
help
Support booting RTEMS images via the bootm command.
+config CMD_VBE
+ bool "vbe - Verified Boot for Embedded"
+ depends on BOOTMETH_VBE
+ default y
+ help
+ Provides various subcommands related to VBE, such as listing the
+ available methods, looking at the state and changing which method
+ is used to boot. Updating the parameters is not currently
+ supported.
+
config BOOTM_VXWORKS
bool "Support booting VxWorks OS images"
depends on CMD_BOOTM
diff --git a/cmd/Makefile b/cmd/Makefile
index 5e43a1e022..6e87522b62 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -179,6 +179,7 @@ obj-$(CONFIG_CMD_FS_UUID) += fs_uuid.o
obj-$(CONFIG_CMD_USB_MASS_STORAGE) += usb_mass_storage.o
obj-$(CONFIG_CMD_USB_SDP) += usb_gadget_sdp.o
obj-$(CONFIG_CMD_THOR_DOWNLOAD) += thordown.o
+obj-$(CONFIG_CMD_VBE) += vbe.o
obj-$(CONFIG_CMD_XIMG) += ximg.o
obj-$(CONFIG_CMD_YAFFS2) += yaffs2.o
obj-$(CONFIG_CMD_SPL) += spl.o
diff --git a/cmd/vbe.c b/cmd/vbe.c
new file mode 100644
index 0000000000..a5737edc04
--- /dev/null
+++ b/cmd/vbe.c
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Verified Boot for Embedded (VBE) command
+ *
+ * Copyright 2022 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <common.h>
+#include <bootmeth.h>
+#include <bootstd.h>
+#include <command.h>
+#include <vbe.h>
+
+static int do_vbe_list(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ vbe_list();
+
+ return 0;
+}
+
+static int do_vbe_select(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct bootstd_priv *std;
+ struct udevice *dev;
+ int ret;
+
+ ret = bootstd_get_priv(&std);
+ if (ret)
+ return CMD_RET_FAILURE;
+ if (argc < 2) {
+ std->vbe_bootmeth = NULL;
+ return 0;
+ }
+ if (vbe_find_by_any(argv[1], &dev))
+ return CMD_RET_FAILURE;
+
+ std->vbe_bootmeth = dev;
+
+ return 0;
+}
+
+static int do_vbe_info(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct bootstd_priv *std;
+ char buf[256];
+ int ret, len;
+
+ ret = bootstd_get_priv(&std);
+ if (ret)
+ return CMD_RET_FAILURE;
+ if (!std->vbe_bootmeth) {
+ printf("No VBE bootmeth selected\n");
+ return CMD_RET_FAILURE;
+ }
+ ret = bootmeth_get_state_desc(std->vbe_bootmeth, buf, sizeof(buf));
+ if (ret) {
+ printf("Failed (err=%d)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+ len = strnlen(buf, sizeof(buf));
+ if (len >= sizeof(buf)) {
+ printf("Buffer overflow\n");
+ return CMD_RET_FAILURE;
+ }
+
+ puts(buf);
+ if (buf[len] != '\n')
+ putc('\n');
+
+ return 0;
+}
+
+#ifdef CONFIG_SYS_LONGHELP
+static char vbe_help_text[] =
+ "list - list VBE bootmeths\n"
+ "vbe select - select a VBE bootmeth by sequence or name\n"
+ "vbe info - show information about a VBE bootmeth";
+#endif
+
+U_BOOT_CMD_WITH_SUBCMDS(vbe, "Verified Boot for Embedded", vbe_help_text,
+ U_BOOT_SUBCMD_MKENT(list, 1, 1, do_vbe_list),
+ U_BOOT_SUBCMD_MKENT(select, 2, 1, do_vbe_select),
+ U_BOOT_SUBCMD_MKENT(info, 2, 1, do_vbe_info));