[PATCH v2 1/2] imx8mp: configs: add support for distro boot commands

From: Alice Guo alice.guo@nxp.com
Supported boot device types in iMX8MP: MMC.
CONFIG_CMD_PART is added for command part and CONFIG_CMD_FS_GENERIC is for command fstype.
scriptaddr is the location in RAM where boot.scr.uimg/boot.scr will be loaded to prior to execution. kernel_addr_r is the location in RAM where the kernel will be loaded to. Delete unnecessary environment variables because "run distro_bootcmd" is set to be the default boot mode.
On the iMX8MP platform I used, "mmc1" represents SD card and "mmc2" represents eMMC.
Signed-off-by: Alice Guo alice.guo@nxp.com ---
Changes for v2: - re-add boot_fit, initrd_addr and bootm_size which may need to be used
configs/imx8mp_evk_defconfig | 2 ++ include/configs/imx8mp_evk.h | 63 +++++++----------------------------- 2 files changed, 13 insertions(+), 52 deletions(-)
diff --git a/configs/imx8mp_evk_defconfig b/configs/imx8mp_evk_defconfig index cd5724e811..7831a940a3 100644 --- a/configs/imx8mp_evk_defconfig +++ b/configs/imx8mp_evk_defconfig @@ -51,6 +51,8 @@ CONFIG_CMD_EXT2=y CONFIG_CMD_EXT4=y CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_FAT=y +CONFIG_CMD_PART=y +CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_SPL_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y diff --git a/include/configs/imx8mp_evk.h b/include/configs/imx8mp_evk.h index 8253c6aa2f..fd7ec45b16 100644 --- a/include/configs/imx8mp_evk.h +++ b/include/configs/imx8mp_evk.h @@ -44,9 +44,19 @@
#endif
+#ifndef CONFIG_SPL_BUILD +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 1) \ + func(MMC, mmc, 2) + +#include <config_distro_bootcmd.h> +#endif + /* Initial environment variables */ #define CONFIG_EXTRA_ENV_SETTINGS \ - "script=boot.scr\0" \ + BOOTENV \ + "scriptaddr=0x43500000\0" \ + "kernel_addr_r=0x40880000\0" \ "image=Image\0" \ "console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200\0" \ "fdt_addr=0x43000000\0" \ @@ -54,59 +64,8 @@ "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \ "initrd_addr=0x43800000\0" \ "bootm_size=0x10000000\0" \ - "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \ "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \ "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \ - "mmcautodetect=yes\0" \ - "mmcargs=setenv bootargs ${jh_clk} console=${console} root=${mmcroot}\0 " \ - "loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \ - "bootscript=echo Running bootscript from mmc ...; " \ - "source\0" \ - "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ - "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ - "mmcboot=echo Booting from mmc ...; " \ - "run mmcargs; " \ - "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ - "if run loadfdt; then " \ - "booti ${loadaddr} - ${fdt_addr}; " \ - "else " \ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "else " \ - "echo wait for boot; " \ - "fi;\0" \ - "netargs=setenv bootargs ${jh_clk} console=${console} " \ - "root=/dev/nfs " \ - "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ - "netboot=echo Booting from net ...; " \ - "run netargs; " \ - "if test ${ip_dyn} = yes; then " \ - "setenv get_cmd dhcp; " \ - "else " \ - "setenv get_cmd tftp; " \ - "fi; " \ - "${get_cmd} ${loadaddr} ${image}; " \ - "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ - "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \ - "booti ${loadaddr} - ${fdt_addr}; " \ - "else " \ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "else " \ - "booti; " \ - "fi;\0" - -#define CONFIG_BOOTCOMMAND \ - "mmc dev ${mmcdev}; if mmc rescan; then " \ - "if run loadbootscript; then " \ - "run bootscript; " \ - "else " \ - "if run loadimage; then " \ - "run mmcboot; " \ - "else run netboot; " \ - "fi; " \ - "fi; " \ - "else booti ${loadaddr} - ${fdt_addr}; fi"
/* Link Definitions */ #define CONFIG_LOADADDR 0x40480000 -- 2.17.1

