1/* SPDX-License-Identifier: GPL-2.0+ */ 2 3/* Logic to select a boot partition based on environment variables and switch 4 * to the other if the boot fails. */ 5 6doraucboot=0 7 8raucbootpart0=1 9raucrootpart0=5 10raucbootpart1=2 11raucrootpart1=6 12 13raucinit= 14 echo Booting RAUC A/B system; 15 test -n "${BOOT_ORDER}" || env set BOOT_ORDER "system0 system1"; 16 test -n "${BOOT_system0_LEFT}" || env set BOOT_system0_LEFT 3; 17 test -n "${BOOT_system1_LEFT}" || env set BOOT_system1_LEFT 3; 18 env set raucstatus; 19 for BOOT_SLOT in "${BOOT_ORDER}"; do 20 if test "x${raucstatus}" != "x"; then 21 echo Skipping remaing slots!; 22 elif test "x${BOOT_SLOT}" = "xsystem0"; then 23 if test ${BOOT_system0_LEFT} -gt 0; then 24 echo Found valid slot A, ${BOOT_system0_LEFT} attempts remaining; 25 setexpr BOOT_system0_LEFT ${BOOT_system0_LEFT} - 1; 26 env set mmcpart ${raucbootpart0}; 27 env set mmcroot ${raucrootpart0}; 28 env set raucargs rauc.slot=system0; 29 env set raucstatus success; 30 fi; 31 elif test "x${BOOT_SLOT}" = "xsystem1"; then 32 if test ${BOOT_system1_LEFT} -gt 0; then 33 echo Found valid slot B, ${BOOT_system1_LEFT} attempts remaining; 34 setexpr BOOT_system1_LEFT ${BOOT_system1_LEFT} - 1; 35 env set mmcpart ${raucbootpart1}; 36 env set mmcroot ${raucrootpart1}; 37 env set raucargs rauc.slot=system1; 38 env set raucstatus success; 39 fi; 40 fi; 41 done; 42 if test -n "${raucstatus}"; then 43 env delete raucstatus; 44 env save; 45 else 46 echo WARN: No valid slot found; 47 env set BOOT_system0_LEFT 3; 48 env set BOOT_system1_LEFT 3; 49 env delete raucstatus; 50 env save; 51 reset; 52 fi; 53