From 136001675e09d1288cdbb4302ac2455a4655ba32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0tetiar?= Date: Mon, 26 Nov 2018 23:31:53 +0100 Subject: [PATCH] uboot-imx6: Add support for Toradex Apalis board family MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch is needed in order to properly boot OpenWrt bootscript. Signed-off-by: Petr Štetiar --- package/boot/uboot-imx6/Makefile | 7 + ...s-Make-the-boot-process-more-generic.patch | 127 ++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 package/boot/uboot-imx6/patches/0001-imx6-apalis-Make-the-boot-process-more-generic.patch diff --git a/package/boot/uboot-imx6/Makefile b/package/boot/uboot-imx6/Makefile index 25d68bf6ca..f431afc525 100644 --- a/package/boot/uboot-imx6/Makefile +++ b/package/boot/uboot-imx6/Makefile @@ -20,6 +20,12 @@ define U-Boot/Default UBOOT_IMAGE:=u-boot.imx endef +define U-Boot/apalis_imx6 + NAME:=Toradex Apalis + UBOOT_IMAGE:=SPL u-boot.img u-boot-with-spl.imx + UBOOT_MAKE_FLAGS:=SPL u-boot.img u-boot-with-spl.imx +endef + define U-Boot/mx6cuboxi NAME:=SolidRun Cubox-i boards UBOOT_IMAGE:=SPL u-boot.img @@ -62,6 +68,7 @@ define U-Boot/wandboard endef UBOOT_TARGETS := \ + apalis_imx6 \ mx6cuboxi \ mx6sabresd \ nitrogen6dl \ diff --git a/package/boot/uboot-imx6/patches/0001-imx6-apalis-Make-the-boot-process-more-generic.patch b/package/boot/uboot-imx6/patches/0001-imx6-apalis-Make-the-boot-process-more-generic.patch new file mode 100644 index 0000000000..b8e532c083 --- /dev/null +++ b/package/boot/uboot-imx6/patches/0001-imx6-apalis-Make-the-boot-process-more-generic.patch @@ -0,0 +1,127 @@ +From 42cc2cffb6d550fbb21dad033d2564d4da571015 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20=C5=A0tetiar?= +Date: Sat, 1 Dec 2018 12:46:37 +0100 +Subject: [PATCH] imx6: apalis: Make the boot process more generic +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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. + +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 so it should be backward +compatible. + +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 +Cc: Max Krummenacher +Signed-off-by: Petr Štetiar +--- + configs/apalis_imx6_defconfig | 2 ++ + include/configs/apalis_imx6.h | 26 +++++++++++++++++++++----- + 2 files changed, 23 insertions(+), 5 deletions(-) + +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 +-- +1.9.1 +