[PATCH v2 13/17] android: boot: update android_image_get_dtb_img_addr to support v3,v4

Simon Glass sjg at chromium.org
Fri Jan 27 01:55:00 CET 2023


Hi Safae,

On Thu, 26 Jan 2023 at 09:05, Safae Ouajih <souajih at 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 at baylibre.com>
> ---
>  boot/image-android.c | 47 +++++++++++++++++++++++++++++++-------------
>  1 file changed, 33 insertions(+), 14 deletions(-)
>

Reviewed-by: Simon Glass <sjg at 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


More information about the U-Boot mailing list