bootcount: Add bootcount command

Add a command to manipulate the bootcounter. This is useful if you can
run device recovery from inside U-Boot and need to reset the bootcounter
after executing that process as part of altbootcmd.

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
lime2-spi
Alex Kiernan 6 years ago committed by Tom Rini
parent c4d7b7a6b8
commit b11ed7d602
  1. 7
      cmd/Kconfig
  2. 1
      cmd/Makefile
  3. 61
      cmd/bootcount.c

@ -1229,6 +1229,13 @@ config CMD_BMP
the image into RAM, then using this command to look at it or display the image into RAM, then using this command to look at it or display
it. it.
config CMD_BOOTCOUNT
bool "bootcount"
depends on BOOTCOUNT_LIMIT
help
Enable the bootcount command, which allows interrogation and
reset of the bootcounter.
config CMD_BSP config CMD_BSP
bool "Enable board-specific commands" bool "Enable board-specific commands"
help help

@ -22,6 +22,7 @@ obj-$(CONFIG_CMD_BEDBUG) += bedbug.o
obj-$(CONFIG_CMD_BINOP) += binop.o obj-$(CONFIG_CMD_BINOP) += binop.o
obj-$(CONFIG_CMD_BLOCK_CACHE) += blkcache.o obj-$(CONFIG_CMD_BLOCK_CACHE) += blkcache.o
obj-$(CONFIG_CMD_BMP) += bmp.o obj-$(CONFIG_CMD_BMP) += bmp.o
obj-$(CONFIG_CMD_BOOTCOUNT) += bootcount.o
obj-$(CONFIG_CMD_BOOTEFI) += bootefi.o obj-$(CONFIG_CMD_BOOTEFI) += bootefi.o
obj-$(CONFIG_CMD_BOOTMENU) += bootmenu.o obj-$(CONFIG_CMD_BOOTMENU) += bootmenu.o
obj-$(CONFIG_CMD_BOOTSTAGE) += bootstage.o obj-$(CONFIG_CMD_BOOTSTAGE) += bootstage.o

@ -0,0 +1,61 @@
// SPDX-License-Identifier: GPL-2.0+
#include <common.h>
#include <command.h>
#include <bootcount.h>
static int do_bootcount_print(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
printf("%lu\n", bootcount_load());
return CMD_RET_SUCCESS;
}
static int do_bootcount_reset(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
/*
* note that we're explicitly not resetting the environment
* variable, so you still have the old bootcounter available
*/
bootcount_store(0);
return CMD_RET_SUCCESS;
}
static cmd_tbl_t bootcount_sub[] = {
U_BOOT_CMD_MKENT(print, 1, 1, do_bootcount_print, "", ""),
U_BOOT_CMD_MKENT(reset, 1, 1, do_bootcount_reset, "", ""),
};
static int do_bootcount(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
cmd_tbl_t *cp;
if (argc < 2)
return CMD_RET_USAGE;
/* drop initial "bootcount" arg */
argc--;
argv++;
cp = find_cmd_tbl(argv[0], bootcount_sub, ARRAY_SIZE(bootcount_sub));
if (cp)
return cp->cmd(cmdtp, flag, argc, argv);
return CMD_RET_USAGE;
}
#if CONFIG_IS_ENABLED(SYS_LONGHELP)
static char bootcount_help_text[] =
"print - print current bootcounter\n"
"reset - reset the bootcounter"
;
#endif
U_BOOT_CMD(bootcount, 2, 1, do_bootcount,
"bootcount",
#if CONFIG_IS_ENABLED(SYS_LONGHELP)
bootcount_help_text
#endif
);
Loading…
Cancel
Save