
On Thu, Jan 26, 2023 at 17:55, Simon Glass sjg@chromium.org wrote:
Hi Safae,
On Thu, 26 Jan 2023 at 09:05, Safae Ouajih souajih@baylibre.com wrote:
This adds support for boot image version 3 and 4 in android_image_get_dtb_img_addr(). Since the dtb is now included in vendor_boot image instead of boot image, the dtb address should be extracted from vendor_boot image when a v3 or v4 is used.
Signed-off-by: Safae Ouajih souajih@baylibre.com
boot/image-android.c | 47 +++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 14 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
nits below
diff --git a/boot/image-android.c b/boot/image-android.c index cb4fc22b00..edeeaaaee0 100644 --- a/boot/image-android.c +++ b/boot/image-android.c @@ -459,6 +459,7 @@ exit: static bool android_image_get_dtb_img_addr(ulong hdr_addr, ulong vhdr_addr, ulong *addr) { const struct andr_boot_img_hdr_v0 *hdr;
const struct andr_vendor_img_hdr *v_hdr; ulong dtb_img_addr; bool ret = true;
@@ -475,22 +476,40 @@ static bool android_image_get_dtb_img_addr(ulong hdr_addr, ulong vhdr_addr, ulon goto exit; }
if (hdr->dtb_size == 0) {
printf("Error: dtb_size is 0\n");
ret = false;
goto exit;
if (hdr->header_version == 2) {
if (hdr->dtb_size == 0) {
if (!hdr->dtb_size)
printf("Error: dtb_size is 0\n");
ret = false;
goto exit;
}
/* Calculate the address of DTB area in boot image */
dtb_img_addr = hdr_addr;
dtb_img_addr += hdr->page_size;
dtb_img_addr += ALIGN(hdr->kernel_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->ramdisk_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->second_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->recovery_dtbo_size, hdr->page_size);
*addr = dtb_img_addr; }
/* Calculate the address of DTB area in boot image */
dtb_img_addr = hdr_addr;
dtb_img_addr += hdr->page_size;
dtb_img_addr += ALIGN(hdr->kernel_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->ramdisk_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->second_size, hdr->page_size);
dtb_img_addr += ALIGN(hdr->recovery_dtbo_size, hdr->page_size);
*addr = dtb_img_addr;
if (hdr->header_version > 2) {
v_hdr = map_sysmem(vhdr_addr, sizeof(*v_hdr));
if (v_hdr->dtb_size == 0) {
same here
printf("Error: dtb_size is 0\n");
ret = false;
unmap_sysmem(v_hdr);
goto exit;
}
/* Calculate the address of DTB area in boot image */
dtb_img_addr = vhdr_addr;
dtb_img_addr += v_hdr->page_size;
if (v_hdr->vendor_ramdisk_size)
dtb_img_addr += ALIGN(v_hdr->vendor_ramdisk_size, v_hdr->page_size);
*addr = dtb_img_addr;
unmap_sysmem(v_hdr);
goto exit;
}
exit: unmap_sysmem(hdr); return ret; -- 2.34.1
Regards, Simon