cmd: defenv_reserv: fix cannot use diff reserv array in diff mode [1/1]

PD#SWPL-196811

Problem:
need reserv diff array in factory reset and ota upgrade

Solution:
add new -c0 common array
for ott, if android factory reset and usb burning, use -c0 instead

Verify:
s7d s905x5m

Change-Id: I9e2c2f706cfcf2294f2341fdb4ef087c8b386bbd
Signed-off-by: yihui wu <yihui.wu@amlogic.com>
diff --git a/board/amlogic/common/board.c b/board/amlogic/common/board.c
index 766bc93..48c6f5b 100644
--- a/board/amlogic/common/board.c
+++ b/board/amlogic/common/board.c
@@ -413,5 +413,18 @@
 	"sw_version",	//linux swupdate version
 	NULL//Keep NULL be last to tell END
 };
+
+const char * const _aml_env_reserv_array1[] = {
+	"lock",
+	"upgrade_step",
+	"bootloader_version",
+	"dts_to_gpt",
+	"fastboot_step",
+	"reboot_status",
+	"expect_index",
+	"recovery_check_part",
+	"defenv_para",	//set in board_late_init
+	NULL//Keep NULL be last to tell END
+};
 #endif//#ifdef CONFIG_AML_DEFENV
 
diff --git a/board/amlogic/s6_bl201/s6_bl201.c b/board/amlogic/s6_bl201/s6_bl201.c
index 55e6f9c..5b73e2d 100644
--- a/board/amlogic/s6_bl201/s6_bl201.c
+++ b/board/amlogic/s6_bl201/s6_bl201.c
@@ -160,6 +160,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bl204/s6_bl204.c b/board/amlogic/s6_bl204/s6_bl204.c
index ac65139..ca0240f 100644
--- a/board/amlogic/s6_bl204/s6_bl204.c
+++ b/board/amlogic/s6_bl204/s6_bl204.c
@@ -168,6 +168,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bl208/s6_bl208.c b/board/amlogic/s6_bl208/s6_bl208.c
index ed76aa8..16bf01f 100644
--- a/board/amlogic/s6_bl208/s6_bl208.c
+++ b/board/amlogic/s6_bl208/s6_bl208.c
@@ -160,6 +160,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bl209/s6_bl209.c b/board/amlogic/s6_bl209/s6_bl209.c
index 04c27d9..2942b44 100644
--- a/board/amlogic/s6_bl209/s6_bl209.c
+++ b/board/amlogic/s6_bl209/s6_bl209.c
@@ -160,6 +160,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bn201/s6_bn201.c b/board/amlogic/s6_bn201/s6_bn201.c
index 526706d..be9d437 100644
--- a/board/amlogic/s6_bn201/s6_bn201.c
+++ b/board/amlogic/s6_bn201/s6_bn201.c
@@ -160,6 +160,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bq201/s6_bq201.c b/board/amlogic/s6_bq201/s6_bq201.c
index 7dbf1a2..1dd3e77 100644
--- a/board/amlogic/s6_bq201/s6_bq201.c
+++ b/board/amlogic/s6_bq201/s6_bq201.c
@@ -163,6 +163,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bq208/s6_bq208.c b/board/amlogic/s6_bq208/s6_bq208.c
index e3ef518..83b0b1c 100644
--- a/board/amlogic/s6_bq208/s6_bq208.c
+++ b/board/amlogic/s6_bq208/s6_bq208.c
@@ -163,6 +163,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s6_bq209/s6_bq209.c b/board/amlogic/s6_bq209/s6_bq209.c
index 3f0f29e..7bcdb2b 100644
--- a/board/amlogic/s6_bq209/s6_bq209.c
+++ b/board/amlogic/s6_bq209/s6_bq209.c
@@ -163,6 +163,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 	get_stick_reboot_flag_mbx();
 #ifdef CONFIG_PXP_EMULATOR
