[Bugfix][API-1276]fix after flash_erase spm and reboot, fota cant switch slot
Only Configure: No
Affected branch: GSW3.0-no-common
Affected module: fota
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No
Change-Id: I597c2188513175474788491a83d1d84f7d4e6c87
diff --git a/lib/liblynq-fota/rock_ua/rock_ua.c b/lib/liblynq-fota/rock_ua/rock_ua.c
index 64aa8e9..0822d13 100755
--- a/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -184,6 +184,9 @@
#define MD5_RETRY_TIME 3
#define MD5_VERFY_ERROR 5
#define MD5_READ_BUFFER_LEN 4*1024
+#define FOTA_FIRST 0
+#define RECOVER_FIRST 1
+int fota_interrupt = 1;
//xf.li@20230822 add for ab rollback end
@@ -1488,7 +1491,7 @@
for(; ret > 0 && retry > 0; retry--)
{
//erase nand-target start
- if((access(FILE_UPDATE_FLAG, F_OK)) == 0)
+ if(fota_interrupt == FOTA_FIRST && (access(FILE_UPDATE_FLAG, F_OK)) == 0)
{
RLOGD("+[UA]: fota runing\n");
return -1;
@@ -1522,7 +1525,7 @@
acquire_wake_lock(PARTIAL_WAKE_LOCK, "ab_recover");//lock
while(( size = mtk_device_wrap_read(fd_source,delta_data,ROCK_DEFAULT_BLOCK_SIZE))>0)
{
- if((access(FILE_UPDATE_FLAG, F_OK)) == 0)
+ if(fota_interrupt == FOTA_FIRST && (access(FILE_UPDATE_FLAG, F_OK)) == 0)
{
RLOGD("+[UA]: fota runing\n");
ret = -1;
@@ -1599,8 +1602,16 @@
current_slot = module->getCurrentSlot(module);
is_successful = module->isSlotMarkedSuccessful(module, current_slot);
RLOGD("+[UA]: Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
+ fota_interrupt = RECOVER_FIRST;
if(current_slot==SLOT_B)
{
+ ret = backup_nand_copyto_nand(DEV_SPM_B,DEV_SPM_A);
+ if(ret != 0)
+ {
+ RLOGD("+[UA]: backup spm_a fail\n");
+ return 1;
+ }
+ fota_interrupt = FOTA_FIRST;
ret = backup_nand_copyto_nand(DEV_SYSTEM_B,DEV_SYSTEM_A);
if(ret != 0)
{
@@ -1625,12 +1636,6 @@
RLOGD("+[UA]: backup md1img_a fail\n");
return 1;
}
- ret = backup_nand_copyto_nand(DEV_SPM_B,DEV_SPM_A);
- if(ret != 0)
- {
- RLOGD("+[UA]: backup spm_a fail\n");
- return 1;
- }
ret = backup_nand_copyto_nand(DEV_VBMETA_B,DEV_VBMETA_A);
if(ret != 0)
{
@@ -1652,6 +1657,13 @@
}
else
{
+ ret = backup_nand_copyto_nand(DEV_SPM_A,DEV_SPM_B);
+ if(ret != 0)
+ {
+ RLOGD("+[UA]: backup spm_a fail\n");
+ return 1;
+ }
+ fota_interrupt = FOTA_FIRST;
ret = backup_nand_copyto_nand(DEV_SYSTEM_A,DEV_SYSTEM_B);
if(ret != 0)
{
@@ -1677,12 +1689,6 @@
RLOGD("+[UA]: backup md1img_b fail\n");
return 1;
}
- ret = backup_nand_copyto_nand(DEV_SPM_A,DEV_SPM_B);
- if(ret != 0)
- {
- RLOGD("+[UA]: backup spm_a fail\n");
- return 1;
- }
ret = backup_nand_copyto_nand(DEV_VBMETA_A,DEV_VBMETA_B);
if(ret != 0)
{