Hi Safae, On Thu, 26 Jan 2023 at 09:05, Safae Ouajih <soua...@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 <soua...@baylibre.com> > --- > boot/image-android.c | 47 +++++++++++++++++++++++++++++++------------- > 1 file changed, 33 insertions(+), 14 deletions(-) >
Reviewed-by: Simon Glass <s...@chromium.org> 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