Message ID | 20240312085957.902398-5-l.anderweit@phytec.de |
---|---|
State | Changes Requested |
Delegated to: | Fabio Estevam |
Headers | show |
Series | Add RAUC boot logic for phycore_imx8mp | expand |
Am Dienstag, dem 12.03.2024 um 09:59 +0100 schrieb Leonard Anderweit: > 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> > --- > include/env/phytec/rauc.env | 52 > +++++++++++++++++++++++++++++++++++++ > 1 file changed, 52 insertions(+) > create mode 100644 include/env/phytec/rauc.env > > diff --git a/include/env/phytec/rauc.env > b/include/env/phytec/rauc.env > new file mode 100644 > index 000000000000..89e17ff70ec6 > --- /dev/null > +++ b/include/env/phytec/rauc.env > @@ -0,0 +1,52 @@ > +/* 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;
diff --git a/include/env/phytec/rauc.env b/include/env/phytec/rauc.env new file mode 100644 index 000000000000..89e17ff70ec6 --- /dev/null +++ b/include/env/phytec/rauc.env @@ -0,0 +1,52 @@ +/* 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;
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> --- include/env/phytec/rauc.env | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 include/env/phytec/rauc.env