mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-25 06:46:00 +00:00

Add logic for booting systems with the RAUC update mechanism. This can be reused by other phytec boards. Signed-off-by: Leonard Anderweit <l.anderweit@phytec.de> Tested-by: Teresa Remmet <t.remmet@phytec.de>
52 lines
1.5 KiB
Bash
52 lines
1.5 KiB
Bash
/* 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;
|