cmd: gpt: add subcommand repair

Adds a sub-command repair to the command gpt
that allow to repair a corrupted gpt table. If
the both gpt table (primary and backup) are
valid, then the command does nothing.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
This commit is contained in:
Philippe Reynes 2022-04-22 17:46:49 +02:00 committed by Tom Rini
parent 5c783b54d6
commit 26f404c766

View File

@ -586,6 +586,15 @@ err:
return errno; return errno;
} }
static int gpt_repair(struct blk_desc *blk_dev_desc)
{
int ret = 0;
ret = gpt_repair_headers(blk_dev_desc);
return ret;
}
static int gpt_default(struct blk_desc *blk_dev_desc, const char *str_part) static int gpt_default(struct blk_desc *blk_dev_desc, const char *str_part)
{ {
int ret; int ret;
@ -997,7 +1006,10 @@ static int do_gpt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
return CMD_RET_FAILURE; return CMD_RET_FAILURE;
} }
if ((strcmp(argv[1], "write") == 0) && (argc == 5)) { if (strcmp(argv[1], "repair") == 0) {
printf("Repairing GPT: ");
ret = gpt_repair(blk_dev_desc);
} else if ((strcmp(argv[1], "write") == 0) && (argc == 5)) {
printf("Writing GPT: "); printf("Writing GPT: ");
ret = gpt_default(blk_dev_desc, argv[4]); ret = gpt_default(blk_dev_desc, argv[4]);
} else if ((strcmp(argv[1], "verify") == 0)) { } else if ((strcmp(argv[1], "verify") == 0)) {
@ -1036,6 +1048,8 @@ U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt,
" Restore or verify GPT information on a device connected\n" " Restore or verify GPT information on a device connected\n"
" to interface\n" " to interface\n"
" Example usage:\n" " Example usage:\n"
" gpt repair mmc 0\n"
" - repair the GPT on the device\n"
" gpt write mmc 0 $partitions\n" " gpt write mmc 0 $partitions\n"
" - write the GPT to device\n" " - write the GPT to device\n"
" gpt verify mmc 0 $partitions\n" " gpt verify mmc 0 $partitions\n"