xref: /openbmc/u-boot/cmd/bootcount.c (revision 3eceff64)
1*b11ed7d6SAlex Kiernan // SPDX-License-Identifier: GPL-2.0+
2*b11ed7d6SAlex Kiernan 
3*b11ed7d6SAlex Kiernan #include <common.h>
4*b11ed7d6SAlex Kiernan #include <command.h>
5*b11ed7d6SAlex Kiernan #include <bootcount.h>
6*b11ed7d6SAlex Kiernan 
do_bootcount_print(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])7*b11ed7d6SAlex Kiernan static int do_bootcount_print(cmd_tbl_t *cmdtp, int flag, int argc,
8*b11ed7d6SAlex Kiernan 			      char * const argv[])
9*b11ed7d6SAlex Kiernan {
10*b11ed7d6SAlex Kiernan 	printf("%lu\n", bootcount_load());
11*b11ed7d6SAlex Kiernan 	return CMD_RET_SUCCESS;
12*b11ed7d6SAlex Kiernan }
13*b11ed7d6SAlex Kiernan 
do_bootcount_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])14*b11ed7d6SAlex Kiernan static int do_bootcount_reset(cmd_tbl_t *cmdtp, int flag, int argc,
15*b11ed7d6SAlex Kiernan 			      char * const argv[])
16*b11ed7d6SAlex Kiernan {
17*b11ed7d6SAlex Kiernan 	/*
18*b11ed7d6SAlex Kiernan 	 * note that we're explicitly not resetting the environment
19*b11ed7d6SAlex Kiernan 	 * variable, so you still have the old bootcounter available
20*b11ed7d6SAlex Kiernan 	 */
21*b11ed7d6SAlex Kiernan 	bootcount_store(0);
22*b11ed7d6SAlex Kiernan 	return CMD_RET_SUCCESS;
23*b11ed7d6SAlex Kiernan }
24*b11ed7d6SAlex Kiernan 
25*b11ed7d6SAlex Kiernan static cmd_tbl_t bootcount_sub[] = {
26*b11ed7d6SAlex Kiernan 	U_BOOT_CMD_MKENT(print, 1, 1, do_bootcount_print, "", ""),
27*b11ed7d6SAlex Kiernan 	U_BOOT_CMD_MKENT(reset, 1, 1, do_bootcount_reset, "", ""),
28*b11ed7d6SAlex Kiernan };
29*b11ed7d6SAlex Kiernan 
do_bootcount(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])30*b11ed7d6SAlex Kiernan static int do_bootcount(cmd_tbl_t *cmdtp, int flag, int argc,
31*b11ed7d6SAlex Kiernan 			char * const argv[])
32*b11ed7d6SAlex Kiernan {
33*b11ed7d6SAlex Kiernan 	cmd_tbl_t *cp;
34*b11ed7d6SAlex Kiernan 
35*b11ed7d6SAlex Kiernan 	if (argc < 2)
36*b11ed7d6SAlex Kiernan 		return CMD_RET_USAGE;
37*b11ed7d6SAlex Kiernan 
38*b11ed7d6SAlex Kiernan 	/* drop initial "bootcount" arg */
39*b11ed7d6SAlex Kiernan 	argc--;
40*b11ed7d6SAlex Kiernan 	argv++;
41*b11ed7d6SAlex Kiernan 
42*b11ed7d6SAlex Kiernan 	cp = find_cmd_tbl(argv[0], bootcount_sub, ARRAY_SIZE(bootcount_sub));
43*b11ed7d6SAlex Kiernan 	if (cp)
44*b11ed7d6SAlex Kiernan 		return cp->cmd(cmdtp, flag, argc, argv);
45*b11ed7d6SAlex Kiernan 
46*b11ed7d6SAlex Kiernan 	return CMD_RET_USAGE;
47*b11ed7d6SAlex Kiernan }
48*b11ed7d6SAlex Kiernan 
49*b11ed7d6SAlex Kiernan #if CONFIG_IS_ENABLED(SYS_LONGHELP)
50*b11ed7d6SAlex Kiernan static char bootcount_help_text[] =
51*b11ed7d6SAlex Kiernan 	"print - print current bootcounter\n"
52*b11ed7d6SAlex Kiernan 	"reset - reset the bootcounter"
53*b11ed7d6SAlex Kiernan 	;
54*b11ed7d6SAlex Kiernan #endif
55*b11ed7d6SAlex Kiernan 
56*b11ed7d6SAlex Kiernan U_BOOT_CMD(bootcount, 2, 1, do_bootcount,
57*b11ed7d6SAlex Kiernan 	   "bootcount",
58*b11ed7d6SAlex Kiernan #if CONFIG_IS_ENABLED(SYS_LONGHELP)
59*b11ed7d6SAlex Kiernan 	   bootcount_help_text
60*b11ed7d6SAlex Kiernan #endif
61*b11ed7d6SAlex Kiernan );
62