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

Mattijs Korpershoek
2023-02-01T08:42:50Z

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