[Feature][ZXW-136]merge P50U04 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: I7b6a8e22777591bc7a9ede91d6695d9415116f81
diff --git a/ap/lib/libatext/ext_amt_func.c b/ap/lib/libatext/ext_amt_func.c
index 4460b51..431819f 100755
--- a/ap/lib/libatext/ext_amt_func.c
+++ b/ap/lib/libatext/ext_amt_func.c
@@ -2015,6 +2015,7 @@
 	cmdline_fd = open("/proc/cmdline", O_RDONLY);

 	if (cmdline_fd < 0) {

 		at_print(AT_ERR,"open %s fail.\n","/proc/cmdline");

+		free(cmdline_buf);

 		return -1;

 	}

 	ret_size = read(cmdline_fd, cmdline_buf, CMDLINE_MAX_SIZE);

@@ -2022,6 +2023,7 @@
 	{

 		at_print(AT_ERR,"read /proc/cmdline fail.\n");

 		close(cmdline_fd);

+		free(cmdline_buf);

 		return -1;

 	}

 	close(cmdline_fd);

@@ -2029,25 +2031,30 @@
 	if(temp == NULL)

 	{

     	at_print(AT_ERR,"can not find EnhancedSecurity=\n");

+		free(cmdline_buf);

 		return -1;

 	}

 	temp = temp + strlen("EnhancedSecurity=");

 	if(temp == NULL)

 	{

     	at_print(AT_ERR,"temp = NULL\n");

+		free(cmdline_buf);

 		return -1;

 	}

 	if(*temp == '0')

 	{

+	    free(cmdline_buf);

 		return 0;

 	}

 	else if(*temp == '1')

 	{

 	    at_print(AT_ERR,"EnhancedSecurity=1\n");

+		free(cmdline_buf);

 		return 1;

 	}

 	else

 	{

+	    free(cmdline_buf);

 		return -1;

 	}

 }

@@ -2137,7 +2144,7 @@
 

 

 	   // ´òÓ¡¹«Ô¿

-		#if 1

+		#if 0

 		strLog[0] = '\0';

 		for (i = 0; i < 16; i++)

 		{

@@ -2195,10 +2202,9 @@
         strcat(strLog, strValue);

     }

 

-    at_print(AT_ERR, "Public key hash: %s\n", strLog);

+    at_print(AT_ERR, "efuse Public key hash: %s\n", strLog);

 	

 	/*************************½«°²È«ÐÅϢдÈëefuse**************************/

-	#if 1

 	if (memcmp(efuseInfo.pubKeyHash, pubKeyHash, sizeof(pubKeyHash)) != 0)

 	{

 		// ¹«Ô¿hashֵдÈëefuse

@@ -2217,7 +2223,7 @@
     }

 	else

 	{

-		at_print(AT_ERR, "Public key's hash value already exists!\n");

+		at_print(AT_ERR, "efuse Public key's hash value already exists!\n");

 	}

 

     /*************************ÅжÏдÈëµÄ¹«Ô¿hashÖµÊÇ·ñÕýÈ·**************************/

@@ -2233,69 +2239,12 @@
     }

 	if (memcmp(efuseInfo.pubKeyHash, pubKeyHash, sizeof(pubKeyHash)) != 0)

     {

-        at_print(AT_ERR, "Public key hash is not consistent!\n");

+        at_print(AT_ERR, "efuse Public key hash is not consistent!\n");

         *res_msg = at_err_build(ATERR_PROC_FAILED);

         *res_msglen = strlen(*res_msg);

 		close(efuse_fd);

         return AT_END;

     }

-	#endif

-

-	#if 1

-

-	/*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/

-	

-    if ((efuseInfo.secureFlag&0xff) != secureFlag)

-    {

-        // ʹÄܱêʶλдÈëefuse

-        if (ioctl(efuse_fd , EFUSE_SET_SECURE_EN, &secureFlag) != 0)

-        {

-            at_print(AT_ERR, "Write security flag to efuse fail!\r");

-            *res_msg = at_err_build(ATERR_PROC_FAILED);

-            *res_msglen = strlen(*res_msg);

-			close(efuse_fd);

-            return AT_END;

-        }

-        else

-        {

-            at_print(AT_NORMAL, "Write security flag to efuse success!\r");

-        }

-    }

-

-    else

-    {

-        at_print(AT_NORMAL, "Secure flag already exists!\r");

-    }

-	

-    /*************************ÅжÏдÈëµÄÐÅÏ¢ÊÇ·ñÕýÈ·**************************/

