blob: 89e17ff70ec636279d70107bdb4f16cbe1bbc364 [file] [log] [blame]
/* 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;