summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorDmitry Rokosov <[email protected]>2024-10-17 17:12:10 +0300
committerMattijs Korpershoek <[email protected]>2024-10-24 09:45:55 +0200
commita995084beb6682748002878ccb4b8c4de9fc0136 (patch)
tree2d176bf5fb9d4b4429aca4c60da738b1a365ddbc /cmd
parentb1bc9a2fc93da8ed25dfc4078e76220ac26eb6b0 (diff)
cmd: bcb: introduce 'ab_dump' command to print BCB block content
It's really helpful to have the ability to dump BCB block for debugging A/B logic on the board supported this partition schema. Command 'bcb ab_dump' prints all fields of bootloader_control struct including slot_metadata for all presented slots. Output example: ===== > board# bcb ab_dump ubi 0#misc > Read 512 bytes from volume misc to 000000000bf07580 > Read 512 bytes from volume misc to 000000000bf42f40 > Bootloader Control: [misc] > Active Slot: _a > Magic Number: 0x42414342 > Version: 1 > Number of Slots: 2 > Recovery Tries Remaining: 0 > CRC: 0x2c8b50bc (Valid) > > Slot[0] Metadata: > - Priority: 15 > - Tries Remaining: 0 > - Successful Boot: 1 > - Verity Corrupted: 0 > > Slot[1] Metadata: > - Priority: 14 > - Tries Remaining: 7 > - Successful Boot: 0 > - Verity Corrupted: 0 ==== The ab_dump command allows you to display ABC data directly on the U-Boot console. During an A/B test execution, this test verifies the accuracy of each field within the ABC data. Signed-off-by: Dmitry Rokosov <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> Tested-by: Mattijs Korpershoek <[email protected]> # vim3_android Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mattijs Korpershoek <[email protected]>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/bcb.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/cmd/bcb.c b/cmd/bcb.c
index b33c046af03..16eabfe00f5 100644
--- a/cmd/bcb.c
+++ b/cmd/bcb.c
@@ -419,6 +419,32 @@ __maybe_unused static int do_bcb_ab_select(struct cmd_tbl *cmdtp,
return CMD_RET_SUCCESS;
}
+__maybe_unused static int do_bcb_ab_dump(struct cmd_tbl *cmdtp,
+ int flag, int argc,
+ char *const argv[])
+{
+ int ret;
+ struct blk_desc *dev_desc;
+ struct disk_partition part_info;
+
+ if (argc < 3)
+ return CMD_RET_USAGE;
+
+ if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2],
+ &dev_desc, &part_info,
+ false) < 0) {
+ return CMD_RET_FAILURE;
+ }
+
+ ret = ab_dump_abc(dev_desc, &part_info);
+ if (ret < 0) {
+ printf("Cannot dump ABC data, error %d.\n", ret);
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
U_BOOT_LONGHELP(bcb,
"load <interface> <dev> <part> - load BCB from <interface> <dev>:<part>\n"
"load <dev> <part> - load BCB from mmc <dev>:<part>\n"
@@ -444,6 +470,10 @@ U_BOOT_LONGHELP(bcb,
" - If '--no-dec' is set, the number of tries remaining will not\n"
" decremented for the selected boot slot\n"
"\n"
+ "bcb ab_dump -\n"
+ " Dump boot_control information from specific partition.\n"
+ " <interface> <dev[:part|#part_name]>\n"
+ "\n"
#endif
"Legend:\n"
"<interface> - storage device interface (virtio, mmc, etc)\n"
@@ -468,5 +498,6 @@ U_BOOT_CMD_WITH_SUBCMDS(bcb,
U_BOOT_SUBCMD_MKENT(store, 1, 1, do_bcb_store),
#if IS_ENABLED(CONFIG_ANDROID_AB)
U_BOOT_SUBCMD_MKENT(ab_select, 5, 1, do_bcb_ab_select),
+ U_BOOT_SUBCMD_MKENT(ab_dump, 3, 1, do_bcb_ab_dump),
#endif
);