[PATCH v5 01/14] smegw01: Enable setting additional boot params

From: Eduard Strehlau eduard@lionizers.com
Introduce EXTRA_BOOTPARAMS to allow passing additional parameters to kernel command line. This is useful for debugging purposes.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
include/configs/smegw01.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 11031744bef8..a356f095a68c 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -17,6 +17,11 @@ /* MMC Config*/ #define CFG_SYS_FSL_ESDHC_ADDR 0
+/* default to no extra bootparams, we need an empty define for stringification*/ +#ifndef EXTRA_BOOTPARAMS +#define EXTRA_BOOTPARAMS +#endif + #define CFG_EXTRA_ENV_SETTINGS \ "image=zImage\0" \ "console=ttymxc0\0" \ @@ -26,7 +31,8 @@ "mmcdev=0\0" \ "mmcpart=1\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \ - "root=/dev/mmcblk0p${mmcpart} rootwait rw\0" \ + "root=/dev/mmcblk0p${mmcpart} rootwait rw " \ + __stringify(EXTRA_BOOTPARAMS) "\0" \ "loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot/${image}\0" \ "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} boot/${fdtfile}\0" \ "mmcboot=echo Booting from mmc ...; " \

From: Eduard Strehlau eduard@lionizers.com
Select CONFIG_CMD_SQUASHFS so that the SquashFS U-Boot commands are available.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index 1e0b9aa5be11..f15291f1dd04 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -38,6 +38,7 @@ CONFIG_CMD_EXT2=y CONFIG_CMD_EXT4=y CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_FAT=y +CONFIG_CMD_SQUASHFS=y CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y

From: Eduard Strehlau eduard@lionizers.com Select CONFIG_CMD_SQUASHFS so that the SquashFS U-Boot commands are available. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Add automatic boot counter that increases after every reset. After a power-on reset, it will be initialized with 1, and each reboot will increment the value by 1. By default it is disabled if bootlimit isn't set.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index f15291f1dd04..5d9d4194639d 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -46,6 +46,8 @@ CONFIG_SYS_REDUNDAND_ENVIRONMENT=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_BOUNCE_BUFFER=y +CONFIG_BOOTCOUNT_LIMIT=y +CONFIG_BOOTCOUNT_ENV=y CONFIG_DFU_MMC=y CONFIG_DM_I2C=y CONFIG_SUPPORT_EMMC_BOOT=y

From: Eduard Strehlau eduard@lionizers.com Add automatic boot counter that increases after every reset. After a power-on reset, it will be initialized with 1, and each reboot will increment the value by 1. By default it is disabled if bootlimit isn't set. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Add an altbootcmd script, which is convenient way to integrate with swupdate and perform a roll back of the previous working version in the case of update failure.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 2 +- include/configs/smegw01.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index 5d9d4194639d..418151a6de05 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -18,7 +18,7 @@ CONFIG_SYS_MEMTEST_END=0xa0000000 CONFIG_FIT=y CONFIG_FIT_VERBOSE=y CONFIG_USE_BOOTCOMMAND=y -CONFIG_BOOTCOMMAND="if run loadimage; then run mmcboot; fi; " +CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; if run loadimage; then run mmcboot; fi; " CONFIG_HUSH_PARSER=y CONFIG_SYS_MAXARGS=32 CONFIG_SYS_PBSIZE=532 diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index a356f095a68c..6ee4acc70d29 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -33,6 +33,7 @@ "mmcargs=setenv bootargs console=${console},${baudrate} " \ "root=/dev/mmcblk0p${mmcpart} rootwait rw " \ __stringify(EXTRA_BOOTPARAMS) "\0" \ + "bootlimit=3\0" \ "loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot/${image}\0" \ "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} boot/${fdtfile}\0" \ "mmcboot=echo Booting from mmc ...; " \ @@ -40,6 +41,13 @@ "if run loadfdt; then " \ "bootz ${loadaddr} - ${fdt_addr}; " \ "fi;\0" \ + "altbootcmd=echo Performing rollback...; " \ + "if test "${mmcpart}" = 1; then " \ + "setenv mmcpart 2; " \ + "else " \ + "setenv mmcpart 1; " \ + "fi; setenv bootcount 0; setenv upgrade_available; setenv ustate 3; saveenv; " \ + "run bootcmd;\0"
/* Physical Memory Map */ #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR

