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