[PATCH 0/2] ARM: stm32: env: Enable scan and start for AB schema on STM32MP15 DHSOM

For the STM32MP15 DHSOM, change the default environment so an AB schema on a device can be detected.
The first patch makes possible to substitute the 'part list' command inside 'scan_dev_for_boot_part' with a custom board specific implementation.
The second patch uses the change of the first patch to plug the board specific code for booting from AB into the standard boot of all boot targets at the STM32MP15 DHSOM.
The detection works by looking for the partitions with specific lables. The name of those partitions are in the variables and its defaults: * dh_ab_partname_primary=rootfs-a * dh_ab_partname_secondary=rootfs-b
To prevent being hanging at bootcmd, enable "CONFIG_BOOT_RETRY" and "CONFIG_RESET_TO_RETRY", but the timer will only be activated, if the AB partitions are detected.
Pascal Zimmermann (2): config_distro_bootcmd: make possible to substitute 'part list' in distro_bootcmd ARM: stm32: env: Enable scan and start for AB schema on STM32MP15 DHSOM
configs/stm32mp15_dhsom.config | 3 +++ include/config_distro_bootcmd.h | 7 +++++- include/configs/stm32mp15_dh_dhsom.h | 33 ++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-)
Signed-off-by: Pascal Zimmermann pzimmermann@dh-electronics.com --- Cc: Marek Vasut marex@denx.de Cc: Patrick Delaunay patrick.delaunay@foss.st.com Cc: Patrice Chotard patrice.chotard@foss.st.com Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org Cc: u-boot@dh-electronics.com Cc: uboot-stm32@st-md-mailman.stormreply.com Cc: u-boot@lists.denx.de

Make it possible to substitute the 'part list' command inside 'scan_dev_for_boot_part' with a custom board specific implementation.
For this the new define 'SCAN_DEV_FOR_BOOT_PARTS' is introduced.
Signed-off-by: Pascal Zimmermann pzimmermann@dh-electronics.com --- Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org Cc: u-boot@lists.denx.de --- include/config_distro_bootcmd.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h index 0a4e4b8ff8..df0dc8cfde 100644 --- a/include/config_distro_bootcmd.h +++ b/include/config_distro_bootcmd.h @@ -194,6 +194,11 @@ #define SCAN_DEV_FOR_EFI #endif
+#ifndef SCAN_DEV_FOR_BOOT_PARTS +#define SCAN_DEV_FOR_BOOT_PARTS \ + "part list ${devtype} ${devnum} -bootable devplist; " +#endif + #ifdef CONFIG_SATA #define BOOTENV_SHARED_SATA BOOTENV_SHARED_BLKDEV(sata) #define BOOTENV_DEV_SATA BOOTENV_DEV_BLKDEV @@ -538,7 +543,7 @@ "\0" \ \ "scan_dev_for_boot_part=" \ - "part list ${devtype} ${devnum} -bootable devplist; " \ + SCAN_DEV_FOR_BOOT_PARTS \ "env exists devplist || setenv devplist 1; " \ "for distro_bootpart in ${devplist}; do " \ "if fstype ${devtype} " \

Hi Pascal,
On Wed, 27 Nov 2024 at 03:30, Pascal Zimmermann pzimmermann@dh-electronics.com wrote:
Make it possible to substitute the 'part list' command inside 'scan_dev_for_boot_part' with a custom board specific implementation.
For this the new define 'SCAN_DEV_FOR_BOOT_PARTS' is introduced.
Signed-off-by: Pascal Zimmermann pzimmermann@dh-electronics.com
Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org Cc: u-boot@lists.denx.de
include/config_distro_bootcmd.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
Have you looked at converting the board to standard boot?
diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h index 0a4e4b8ff8..df0dc8cfde 100644 --- a/include/config_distro_bootcmd.h +++ b/include/config_distro_bootcmd.h @@ -194,6 +194,11 @@ #define SCAN_DEV_FOR_EFI #endif
+#ifndef SCAN_DEV_FOR_BOOT_PARTS +#define SCAN_DEV_FOR_BOOT_PARTS \
"part list ${devtype} ${devnum} -bootable devplist; "
+#endif
#ifdef CONFIG_SATA #define BOOTENV_SHARED_SATA BOOTENV_SHARED_BLKDEV(sata) #define BOOTENV_DEV_SATA BOOTENV_DEV_BLKDEV @@ -538,7 +543,7 @@ "\0" \ \ "scan_dev_for_boot_part=" \
"part list ${devtype} ${devnum} -bootable devplist; " \
SCAN_DEV_FOR_BOOT_PARTS \ "env exists devplist || setenv devplist 1; " \ "for distro_bootpart in ${devplist}; do " \ "if fstype ${devtype} " \
-- 2.30.2
Regards, Simon