diff --git a/board/amlogic/s7_bh201/s7_bh201.c b/board/amlogic/s7_bh201/s7_bh201.c
index db63d71..cf9d8e7 100644
--- a/board/amlogic/s7_bh201/s7_bh201.c
+++ b/board/amlogic/s7_bh201/s7_bh201.c
@@ -151,6 +151,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7_bh202/s7_bh202.c b/board/amlogic/s7_bh202/s7_bh202.c
index bde6043..9709f64 100644
--- a/board/amlogic/s7_bh202/s7_bh202.c
+++ b/board/amlogic/s7_bh202/s7_bh202.c
@@ -153,6 +153,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7_bh209/s7_bh209.c b/board/amlogic/s7_bh209/s7_bh209.c
index 79b7919..64f5e4a 100644
--- a/board/amlogic/s7_bh209/s7_bh209.c
+++ b/board/amlogic/s7_bh209/s7_bh209.c
@@ -151,6 +151,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7_bp201/s7_bp201.c b/board/amlogic/s7_bp201/s7_bp201.c
index 495c24f..4c066ef 100644
--- a/board/amlogic/s7_bp201/s7_bp201.c
+++ b/board/amlogic/s7_bp201/s7_bp201.c
@@ -151,6 +151,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7_bp202/s7_bp202.c b/board/amlogic/s7_bp202/s7_bp202.c
index d03c46f..329e469 100644
--- a/board/amlogic/s7_bp202/s7_bp202.c
+++ b/board/amlogic/s7_bp202/s7_bp202.c
@@ -153,6 +153,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7d_bm201/fw_arb.cfg b/board/amlogic/s7d_bm201/fw_arb.cfg
index 699a25d..d30842a 100644
--- a/board/amlogic/s7d_bm201/fw_arb.cfg
+++ b/board/amlogic/s7d_bm201/fw_arb.cfg
@@ -1,7 +1,7 @@
 # Configure Firmware Anti-rollback Versions
-device_scs_vers=0x0
-device_tee_vers=0x0
-device_ree_vers=0x0
+device_scs_vers=0x6
+device_tee_vers=0x6
+device_ree_vers=0x6
 
 # Configure Segmentation ID
 DEVICE_SCS_SEGID=0x0
@@ -23,3 +23,4 @@
 echo $DEVICE_TEE_VERS
 echo $DEVICE_REE_VERS
 echo $DEVICE_SCS_LVL1CERT_VERS_SUBMASK
