1dab14934SVanessa MaegimaHow to Update U-Boot on Pico-imx6ul board 2dab14934SVanessa Maegima----------------------------------------- 3dab14934SVanessa Maegima 4dab14934SVanessa MaegimaRequired software on the host PC: 5dab14934SVanessa Maegima 6dab14934SVanessa Maegima- imx_usb_loader: https://github.com/boundarydevices/imx_usb_loader 7dab14934SVanessa Maegima 8dab14934SVanessa Maegima- dfu-util: http://dfu-util.sourceforge.net/releases/ 9dab14934SVanessa Maegima 10dab14934SVanessa MaegimaBuild U-Boot for Pico: 11dab14934SVanessa Maegima 12dab14934SVanessa Maegima$ make mrproper 13dab14934SVanessa Maegima$ make pico-imx6ul_defconfig 14dab14934SVanessa Maegima$ make 15dab14934SVanessa Maegima 16c97c9e08SFabio EstevamThis generates the SPL and u-boot.img binaries. 17c97c9e08SFabio Estevam 18c97c9e08SFabio Estevam1. Loading U-Boot via USB Serial Download Protocol 19c97c9e08SFabio Estevam 20c97c9e08SFabio EstevamNote: This method is convenient for development purposes. 21c97c9e08SFabio EstevamIf the eMMC has already a U-Boot flashed with DFU support then 22c97c9e08SFabio Estevamthe user can go to step 2 below in order to update U-Boot. 23dab14934SVanessa Maegima 24dab14934SVanessa MaegimaPut pico board in USB download mode (refer to the document 25978138faSOtavio Salvadorhttp://www.wandboard.org/images/hobbit/hobbitboard-imx6ul-reva1.pdf 26978138faSOtavio Salvadorpage 15). 27dab14934SVanessa Maegima 28978138faSOtavio SalvadorConnect a USB to serial adapter between the host PC and pico. 29dab14934SVanessa Maegima 30978138faSOtavio SalvadorConnect a USB cable between the OTG pico port and the host PC. 31dab14934SVanessa Maegima 32978138faSOtavio SalvadorOpen a terminal program such as minicom. 33dab14934SVanessa Maegima 34c97c9e08SFabio EstevamCopy SPL and u-boot.img to the imx_usb_loader folder. 35dab14934SVanessa Maegima 36c97c9e08SFabio EstevamLoad the SPL binary via USB: 37dab14934SVanessa Maegima 38c97c9e08SFabio Estevam$ sudo ./imx_usb SPL 39c97c9e08SFabio Estevam 40c97c9e08SFabio EstevamLoad the u-boot.img binary via USB: 41c97c9e08SFabio Estevam 42c97c9e08SFabio Estevam$ sudo ./imx_usb u-boot.img 43dab14934SVanessa Maegima 44978138faSOtavio SalvadorThen U-Boot starts and its messages appear in the console program. 45dab14934SVanessa Maegima 46dab14934SVanessa MaegimaUse the default environment variables: 47dab14934SVanessa Maegima 48dab14934SVanessa Maegima=> env default -f -a 49dab14934SVanessa Maegima=> saveenv 50dab14934SVanessa Maegima 51c97c9e08SFabio Estevam2. Flashing U-Boot into the eMMC 52c97c9e08SFabio Estevam 53978138faSOtavio SalvadorRun the DFU agent so we can flash the new images using dfu-util tool: 54978138faSOtavio Salvador 55dab14934SVanessa Maegima=> dfu 0 mmc 0 56dab14934SVanessa Maegima 57c97c9e08SFabio EstevamFlash SPL and u-boot.img into the eMMC running the following commands on a PC: 58dab14934SVanessa Maegima 59c97c9e08SFabio Estevam$ sudo dfu-util -D SPL -a spl 60c97c9e08SFabio Estevam 61c97c9e08SFabio Estevam$ sudo dfu-util -D u-boot.img -a u-boot 62dab14934SVanessa Maegima 63dab14934SVanessa MaegimaRemove power from the pico board. 64dab14934SVanessa Maegima 65978138faSOtavio SalvadorPut pico board into normal boot mode. 66dab14934SVanessa Maegima 67dab14934SVanessa MaegimaPower up the board and the new updated U-Boot should boot from eMMC. 68*d27748b7SFabio Estevam 69*d27748b7SFabio EstevamBooting in Falcon mode 70*d27748b7SFabio Estevam====================== 71*d27748b7SFabio Estevam 72*d27748b7SFabio EstevamGenerate a uImage kernel: 73*d27748b7SFabio Estevam 74*d27748b7SFabio Estevam$ make imx_v6_v7_defconfig (Using the default imx_v6_v7_defconfig configuration 75*d27748b7SFabio Estevamjust for an example. In order to boot faster the user should customize the 76*d27748b7SFabio Estevamdefconfig by only enabling the minimal required drivers). 77*d27748b7SFabio Estevam 78*d27748b7SFabio Estevam$ make -j4 uImage LOADADDR=0x80800000 79*d27748b7SFabio Estevam 80*d27748b7SFabio Estevam$ cp arch/arm/boot/uImage /tftpboot 81*d27748b7SFabio Estevam$ cp arch/arm/boot/dts/imx6ul-pico-hobbit.dtb /tftpboot 82*d27748b7SFabio Estevam 83*d27748b7SFabio EstevamIn the U-Boot prompt: 84*d27748b7SFabio Estevam 85*d27748b7SFabio EstevamSetup the server and board IP addresses: 86*d27748b7SFabio Estevam=> setenv serverip 192.168.0.10 87*d27748b7SFabio Estevam=> setenv ipaddr 192.168.0.11 88*d27748b7SFabio Estevam 89*d27748b7SFabio EstevamGet the dtb file: 90*d27748b7SFabio Estevam=> tftp ${fdt_addr} imx6ul-pico-hobbit.dtb 91*d27748b7SFabio Estevam 92*d27748b7SFabio EstevamGet the kernel: 93*d27748b7SFabio Estevam=> tftp ${loadaddr} uImage 94*d27748b7SFabio Estevam 95*d27748b7SFabio EstevamWrite the kernel at 2MB offset: 96*d27748b7SFabio Estevam=> mmc write ${loadaddr} 0x1000 0x4000 97*d27748b7SFabio Estevam 98*d27748b7SFabio EstevamSetup the bootargs: 99*d27748b7SFabio Estevam=> setenv bootargs 'console=ttymxc5,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw' 100*d27748b7SFabio Estevam 101*d27748b7SFabio EstevamPrepare args: 102*d27748b7SFabio Estevam=> spl export fdt ${loadaddr} - ${fdt_addr} 103*d27748b7SFabio Estevam## Booting kernel from Legacy Image at 82000000 ... 104*d27748b7SFabio Estevam Image Name: Linux-4.19.0-rc2-next-20180905-0 105*d27748b7SFabio Estevam Image Type: ARM Linux Kernel Image (uncompressed) 106*d27748b7SFabio Estevam Data Size: 8365608 Bytes = 8 MiB 107*d27748b7SFabio Estevam Load Address: 80800000 108*d27748b7SFabio Estevam Entry Point: 80800000 109*d27748b7SFabio Estevam Verifying Checksum ... OK 110*d27748b7SFabio Estevam## Flattened Device Tree blob at 83000000 111*d27748b7SFabio Estevam Booting using the fdt blob at 0x83000000 112*d27748b7SFabio Estevam Loading Kernel Image ... OK 113*d27748b7SFabio Estevam Using Device Tree in place at 83000000, end 83009c63 114*d27748b7SFabio Estevamsubcommand not supported 115*d27748b7SFabio Estevamsubcommand not supported 116*d27748b7SFabio Estevam Using Device Tree in place at 83000000, end 8300cc63 117*d27748b7SFabio EstevamArgument image is now in RAM: 0x83000000 118*d27748b7SFabio Estevam 119*d27748b7SFabio EstevamWrite 1MB of args data (0x800 sectors) to 1MB offset (0x800 sectors): 120*d27748b7SFabio Estevam 121*d27748b7SFabio Estevam=> mmc write ${fdt_addr} 0x800 0x800 122*d27748b7SFabio Estevam 123*d27748b7SFabio EstevamIn order to boot with Falcon mode, activate the CONFIG_SPL_OS_BOOT 124*d27748b7SFabio Estevamoption in the defconfig 125*d27748b7SFabio Estevam 126*d27748b7SFabio Estevam--- a/configs/pico-hobbit-imx6ul_defconfig 127*d27748b7SFabio Estevam+++ b/configs/pico-hobbit-imx6ul_defconfig 128*d27748b7SFabio Estevam@@ -53,3 +53,4 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x0525 129*d27748b7SFabio Estevam CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 130*d27748b7SFabio Estevam CONFIG_CI_UDC=y 131*d27748b7SFabio Estevam CONFIG_OF_LIBFDT=y 132*d27748b7SFabio Estevam+CONFIG_SPL_OS_BOOT=y 133*d27748b7SFabio Estevam 134*d27748b7SFabio EstevamThen rebuild U-Boot: 135*d27748b7SFabio Estevam 136*d27748b7SFabio Estevam$ make pico-hobbit-imx6ul_defconfig 137*d27748b7SFabio Estevam$ make -j4 138*d27748b7SFabio Estevam 139*d27748b7SFabio EstevamLaunch UMS: 140*d27748b7SFabio Estevam=> ums 0 mmc 0 141*d27748b7SFabio Estevam 142*d27748b7SFabio EstevamFlash the new binaries: 143*d27748b7SFabio Estevam 144*d27748b7SFabio Estevam$ sudo dd if=SPL of=/dev/sdX bs=1k seek=1; sync 145*d27748b7SFabio Estevam$ sudo dd if=u-boot.img of=/dev/sdX bs=1k seek=69; sync 146*d27748b7SFabio Estevam 147*d27748b7SFabio EstevamAnd then SPL binary will load and jump directly to the kernel: 148*d27748b7SFabio Estevam 149*d27748b7SFabio EstevamU-Boot SPL 2018.09-rc2-00156-g8c46f15-dirty (Sep 05 2018 - 16:24:05 -0300) 150*d27748b7SFabio EstevamTrying to boot from MMC1 151*d27748b7SFabio Estevam[ 0.000000] Booting Linux on physical CPU 0x0 152*d27748b7SFabio Estevam[ 0.000000] Linux version 4.19.0-rc2-next-20180905-00001-gb805e2d (fabio@fabio-Latitude-E5450) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9)) #533 SMP Wed Sep 5 16:21:03 -03 2018 153*d27748b7SFabio Estevam[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d 154*d27748b7SFabio Estevam[ 0.000000] CPU: div instructions available: patching division code 155*d27748b7SFabio Estevam[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache 156*d27748b7SFabio Estevam[ 0.000000] OF: fdt: Machine model: Technexion Pico i.MX6UL Board 157*d27748b7SFabio Estevam[ 0.000000] Memory policy: Data cache writealloc 158*d27748b7SFabio Estevam[ 0.000000] cma: Reserved 64 MiB at 0x8c000000 159*d27748b7SFabio Estevam... 160