From: Alice Guo alice.guo@nxp.com
Distro Boot requires a U-Boot-specific script named boot.scr or boot.scr.uimg which contains boot commands to boot the system. The boot.cmd is such a file. Use mkimage to generate boot.scr or boot.scr.uimg from boot.cmd, and the command is: mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro Boot Script" -d boot.cmd boot.scr.uimg
The boot.cmd file is an example script and can be modified based on needs. bootargs is set in this script and root uses the default value "/dev/mmcblk1p2 rootwait rw" which can be changed by overriding mmcroot.
Signed-off-by: Alice Guo alice.guo@nxp.com ---
Changes for v2: - none
board/freescale/imx8mp_evk/boot.cmd | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 board/freescale/imx8mp_evk/boot.cmd
diff --git a/board/freescale/imx8mp_evk/boot.cmd b/board/freescale/imx8mp_evk/boot.cmd new file mode 100644 index 0000000000..10bcced774 --- /dev/null +++ b/board/freescale/imx8mp_evk/boot.cmd @@ -0,0 +1,25 @@ +setenv bootargs console=${console} root=${mmcroot}; + +for boot_target in ${boot_targets}; +do + if test "${boot_target}" = "mmc1" ; then + if fatload mmc 1:${mmcpart} ${kernel_addr_r} ${image}; then + if fatload mmc 1:${mmcpart} ${fdt_addr} ${fdt_file}; then + echo Load image and .dtb from SD card(mmc1); + booti ${kernel_addr_r} - ${fdt_addr}; + exit; + fi + fi + fi + + if test "${boot_target}" = "mmc2" ; then + if fatload mmc 2:${mmcpart} ${kernel_addr_r} ${image}; then + if fatload mmc 2:${mmcpart} ${fdt_addr} ${fdt_file}; then + echo Load image and .dtb from eMMC(mmc2); + booti ${kernel_addr_r} - ${fdt_addr}; + exit; + fi + fi + fi + +done -- 2.17.1

Hi Alice,
On Fri, Dec 18, 2020 at 4:20 AM Alice Guo (OSS) alice.guo@oss.nxp.com wrote:
+++ b/board/freescale/imx8mp_evk/boot.cmd @@ -0,0 +1,25 @@ +setenv bootargs console=${console} root=${mmcroot};
+for boot_target in ${boot_targets};
This is not how distro boot support works.
boot.scr or extlinux.conf scripts should be provided by the distro itself (Yocto, Buildroot, Debian, etc), and not from U-Boot.
Each distro has its own partitioning mechanism and may store the kernel, dtb in different locations.

-----Original Message----- From: Fabio Estevam festevam@gmail.com Sent: 2020年12月18日 19:03 To: Alice Guo (OSS) alice.guo@oss.nxp.com Cc: Stefano Babic sbabic@denx.de; Peng Fan peng.fan@nxp.com; dl-uboot-imx uboot-imx@nxp.com; Ye Li ye.li@nxp.com; U-Boot-Denx u-boot@lists.denx.de; Alice Guo alice.guo@nxp.com; Otavio Salvador otavio@ossystems.com.br; andrey.zhizhikin@leica-geosystems.com Subject: [EXT] Re: [PATCH v2 2/2] board: imx8mp: add boot.cmd for distro boot on iMX8MP
Caution: EXT Email
Hi Alice,
On Fri, Dec 18, 2020 at 4:20 AM Alice Guo (OSS) alice.guo@oss.nxp.com wrote:
+++ b/board/freescale/imx8mp_evk/boot.cmd @@ -0,0 +1,25 @@ +setenv bootargs console=${console} root=${mmcroot};
+for boot_target in ${boot_targets};
This is not how distro boot support works.
boot.scr or extlinux.conf scripts should be provided by the distro itself (Yocto, Buildroot, Debian, etc), and not from U-Boot.
Each distro has its own partitioning mechanism and may store the kernel, dtb in different locations.
Hi, Can you tell me where I can see more details about boot.scr? I didn't see that " boot.scr or extlinux.conf scripts should be provided by the distro itself". Thank you.
Alice

Hi Alice,
On Fri, Dec 18, 2020 at 8:10 AM Alice Guo (OSS) alice.guo@oss.nxp.com wrote:
Can you tell me where I can see more details about boot.scr? I didn't see that " boot.scr or extlinux.conf scripts should be provided by the distro itself".
I suppose you want to test it using Yocto, so take a look at wandboard.conf as reference:
https://github.com/Freescale/meta-freescale-3rdparty/blob/master/conf/machin...
UBOOT_EXTLINUX = "1" UBOOT_EXTLINUX_ROOT = "root=PARTUUID=${uuid}" UBOOT_EXTLINUX_CONSOLE = "console=${console},${baudrate}"
Yocto will then generate and place a extlinux.conf file in the rootfs.
Please make sure you align with the NXP Yocto folks and test booting via distro boot.