+
diff --git a/board/amlogic/s7d_bm201/s7d_bm201.c b/board/amlogic/s7d_bm201/s7d_bm201.c
index 317c2d2..79190ae 100644
--- a/board/amlogic/s7d_bm201/s7d_bm201.c
+++ b/board/amlogic/s7d_bm201/s7d_bm201.c
@@ -205,6 +205,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7d_bm202/s7d_bm202.c b/board/amlogic/s7d_bm202/s7d_bm202.c
index 532f27f..219a490 100644
--- a/board/amlogic/s7d_bm202/s7d_bm202.c
+++ b/board/amlogic/s7d_bm202/s7d_bm202.c
@@ -199,6 +199,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7d_bm209/s7d_bm209.c b/board/amlogic/s7d_bm209/s7d_bm209.c
index c702f62..d44e921 100644
--- a/board/amlogic/s7d_bm209/s7d_bm209.c
+++ b/board/amlogic/s7d_bm209/s7d_bm209.c
@@ -198,6 +198,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/board/amlogic/s7d_t232/s7d_t232.c b/board/amlogic/s7d_t232/s7d_t232.c
index 317c2d2..79190ae 100644
--- a/board/amlogic/s7d_t232/s7d_t232.c
+++ b/board/amlogic/s7d_t232/s7d_t232.c
@@ -205,6 +205,8 @@
 {
 	printf("board late init\n");
 	env_set("defenv_para", "-c");
+	if (env_get_ulong("default_env", 10, 0))
+		env_set("defenv_para", "-c0"); //andr factory reset or factory burn
 	aml_board_late_init_front(NULL);
 #ifdef CONFIG_PXP_EMULATOR
 	return 0;
diff --git a/cmd/amlogic/defenv_without.c b/cmd/amlogic/defenv_without.c
index 9b09a65..b3af308 100644
--- a/cmd/amlogic/defenv_without.c
+++ b/cmd/amlogic/defenv_without.c
@@ -19,6 +19,7 @@
 static const char*  const temp_for_compile[] = {"__test1","__test2","__test3",NULL};
 extern const char * const _env_args_reserve_[0] __attribute__((weak, alias("temp_for_compile")));
 extern const char * const _aml_env_reserv_array[0] __attribute__((weak, alias("temp_for_compile")));
+extern const char * const _aml_env_reserv_array1[0] __attribute__((weak, alias("temp_for_compile")));
 extern const char * const _board_env_reserv_array0[0] __attribute__((weak, alias("temp_for_compile")));
 extern const char * const _board_env_reserv_array1[0] __attribute__((weak, alias("temp_for_compile")));
 extern const char * const _board_env_reserv_array2[0] __attribute__((weak, alias("temp_for_compile")));
@@ -30,6 +31,7 @@
 
 enum DEF_ENV_RESERV_ARRAY {
 	BIT_ENV_RESERV_ARRAY_AML_COMMON,	//-c, common aml env array_aml_env_reserv_array
+	BIT_ENV_RESERV_ARRAY_AML_COMMON1,	//-c, common aml env array_aml_env_reserv_array
 	BIT_ENV_RESERV_ARRAY_USER_INPUT,	//input env1/env2/env3...
 	BIT_ENV_RESERV_ARRAY_BOARD_DEFINE0,	//-b0, board env array _board_env_reserv_array0
 	BIT_ENV_RESERV_ARRAY_BOARD_DEFINE1,	//-b1, board env array _board_env_reserv_array1
@@ -132,6 +134,7 @@
 		const char * const*_aml_env_reserv_[DEF_ENV_RESERV_ARRAY_COUNT];
 
 		_aml_env_reserv_[BIT_ENV_RESERV_ARRAY_AML_COMMON] = _aml_env_reserv_array;
+		_aml_env_reserv_[BIT_ENV_RESERV_ARRAY_AML_COMMON1] = _aml_env_reserv_array1;
 		_aml_env_reserv_[BIT_ENV_RESERV_ARRAY_USER_INPUT] = temp_for_compile;
 		_aml_env_reserv_[BIT_ENV_RESERV_ARRAY_BOARD_DEFINE0] = _board_env_reserv_array0;
 		_aml_env_reserv_[BIT_ENV_RESERV_ARRAY_BOARD_DEFINE1] = _board_env_reserv_array1;
@@ -140,7 +143,7 @@
 		while (argc > 1 && **(argv + 1) == '-') {
 			arg = *++argv;
 			--argc;
-			while (*++arg) {
+			if (*++arg) {
 				switch (*arg) {
 				case 'b':{//board env
 					const int bd = *++arg - '0';
@@ -152,10 +155,18 @@
 					debugP("board reserv _board_env_reserv_array%d\n", bd);
 					rsv_flags |= 1 << (BIT_ENV_RESERV_ARRAY_BOARD_DEFINE0 + bd);
 				} break;
-				case 'c'://common env
-					MsgP("common reserv _aml_env_reserv_array\n");
-					rsv_flags |= 1 << BIT_ENV_RESERV_ARRAY_AML_COMMON;
-					break;
+				case 'c': {//common env
+					int icmn = arg[1];
+
+					if (icmn > '0') {
+						errorP("invalid cmn para %s\n", arg);
+						return CMD_RET_FAILURE;
+					}
+					if (icmn)
+						icmn = 1;
+					MsgP("common reserv para: %s\n", arg);
+					rsv_flags |= 1 << (BIT_ENV_RESERV_ARRAY_AML_COMMON + icmn);
+				} break;
 				default:
 					errorP("Invalid para -%s\n", arg);
 					return CMD_RET_USAGE;
diff --git a/drivers/usb/gadget/v3_burning/v3_usb_tool/f_v3_usb_tool.c b/drivers/usb/gadget/v3_burning/v3_usb_tool/f_v3_usb_tool.c
index 002d025..821c449 100644
--- a/drivers/usb/gadget/v3_burning/v3_usb_tool/f_v3_usb_tool.c
+++ b/drivers/usb/gadget/v3_burning/v3_usb_tool/f_v3_usb_tool.c
@@ -961,7 +961,7 @@
 	} else if (!strcmp("save_setting", argv[0])) {
 		if (IS_ENABLED(CONFIG_CMD_SAVEENV) && !IS_ENABLED(CONFIG_ENV_IS_NOWHERE)) {
 			env_set("firstboot", "1");
-			env_set("upgrade_step", "1");
+			env_set("default_env", "1");
 			ret = run_command("store rsv erase env", 0);
 			ret = run_command("saveenv", 0);
 		} else {