diff mbox series

[v2,4/5] include: env: Add phytec RAUC boot logic

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

Commit Message

Leonard Anderweit March 12, 2024, 8:59 a.m. UTC
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

Comments

Teresa Remmet March 12, 2024, 2:15 p.m. UTC | #1
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 mbox series

Patch

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;