arm: ti: boot: Use correct dtb and dtbo on Android boot
Read correct dtb blob from boot.img/recovery.img and apply correct dtbo blobs from dtbo partition. Signed-off-by: Sam Protsenko <joe.skb7@gmail.com> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
This commit is contained in:
		
							parent
							
								
									d94e6dbcf6
								
							
						
					
					
						commit
						add1a6bc9b
					
				|  | @ -37,11 +37,18 @@ | ||||||
|  * seen large trees).  We say all of this must be within the first 256MB |  * seen large trees).  We say all of this must be within the first 256MB | ||||||
|  * as that will normally be within the kernel lowmem and thus visible via |  * as that will normally be within the kernel lowmem and thus visible via | ||||||
|  * bootm_size and we only run on platforms with 256MB or more of memory. |  * bootm_size and we only run on platforms with 256MB or more of memory. | ||||||
|  |  * | ||||||
|  |  * As a temporary storage for DTBO blobs (which should be applied into DTB | ||||||
|  |  * blob), we use the location 15.5 MB above the ramdisk. If someone wants to | ||||||
|  |  * use ramdisk bigger than 15.5 MB, then DTBO can be loaded and applied to DTB | ||||||
|  |  * blob before loading the ramdisk, as DTBO location is only used as a temporary | ||||||
|  |  * storage, and can be re-used after 'fdt apply' command is done. | ||||||
|  */ |  */ | ||||||
| #define DEFAULT_LINUX_BOOT_ENV \ | #define DEFAULT_LINUX_BOOT_ENV \ | ||||||
| 	"loadaddr=0x82000000\0" \ | 	"loadaddr=0x82000000\0" \ | ||||||
| 	"kernel_addr_r=0x82000000\0" \ | 	"kernel_addr_r=0x82000000\0" \ | ||||||
| 	"fdtaddr=0x88000000\0" \ | 	"fdtaddr=0x88000000\0" \ | ||||||
|  | 	"dtboaddr=0x89000000\0" \ | ||||||
| 	"fdt_addr_r=0x88000000\0" \ | 	"fdt_addr_r=0x88000000\0" \ | ||||||
| 	"rdaddr=0x88080000\0" \ | 	"rdaddr=0x88080000\0" \ | ||||||
| 	"ramdisk_addr_r=0x88080000\0" \ | 	"ramdisk_addr_r=0x88080000\0" \ | ||||||
|  |  | ||||||
|  | @ -81,6 +81,45 @@ | ||||||
| #define AB_SELECT_ARGS "" | #define AB_SELECT_ARGS "" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Prepares complete device tree blob for current board (for Android boot). | ||||||
|  |  * | ||||||
|  |  * Boot image or recovery image should be loaded into $loadaddr prior to running | ||||||
|  |  * these commands. The logic of these commnads is next: | ||||||
|  |  * | ||||||
|  |  *   1. Read correct DTB for current SoC/board from boot image in $loadaddr | ||||||
|  |  *      to $fdtaddr | ||||||
|  |  *   2. Merge all needed DTBO for current board from 'dtbo' partition into read | ||||||
|  |  *      DTB | ||||||
|  |  *   3. User should provide $fdtaddr as 3rd argument to 'bootm' | ||||||
|  |  */ | ||||||
|  | #define PREPARE_FDT \ | ||||||
|  | 	"echo Preparing FDT...; " \ | ||||||
|  | 	"if test $board_name = am57xx_evm_reva3; then " \ | ||||||
|  | 		"echo \"  Reading DTBO partition...\"; " \ | ||||||
|  | 		"part start mmc ${mmcdev} dtbo${slot_suffix} p_dtbo_start; " \ | ||||||
|  | 		"part size mmc ${mmcdev} dtbo${slot_suffix} p_dtbo_size; " \ | ||||||
|  | 		"mmc read ${dtboaddr} ${p_dtbo_start} ${p_dtbo_size}; " \ | ||||||
|  | 		"echo \"  Reading DTB for AM57x EVM RevA3...\"; " \ | ||||||
|  | 		"abootimg get dtb --index=0 dtb_start dtb_size; " \ | ||||||
|  | 		"cp.b $dtb_start $fdtaddr $dtb_size; " \ | ||||||
|  | 		"fdt addr $fdtaddr; " \ | ||||||
|  | 		"echo \"  Applying DTBOs for AM57x EVM RevA3...\"; " \ | ||||||
|  | 		"adtimg addr $dtboaddr; " \ | ||||||
|  | 		"adtimg get dt --index=0 dtbo0_addr; " \ | ||||||
|  | 		"fdt apply $dtbo0_addr; " \ | ||||||
|  | 		"adtimg get dt --index=1 dtbo1_addr; " \ | ||||||
|  | 		"fdt apply $dtbo1_addr; " \ | ||||||
|  | 	"elif test $board_name = beagle_x15_revc; then " \ | ||||||
|  | 		"echo \"  Reading DTB for Beagle X15 RevC...\"; " \ | ||||||
|  | 		"abootimg get dtb --index=0 dtb_start dtb_size; " \ | ||||||
|  | 		"cp.b $dtb_start $fdtaddr $dtb_size; " \ | ||||||
|  | 		"fdt addr $fdtaddr; " \ | ||||||
|  | 	"else " \ | ||||||
|  | 		"echo Error: Android boot is not supported for $board_name; " \ | ||||||
|  | 		"exit; " \ | ||||||
|  | 	"fi; " \ | ||||||
|  | 
 | ||||||
| #define FASTBOOT_CMD \ | #define FASTBOOT_CMD \ | ||||||
| 	"echo Booting into fastboot ...; " \ | 	"echo Booting into fastboot ...; " \ | ||||||
| 	"fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " | 	"fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " | ||||||
|  | @ -137,9 +176,7 @@ | ||||||
| 		"if part start mmc $mmcdev $apart boot_start; then " \ | 		"if part start mmc $mmcdev $apart boot_start; then " \ | ||||||
| 			"part size mmc $mmcdev $apart boot_size; " \ | 			"part size mmc $mmcdev $apart boot_size; " \ | ||||||
| 			"mmc read $loadaddr $boot_start $boot_size; " \ | 			"mmc read $loadaddr $boot_start $boot_size; " \ | ||||||
| 			"abootimg get dtb --index=0 dtb_start dtb_size; " \ | 			PREPARE_FDT \ | ||||||
| 			"cp.b $dtb_start $fdtaddr $dtb_size; " \ |  | ||||||
| 			"fdt addr $fdtaddr; " \ |  | ||||||
| 			"bootm $loadaddr $ardaddr $fdtaddr; " \ | 			"bootm $loadaddr $ardaddr $fdtaddr; " \ | ||||||
| 		"else " \ | 		"else " \ | ||||||
| 			"echo $apart partition not found; " \ | 			"echo $apart partition not found; " \ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue