[Feature][T8TSK-288][FOTA]when bl2 bad change to another slot
Only Configure: No
Affected branch: GSW3.0-No-Connman
Affected module: fota
Is it addected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No
Change-Id: I59dc660f829e62767df10bf43c750299b2dec08a
diff --git a/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c b/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
index aaee340..da1ebbe 100644
--- a/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
+++ b/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
@@ -320,6 +320,8 @@
uint32_t i = 0;
int32_t bld_loaded = 0;
int32_t ret = BL_OK;
+ int slot = 0; //jb.qi modify for ab_rollback start on 20231117
+ int ret_mark; //jb.qi modify for ab_rollback start on 20231117
struct bdev *dev = NULL;
uint8_t label[MAX_PART_NAME_LEN] = "bl2";
@@ -370,6 +372,12 @@
break;
} else {
LOGE("load img a fail\r\n");
+ /*jb.qi modify for ab_rollback start on 20231117*/
+ slot = get_current_slot();
+ LOGD("get_current_slot is %d\r\n", slot);
+ ret_mark = mark_slot_unsuccessful(slot);
+ LOGD("mark_slot_unsuccessful ret is %d\r\n", ret_mark);
+ /*jb.qi modify for ab_rollback end on 20231117*/
bl_flash_partition_deinit(boot_device_list[i], device_name);
}
}
diff --git a/src/bsp/hsm/src/middleware/bootloader/bootctrl/bootctrl_api.c b/src/bsp/hsm/src/middleware/bootloader/bootctrl/bootctrl_api.c
index 68d8dc6..c66daf7 100644
--- a/src/bsp/hsm/src/middleware/bootloader/bootctrl/bootctrl_api.c
+++ b/src/bsp/hsm/src/middleware/bootloader/bootctrl/bootctrl_api.c
@@ -403,6 +403,33 @@
return slotp->bl_ver;
}
+/*jb.qi modify for ab_rollback start on 20231117*/
+int mark_slot_unsuccessful(int slot)
+{
+ int ret = -1;
+ AvbABSlotData *slotp;
+ AvbABData metadata;
+
+ if (slot < 0 || slot >= SLOT_COUNT) {
+ return -1;
+ }
+
+ ret = read_write_partition_info(&metadata, READ_PARTITION);
+ if (ret < 0) {
+ return -1;
+ }
+
+ slotp = &metadata.slots[slot];
+ slotp->successful_boot = 0;
+
+ ret = read_write_partition_info(&metadata, WRITE_PARTITION);
+ if (ret < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+/*jb.qi modify for ab_rollback end on 20231117*/
int check_ab_boot(void) {
int slot;
diff --git a/src/bsp/hsm/src/middleware/bootloader/include/bootctrl.h b/src/bsp/hsm/src/middleware/bootloader/include/bootctrl.h
index 7ee3f7e..c3b3814 100644
--- a/src/bsp/hsm/src/middleware/bootloader/include/bootctrl.h
+++ b/src/bsp/hsm/src/middleware/bootloader/include/bootctrl.h
@@ -183,6 +183,14 @@
*/
int get_bl_ver_data(int slot);
+/*jb.qi modify for ab_rollback start on 20231117*/
+/**
+* mark_slot_unsuccessful() mark the slot unsuccessful.
+* Returns mark success or fail.
+*/
+int mark_slot_unsuccessful(int slot);
+/*jb.qi modify for ab_rollback end on 20231117*/
+
/**
* check_ab_boot() - check ab boot status
*