summaryrefslogtreecommitdiffstats
path: root/board/broadcom/bcmbca/reimage_flashback.c
blob: 1461c712900d71db12d9aafb88ffdd4d308bfc32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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);
}