ARM: legoev3: update boot script to load uEnv.txt and .dtb
This updates the LEGO MINDSTORMS EV3 boot script to try loading a uEnv.txt file and a da850-lego-ev3.dtb device tree during boot. Signed-off-by: David Lechner <david@lechnology.com>
This commit is contained in:
		
							parent
							
								
									71eb63e7ee
								
							
						
					
					
						commit
						f203a479e7
					
				|  | @ -9,14 +9,34 @@ Booting | |||
| ======= | ||||
| 
 | ||||
| The EV3 contains a bootloader in EEPROM that loads u-boot.bin from address 0x0 | ||||
| of the spi flash memory. Using the default configuration, u-boot will check to | ||||
| see if there is a boot.scr file on the first FAT partition of the mmc. If there | ||||
| is, it will run the script and boot the kernel from the uImage file also in | ||||
| the FAT partition. Otherwise, it will load a kernel and rootfs from the flash. | ||||
| The kernel must be stored at address 0x50000 on the flash and have a maximum | ||||
| size of 4MiB. The rootfs must be a squasfs image and stored at 0x450000 in the | ||||
| flash and have a maximum size of 10MiB. The flash starting at 0xE50000 is | ||||
| reserved for user data. | ||||
| of the SPI flash memory (with a size of 256KiB!). Because the EEPROM is read- | ||||
| only and it takes care of low level configuration (PLL and DDR), we don't use | ||||
| U-Boot to produce an SPL image. | ||||
| 
 | ||||
| Using the default configuration, U-Boot had a boot scrips that works as follows: | ||||
| 
 | ||||
| * Check to see if microSD card is present | ||||
| * If it is, try to load boot.scr from the first FAT partition | ||||
| * If loading boot.scr was successful, run it | ||||
| * Otherwise, try loading uEnv.txt | ||||
| * If loading uEnv.txt was successful, import it | ||||
| * If there is a uenvcmd variable (from uEnv.txt), run it | ||||
| * Try to load uImage from the first FAT partition | ||||
| * If it was successful, try to load da850-lego-ev3.dtb | ||||
| * If loading uImage was successful, boot it (DT is optional) | ||||
| * If none of the above was successful, try booting from flash | ||||
| 
 | ||||
| Suggested Flash Memory Layout | ||||
| ============================= | ||||
| 
 | ||||
| The following is based on the default U-Boot configuration: | ||||
| 
 | ||||
| | Image (file)       | Start Addr. | Max. Size         | | ||||
| +--------------------+-------------+-------------------+ | ||||
| | u-boot.bin         |         0x0 |  0x40000 (256KiB) | | ||||
| | da850-lego-ev3.dtb |     0x40000 |  0x10000 (64KiB)  | | ||||
| | uImage             |     0x50000 | 0x400000 (4MiB)   | | ||||
| | rootfs (squashfs)  |    0x450000 | 0xa00000 (10MiB)  | | ||||
| 
 | ||||