From: Eduard Strehlau eduard@lionizers.com Add an altbootcmd script, which is convenient way to integrate with swupdate and perform a roll back of the previous working version in the case of update failure. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Run the altbootcmd script if any step of bootcmd fails.
This ensures that always a valid image can be run.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 2 +- include/configs/smegw01.h | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index 418151a6de05..b3580d5d6e54 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -18,7 +18,7 @@ CONFIG_SYS_MEMTEST_END=0xa0000000 CONFIG_FIT=y CONFIG_FIT_VERBOSE=y CONFIG_USE_BOOTCOMMAND=y -CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; if run loadimage; then run mmcboot; fi; " +CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; if run loadimage; then run mmcboot; else run altbootcmd; fi; " CONFIG_HUSH_PARSER=y CONFIG_SYS_MAXARGS=32 CONFIG_SYS_PBSIZE=532 diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 6ee4acc70d29..05edaac42f8e 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -39,7 +39,13 @@ "mmcboot=echo Booting from mmc ...; " \ "run mmcargs; " \ "if run loadfdt; then " \ - "bootz ${loadaddr} - ${fdt_addr}; " \ + "if bootz ${loadaddr} - ${fdt_addr}; then " \ + "; " \ + "else " \ + "run altbootcmd; " \ + "fi;" \ + "else " \ + "run altbootcmd; " \ "fi;\0" \ "altbootcmd=echo Performing rollback...; " \ "if test "${mmcpart}" = 1; then " \

From: Eduard Strehlau eduard@lionizers.com Run the altbootcmd script if any step of bootcmd fails. This ensures that always a valid image can be run. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
When performing rootfs update via swupdate, it is convenient to check the 'ustate' variable to decide whether the update succeeded or not.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
include/configs/smegw01.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 05edaac42f8e..277c828d0e07 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -30,13 +30,19 @@ "bootm_size=0x10000000\0" \ "mmcdev=0\0" \ "mmcpart=1\0" \ + "mmcpart_committed=1\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \ - "root=/dev/mmcblk0p${mmcpart} rootwait rw " \ + "root=/dev/mmcblk0p${mmcpart_committed} rootwait rw " \ __stringify(EXTRA_BOOTPARAMS) "\0" \ + "commit_mmc=if test "${ustate}" = 1 -a "${mmcpart}" != "${mmcpart_committed}"; then " \ + "setenv mmcpart_committed ${mmcpart};" \ + "saveenv;" \ + "fi;\0" \ "bootlimit=3\0" \ - "loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot/${image}\0" \ - "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} boot/${fdtfile}\0" \ + "loadimage=load mmc ${mmcdev}:${mmcpart_committed} ${loadaddr} boot/${image}\0" \ + "loadfdt=load mmc ${mmcdev}:${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \ "mmcboot=echo Booting from mmc ...; " \ + "run commit_mmc; " \ "run mmcargs; " \ "if run loadfdt; then " \ "if bootz ${loadaddr} - ${fdt_addr}; then " \ @@ -48,10 +54,12 @@ "run altbootcmd; " \ "fi;\0" \ "altbootcmd=echo Performing rollback...; " \ - "if test "${mmcpart}" = 1; then " \ + "if test "${mmcpart_committed}" = 1; then " \ "setenv mmcpart 2; " \ + "setenv mmcpart_committed 2;" \ "else " \ "setenv mmcpart 1; " \ + "setenv mmcpart_committed 1;" \ "fi; setenv bootcount 0; setenv upgrade_available; setenv ustate 3; saveenv; " \ "run bootcmd;\0"

From: Eduard Strehlau eduard@lionizers.com When performing rootfs update via swupdate, it is convenient to check the 'ustate' variable to decide whether the update succeeded or not. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
GPT Partition labels are used for determining the right root filesystem to boot from.
The U-Boot environment is configured to reside in the eMMC hardware boot partition we are currently booted from.
This should enable a dual copy approach for upgrading the bootloader. One can overwrite the inactive hardware partition with new bootloader and environment and afterwards switch the eMMC boot partition for an atomic bootloader switch.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
board/storopack/smegw01/smegw01.c | 10 ++++++++++ configs/smegw01_defconfig | 2 ++ include/configs/smegw01.h | 12 ++++++++---- 3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/board/storopack/smegw01/smegw01.c b/board/storopack/smegw01/smegw01.c index e6bff80e5565..7d4de9326d6f 100644 --- a/board/storopack/smegw01/smegw01.c +++ b/board/storopack/smegw01/smegw01.c @@ -17,6 +17,7 @@ #include <asm/arch/crm_regs.h> #include <asm/setup.h> #include <asm/bootm.h> +#include <mmc.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -93,3 +94,12 @@ int board_late_init(void)
return 0; } + +uint board_mmc_get_env_part(struct mmc *mmc) +{ + uint part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config); + + if (part == 7) + part = 0; + return part; +} diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index b3580d5d6e54..54cf1cfc1f1b 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -30,6 +30,7 @@ CONFIG_CMD_MEMTEST=y CONFIG_CMD_UNZIP=y CONFIG_CMD_DFU=y CONFIG_CMD_GPIO=y +CONFIG_CMD_GPT=y CONFIG_CMD_MMC=y CONFIG_CMD_PART=y CONFIG_CMD_DHCP=y @@ -44,6 +45,7 @@ CONFIG_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y CONFIG_SYS_REDUNDAND_ENVIRONMENT=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_SYS_MMC_ENV_DEV=1 CONFIG_NET_RANDOM_ETHADDR=y CONFIG_BOUNCE_BUFFER=y CONFIG_BOOTCOUNT_LIMIT=y diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 277c828d0e07..71f2d9c8e85c 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -32,17 +32,21 @@ "mmcpart=1\0" \ "mmcpart_committed=1\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \ - "root=/dev/mmcblk0p${mmcpart_committed} rootwait rw " \ - __stringify(EXTRA_BOOTPARAMS) "\0" \ + "root=/dev/mmcblk${mmcdev}p${gpt_partition_entry} rootwait rw " \ + __stringify(EXTRA_BOOTPARAMS) " SM_ROOT_DEV=${mmcdev} SM_ROOT_PART=${gpt_partition_entry} SM_BOOT_PART=${boot_part}\0" \ "commit_mmc=if test "${ustate}" = 1 -a "${mmcpart}" != "${mmcpart_committed}"; then " \ "setenv mmcpart_committed ${mmcpart};" \ "saveenv;" \ "fi;\0" \ "bootlimit=3\0" \ - "loadimage=load mmc ${mmcdev}:${mmcpart_committed} ${loadaddr} boot/${image}\0" \ - "loadfdt=load mmc ${mmcdev}:${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \ + "loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${loadaddr} boot/${image}\0" \ + "loadfdt=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \ + "loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed}\0" \ + "loadbootpart=mmc partconf 1 boot_part\0" \ "mmcboot=echo Booting from mmc ...; " \ "run commit_mmc; " \ + "run loadpart; " \ + "run loadbootpart; " \ "run mmcargs; " \ "if run loadfdt; then " \ "if bootz ${loadaddr} - ${fdt_addr}; then " \

From: Eduard Strehlau eduard@lionizers.com GPT Partition labels are used for determining the right root filesystem to boot from. The U-Boot environment is configured to reside in the eMMC hardware boot partition we are currently booted from. This should enable a dual copy approach for upgrading the bootloader. One can overwrite the inactive hardware partition with new bootloader and environment and afterwards switch the eMMC boot partition for an atomic bootloader switch. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Let eMMC be the default boot medium.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
include/configs/smegw01.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 71f2d9c8e85c..8f68472f5bad 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -28,7 +28,7 @@ "fdtfile=imx7d-smegw01.dtb\0" \ "fdt_addr=0x83000000\0" \ "bootm_size=0x10000000\0" \ - "mmcdev=0\0" \ + "mmcdev=1\0" \ "mmcpart=1\0" \ "mmcpart_committed=1\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \

From: Eduard Strehlau eduard@lionizers.com Let eMMC be the default boot medium. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Instead of loading the zImage kernel and the devicetree separately, switch to the fitImage format, which is more convenient when working with secure boot, for example.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
include/configs/smegw01.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 8f68472f5bad..852188327777 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -23,7 +23,7 @@ #endif
#define CFG_EXTRA_ENV_SETTINGS \ - "image=zImage\0" \ + "image=fitImage\0" \ "console=ttymxc0\0" \ "fdtfile=imx7d-smegw01.dtb\0" \ "fdt_addr=0x83000000\0" \ @@ -39,8 +39,8 @@ "saveenv;" \ "fi;\0" \ "bootlimit=3\0" \ - "loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${loadaddr} boot/${image}\0" \ - "loadfdt=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \ + "fit_addr=0x88000000\0" \ + "loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${fit_addr} boot/${image}\0" \ "loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed}\0" \ "loadbootpart=mmc partconf 1 boot_part\0" \ "mmcboot=echo Booting from mmc ...; " \ @@ -48,12 +48,8 @@ "run loadpart; " \ "run loadbootpart; " \ "run mmcargs; " \ - "if run loadfdt; then " \ - "if bootz ${loadaddr} - ${fdt_addr}; then " \ - "; " \ - "else " \ - "run altbootcmd; " \ - "fi;" \ + "if bootm ${fit_addr}; then " \ + "; " \ "else " \ "run altbootcmd; " \ "fi;\0" \

