Hi Petr, [this time to the ML]
On 16.12.2018 12:06, Petr Štetiar wrote: > I'm preparing support for Apalis imx6 boards in OpenWrt and I've ended > up with quite huge patchset against upstream U-Boot 2018.03, so I'm > trying to propose more generic way of boot process handling. I agree a more flexible boot process would be better. There is distro boot for that purpose, and I suggest using that by default. We did enable distro boot in our downstream U-Boot [1] and also make use of it in the Toradex Easy Installer [2] configuration (run distro_bootcmd). Also check doc/README.distro. I think it should not need changes on OpenWrt side since distro boot loads and executes boot.scr. Additionally, it also guarantees that some variables are setup (e.g. devtype, devnum and distro_bootpart) which allows to write generic boot scripts. [1] http://git.toradex.com/cgit/u-boot-toradex.git/commit/include/configs/apalis_imx6.h?h=2016.11-toradex-next&id=a283b85daaefbe11a5a7b53ea06b5b76c54c155a [2] http://git.toradex.com/cgit/u-boot-toradex.git/commit/?h=2016.11-toradex-next&id=32c022da358ae016a84cf1dd9bd558a02f979b1a -- Stefan > > In OpenWrt we usually have kernel, dtbs and U-Boot boot script in boot > partition with ext4fs, so for some use cases it would be handy to be > able to replace some of the files in the boot partion, that's why I've > added write support to the ext4. > > I've added `set_blkcnt` environment variable which is needed for every > `mmc write` command as we need to always specify size in block count. > This is copy&pasted from official Toradex's flashing scripts, so all the > credits for this work belongs to them. > > Currently the rootfs location is passed via mmcblk number and the > problem with this approach is that the mmcblk number for the boot device > changes depending on the kernel version and imx6 SoC type. In order to > avoid such issues, use the UUID method to specify the rootfs location. > > I've added new boot sequence, where we first try to load and run boot > script defined in the new `script` variable, so the boot process could > be more generic and overridden by the distro. When the boot script isn't > loaded, it will use the previous boot sequence. > > For the recovery purposes and better end user experience I've added boot > from SDP as the last boot command if every other boot option fails. I > plan to use SDP as official flashing/recovery procedure in OpenWrt for > Apalis imx6 boards. > > I've copy&pasted almost everything from the `f086812a mx6sxsabresd: Use > PARTUUID to specify the rootfs location` commit, so credits for the rest > of this patch belongs to Fabio. > > Cc: Stefan Agner <stefan.ag...@toradex.com> > Cc: Max Krummenacher <max.krummenac...@toradex.com> > Signed-off-by: Petr Štetiar <yn...@true.cz> > --- > configs/apalis_imx6_defconfig | 2 ++ > include/configs/apalis_imx6.h | 26 +++++++++++++++++++++----- > 2 files changed, 23 insertions(+), 5 deletions(-) > > Changes since v1: > > * Made note about ext4 write support more clear > * I've removed Kconfig variables and all variables which were > coupled to the code > * I've removed the note about backward compatibility from commit message, > because I've realized, that this changes are not backward compatible, > because this patch is switching to part UUID, so the distributions would > need to provide filesystem with part UUID for rootfs. > > diff --git a/configs/apalis_imx6_defconfig b/configs/apalis_imx6_defconfig > index 133fc1a..279d39f 100644 > --- a/configs/apalis_imx6_defconfig > +++ b/configs/apalis_imx6_defconfig > @@ -39,6 +39,7 @@ CONFIG_CMD_DFU=y > CONFIG_CMD_GPIO=y > CONFIG_CMD_I2C=y > CONFIG_CMD_MMC=y > +CONFIG_CMD_PART=y > CONFIG_CMD_USB=y > CONFIG_CMD_USB_SDP=y > CONFIG_CMD_USB_MASS_STORAGE=y > @@ -48,6 +49,7 @@ CONFIG_CMD_PING=y > CONFIG_CMD_BMP=y > CONFIG_CMD_CACHE=y > CONFIG_CMD_EXT4=y > +CONFIG_CMD_EXT4_WRITE=y > CONFIG_CMD_FAT=y > CONFIG_CMD_FS_GENERIC=y > CONFIG_ENV_IS_IN_MMC=y > diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h > index 135b3c9..3601891 100644 > --- a/include/configs/apalis_imx6.h > +++ b/include/configs/apalis_imx6.h > @@ -142,9 +142,9 @@ > "imx6q-colibri-cam-eval-v3.dtb fat 0 1" > > #define EMMC_BOOTCMD \ > - "emmcargs=ip=off root=/dev/mmcblk0p2 rw,noatime rootfstype=ext3 " \ > + "emmcargs=ip=off root=PARTUUID=${uuid} rw,noatime rootfstype=ext3 " \ > "rootwait\0" \ > - "emmcboot=run setup; " \ > + "emmcboot=run setup; run finduuid;" \ > "setenv bootargs ${defargs} ${emmcargs} ${setupargs} " \ > "${vidargs}; echo Booting from internal eMMC chip...; " \ > "run emmcdtbload; load mmc 0:1 ${kernel_addr_r} " \ > @@ -201,10 +201,17 @@ > #define FDT_FILE "imx6q-apalis_v1_0-eval.dtb" > #endif > #define CONFIG_EXTRA_ENV_SETTINGS \ > - "bootcmd=run emmcboot ; echo ; echo emmcboot failed ; " \ > + "script=boot.scr\0" \ > + "finduuid=part uuid mmc 0:2 uuid\0" \ > + "loadbootscript=" \ > + "load mmc 0:1 ${loadaddr} ${script};\0" \ > + "bootscript=echo Running bootscript from mmc ...; " \ > + "source\0" \ > + "bootcmd_default=run emmcboot ; echo ; echo emmcboot failed ; " \ > "run nfsboot ; echo ; echo nfsboot failed ; " \ > "usb start ;" \ > - "setenv stdout serial,vga ; setenv stdin serial,usbkbd\0" \ > + "setenv stdout serial,vga ; setenv stdin serial,usbkbd;" \ > + "sdp 0\0" \ > "boot_file=uImage\0" \ > "console=ttymxc0\0" \ > "defargs=enable_wait_mode=off vmalloc=400M\0" \ > @@ -232,7 +239,16 @@ > "vidargs=mxc_hdmi.only_cea=1 " \ > "video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 " \ > "video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off " \ > - "fbmem=32M\0 " > + "fbmem=32M\0 " \ > + "set_blkcnt=setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt > ${blkcnt} / 0x200\0" > + > +#define CONFIG_BOOTCOMMAND \ > + "mmc dev 0;" \ > + "if run loadbootscript; then " \ > + "run bootscript; " \ > + "else " \ > + "run bootcmd_default; " \ > + "fi; " > > /* Miscellaneous configurable options */ > #undef CONFIG_SYS_CBSIZE _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot