[Feature][ZXW-452]merge P54U02 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: I17e6795ab66e2b9d1cbbfec4b7c0028d666e177d
diff --git a/boot/common/src/uboot/drivers/misc/load.c b/boot/common/src/uboot/drivers/misc/load.c
index 2c9c8e7..5c3a2b3 100755
--- a/boot/common/src/uboot/drivers/misc/load.c
+++ b/boot/common/src/uboot/drivers/misc/load.c
@@ -65,6 +65,9 @@
 	uint8_t p_uncompress_size[8];
 }lzma_header_t;
 
+extern void crc32init_le(void);
+extern unsigned int crc32_le(unsigned int crc, unsigned char const *p, size_t len);
+
 extern uint32_t ztelzma_compresssize;
 extern int lzmanodeflag;
 #endif
@@ -1222,6 +1225,9 @@
 	uint32_t  fota_size = sizeof(T_FLAGS_INFO);
 	nand_info_t *nand = &nand_info[nand_curr_device];
 	struct fsl_qspi *nor = &spi_nor_flash;
+	unsigned long crc = 0;
+	unsigned long crc_cal = 0;
+	u32 crc_size = sizeof(T_FLAGS_INFO);
 
 	flush_dcache_all();
     flash_dmabuf_disable_flag = 1;
@@ -1277,8 +1283,15 @@
 			BOOT_PRINTF(UBOOT_ERR, "[%s]: read the flags error!\n", part_name);
 			return 1;
 		}
+
+		/*crc32УÑé*/
+		crc = fotaFlagInfo->crc32;
+		fotaFlagInfo->crc32 = 0;
+		crc32init_le();
+    	crc_cal = crc32_le(0,(unsigned char*)fotaFlagInfo,crc_size);
+		printf("crc is 0x%x,crc_cal is 0x%x\n",crc,crc_cal);
 		
-		if(fotaFlagInfo->magic_start != FLAGS_MAGIC)
+		if(fotaFlagInfo->magic_start != FLAGS_MAGIC || (crc!= crc_cal && crc != 0))
 		{	
 			flush_dcache_all();
 			ret = flash->read(nand,(loff_t)backup_area_offset,
@@ -1294,7 +1307,20 @@
 			{
 	            printf("flags magic err.\n");
 			    return -1;
-			}	
+			}
+
+			/*crc32УÑé*/
+			crc = fotaFlagInfo->crc32;
+			fotaFlagInfo->crc32 = 0;
+			crc32init_le();
+	    	crc_cal = crc32_le(0,(unsigned char*)fotaFlagInfo,crc_size);
+
+			if(crc!= crc_cal && crc != 0)
+			{
+	            printf("flags crc err.\n");
+			    return -1;
+			}
+			
 		}
 	}
 	else if(type == IF_TYPE_NOR)