Add Broadcom / Netgear changes from RAXE 1.0.0.48
[project/bcm63xx/u-boot.git] / board / broadcom / bcmbca / reimage_flashback.c
diff --git a/board/broadcom/bcmbca/reimage_flashback.c b/board/broadcom/bcmbca/reimage_flashback.c
new file mode 100644 (file)
index 0000000..1461c71
--- /dev/null
@@ -0,0 +1,85 @@
+
+#include <common.h>
+#include <cli.h>
+#include <string.h>
+#include "reimage.h"
+
+int do_reimage_auto(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+       /* CUSTOMIZE -- Sequence of commands to run automatically */
+       run_command("safeimage nvram", 0);
+       run_command("safeimage revertable", 0);
+       run_command("preserve allocate 0x80000", 0);
+       run_command("setenv partition data", 0);
+       run_command("fsload newkey.key && preserve save /data/newkey.key", 0);
+       run_command("fsload newkey && preserve save /data/newkey", 0);
+       run_command("fsload newkey.cert && preserve save /data/newkey.cert", 0);
+       run_command("fsload psi && preserve save /data/psi", 0);
+       run_command("fsload scratchpad && preserve save /data/scratchpad", 0);
+       run_command
+           ("fsload .kernel_nvram.setting && preserve save /data/.kernel_nvram.setting",
+            0);
+       run_command("safeimage read_recovery nvram", 0);        /* must be last before commit */
+       run_command("safeimage commit", 0);
+       run_command("safeimage store_preserved", 0);
+       run_command("reset", 0);
+       return (0);
+}
+
+void reimage_env_append(struct reimager *r)
+{
+       char more_env[1024];
+       char tmp1[128];
+       char tmp2[128];
+       char *bp;
+       char *cp;
+       int more_env_size;
+       int i;
+       cp = more_env;
+
+       /* CUSTOMIZE THIS-- whatever needs to be transferred from NVRAM to the uboot environment, put it here */
+       /* START */
+       printf("cfe_bootline=%s\n", r->nvram.bootline);
+       tmp2[0] = '\0';
+       bp = strtok(r->nvram.bootline, "= ");   /* skip to e= */
+       bp = strtok(NULL, "= ");        /* find the address after e= to space */
+       strcpy(tmp1, bp);
+       bp = strtok(NULL, "= ");        /* skip to h= */
+       bp = strtok(NULL, "= ");        /* find the address after h= to space */
+       strcpy(tmp2, bp);
+       bp = strtok(NULL, "^");
+       cp += sprintf(cp, "ipaddr=%s", tmp1);
+       *(cp++) = '\0';
+       cp += sprintf(cp, "serverip=%s", tmp2);
+       *(cp++) = '\0';
+       cp += sprintf(cp, "MCB=0x%x", r->nvram.ulMemoryConfig);
+       *(cp++) = '\0';
+       cp += sprintf(cp, "ethaddr=%x:%x:%x:%x:%x:%x",
+                     r->nvram.ucaBaseMacAddr[0],
+                     r->nvram.ucaBaseMacAddr[1],
+                     r->nvram.ucaBaseMacAddr[2],
+                     r->nvram.ucaBaseMacAddr[3],
+                     r->nvram.ucaBaseMacAddr[4], r->nvram.ucaBaseMacAddr[5]);
+       *(cp++) = '\0';
+
+       cp += sprintf(cp, "bootcmd=printenv;run once;run check_flashback;sdk boot_img");
+       *(cp++) = '\0';
+
+       cp += sprintf(cp, "tries=3");
+       *(cp++) = '\0';
+
+       cp += sprintf(cp, "check_flashback=test $tries -eq 0 || echo $tries ;  setexpr tries $tries - 1 ; saveenv ; test $tries -eq 0 && run do_flashback");
+       *(cp++) = '\0';
+
+       cp += sprintf(cp, "do_flashback=ubi part image && ubi read 0x1000000 recovery && flashback_ops go_flashback && reset");
+       *(cp++) = '\0';
+
+       cp += sprintf(cp, "once=sdk metadata 1 1;setenv once true;saveenv");
+       *(cp++) = '\0';
+
+       *(cp++) = '\0';
+       /* END */
+
+       more_env_size = cp - more_env + 1;
+       reimage_splice_env(r, more_env, more_env_size);
+}