[Feature][ZXW-241]merge P56U01 version

Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: I7985538dde6951dd824c36149bf9a1e3ca23c734
diff --git a/ap/lib/libflags/flags_api.c b/ap/lib/libflags/flags_api.c
index ca52fc2..a0c9ff3 100755
--- a/ap/lib/libflags/flags_api.c
+++ b/ap/lib/libflags/flags_api.c
@@ -668,7 +668,8 @@
 	int already_write = 0;

 	

 	unsigned int crc_32 = 0;

-	

+	unsigned int crc_32_1 = 0;

+

     flags_info.magic_start = FLAGS_MAGIC;

 	

     flags_info.boot_fota_flag.boot_to = DUAL_SYSTEM;

@@ -685,10 +686,16 @@
     flags_info.magic_end = FLAGS_MAGIC;

 

 	crc32init_le();

-	crc_32 = crc32_le(0, (unsigned char const *)(&flags_info), sizeof(flags_info));

+	crc_32 = crc32_le(0, (unsigned char const *)(&flags_info), 512);

 	flags_log("init crc_32=%u", crc_32);

 

 	flags_info.crc32 = crc_32;

+	

+	crc32init_le();

+	crc_32_1 = crc32_le(0, (unsigned char const *)(&flags_info), sizeof(flags_info));

+	flags_log("init crc_32_1=%u", crc_32_1);

+

+	flags_info.crc32_1 = crc_32_1;

 

 	ret = mtd_get(PARTITION_NAME_FLAGS, DEVICE_MTD, mtd_path, MAX_PATH_LEN);

 	if (ret < 0)

@@ -787,6 +794,7 @@
     T_FLAGS_INFO main_flag = {0};

     T_FLAGS_INFO backup_flag = {0};

 	T_FLAGS_INFO p_flags_info_tmp = {0};

+	char delta_F[IMG_NAME_LEN] = {0};

 

     int main_index = 0;

     int backup_index = 1;

@@ -811,38 +819,35 @@
         return -1;

     }

 	

-	flags_log("main_flag crc32=%u", main_flag.crc32);

-	flags_log("backup_flag crc32=%u", backup_flag.crc32);

-	

-	if ((0 == main_flag.crc32) && (0 == backup_flag.crc32))

+	flags_log("main_flag crc32=%u, crc32_1=%u", main_flag.crc32, main_flag.crc32_1);

+	flags_log("backup_flag crc32=%u, crc32_1=%u", backup_flag.crc32, backup_flag.crc32_1);

+

+	memset(delta_F, 0xFF, IMG_NAME_LEN);

+

+	if ((0 == memcmp(main_flag.img_size[0].name, delta_F, IMG_NAME_LEN)) && (0 == memcmp(backup_flag.img_size[0].name, delta_F, IMG_NAME_LEN)))

 	{

-		if ((FLAGS_MAGIC == main_flag.magic_start) && (FLAGS_MAGIC == main_flag.magic_end))

+		memcpy(&p_flags_info_tmp, &main_flag, sizeof(T_FLAGS_INFO));

+		memset(p_flags_info_tmp.img_size[0].name, 0, sizeof(T_FLAGS_INFO)-512);

+

+		crc32init_le();

+		p_flags_info_tmp.crc32_1 = crc32_le(0, (unsigned char const *)(&p_flags_info_tmp), sizeof(T_FLAGS_INFO));

+		flags_log("fix old, set crc32_1=%u", p_flags_info_tmp.crc32_1);

+		

+		if (set_flags_info(&p_flags_info_tmp, &main_index, &backup_index) != 0)

 		{

-			if ((FLAGS_MAGIC == backup_flag.magic_start) && (FLAGS_MAGIC == backup_flag.magic_end))

-			{

-				memcpy(&p_flags_info_tmp, &main_flag, sizeof(T_FLAGS_INFO));

-				crc32init_le();

-				p_flags_info_tmp.crc32 = 0;

-				p_flags_info_tmp.crc32 = crc32_le(0, (unsigned char const *)(&p_flags_info_tmp), sizeof(T_FLAGS_INFO));

-				flags_log("old version, set crc32=%u", p_flags_info_tmp.crc32);

-				

-				if (set_flags_info(&p_flags_info_tmp, &main_index, &backup_index) != 0)

-				{

-					flags_err("old version, set flags info fail");

-					return -1;

-				}

-				

-				copy_flags_info(p_flags_info, &main_flag);

-				return 0;

-			}

+			flags_err("fix old, set flags info fail");

+			return -1;

 		}

+		

+		copy_flags_info(p_flags_info, &main_flag);

+		return 0;

 	}

 

-	crc32_main = main_flag.crc32;

-	crc32_backup = backup_flag.crc32;

+	crc32_main = main_flag.crc32_1;

+	crc32_backup = backup_flag.crc32_1;

 

-	main_flag.crc32 = 0;

-	backup_flag.crc32 = 0;

+	main_flag.crc32_1 = 0;

+	backup_flag.crc32_1 = 0;

 	

 	crc32init_le();

 	

@@ -902,8 +907,13 @@
 

 	crc32init_le();

 	p_flags_info->crc32 = 0;

-	p_flags_info->crc32 = crc32_le(0, (unsigned char const *)p_flags_info, sizeof(T_FLAGS_INFO));

+	p_flags_info->crc32 = crc32_le(0, (unsigned char const *)p_flags_info, 512);

 	flags_log("set crc32=%u", p_flags_info->crc32);

+	

+	crc32init_le();

+	p_flags_info->crc32_1 = 0;

+	p_flags_info->crc32_1 = crc32_le(0, (unsigned char const *)p_flags_info, sizeof(T_FLAGS_INFO));

+	flags_log("set crc32_1=%u", p_flags_info->crc32_1);

 

     if (set_flags_info(p_flags_info, &main_index, &backup_index) != 0)

     {