On Thu, Jan 26, 2023 at 17:55, Simon Glass <s...@chromium.org> wrote:
> 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> Reviewed-by: Mattijs Korpershoek <mkorpersh...@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