For the STM32MP15 DHSOM, change the default environment so an AB schema on a device can be detected.
For this the define "SCAN_DEV_FOR_BOOT_PARTS" is overwritten and appended.
The detection works by looking for the partitions with specific lables. The name of those partitions are in the variables and its defaults: * dh_ab_partname_primary=rootfs-a * dh_ab_partname_secondary=rootfs-b
To prevent being hanging at bootcmd, enable "CONFIG_BOOT_RETRY" and "CONFIG_RESET_TO_RETRY", but the timer will only be activated, if the AB partitions are detected.
Signed-off-by: Pascal Zimmermann pzimmermann@dh-electronics.com --- Cc: Marek Vasut marex@denx.de Cc: Patrick Delaunay patrick.delaunay@foss.st.com Cc: Patrice Chotard patrice.chotard@foss.st.com Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org Cc: u-boot@dh-electronics.com Cc: uboot-stm32@st-md-mailman.stormreply.com Cc: u-boot@lists.denx.de --- configs/stm32mp15_dhsom.config | 3 +++ include/configs/stm32mp15_dh_dhsom.h | 33 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+)
diff --git a/configs/stm32mp15_dhsom.config b/configs/stm32mp15_dhsom.config index efc149577e..22d8bd3241 100644 --- a/configs/stm32mp15_dhsom.config +++ b/configs/stm32mp15_dhsom.config @@ -10,6 +10,9 @@ CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_SIZE_LIMIT=1441792 CONFIG_BOOTCOUNT_BOOTLIMIT=3 CONFIG_BOOTDELAY=1 +CONFIG_BOOTRETRY=y +CONFIG_RESET_TO_RETRY=y +CONFIG_BOOT_RETRY_TIME=-1 CONFIG_CMD_ADC=y CONFIG_CMD_REMOTEPROC=y CONFIG_CMD_STBOARD=y diff --git a/include/configs/stm32mp15_dh_dhsom.h b/include/configs/stm32mp15_dh_dhsom.h index c004a8cec8..267e344677 100644 --- a/include/configs/stm32mp15_dh_dhsom.h +++ b/include/configs/stm32mp15_dh_dhsom.h @@ -17,7 +17,40 @@ " 0x800000\0" #endif
+/* Add the search for AB partitons */ +#define SCAN_DEV_FOR_BOOT_PARTS \ + "run dh_check_if_ab; " \ + "if test -z "${devplist}"; " \ + "then " \ + "part list ${devtype} ${devnum} -bootable devplist; " \ + "fi; " + #define STM32MP_BOARD_EXTRA_ENV \ + "altbootcmd= " \ + "setenv dh_ab_get_partnames " \ + "'setenv dh_ab_partnames ${dh_ab_partname_secondary} " \ + "${dh_ab_partname_primary}' && " \ + "run bootcmd\0" \ + "dh_check_if_ab= " /* Sets devplist if AB partitions*/ \ + "echo test for AB on ${devtype} ${devnum} && " \ + "run dh_ab_get_partnames && " \ + "setenv devplist && " \ + "for partname in ${dh_ab_partnames}; do " \ + "setenv partnum && " \ + "if part number ${devtype} ${devnum} ${partname} partnum; "\ + "then " \ + "setenv devplist "${devplist} ${partnum}" && "\ + "setenv bootretry 60 ;" \ + "fi; " \ + "done ; " \ + "if test -n "${devplist}"; " \ + "then echo AB partitions found! ; " \ + "fi\0" \ + "dh_ab_get_partnames= " /* Sets dh_ab_partnames */ \ + "setenv dh_ab_partnames ${dh_ab_partname_primary} " \ + "${dh_ab_partname_secondary}\0" \ + "dh_ab_partname_primary=rootfs-a\0" /* Names of AB partitions */\ + "dh_ab_partname_secondary=rootfs-b\0" \ "dh_preboot=" \ "run dh_testbench_backward_compat\0" \ "dh_update_sd_to_emmc=" /* Install U-Boot from SD to eMMC */ \

