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