android_ab: Add option to skip decrementing tries

It is is sometimes desired to be able to skip decrementing the number of
tries remaining in an Android A/B boot, and instead just check which
slot will be tried later. This can commonly be be the case for platforms
that want to A/B u-boot itself, but are required to boot from a FAT MBR
partition. In these cases, u-boot must do an early check that the MBR
points to the correct A/B boot partition, and if not rewrite the MBR to
point to the correct one and reboot. Decrementing the try count in this
case is not desired because it means that each u-boot might constantly
ping-pong overwriting the MBR and rebooting until all the retries are
used up.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
This commit is contained in:
Joshua Watt
2023-06-23 17:05:48 -05:00
committed by Tom Rini
parent 4837a1dba6
commit 22cdb3f0f1
3 changed files with 24 additions and 8 deletions

View File

@@ -181,7 +181,8 @@ static int ab_compare_slots(const struct slot_metadata *a,
return 0;
}
int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info)
int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info,
bool dec_tries)
{
struct bootloader_control *abc = NULL;
u32 crc32_le;
@@ -272,8 +273,10 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info)
log_err("ANDROID: Attempting slot %c, tries remaining %d\n",
BOOT_SLOT_NAME(slot),
abc->slot_info[slot].tries_remaining);
abc->slot_info[slot].tries_remaining--;
store_needed = true;
if (dec_tries) {
abc->slot_info[slot].tries_remaining--;
store_needed = true;
}
}
if (slot >= 0) {