detect and handle emmc-backed xbl partitions when switching slots

This commit is contained in:
Richard Acayan
2022-08-29 20:54:35 -04:00
parent c1f24adfb6
commit 17ee1b8e65
3 changed files with 28 additions and 2 deletions

View File

@@ -602,13 +602,16 @@ int set_active_boot_slot(unsigned slot)
uint32_t i;
int rc = -1;
map<string, vector<string> >::iterator map_iter;
bool ismmc;
if (boot_control_check_slot_sanity(slot)) {
fprintf(stderr, "%s: Bad arguments\n", __func__);
goto error;
}
if (ufs_bsg_dev_open() < 0) {
ismmc = gpt_utils_is_partition_backed_by_emmc(PTN_XBL AB_SLOT_A_SUFFIX);
if (!ismmc && ufs_bsg_dev_open() < 0) {
goto error;
}
@@ -618,7 +621,7 @@ int set_active_boot_slot(unsigned slot)
//in the list.
for (i = 0; i < ARRAY_SIZE(ptn_list); i++) {
//XBL is handled differrently for ufs devices so ignore it
if (!strncmp(ptn_list[i], PTN_XBL, strlen(PTN_XBL)))
if (!ismmc && !strncmp(ptn_list[i], PTN_XBL, strlen(PTN_XBL)))
continue;
//The partition list will be the list of _a partitions
string cur_ptn = ptn_list[i];
@@ -650,6 +653,10 @@ int set_active_boot_slot(unsigned slot)
}
}
// EMMC doesn't need attributes to be set.
if (ismmc)
return 0;
if (!strncmp(slot_suffix_arr[slot], AB_SLOT_A_SUFFIX,
strlen(AB_SLOT_A_SUFFIX))) {
//Set xbl_a as the boot lun