[U-Boot] [PATCH 7/7] arm: ti: boot: Use correct dtb and dtbo on Android boot

Sam Protsenko semen.protsenko at linaro.org
Thu Sep 19 17:28:22 UTC 2019


Read correct dtb file from boot.img/recovery.img and apply correct dtbo
files from dtbo partition.

Signed-off-by: Sam Protsenko <semen.protsenko at linaro.org>
---
 include/configs/ti_armv7_common.h |  7 +++++
 include/environment/ti/boot.h     | 44 ++++++++++++++++++++++++++++---
 2 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h
index 2de6bc2390..188171e4c4 100644
--- a/include/configs/ti_armv7_common.h
+++ b/include/configs/ti_armv7_common.h
@@ -37,11 +37,18 @@
  * 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
  * bootm_size and we only run on platforms with 256MB or more of memory.
+ *
+ * As a temporary storage for DTBO files (which should be applied into DTB
+ * file), 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
+ * file 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 \
 	"loadaddr=0x82000000\0" \
 	"kernel_addr_r=0x82000000\0" \
 	"fdtaddr=0x88000000\0" \
+	"dtboaddr=0x89000000\0" \
 	"fdt_addr_r=0x88000000\0" \
 	"rdaddr=0x88080000\0" \
 	"ramdisk_addr_r=0x88080000\0" \
diff --git a/include/environment/ti/boot.h b/include/environment/ti/boot.h
index a7644a5874..1b2b923842 100644
--- a/include/environment/ti/boot.h
+++ b/include/environment/ti/boot.h
@@ -75,6 +75,46 @@
 #define AB_SELECT ""
 #endif
 
+/*
+ * Prepares complete device tree file 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 file for current SoC/board from boot image in $loadaddr
+ *      to $fdtaddr
+ *   2. Merge all needed DTBO files for current board from 'dtbo' partition
+ *      into read DTB file
+ *   3. User should provide $fdtaddr as 3rd argument to 'bootm'
+ *
+ * XXX: Why passing 0x100000 to 'fdt addr'? Maybe omit it (it's optional)?
+ */
+#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 file for AM57x EVM RevA3...\"; " \
+		"bootimg get_dtb_file 0 dtb_start dtb_size; " \
+		"cp.b $dtb_start $fdtaddr $dtb_size; " \
+		"fdt addr $fdtaddr 0x100000; " \
+		"echo \"  -> Applying DTBOs for AM57x EVM RevA3...\"; " \
+		"dtimg start ${dtboaddr} 0 dtbo_addr; " \
+		"fdt apply $dtbo_addr; " \
+		"dtimg start ${dtboaddr} 1 dtbo_addr; " \
+		"fdt apply $dtbo_addr; " \
+	"elif test $board_name = beagle_x15_revc; then " \
+		"echo \"  -> Reading DTB file for Beagle X15 RevC...\"; " \
+		"bootimg get_dtb_file 0 dtb_start dtb_size; " \
+		"cp.b $dtb_start $fdtaddr $dtb_size; " \
+		"fdt addr $fdtaddr 0x100000; " \
+	"else " \
+		"echo Error: Android boot is not supported for $board_name; " \
+		"exit; " \
+	"fi; " \
+
 #define FASTBOOT_CMD \
 	"echo Booting into fastboot ...; " \
 	"fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; "
@@ -131,9 +171,7 @@
 		"if part start mmc $mmcdev $apart boot_start; then " \
 			"part size mmc $mmcdev $apart boot_size; " \
 			"mmc read $loadaddr $boot_start $boot_size; " \
-			"bootimg get_dtb_file 0 dtb_start dtb_size; " \
-			"cp.b $dtb_start $fdtaddr $dtb_size; " \
-			"fdt addr $fdtaddr; " \
+			PREPARE_FDT \
 			"bootm $loadaddr $ardaddr $fdtaddr; " \
 		"else " \
 			"echo $apart partition not found; " \
-- 
2.23.0



More information about the U-Boot mailing list