[PATCH v3 01/13] 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 v2: - 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 11031744be..a356f095a6 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 v2: - None
configs/smegw01_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index 1e0b9aa5be..f15291f1dd 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
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 v2: - None
configs/smegw01_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index f15291f1dd..5d9d419463 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 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 v2: - 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 5d9d419463..418151a6de 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 a356f095a6..6ee4acc70d 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
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 v2: - 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 418151a6de..b3580d5d6e 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 6ee4acc70d..05edaac42f 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
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 v2: - 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 05edaac42f..277c828d0e 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
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 v2: - Use the same board_mmc_get_env_part() implementations as board/purism/librem5/librem5.c.
Cc: Pali Rohár pali@kernel.org
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
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 v2: - 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 71f2d9c8e8..8f68472f5b 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
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 v2: - 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 8f68472f5b..8521883277 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
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 v2: - 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 d8f24695d0..390214c285 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 9482f88773..e786429476 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> @@ -113,3 +114,19 @@ uint mmc_get_env_part(struct mmc *mmc)
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 54cf1cfc1f..ea25b3b87c 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 8521883277..6f373973ab 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: 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 v2: - Fixed typo in the Subject "smegw01".
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 e786429476..605253ead3 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: 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 v2: - None
configs/smegw01_defconfig | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index ea25b3b87c..fe8152f33e 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
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 v2: - None
configs/smegw01_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig index fe8152f33e..3d2713f528 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

On Mon, Apr 24, 2023 at 08:11:54AM -0300, Fabio Estevam wrote:
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 v2:
- 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 11031744be..a356f095a6 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 " \
"loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot/${image}\0" \ "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} boot/${fdtfile}\0" \ "mmcboot=echo Booting from mmc ...; " \__stringify(EXTRA_BOOTPARAMS) "\0" \
As this series does a lot of environment changes, please update the board to use plain text environment instead of CFG_EXTRA_ENV_SETTINGS, thanks. If it's too much to do at the start of the series, at the end is OK.
participants (2)
-
Fabio Estevam
-
Tom Rini