boot.scr is only in distro boot because prior to standardising in extlinux.conf or grub vie efi, distros provided boot.scr files that were tailored for each board with detailed staps and memory locations to load the kernel, dtb, and initramfs. the scripts were wrapped by mkimage and at this point I would consider it to be a legacy thing that possibly should be considered for deprecation. grub, extlinux, or boot.scr should all be provided by the distro. u-boot just nees to load whats provided.
Dennis
On Fri, Dec 18, 2020 at 5:11 AM Alice Guo (OSS) alice.guo@oss.nxp.com wrote:
-----Original Message----- From: Fabio Estevam festevam@gmail.com Sent: 2020年12月18日 19:03 To: Alice Guo (OSS) alice.guo@oss.nxp.com Cc: Stefano Babic sbabic@denx.de; Peng Fan peng.fan@nxp.com; dl-uboot-imx uboot-imx@nxp.com; Ye Li ye.li@nxp.com; U-Boot-Denx u-boot@lists.denx.de; Alice Guo alice.guo@nxp.com; Otavio Salvador otavio@ossystems.com.br; andrey.zhizhikin@leica-geosystems.com Subject: [EXT] Re: [PATCH v2 2/2] board: imx8mp: add boot.cmd for distro boot on iMX8MP
Caution: EXT Email
Hi Alice,
On Fri, Dec 18, 2020 at 4:20 AM Alice Guo (OSS) alice.guo@oss.nxp.com wrote:
+++ b/board/freescale/imx8mp_evk/boot.cmd @@ -0,0 +1,25 @@ +setenv bootargs console=${console} root=${mmcroot};
+for boot_target in ${boot_targets};
This is not how distro boot support works.
boot.scr or extlinux.conf scripts should be provided by the distro itself (Yocto, Buildroot, Debian, etc), and not from U-Boot.
Each distro has its own partitioning mechanism and may store the kernel, dtb in different locations.
Hi, Can you tell me where I can see more details about boot.scr? I didn't see that " boot.scr or extlinux.conf scripts should be provided by the distro itself". Thank you.
Alice

From: Alice Guo alice.guo@nxp.com Distro Boot requires a U-Boot-specific script named boot.scr or boot.scr.uimg which contains boot commands to boot the system. The boot.cmd is such a file. Use mkimage to generate boot.scr or boot.scr.uimg from boot.cmd, and the command is: mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro Boot Script" -d boot.cmd boot.scr.uimg The boot.cmd file is an example script and can be modified based on needs. bootargs is set in this script and root uses the default value "/dev/mmcblk1p2 rootwait rw" which can be changed by overriding mmcroot. Signed-off-by: Alice Guo alice.guo@nxp.com
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

Hi Stefano,
I really do not think that this patch should have been merged. It is not the preferred way to boot distros and is left in for legacy support only. We probably should make it as such.
Dennis
On Sat, Jan 23, 2021 at 9:53 AM sbabic@denx.de wrote:
From: Alice Guo alice.guo@nxp.com Distro Boot requires a U-Boot-specific script named boot.scr or boot.scr.uimg which contains boot commands to boot the system. The boot.cmd is such a file. Use mkimage to generate boot.scr or boot.scr.uimg from boot.cmd, and the command is: mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro Boot Script" -d boot.cmd boot.scr.uimg The boot.cmd file is an example script and can be modified based on needs. bootargs is set in this script and root uses the default value "/dev/mmcblk1p2 rootwait rw" which can be changed by overriding mmcroot. Signed-off-by: Alice Guo alice.guo@nxp.com
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic@denx.de =====================================================================

On Wed, Feb 10, 2021 at 4:28 PM Dennis Gilmore dgilmore@fedoraproject.org wrote:
Hi Stefano,
I really do not think that this patch should have been merged. It is not the preferred way to boot distros and is left in for legacy support only. We probably should make it as such.
Yes, I agree with Dennis. We both provided feedback to Alice that this is not the preferred way to deal with boot distro.
Thanks

Hi everybody,
On 10.02.21 20:36, Fabio Estevam wrote:
On Wed, Feb 10, 2021 at 4:28 PM Dennis Gilmore dgilmore@fedoraproject.org wrote:
Hi Stefano,
I really do not think that this patch should have been merged. It is not the preferred way to boot distros and is left in for legacy support only. We probably should make it as such.
Well, patch is already merged and to get back a post for a revert or a follow up patch is needed.
Yes, I agree with Dennis. We both provided feedback to Alice that this is not the preferred way to deal with boot distro.
I tend to let freedom to the board maintainers how they want / need to setup the linked environment, because this does not affect common i.MX code - so Fabio and Peng (the board maintainers) decide here.
Regards, Stefano

From: Alice Guo alice.guo@nxp.com Supported boot device types in iMX8MP: MMC. CONFIG_CMD_PART is added for command part and CONFIG_CMD_FS_GENERIC is for command fstype. scriptaddr is the location in RAM where boot.scr.uimg/boot.scr will be loaded to prior to execution. kernel_addr_r is the location in RAM where the kernel will be loaded to. Delete unnecessary environment variables because "run distro_bootcmd" is set to be the default boot mode. On the iMX8MP platform I used, "mmc1" represents SD card and "mmc2" represents eMMC. Signed-off-by: Alice Guo alice.guo@nxp.com
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic
participants (5)
-
Alice Guo (OSS)
-
Dennis Gilmore
-
Fabio Estevam
-
sbabic@denx.de
-
Stefano Babic