On 11/27/24 11:29 AM, Pascal Zimmermann wrote:
Please CC me on the entire series.
diff --git a/configs/stm32mp15_dhsom.config b/configs/stm32mp15_dhsom.config index efc149577e..22d8bd3241 100644 --- a/configs/stm32mp15_dhsom.config +++ b/configs/stm32mp15_dhsom.config @@ -10,6 +10,9 @@ CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_SIZE_LIMIT=1441792 CONFIG_BOOTCOUNT_BOOTLIMIT=3 CONFIG_BOOTDELAY=1 +CONFIG_BOOTRETRY=y +CONFIG_RESET_TO_RETRY=y +CONFIG_BOOT_RETRY_TIME=-1 CONFIG_CMD_ADC=y CONFIG_CMD_REMOTEPROC=y CONFIG_CMD_STBOARD=y diff --git a/include/configs/stm32mp15_dh_dhsom.h b/include/configs/stm32mp15_dh_dhsom.h index c004a8cec8..267e344677 100644 --- a/include/configs/stm32mp15_dh_dhsom.h +++ b/include/configs/stm32mp15_dh_dhsom.h @@ -17,7 +17,40 @@ " 0x800000\0" #endif
+/* Add the search for AB partitons */ +#define SCAN_DEV_FOR_BOOT_PARTS \
- "run dh_check_if_ab; " \
- "if test -z "${devplist}"; " \
"then " \
"then" can be part of the previous line
"part list ${devtype} ${devnum} -bootable devplist; " \
- "fi; "
- #define STM32MP_BOARD_EXTRA_ENV \
- "altbootcmd= " \
- "setenv dh_ab_get_partnames " \
"'setenv dh_ab_partnames ${dh_ab_partname_secondary} " \
"${dh_ab_partname_primary}' && " \
"run bootcmd\0" \
- "dh_check_if_ab= " /* Sets devplist if AB partitions*/ \
"echo test for AB on ${devtype} ${devnum} && " \
"run dh_ab_get_partnames && " \
"setenv devplist && " \
"for partname in ${dh_ab_partnames}; do " \
"setenv partnum && " \
"if part number ${devtype} ${devnum} ${partname} partnum; "\
"then " \
"setenv devplist \"${devplist} ${partnum}\" && "\
"setenv bootretry 60 ;" \
"fi; " \
"done ; " \
"if test -n \"${devplist}\"; " \
"then echo AB partitions found! ; " \
"fi\0" \
- "dh_ab_get_partnames= " /* Sets dh_ab_partnames */ \
"setenv dh_ab_partnames ${dh_ab_partname_primary} " \
"${dh_ab_partname_secondary}\0" \
- "dh_ab_partname_primary=rootfs-a\0" /* Names of AB partitions */\
- "dh_ab_partname_secondary=rootfs-b\0" \ "dh_preboot=" \ "run dh_testbench_backward_compat\0" \ "dh_update_sd_to_emmc=" /* Install U-Boot from SD to eMMC */ \
I suspect this also applies to other DHSOM, so this should be moved to some common include/configs/dh_dhsom.h and renamed to #define DH_AB_UPDATE_EXTRA_ENV . The common dh_dhsom.h can be included in stm32mp15_dh_dhsom.h , matching stm32mp13 DHSOM header , imx8mp_dhcom_pdk2.h , dh_imx6.h and DH_AB_UPDATE_EXTRA_ENV inserted into each board extra environment . The configs/ change should be in configs/dhsom.config fragment . That way, all DHSOM will consistently support the same AB detection and handling mechanism .
participants (3)
-
Marek Vasut
-
Pascal Zimmermann
-
Simon Glass