* [PATCH v2 02/13] smegw01: Select CONFIG_CMD_SQUASHFS
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 03/13] smegw01: Select bootcount support Fabio Estevam
` (10 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 03/13] smegw01: Select bootcount support
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 02/13] smegw01: Select CONFIG_CMD_SQUASHFS Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 04/13] smegw01: Add altbootcmd Fabio Estevam
` (9 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 04/13] smegw01: Add altbootcmd
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 02/13] smegw01: Select CONFIG_CMD_SQUASHFS Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 03/13] smegw01: Select bootcount support Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 05/13] smegw01: Run altbootcmd in the case of failure Fabio Estevam
` (8 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 05/13] smegw01: Run altbootcmd in the case of failure
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (2 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 04/13] smegw01: Add altbootcmd Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 06/13] smegw01: Only commit to new partition if update was successful Fabio Estevam
` (7 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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 " \
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 06/13] smegw01: Only commit to new partition if update was successful
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (3 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 05/13] smegw01: Run altbootcmd in the case of failure Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions Fabio Estevam
` (6 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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"
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (4 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 06/13] smegw01: Only commit to new partition if update was successful Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 18:10 ` Pali Rohár
2023-04-21 10:56 ` [PATCH v2 08/13] smegw01: Change default boot device to eMMC Fabio Estevam
` (5 subsequent siblings)
11 siblings, 1 reply; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam, Pali Rohár
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 v1:
- Remove custom mmc macro (Pali)
- Handle all the possible partition cases (Pali).
Cc: Pali Rohár <pali@kernel.org>
board/storopack/smegw01/smegw01.c | 32 +++++++++++++++++++++++++++++++
configs/smegw01_defconfig | 2 ++
include/configs/smegw01.h | 12 ++++++++----
3 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/board/storopack/smegw01/smegw01.c b/board/storopack/smegw01/smegw01.c
index e6bff80e5565..db6069a02722 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,34 @@ int board_late_init(void)
return 0;
}
+
+uint mmc_get_env_part(struct mmc *mmc)
+{
+ uint part;
+
+ if (mmc->part_config == MMCPART_NOAVAILABLE) {
+ part = 0;
+ } else {
+ switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
+ case 0: /* Booting from this eMMC device is disabled */
+ printf("Error - Booting from this eMMC device is disabled\n");
+ printf("Hint: Use 'mmc partconf' command to choose boot partition\n");
+ return -ENODEV;
+ case 1: /* Boot partition 1 is used for booting */
+ part = 1;
+ break;
+ case 2: /* Boot partition 2 is used for booting */
+ part = 2;
+ break;
+ case 7: /* User area is used for booting */
+ part = 0;
+ break;
+ default: /* Other values are reserved / unsupported */
+ printf("Error - This eMMC device has configured Reserved boot option\n");
+ printf("Hint: Use 'mmc partconf' command to choose boot partition\n");
+ return -ENODEV;
+ }
+ }
+
+ 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 " \
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions
2023-04-21 10:56 ` [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions Fabio Estevam
@ 2023-04-21 18:10 ` Pali Rohár
2023-04-24 11:09 ` Fabio Estevam
0 siblings, 1 reply; 15+ messages in thread
From: Pali Rohár @ 2023-04-21 18:10 UTC (permalink / raw)
To: Fabio Estevam; +Cc: sbabic, eduard, u-boot, Fabio Estevam
On Friday 21 April 2023 07:56:50 Fabio Estevam wrote:
> +uint mmc_get_env_part(struct mmc *mmc)
> +{
> + uint part;
> +
> + if (mmc->part_config == MMCPART_NOAVAILABLE) {
> + part = 0;
> + } else {
> + switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
> + case 0: /* Booting from this eMMC device is disabled */
> + printf("Error - Booting from this eMMC device is disabled\n");
> + printf("Hint: Use 'mmc partconf' command to choose boot partition\n");
> + return -ENODEV;
This does not look to be correct. Return type of the function is uint
but here you are trying to return negative number.
I think that there is some layering or API issue. Caller of this
function probably does not expect any failure and use returned value as
partition number. But you are reading partition number from the source
which may return failure (as the source does not have to contain it).
I'm not sure what is the correct way how to handle these kind of error.
I hope that this is something which you would know.
Which partition want to choose? Same from which was u-boot/spl loaded at
runtime? If yes then maybe this my patch series for mvebu may be
interested for you:
https://lore.kernel.org/u-boot/20230413205750.10641-1-pali@kernel.org/t/#u
I added there ability to store emmc partition from which was bootloader
loaded into access bits of mmc->part_config variable and then via macro
EXT_CSD_EXTRACT_PARTITION_ACCESS() it can be extracted. See function
spl_mmc_emmc_boot_partition() in that mvebu patch series.
But I'm not sure how reliable access bits of mmc->part_config are on
other platforms. As currently only mvebu in that patch series is doing
to use it.
> + case 1: /* Boot partition 1 is used for booting */
> + part = 1;
> + break;
> + case 2: /* Boot partition 2 is used for booting */
> + part = 2;
> + break;
> + case 7: /* User area is used for booting */
> + part = 0;
> + break;
> + default: /* Other values are reserved / unsupported */
> + printf("Error - This eMMC device has configured Reserved boot option\n");
> + printf("Hint: Use 'mmc partconf' command to choose boot partition\n");
> + return -ENODEV;
> + }
> + }
> +
> + return part;
> +}
^ permalink raw reply [flat|nested] 15+ messages in thread* Re: [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions
2023-04-21 18:10 ` Pali Rohár
@ 2023-04-24 11:09 ` Fabio Estevam
0 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-24 11:09 UTC (permalink / raw)
To: Pali Rohár; +Cc: sbabic, eduard, u-boot, Fabio Estevam
Hi Pali,
On Fri, Apr 21, 2023 at 3:11 PM Pali Rohár <pali@kernel.org> wrote:
> This does not look to be correct. Return type of the function is uint
> but here you are trying to return negative number.
>
> I think that there is some layering or API issue. Caller of this
> function probably does not expect any failure and use returned value as
> partition number. But you are reading partition number from the source
> which may return failure (as the source does not have to contain it).
>
> I'm not sure what is the correct way how to handle these kind of error.
> I hope that this is something which you would know.
Thanks for your feedback.
Talked to Eduard and we prefer to go with a simpler implementation of
board_mmc_get_env_part(),
just like the one from board/purism/librem5/librem5.c.
The librem5 board is based on the imx8mq, which has the same esdhc
controller as the imx7d and
it works well in our case. Will send a v3.
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 08/13] smegw01: Change default boot device to eMMC
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (5 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 7/7] smegw01: Enable EMMC boot from multiple partitions Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 09/13] smegw01: Switch to fitImage Fabio Estevam
` (4 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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} " \
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 09/13] smegw01: Switch to fitImage
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (6 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 08/13] smegw01: Change default boot device to eMMC Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 10/13] smegw01: Add lockdown U-Boot env support Fabio Estevam
` (3 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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" \
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 10/13] smegw01: Add lockdown U-Boot env support
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (7 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 09/13] smegw01: Switch to fitImage Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 11/13] smegw01: Read the second MAC address Fabio Estevam
` (2 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 11/13] smegw01: Read the second MAC address
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (8 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 10/13] smegw01: Add lockdown U-Boot env support Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH v2 12/13] smegw01: Disable additional boot menu options Fabio Estevam
2023-04-21 10:56 ` [PATCH 13/13] smegw01: Fix fallback to altbootcmd Fabio Estevam
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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;
}
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 12/13] smegw01: Disable additional boot menu options
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (9 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 11/13] smegw01: Read the second MAC address Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
2023-04-21 10:56 ` [PATCH 13/13] smegw01: Fix fallback to altbootcmd Fabio Estevam
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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; "
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 13/13] smegw01: Fix fallback to altbootcmd
2023-04-21 10:56 [PATCH v2 01/13] smegw01: Enable setting additional boot params Fabio Estevam
` (10 preceding siblings ...)
2023-04-21 10:56 ` [PATCH v2 12/13] smegw01: Disable additional boot menu options Fabio Estevam
@ 2023-04-21 10:56 ` Fabio Estevam
11 siblings, 0 replies; 15+ messages in thread
From: Fabio Estevam @ 2023-04-21 10:56 UTC (permalink / raw)
To: sbabic; +Cc: eduard, u-boot, Fabio Estevam
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 v1:
- 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
--
2.38.1
^ permalink raw reply related [flat|nested] 15+ messages in thread