summaryrefslogtreecommitdiff
path: root/include/env/phytec/rauc.env
blob: 89e17ff70ec636279d70107bdb4f16cbe1bbc364 (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
/* SPDX-License-Identifier: GPL-2.0+ */

/* Logic to select a boot partition based on environment variables and switch
 * to the other if the boot fails. */

doraucboot=0

raucbootpart0=1
raucrootpart0=5
raucbootpart1=2
raucrootpart1=6

raucinit=
	echo Booting RAUC A/B system;
	test -n "${BOOT_ORDER}" || env set BOOT_ORDER "system0 system1";
	test -n "${BOOT_system0_LEFT}" || env set BOOT_system0_LEFT 3;
	test -n "${BOOT_system1_LEFT}" || env set BOOT_system1_LEFT 3;
	env set raucstatus;
	for BOOT_SLOT in "${BOOT_ORDER}"; do
		if test "x${raucstatus}" != "x"; then
			echo Skipping remaing slots!;
		elif test "x${BOOT_SLOT}" = "xsystem0"; then
			if test ${BOOT_system0_LEFT} -gt 0; then
				echo Found valid slot A, ${BOOT_system0_LEFT} attempts remaining;
				setexpr BOOT_system0_LEFT ${BOOT_system0_LEFT} - 1;
				env set mmcpart ${raucbootpart0};
				env set mmcroot ${raucrootpart0};
				env set raucargs rauc.slot=system0;
				env set raucstatus success;
			fi;
		elif test "x${BOOT_SLOT}" = "xsystem1"; then
			if test ${BOOT_system1_LEFT} -gt 0; then
				echo Found valid slot B, ${BOOT_system1_LEFT} attempts remaining;
				setexpr BOOT_system1_LEFT ${BOOT_system1_LEFT} - 1;
				env set mmcpart ${raucbootpart1};
				env set mmcroot ${raucrootpart1};
				env set raucargs rauc.slot=system1;
				env set raucstatus success;
			fi;
		fi;
	done;
	if test -n "${raucstatus}"; then
		env delete raucstatus;
		env save;
	else
		echo WARN: No valid slot found;
		env set BOOT_system0_LEFT 3;
		env set BOOT_system1_LEFT 3;
		env delete raucstatus;
		env save;
		reset;
	fi;