arm: ti: boot: Use correct dtb and dtbo on Android boot
authorSam Protsenko <joe.skb7@gmail.com>
Fri, 24 Jan 2020 15:53:49 +0000 (17:53 +0200)
committerLokesh Vutla <lokeshvutla@ti.com>
Tue, 4 Feb 2020 03:37:24 +0000 (09:07 +0530)
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>
include/configs/ti_armv7_common.h
include/environment/ti/boot.h

index a1a053e67500efc26749855d0496c7ae3fcbf640..a612bb5b4a8e99b8c7b861078019ff6779de0057 100644 (file)
  * 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 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 \
        "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" \
index 5a0fc1dc5d15f9e1515e3027e69072500f495937..523c8fc4fe9a80ce1fd87909e6697893ce2930d9 100644 (file)
 #define AB_SELECT_ARGS ""
 #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 \
        "echo Booting into fastboot ...; " \
        "fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; "
                "if part start mmc $mmcdev $apart boot_start; then " \
                        "part size mmc $mmcdev $apart boot_size; " \
                        "mmc read $loadaddr $boot_start $boot_size; " \
-                       "abootimg get dtb --index=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; " \