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