-    // ´Óefuse¶ÁÈ¡

-    memset(&efuseInfo, 0, sizeof(efuseInfo));

-    if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuseInfo)!= 0)

-    {

-        at_print(AT_ERR,"ioctl: EFUSE_GET_DATA fail.\n");

-		*res_msg = at_err_build(ATERR_PROC_FAILED);

-		*res_msglen = strlen(*res_msg);

-		close(efuse_fd);

-		return AT_END;

-    }

-

-    if ((efuseInfo.secureFlag&0xff) != secureFlag)

-    {

-        at_print(AT_ERR, "Security flag(%#08X) is not consistent!\r", efuseInfo.secureFlag);

-        *res_msg = at_err_build(ATERR_PROC_FAILED);

-        *res_msglen = strlen(*res_msg);

-		close(efuse_fd);

-        return AT_END;

-    }

-	#endif

-    close(efuse_fd);

-	

-	if(is_Enhanced_Security == 0)

-	{

-		*res_msg = at_query_result_build("write security infomation", NULL);

-    	*res_msglen = strlen(*res_msg);

-	     return AT_END;

-	}

 	

 	if(is_Enhanced_Security == 1)

 	{

@@ -2322,7 +2271,7 @@
 		at_print(AT_ERR, "security flag in otp: %08X\n", otpInfo.secureFlag);

 

 		// ´òÓ¡¹«Ô¿

-		#if 1

+		#if 0

 		strLog[0] = '\0';

 		for (i = 0; i < 16; i++)

 		{

@@ -2389,8 +2338,6 @@
 

 		at_print(AT_ERR, "OTP Public key hash: %s\n", strLog);

 

-		#if 1

-		

 		/*************************½«°²È«ÐÅϢдÈëotp**************************/

 		

 		if (memcmp(otpInfo.pubKeyHash, pubKeyHash_otp, sizeof(pubKeyHash_otp)) != 0)

@@ -2406,12 +2353,12 @@
 			}

 			else

 			{

-				at_print(AT_NORMAL, "Write public key hash to otp success!\n");

+				at_print(AT_ERR, "Write public key hash to otp success!\n");

 			}

 	    }

 		else

 		{

-			at_print(AT_NORMAL, "Public key's hash value in otp already exists!\n");

+			at_print(AT_ERR, "Public key's hash value in otp already exists!\n");

 		}

 

 		/*************************ÅжÏдÈëµÄ¹«Ô¿hashÖµÊÇ·ñÕýÈ·**************************/

@@ -2434,11 +2381,8 @@
 			close(otp_fd);

 	        return AT_END;

 	    }

-		#endif

-

-		#if 1

 		

-		/*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/

+		/*otpInfo.secureFlag×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/

 		

 	    if ((otpInfo.secureFlag&0xff) != secureFlag_otp)

 	    {

@@ -2453,12 +2397,12 @@
 	        }

 	        else

 	        {

-	            at_print(AT_NORMAL, "Write security flag to otp success!\n");

+	            at_print(AT_ERR, "Write security flag to otp success!\n");

 	        }

 	    }

 		else

 	    {

-	        at_print(AT_NORMAL, "Secure flag already exists!\n");

+	        at_print(AT_ERR, "Secure flag in otp already exists!\n");

 	    }

 		

 	    /*************************ÅжÏдÈëµÄsecure flagÊÇ·ñÕýÈ·**************************/

@@ -2473,23 +2417,66 @@
 			return AT_END;

 	    }

 

-	    if ((otpInfo.secureFlag&0xff) != secureFlag_otp)

+		close(otp_fd);

+

+		if ((otpInfo.secureFlag&0xff) != secureFlag_otp)

 	    {

-	        at_print(AT_ERR, "Security flag(%#08X) is not consistent!\n", otpInfo.secureFlag);

+	        at_print(AT_ERR, "Security flag(%#08X) in otp is not consistent!\n", otpInfo.secureFlag);

 	        *res_msg = at_err_build(ATERR_PROC_FAILED);

 	        *res_msglen = strlen(*res_msg);

-			close(otp_fd);

-	        return AT_END;

+		    return AT_END;

 	    }