From: Eduard Strehlau eduard@lionizers.com Instead of loading the zImage kernel and the devicetree separately, switch to the fitImage format, which is more convenient when working with secure boot, for example. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Add lockdown U-Boot env support so that only certain U-Boot environment variables are allowed to be modified.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
board/storopack/smegw01/Kconfig | 7 +++++ board/storopack/smegw01/smegw01.c | 17 +++++++++++ configs/smegw01_defconfig | 11 ++++++- include/configs/smegw01.h | 48 +++++++++++++++++++++++++++++-- 4 files changed, 79 insertions(+), 4 deletions(-)
diff --git a/board/storopack/smegw01/Kconfig b/board/storopack/smegw01/Kconfig index d8f24695d0d2..390214c285bb 100644 --- a/board/storopack/smegw01/Kconfig +++ b/board/storopack/smegw01/Kconfig @@ -12,4 +12,11 @@ config SYS_CONFIG_NAME config IMX_CONFIG default "board/storopack/smegw01/imximage.cfg"
+config SYS_BOOT_LOCKED + bool "Lock boot process to EMMC" + default y + help + Say N here if you want to boot from eMMC and SD. + Say Y to boot from eMMC. + endif diff --git a/board/storopack/smegw01/smegw01.c b/board/storopack/smegw01/smegw01.c index 7d4de9326d6f..e648b196b9d1 100644 --- a/board/storopack/smegw01/smegw01.c +++ b/board/storopack/smegw01/smegw01.c @@ -14,6 +14,7 @@ #include <asm/io.h> #include <common.h> #include <env.h> +#include <env_internal.h> #include <asm/arch/crm_regs.h> #include <asm/setup.h> #include <asm/bootm.h> @@ -103,3 +104,19 @@ uint board_mmc_get_env_part(struct mmc *mmc) part = 0; return part; } + +enum env_location env_get_location(enum env_operation op, int prio) +{ + if (op == ENVOP_SAVE || op == ENVOP_ERASE) + return ENVL_MMC; + + switch (prio) { + case 0: + return ENVL_NOWHERE; + + case 1: + return ENVL_MMC; + } + + return ENVL_UNKNOWN; +} diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index 54cf1cfc1f1b..ea25b3b87ce4 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -7,6 +7,7 @@ CONFIG_ENV_OFFSET=0x100000 CONFIG_DM_GPIO=y CONFIG_DEFAULT_DEVICE_TREE="imx7d-smegw01" CONFIG_TARGET_SMEGW01=y +# CONFIG_SYS_BOOT_LOCKED is not set CONFIG_ENV_OFFSET_REDUND=0x110000 CONFIG_ARMV7_BOOT_SEC_DEFAULT=y # CONFIG_ARMV7_VIRT is not set @@ -17,13 +18,18 @@ CONFIG_SYS_MEMTEST_START=0x80000000 CONFIG_SYS_MEMTEST_END=0xa0000000 CONFIG_FIT=y CONFIG_FIT_VERBOSE=y +CONFIG_AUTOBOOT_MENU_SHOW=y +CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE=y CONFIG_USE_BOOTCOMMAND=y -CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; if run loadimage; then run mmcboot; else run altbootcmd; fi; " +CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; run mmcboot; " +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="run setup_boot_menu;" CONFIG_HUSH_PARSER=y CONFIG_SYS_MAXARGS=32 CONFIG_SYS_PBSIZE=532 # CONFIG_CMD_BOOTD is not set CONFIG_CMD_BOOTZ=y +CONFIG_CMD_BOOTMENU=y # CONFIG_CMD_IMI is not set # CONFIG_CMD_XIMG is not set CONFIG_CMD_MEMTEST=y @@ -43,9 +49,12 @@ CONFIG_CMD_SQUASHFS=y CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_NOWHERE=y CONFIG_SYS_REDUNDAND_ENVIRONMENT=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_SYS_MMC_ENV_DEV=1 +CONFIG_ENV_WRITEABLE_LIST=y +CONFIG_ENV_ACCESS_IGNORE_FORCE=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_BOUNCE_BUFFER=y CONFIG_BOOTCOUNT_LIMIT=y diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 852188327777..6f373973ab84 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -22,6 +22,32 @@ #define EXTRA_BOOTPARAMS #endif
+#ifdef CONFIG_SYS_BOOT_LOCKED +#define EXTRA_ENV_FLAGS +#define SETUP_BOOT_MENU "setup_boot_menu=setenv bootmenu_0 eMMC=run bootcmd\0" +#else +#define EXTRA_ENV_FLAGS "mmcdev:dw," +#define SETUP_BOOT_MENU "setup_boot_menu=" \ + "if test "${mmcdev}" = 1; then " \ + "setenv emmc_priority 0;" \ + "setenv sd_priority 1;" \ + "else " \ + "setenv emmc_priority 1;" \ + "setenv sd_priority 0;" \ + "fi;" \ + "setenv bootmenu_${emmc_priority} eMMC=run boot_emmc;" \ + "setenv bootmenu_${sd_priority} SD=run boot_sd;\0" +#endif + +#define CFG_ENV_FLAGS_LIST_STATIC \ + "mmcpart:dw," \ + "mmcpart_committed:dw," \ + "ustate:dw," \ + "bootcount:dw," \ + "bootlimit:dw," \ + "upgrade_available:dw," \ + EXTRA_ENV_FLAGS + #define CFG_EXTRA_ENV_SETTINGS \ "image=fitImage\0" \ "console=ttymxc0\0" \ @@ -40,13 +66,28 @@ "fi;\0" \ "bootlimit=3\0" \ "fit_addr=0x88000000\0" \ - "loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${fit_addr} boot/${image}\0" \ + "loadimage=load mmc ${mmcdev}:${gpt_partition_entry} ${fit_addr} boot/${image}\0" \ "loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed}\0" \ "loadbootpart=mmc partconf 1 boot_part\0" \ - "mmcboot=echo Booting from mmc ...; " \ + "boot_sd=setenv mmcdev_wanted 0; run persist_mmcdev; run bootcmd;\0" \ + "boot_emmc=setenv mmcdev_wanted 1; run persist_mmcdev; run bootcmd;\0" \ + "persist_mmcdev=" \ + "if test "${mmcdev}" != "${mmcdev_wanted}"; then " \ + "setenv mmcdev "${mmcdev_wanted}";" \ + "saveenv;" \ + "fi;\0" \ + "mmcboot=echo Booting...; " \ + "echo mmcdev: ${mmcdev}; " \ "run commit_mmc; " \ + "echo mmcpart: ${mmcpart_committed}; " \ "run loadpart; " \ + "echo gptpart: ${gpt_partition_entry}; " \ "run loadbootpart; " \ + "if run loadimage; then " \ + "; " \ + "else " \ + "run altbootcmd; " \ + "fi; " \ "run mmcargs; " \ "if bootm ${fit_addr}; then " \ "; " \ @@ -61,7 +102,8 @@ "setenv mmcpart 1; " \ "setenv mmcpart_committed 1;" \ "fi; setenv bootcount 0; setenv upgrade_available; setenv ustate 3; saveenv; " \ - "run bootcmd;\0" + "run bootcmd;\0" \ + SETUP_BOOT_MENU
/* Physical Memory Map */ #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR

