[PATCH v1 07/11] siemens: capricorn: add logic to U-Boot to avoid zig-zag boot

Peng Fan peng.fan at oss.nxp.com
Mon Jan 26 02:29:48 CET 2026


On Sat, Jan 24, 2026 at 06:54:48AM +0100, Heiko Schocher wrote:
>add logic in board code for detecting the real boot
>partition and set a local hush shell variable fallback
>which can be used later in boot variables for detecting
>a ROMbootloader fallback case.

Typo: ROM bootloader

>
>We use the local hush shell variable, as we do not want
>to save in any case the fallback variable in U-Boot
>Environment, as the default Environment is may saved

Typo: maybe

>in boards, which are downgraded to older U-Boot versions.
>
>And than the board code does not run, and fallback never
>gets the correct value.
>
>Introduce also hush shell variable envvers to value "v2_"
>so we can use them in Environment for running different
>versions of variables between new and old U-Boot images.
>
>Signed-off-by: Heiko Schocher <hs at nabladev.com>
>Signed-off-by: Walter Schweizer <walter.schweizer at siemens.com>
>---
>
> board/siemens/capricorn/Kconfig |  2 ++
> board/siemens/capricorn/board.c | 43 +++++++++++++++++++++++++++------
> 2 files changed, 37 insertions(+), 8 deletions(-)
>
>diff --git a/board/siemens/capricorn/Kconfig b/board/siemens/capricorn/Kconfig
>index fe230971e97..d6d1aad75b2 100644
>--- a/board/siemens/capricorn/Kconfig
>+++ b/board/siemens/capricorn/Kconfig
>@@ -1,5 +1,7 @@
> if TARGET_CAPRICORN
> 
>+config HUSH_INIT_VAR
>+	def_bool y
> 
> config SYS_BOARD
> 	default "capricorn"
>diff --git a/board/siemens/capricorn/board.c b/board/siemens/capricorn/board.c
>index 390a7b0d841..d4f26b6ff7f 100644
>--- a/board/siemens/capricorn/board.c
>+++ b/board/siemens/capricorn/board.c
>@@ -5,6 +5,7 @@
>  * Copyright 2019 Siemens AG
>  *
>  */
>+#include <cli_hush.h>
> #include <command.h>
> #include <dm.h>
> #include <env.h>
>@@ -29,6 +30,7 @@
> #include "../common/board.h"
> #include "../common/eeprom.h"
> #include "../common/factoryset.h"
>+#include <firmware/imx/sci/sci.h>
> 
> #define GPIO_PAD_CTRL \
> 		((SC_PAD_CONFIG_NORMAL << PADRING_CONFIG_SHIFT) | \
>@@ -373,23 +375,48 @@ __weak int mmc_map_to_kernel_blk(int dev_no)
> 
> void board_late_mmc_env_init(void)
> {
>-	char cmd[32];
>-	char mmcblk[32];
> 	u32 dev_no = mmc_get_env_dev();
> 
> 	if (!check_mmc_autodetect())
> 		return;
> 
> 	env_set_ulong("mmcdev", dev_no);
>+}
>+
>+#if defined(CONFIG_HUSH_INIT_VAR)
>+int hush_init_var(void)
>+{
>+	sc_misc_bt_t boot_type;
> 
>-	/* Set mmcblk env */
>-	sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw",
>-		mmc_map_to_kernel_blk(dev_no));
>-	env_set("mmcroot", mmcblk);
>+	if (sc_misc_get_boot_type(-1, &boot_type) != 0) {
>+		puts("boottype cannot be retrieved\n");
>+		return 0;
>+	}
>+
>+	/*
>+	 * Set here explicitly a hush shell variable, so if a saveenv
>+	 * happens, this variable is *not* saved in U-Boot environment.
>+	 *
>+	 * This is for devices which are already in the field essential,
>+	 * as if such a device breaks, the cutsomer gets a new device
>+	 * with a new U-Boot version (and so a new U-Boot environment).
>+	 *
>+	 * But the customer makes a downgrade to an older U-bootversion,

Typo: U-Boot version.


Otherwise: 

Reviewed-by: Peng Fan <peng.fan at nxp.com>


More information about the U-Boot mailing list