-

-		#endif

-

-	    *res_msg = at_query_result_build("write security infomation", NULL);

-	    *res_msglen = strlen(*res_msg);

-		close(otp_fd);

-	    return AT_END;

-     

 	}

+	

+	//×îºóдefuse°²È«flag

+    /*efuseInfo.secureFlagÇ°Ãæ3¸ö×Ö½ÚÊÇchip flag,×îºóÒ»¸ö×Ö½ÚÊǰ²È«Ê¹ÄܱêÖ¾*/

+	

+    if ((efuseInfo.secureFlag&0xff) != secureFlag)

+    {

+        // ʹÄܱêʶλдÈëefuse

+        if (ioctl(efuse_fd , EFUSE_SET_SECURE_EN, &secureFlag) != 0)

+        {

+            at_print(AT_ERR, "Write security flag to efuse fail!\n");

+            *res_msg = at_err_build(ATERR_PROC_FAILED);

+            *res_msglen = strlen(*res_msg);

+			close(efuse_fd);

+            return AT_END;

+        }

+        else

+        {

+            at_print(AT_ERR, "Write security flag to efuse success!\n");

+        }

+    }

+    else

+    {

+        at_print(AT_ERR, "Secure flag in efuse already exists!\n");

+    }

+	

+    /*************************ÅжÏдÈëµÄÐÅÏ¢ÊÇ·ñÕýÈ·**************************/

+    // ´Óefuse¶ÁÈ¡

+    memset(&efuseInfo, 0, sizeof(efuseInfo));

+    if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuseInfo)!= 0)

+    {

+        at_print(AT_ERR,"ioctl: EFUSE_GET_DATA fail.\n");

+		*res_msg = at_err_build(ATERR_PROC_FAILED);

+		*res_msglen = strlen(*res_msg);

+		close(efuse_fd);

+		return AT_END;

+    }

+

+	close(efuse_fd);

+

+    if ((efuseInfo.secureFlag&0xff) != secureFlag)

+    {

+        at_print(AT_ERR, "Security flag(%#08X) in efuse is not consistent!\n", efuseInfo.secureFlag);

+        *res_msg = at_err_build(ATERR_PROC_FAILED);

+        *res_msglen = strlen(*res_msg);

+		return AT_END;

+    }

+	

+	*res_msg = at_query_result_build("write security infomation", NULL);

+    *res_msglen = strlen(*res_msg);

+	return AT_END;

 }

 

 int read_security_info(int at_fd, char *at_paras, void **res_msg, int *res_msglen)

@@ -2556,9 +2543,7 @@
 		}

 	} 

 

-	#if 1

-	

-    if(is_Enhanced_Security == 1)

+	if(is_Enhanced_Security == 1)

     {

 		otp_fd = open("/dev/otp", O_RDWR);

 		if (otp_fd < 0) 

@@ -2597,10 +2582,32 @@
 		    return AT_END;

 		} 

     }

-	#endif

 	

 }

 

+#ifdef USE_NVRO_BACKUP

+int backup_nvro_func(int at_fd, char *at_paras, void **res_msg, int *res_msglen)

+{

+    unsigned int ret = CPNV_ERROR;

+	

+	ret = cpnv_NvroBackup();

+    if (CPNV_ERROR== ret)

+    {

+        at_print(AT_ERR,"nvro backup failed\n");

+        *res_msg = at_err_build(ATERR_PROC_FAILED);

+	}

+	else

+	{

+		at_print(AT_ERR, "nvro backup success\n");

+		*res_msg = at_ok_build();

+	}

+

+	*res_msglen = strlen(*res_msg);

+	return AT_END;

+}

+#endif

+

+

 

 /*

 int auth_device_key(int at_fd, char *at_paras,void ** res_msg, int *res_msglen)

@@ -2676,5 +2683,9 @@
 	//register_serv_func2("ZAUTH=",0,0,0,auth_device_key,NULL);

     register_serv_func2("RSCYINFO",0,0,0,read_security_info,NULL);

 	

+	#ifdef USE_NVRO_BACKUP

+	register_serv_func2("NVROBACKUP",0,0,0,backup_nvro_func,NULL);

+	#endif

+	

     return 0;

 }