From: Eduard Strehlau eduard@lionizers.com Add lockdown U-Boot env support so that only certain U-Boot environment variables are allowed to be modified. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Fabio Estevam festevam@denx.de
Currently, only the first MAC address is read from the fuses.
The second MAC address is not read and Linux assigns a random one.
To prevent this behavior, read the second MAC address from the fuses and store it into the eth1addr environment variable so that it can be passed to Linux.
Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
board/storopack/smegw01/smegw01.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/board/storopack/smegw01/smegw01.c b/board/storopack/smegw01/smegw01.c index e648b196b9d1..20c09700bf0d 100644 --- a/board/storopack/smegw01/smegw01.c +++ b/board/storopack/smegw01/smegw01.c @@ -82,6 +82,7 @@ int board_init(void) int board_late_init(void) { struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; + unsigned char eth1addr[6];
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
@@ -93,6 +94,11 @@ int board_late_init(void) */ clrsetbits_le16(&wdog->wcr, 0, 0x10);
+ /* Get the second MAC address */ + imx_get_mac_from_fuse(1, eth1addr); + if (!env_get("eth1addr") && is_valid_ethaddr(eth1addr)) + eth_env_set_enetaddr("eth1addr", eth1addr); + return 0; }

From: Fabio Estevam festevam@denx.de Currently, only the first MAC address is read from the fuses. The second MAC address is not read and Linux assigns a random one. To prevent this behavior, read the second MAC address from the fuses and store it into the eth1addr environment variable so that it can be passed to Linux. Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
Defaults have changed, we do not want the bootmenu to contain EFI options.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index ea25b3b87ce4..fe8152f33e6e 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -19,6 +19,8 @@ CONFIG_SYS_MEMTEST_END=0xa0000000 CONFIG_FIT=y CONFIG_FIT_VERBOSE=y CONFIG_AUTOBOOT_MENU_SHOW=y +# CONFIG_BOOTSTD is not set +# CONFIG_CMD_BOOTEFI_BOOTMGR is not set CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE=y CONFIG_USE_BOOTCOMMAND=y CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; run mmcboot; "

From: Eduard Strehlau eduard@lionizers.com Defaults have changed, we do not want the bootmenu to contain EFI options. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com
The bootcmd/altbootcmd mechanism is not invoked for bootmenus. Manually compare bootcount and bootlimit to implement fallback on all codepaths.
Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - None
configs/smegw01_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index fe8152f33e6e..3d2713f52807 100644 --- a/configs/smegw01_defconfig +++ b/configs/smegw01_defconfig @@ -23,7 +23,7 @@ CONFIG_AUTOBOOT_MENU_SHOW=y # CONFIG_CMD_BOOTEFI_BOOTMGR is not set CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE=y CONFIG_USE_BOOTCOMMAND=y -CONFIG_BOOTCOMMAND="if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; run mmcboot; " +CONFIG_BOOTCOMMAND="if test "${bootcount}" -gt "${bootlimit}"; then run altbootcmd; else if test "${ustate}" = 1; then setenv upgrade_available 1; saveenv; fi; run mmcboot; fi;" CONFIG_USE_PREBOOT=y CONFIG_PREBOOT="run setup_boot_menu;" CONFIG_HUSH_PARSER=y

