|
@@ -408,7 +408,11 @@ static int do_update_from_media(void)
|
|
|
mdelay(30);
|
|
|
if(!ret)
|
|
|
{
|
|
|
- sprintf(cmd, "setenv fdtsize %s",env_get("filesize"));
|
|
|
+ if(flag_partiton == 0)
|
|
|
+ sprintf(cmd, "setenv fdtsize_a %s",env_get("filesize"));
|
|
|
+ else
|
|
|
+ sprintf(cmd, "setenv fdtsize_b %s",env_get("filesize"));
|
|
|
+
|
|
|
run_command(cmd, 0);
|
|
|
printf("cmd=%s\n", cmd);
|
|
|
mdelay(30);
|
|
@@ -426,7 +430,11 @@ static int do_update_from_media(void)
|
|
|
mdelay(30);
|
|
|
if(!ret)
|
|
|
{
|
|
|
- sprintf(cmd, "setenv kernelsize %s",env_get("filesize"));
|
|
|
+ if(flag_partiton == 0)
|
|
|
+ sprintf(cmd, "setenv kernelsize_a %s",env_get("filesize"));
|
|
|
+ else
|
|
|
+ sprintf(cmd, "setenv kernelsize_b %s",env_get("filesize"));
|
|
|
+
|
|
|
printf("cmd=%s\n", cmd);
|
|
|
run_command(cmd, 0);
|
|
|
mdelay(30);
|
|
@@ -443,7 +451,7 @@ static int do_update_from_media(void)
|
|
|
{
|
|
|
sprintf(cmd, "setenv bootanimationsize %s",env_get("filesize"));
|
|
|
run_command(cmd, 0);
|
|
|
- printf("cmd=%s\n", cmd);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
mdelay(30);
|
|
|
sprintf((char *)cmd,"disconfig 30");
|
|
|
run_command(cmd, 0);
|
|
@@ -458,7 +466,7 @@ static int do_update_from_media(void)
|
|
|
{
|
|
|
sprintf(cmd, "setenv reversingtracksize %s",env_get("filesize"));
|
|
|
run_command(cmd, 0);
|
|
|
- printf("cmd=%s\n", cmd);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
mdelay(30);
|
|
|
sprintf((char *)cmd,"disconfig 35");
|
|
|
run_command(cmd, 0);
|
|
@@ -506,6 +514,16 @@ static int do_update_from_media(void)
|
|
|
env_set("fdt_part", "fdt");
|
|
|
env_set("emmcroot", "/dev/mmcblk0p10 rw");
|
|
|
|
|
|
+ sprintf(cmd, "setenv fdtsize %s",env_get("fdtsize_a"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+
|
|
|
+ sprintf(cmd, "setenv kernelsize %s",env_get("kernelsize_a"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+
|
|
|
}
|
|
|
else if(!strcmp(update_dev, "usb"))
|
|
|
{
|
|
@@ -516,6 +534,18 @@ static int do_update_from_media(void)
|
|
|
env_set("kernel_part", "kernel_b");
|
|
|
env_set("fdt_part", "fdt_b");
|
|
|
env_set("emmcroot", "/dev/mmcblk0p14 rw");
|
|
|
+
|
|
|
+ sprintf(cmd, "setenv fdtsize %s",env_get("fdtsize_b"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+
|
|
|
+ sprintf(cmd, "setenv kernelsize %s",env_get("kernelsize_b"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
else if(!strcmp(curr_partition, "B"))
|
|
|
{
|
|
@@ -523,8 +553,17 @@ static int do_update_from_media(void)
|
|
|
env_set("kernel_part", "kernel");
|
|
|
env_set("fdt_part", "fdt");
|
|
|
env_set("emmcroot", "/dev/mmcblk0p10 rw");
|
|
|
- }
|
|
|
|
|
|
+ sprintf(cmd, "setenv fdtsize %s",env_get("fdtsize_a"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+
|
|
|
+ sprintf(cmd, "setenv kernelsize %s",env_get("kernelsize_a"));
|
|
|
+ run_command(cmd, 0);
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ mdelay(30);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
mdelay(5);
|
|
@@ -557,6 +596,7 @@ int board_late_init(void)
|
|
|
char *update_from_ota = NULL,*need_update = NULL;
|
|
|
unsigned int loadaddr;
|
|
|
int do_update = 0, update_from_mmc = 1;
|
|
|
+ char *curr_partition = NULL;
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_USB_MUSB_HOST
|
|
@@ -569,7 +609,8 @@ int board_late_init(void)
|
|
|
need_update = env_get("need_update");
|
|
|
if (!strcmp(need_update, "yes")) {
|
|
|
loadaddr = env_get_hex("loadaddr", 0);
|
|
|
-
|
|
|
+ if (loadaddr)
|
|
|
+ memset((void*)loadaddr, 0, strlen(ARK1668_UPDATE_MAGIC));
|
|
|
sprintf(cmd, "fatload %s %s %s update-magic", "mmc", env_get("sd_dev_part"), env_get("loadaddr"));
|
|
|
printf("cmd %s\n",cmd);
|
|
|
run_command(cmd, 0);
|
|
@@ -587,17 +628,38 @@ int board_late_init(void)
|
|
|
if (loadaddr && !memcmp((void *)loadaddr, ARK1668_UPDATE_MAGIC, strlen(ARK1668_UPDATE_MAGIC))) {
|
|
|
do_update = 1;
|
|
|
update_from_mmc = 0;
|
|
|
+ curr_partition = env_get("updata_from_part");
|
|
|
+ printf("++updata_from_part %s++\n", curr_partition);
|
|
|
+ run_command("env default -f -a", 0);
|
|
|
+ mdelay(500);
|
|
|
+ if(!strcmp(curr_partition, "A"))
|
|
|
+ env_set("updata_from_part", "A");
|
|
|
+ else if(!strcmp(curr_partition, "B"))
|
|
|
+ env_set("updata_from_part", "B");
|
|
|
+ else
|
|
|
+ env_set("updata_from_part", "A");
|
|
|
+ printf("++++++++++++++%s++++++++++\n",curr_partition);
|
|
|
} else {
|
|
|
printf("Wrong update magic, do not update from usb.\n");
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
else if(!strcmp(update_from_ota, "yes")){
|
|
|
-
|
|
|
- do_update = 0;
|
|
|
- sprintf(cmd, "update_from_emmc_ota");
|
|
|
- printf("cmd=%s\n", cmd);
|
|
|
- run_command(cmd, 0);
|
|
|
+ do_update = 0;
|
|
|
+ curr_partition = env_get("updata_from_part");
|
|
|
+ printf("++updata_from_part %s++\n", curr_partition);
|
|
|
+ run_command("env default -f -a", 0);
|
|
|
+ mdelay(500);
|
|
|
+ if(!strcmp(curr_partition, "A"))
|
|
|
+ env_set("updata_from_part", "A");
|
|
|
+ else if(!strcmp(curr_partition, "B"))
|
|
|
+ env_set("updata_from_part", "B");
|
|
|
+ else
|
|
|
+ env_set("updata_from_part", "A");
|
|
|
+ printf("++++++++++++++%s++++++++++\n",curr_partition);
|
|
|
+ sprintf(cmd, "update_from_emmc_ota");
|
|
|
+ printf("cmd=%s\n", cmd);
|
|
|
+ run_command(cmd, 0);
|
|
|
}
|
|
|
update_done:
|
|
|
if (do_update) {
|