| Writing image to flash | ||||
| ====================== | ||||
|  |  | |||
|  | @ -84,34 +84,60 @@ | |||
| 		"if run loadbootscr; then " \ | ||||
| 			"run bootscript; " \ | ||||
| 		"else " \ | ||||
| 			"if run loadbootenv; then " \ | ||||
| 				"echo Loaded env from ${bootenvfile};" \ | ||||
| 				"run importbootenv;" \ | ||||
| 			"fi;" \ | ||||
| 			"if test -n $uenvcmd; then " \ | ||||
| 				"echo Running uenvcmd...;" \ | ||||
| 				"run uenvcmd;" \ | ||||
| 			"fi;" \ | ||||
| 			"if run loadimage; then " \ | ||||
| 				"run mmcargs; " \ | ||||
| 				"if run loadfdt; then " \ | ||||
| 					"echo Using ${fdtfile}...;" \ | ||||
| 					"run fdtfixup; " \ | ||||
| 					"run fdtboot; "\ | ||||
| 				"fi; " \ | ||||
| 				"run mmcboot; " \ | ||||
| 			"else " \ | ||||
| 				"run flashargs; " \ | ||||
| 				"run flashboot; " \ | ||||
| 			"fi; " \ | ||||
| 		"fi; " \ | ||||
| 	"else " \ | ||||
| 	"fi; "\ | ||||
| 	"run flashargs; " \ | ||||
| 		"run flashboot; " \ | ||||
| 	"fi" | ||||
| 	"run flashboot" | ||||
| #define CONFIG_EXTRA_ENV_SETTINGS \ | ||||
| 	"bootenvfile=uEnv.txt\0" \ | ||||
| 	"fdtfile=da850-lego-ev3.dtb\0" \ | ||||
| 	"memsize=64M\0" \ | ||||
| 	"filesyssize=10M\0" \ | ||||
| 	"verify=n\0" \ | ||||
| 	"console=ttyS1,115200n8\0" \ | ||||
| 	"bootscraddr=0xC0600000\0" \ | ||||
| 	"fdtaddr=0xC0600000\0" \ | ||||
| 	"loadaddr=0xC0007FC0\0" \ | ||||
| 	"filesysaddr=0xC1180000\0" \ | ||||
| 	"fwupdateboot=mw 0xFFFF1FFC 0x5555AAAA; reset\0" \ | ||||
| 	"mmcargs=setenv bootargs mem=${memsize} console=${console} root=/dev/mmcblk0p2 rw rootwait lpj=747520\0" \ | ||||
| 	"importbootenv=echo Importing environment...; " \ | ||||
| 		"env import -t ${loadaddr} ${filesize}\0" \ | ||||
| 	"loadbootenv=fatload mmc 0 ${loadaddr} ${bootenvfile}\0" \ | ||||
| 	"mmcargs=setenv bootargs console=${console} root=/dev/mmcblk0p2 rw " \ | ||||
| 		"rootwait ${optargs}\0" \ | ||||
| 	"mmcboot=bootm ${loadaddr}\0" \ | ||||
| 	"flashargs=setenv bootargs mem=${memsize} initrd=${filesysaddr},${filesyssize} root=/dev/ram0 rw rootfstype=squashfs console=${console} lpj=747520\0" \ | ||||
| 	"flashboot=sf probe 0; sf read ${loadaddr} 0x50000 0x400000; sf read ${filesysaddr} 0x450000 0xA00000; bootm ${loadaddr}\0" \ | ||||
| 	"flashargs=setenv bootargs initrd=${filesysaddr},${filesyssize} " \ | ||||
| 		"root=/dev/ram0 rw rootfstype=squashfs console=${console} " \ | ||||
| 		"${optargs}\0" \ | ||||
| 	"flashboot=sf probe 0; " \ | ||||
| 		"sf read ${fdtaddr} 0x40000 0x10000; " \ | ||||
| 		"sf read ${loadaddr} 0x50000 0x400000; " \ | ||||
| 		"sf read ${filesysaddr} 0x450000 0xA00000; " \ | ||||
| 		"run fdtfixup; " \ | ||||
| 		"run fdtboot\0" \ | ||||
| 	"loadimage=fatload mmc 0 ${loadaddr} uImage\0" \ | ||||
| 	"loadfdt=fatload mmc 0 ${fdtaddr} ${fdtfile}\0" \ | ||||
| 	"fdtfixup=fdt addr ${fdtaddr}; fdt resize; fdt chosen\0" \ | ||||
| 	"fdtboot=bootm ${loadaddr} - ${fdtaddr}\0" \ | ||||
| 	"loadbootscr=fatload mmc 0 ${bootscraddr} boot.scr\0" \ | ||||
| 	"bootscript=source ${bootscraddr}\0" \ | ||||
| 	"bootscript=source ${bootscraddr}\0" | ||||
| 
 | ||||
| #ifdef CONFIG_CMD_BDI | ||||
| #define CONFIG_CLOCKS | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue