[Feature][T8TSK-216][system] boot from bl2_b when bl2_a is load fail
Change-Id: Ib5569df7050a577314a539784a080ad490a5c2d9
diff --git a/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c b/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
index f0f1472..b8b1d63 100644
--- a/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
+++ b/src/bsp/hsm/src/application/bootloader/mt2735/bootloader.c
@@ -313,7 +313,9 @@
int32_t bld_loaded = 0;
int32_t ret = BL_OK;
struct bdev *dev = NULL;
- const uint8_t *label = (uint8_t *)"bl2";
+ struct bdev *dev_b = NULL;
+ const uint8_t *label = (uint8_t *)"bl2_a";
+ const uint8_t *label_b = (uint8_t *)"bl2_b";
for (i = 0; i < BOOT_DEVICE_NUM; i++) {
ret = BL_OK;
@@ -334,8 +336,14 @@
ret = partition_publish(device_name, 0, PARTITION_ATTR_ALL);
if (ret == 0) {
dev = bdev_open_by_label(label);
+ dev_b = bdev_open_by_label(label_b);
if (dev != NULL) {
device_name_new = dev->name;
+ }
+ else if (dev_b != NULL)
+ {
+ dev = dev_b;
+ device_name_new = dev->name;
} else {
ret = -1;
}
@@ -351,7 +359,20 @@
LOGD("boot\r\n");
break;
} else {
- LOGE("load img fail\r\n");
+ LOGE("load img a fail\r\n");
+ if (dev_b != NULL)
+ {
+ dev = dev_b;
+ device_name_new = dev->name;
+ ret = bl_load_ap_image(device_name_new, entry_addr);
+ if (ret == BL_OK) {
+ bld_loaded = 1;
+ LOGD("boot\r\n");
+ break;
+ }
+ LOGE("load img b fail\r\n");
+ }
+
bl_flash_partition_deinit(boot_device_list[i], device_name);
}
}