From: chenshuo <chenshuo@eswin.com>
Date: Mon, 20 Jul 2020 00:48:15 +0000 (+0800)
Subject: find dtb in android boot image with header version 2 during bootm
X-Git-Tag: v2025.01-rc5-pxa1908~2280^2~15
X-Git-Url: http://git.dujemihanovic.xyz/img/html/index.html?a=commitdiff_plain;h=6e31458435ac499611a205c67a83be25098135b3;p=u-boot.git

find dtb in android boot image with header version 2 during bootm

This patch is about bootm process, android boot image and device tree.

Android 10 updates the boot image header to version 2,
which includes a section to store the device tree blob (DTB) image.

include/android_image.h has updated the struct andr_img_hdr,
but not used in bootm process. This patch avoid reporting
"Device tree not found or missing FDT support"
when bootm a correctly constructed android boot image.

Signed-off-by: chenshuo <chenshuo@eswin.com>
---

diff --git a/common/image-fdt.c b/common/image-fdt.c
index 7005b34966..f13eefb061 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -465,10 +465,20 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
 	} else if (genimg_get_format(buf) == IMAGE_FORMAT_ANDROID) {
 		struct andr_img_hdr *hdr = buf;
-		ulong fdt_data, fdt_len;
+		ulong		fdt_data, fdt_len;
+		u32			fdt_size, dtb_idx;
+		/*
+		 * Firstly check if this android boot image has dtb field.
+		 */
+		dtb_idx = (u32)env_get_ulong("adtb_idx", 10, 0);
+		if (android_image_get_dtb_by_index((ulong)hdr, dtb_idx, &fdt_addr, &fdt_size)) {
+			fdt_blob = (char *)map_sysmem(fdt_addr, 0);
+			if (fdt_check_header(fdt_blob))
+				goto no_fdt;
 
-		if (!android_image_get_second(hdr, &fdt_data, &fdt_len) &&
-		    !fdt_check_header((char *)fdt_data)) {
+			debug("## Using FDT in Android image dtb area with idx %u\n", dtb_idx);
+		} else if (!android_image_get_second(hdr, &fdt_data, &fdt_len) &&
+			!fdt_check_header((char *)fdt_data)) {
 			fdt_blob = (char *)fdt_data;
 			if (fdt_totalsize(fdt_blob) != fdt_len)
 				goto error;