/* 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;
