From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Protsenko Date: Wed, 23 Oct 2019 17:34:27 +0300 Subject: [U-Boot] [PATCH v2 8/8] arm: ti: boot: Use correct dtb and dtbo on Android boot In-Reply-To: <20191023143427.10865-1-semen.protsenko@linaro.org> References: <20191023143427.10865-1-semen.protsenko@linaro.org> Message-ID: <20191023143427.10865-9-semen.protsenko@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Read correct dtb file from boot.img/recovery.img and apply correct dtbo files from dtbo partition. Signed-off-by: Sam Protsenko --- Changes in v2: - rebase on top of master 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 6d15304a65..d403613587 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