From: Eduard Strehlau eduard@lionizers.com The bootcmd/altbootcmd mechanism is not invoked for bootmenus. Manually compare bootcount and bootlimit to implement fallback on all codepaths. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Fabio Estevam festevam@denx.de
Currently, it is recommended to move from CFG_EXTRA_ENV_SETTINGS to an env file, so do the conversion.
Suggested-by: Tom Rini trini@konsulko.com Signed-off-by: Fabio Estevam festevam@denx.de --- Changes since v4: - Also add SETUP_BOOT_MENU into the .env file (Tom).
Cc: Tom Rini trini@konsulko.com
board/storopack/smegw01/smegw01.env | 89 +++++++++++++++++++++++++++++ include/configs/smegw01.h | 68 ---------------------- 2 files changed, 89 insertions(+), 68 deletions(-) create mode 100644 board/storopack/smegw01/smegw01.env
diff --git a/board/storopack/smegw01/smegw01.env b/board/storopack/smegw01/smegw01.env new file mode 100644 index 000000000000..25bc7cdbd28b --- /dev/null +++ b/board/storopack/smegw01/smegw01.env @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0+ +#ifdef CONFIG_SYS_BOOT_LOCKED +#define SETUP_BOOT_MENU setup_boot_menu=setenv bootmenu_0 eMMC=run bootcmd +#else +#define SETUP_BOOT_MENU setup_boot_menu= \ + if test "${mmcdev}" = 1; then \ + setenv emmc_priority 0; \ + setenv sd_priority 1; \ + else setenv emmc_priority 1; \ + setenv sd_priority 0; \ + fi; \ + setenv bootmenu_${emmc_priority} eMMC=run boot_emmc; \ + setenv bootmenu_${sd_priority} SD=run boot_sd; +#endif + +altbootcmd= + echo Performing rollback...; + if test "${mmcpart_committed}" = 1; then + setenv mmcpart 2; + setenv mmcpart_committed 2; + else + setenv mmcpart 1; + setenv mmcpart_committed 1; + fi; + setenv bootcount 0; + setenv upgrade_available; + setenv ustate 3; + saveenv; + run bootcmd; +boot_emmc=setenv mmcdev_wanted 1; run persist_mmcdev; run bootcmd; +boot_sd=setenv mmcdev_wanted 0; run persist_mmcdev; run bootcmd; +bootcmd=run finduuid; run distro_bootcmd +bootdelay=2 +bootlimit=3 +bootm_size=0x10000000 +commit_mmc= + if test "${ustate}" = 1 -a "${mmcpart}" != "${mmcpart_committed}"; then + setenv mmcpart_committed ${mmcpart}; + saveenv; + fi; +console=ttymxc0 +fdt_addr=0x83000000 +fdtfile=imx7d-smegw01.dtb +fit_addr=0x88000000 +image=fitImage +loadaddr=0x80800000 +loadbootpart=mmc partconf 1 boot_part +loadimage=load mmc ${mmcdev}:${gpt_partition_entry} ${fit_addr} boot/${image} +loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed} +mmcargs= + setenv bootargs console=${console},${baudrate} root=/dev/mmcblk${mmcdev}p${gpt_partition_entry} rootwait rw SM_ROOT_DEV=${mmcdev} SM_ROOT_PART=${gpt_partition_entry} SM_BOOT_PART=${boot_part} +mmcboot= + echo Booting...; + echo mmcdev: ${mmcdev}; + run commit_mmc; + echo mmcpart: ${mmcpart_committed}; + run loadpart; + echo gptpart: ${gpt_partition_entry}; + run loadbootpart; + if run loadimage; then + ; + else + run altbootcmd; + fi; + run mmcargs; + if bootm ${fit_addr}; then + ; + else + run altbootcmd; + fi; +mmcdev=1 +mmcpart=1 +mmcpart_committed=1 +persist_mmcdev= + if test "${mmcdev}" != "${mmcdev_wanted}"; then + setenv mmcdev "${mmcdev_wanted}"; + saveenv; + fi; +setup_boot_menu= + if test "${mmcdev}" = 1; then + setenv emmc_priority 0; + setenv sd_priority 1; + else + setenv emmc_priority 1; + setenv sd_priority 0; + fi; + setenv bootmenu_${emmc_priority} eMMC=run boot_emmc; + setenv bootmenu_${sd_priority} SD=run boot_sd; +SETUP_BOOT_MENU diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h index 6f373973ab84..0aa25f9e2eaa 100644 --- a/include/configs/smegw01.h +++ b/include/configs/smegw01.h @@ -24,19 +24,8 @@
#ifdef CONFIG_SYS_BOOT_LOCKED #define EXTRA_ENV_FLAGS -#define SETUP_BOOT_MENU "setup_boot_menu=setenv bootmenu_0 eMMC=run bootcmd\0" #else #define EXTRA_ENV_FLAGS "mmcdev:dw," -#define SETUP_BOOT_MENU "setup_boot_menu=" \ - "if test "${mmcdev}" = 1; then " \ - "setenv emmc_priority 0;" \ - "setenv sd_priority 1;" \ - "else " \ - "setenv emmc_priority 1;" \ - "setenv sd_priority 0;" \ - "fi;" \ - "setenv bootmenu_${emmc_priority} eMMC=run boot_emmc;" \ - "setenv bootmenu_${sd_priority} SD=run boot_sd;\0" #endif
#define CFG_ENV_FLAGS_LIST_STATIC \ @@ -48,63 +37,6 @@ "upgrade_available:dw," \ EXTRA_ENV_FLAGS
-#define CFG_EXTRA_ENV_SETTINGS \ - "image=fitImage\0" \ - "console=ttymxc0\0" \ - "fdtfile=imx7d-smegw01.dtb\0" \ - "fdt_addr=0x83000000\0" \ - "bootm_size=0x10000000\0" \ - "mmcdev=1\0" \ - "mmcpart=1\0" \ - "mmcpart_committed=1\0" \ - "mmcargs=setenv bootargs console=${console},${baudrate} " \ - "root=/dev/mmcblk${mmcdev}p${gpt_partition_entry} rootwait rw " \ - __stringify(EXTRA_BOOTPARAMS) " SM_ROOT_DEV=${mmcdev} SM_ROOT_PART=${gpt_partition_entry} SM_BOOT_PART=${boot_part}\0" \ - "commit_mmc=if test "${ustate}" = 1 -a "${mmcpart}" != "${mmcpart_committed}"; then " \ - "setenv mmcpart_committed ${mmcpart};" \ - "saveenv;" \ - "fi;\0" \ - "bootlimit=3\0" \ - "fit_addr=0x88000000\0" \ - "loadimage=load mmc ${mmcdev}:${gpt_partition_entry} ${fit_addr} boot/${image}\0" \ - "loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed}\0" \ - "loadbootpart=mmc partconf 1 boot_part\0" \ - "boot_sd=setenv mmcdev_wanted 0; run persist_mmcdev; run bootcmd;\0" \ - "boot_emmc=setenv mmcdev_wanted 1; run persist_mmcdev; run bootcmd;\0" \ - "persist_mmcdev=" \ - "if test "${mmcdev}" != "${mmcdev_wanted}"; then " \ - "setenv mmcdev "${mmcdev_wanted}";" \ - "saveenv;" \ - "fi;\0" \ - "mmcboot=echo Booting...; " \ - "echo mmcdev: ${mmcdev}; " \ - "run commit_mmc; " \ - "echo mmcpart: ${mmcpart_committed}; " \ - "run loadpart; " \ - "echo gptpart: ${gpt_partition_entry}; " \ - "run loadbootpart; " \ - "if run loadimage; then " \ - "; " \ - "else " \ - "run altbootcmd; " \ - "fi; " \ - "run mmcargs; " \ - "if bootm ${fit_addr}; then " \ - "; " \ - "else " \ - "run altbootcmd; " \ - "fi;\0" \ - "altbootcmd=echo Performing rollback...; " \ - "if test "${mmcpart_committed}" = 1; then " \ - "setenv mmcpart 2; " \ - "setenv mmcpart_committed 2;" \ - "else " \ - "setenv mmcpart 1; " \ - "setenv mmcpart_committed 1;" \ - "fi; setenv bootcount 0; setenv upgrade_available; setenv ustate 3; saveenv; " \ - "run bootcmd;\0" \ - SETUP_BOOT_MENU - /* Physical Memory Map */ #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR

On Wed, Apr 26, 2023 at 01:05:01PM -0300, Fabio Estevam wrote:
From: Fabio Estevam festevam@denx.de
Currently, it is recommended to move from CFG_EXTRA_ENV_SETTINGS to an env file, so do the conversion.
Suggested-by: Tom Rini trini@konsulko.com Signed-off-by: Fabio Estevam festevam@denx.de
Reviewed-by: Tom Rini trini@konsulko.com

From: Fabio Estevam festevam@denx.de Currently, it is recommended to move from CFG_EXTRA_ENV_SETTINGS to an env file, so do the conversion. Suggested-by: Tom Rini trini@konsulko.com Signed-off-by: Fabio Estevam festevam@denx.de Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

From: Eduard Strehlau eduard@lionizers.com Introduce EXTRA_BOOTPARAMS to allow passing additional parameters to kernel command line. This is useful for debugging purposes. Signed-off-by: Eduard Strehlau eduard@lionizers.com Signed-off-by: Fabio Estevam festevam@denx.de
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic
participants (3)
-
Fabio Estevam
-
sbabic@denx.de
-
Tom Rini