]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
boot: android: Provide vendor_bootimg_addr in boot_get_fdt()
authorMattijs Korpershoek <mkorpershoek@baylibre.com>
Wed, 10 Jul 2024 08:40:02 +0000 (10:40 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 18 Jul 2024 19:51:30 +0000 (13:51 -0600)
When calling android_image_get_dtb_by_index() using boot image v3+,
we should also pass the vendor_boot ramdisk address.

Use get_avendor_bootimg_addr() to do so.

Notes: on boot image v2, this is harmless since get_avendor_bootimg_addr()
       returns -1.
       for legacy implementations that don't have CMD_ABOOTIMG, add a weak
       implementation to avoid linking errors.

Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Julien Masson <jmasson@baylibre.com>
Reviewed-by: Igor Opaniuk <igor.opaniuk@gmail.com>
Reviewed-by: Guillaume La Roque <glaroque@baylibre.com>
Tested-by: Guillaume La Roque <glaroque@baylibre.com>
Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
boot/image-android.c
boot/image-fdt.c

index ee626972c1146381bc471bfdb65206805f9cb723..09c7a44e058aff7ffa2ae36575aab8fea3015df0 100644 (file)
@@ -56,6 +56,11 @@ static ulong add_trailer(ulong bootconfig_start_addr, ulong bootconfig_size)
        return BOOTCONFIG_TRAILER_SIZE;
 }
 
+__weak ulong get_avendor_bootimg_addr(void)
+{
+       return -1;
+}
+
 static void android_boot_image_v3_v4_parse_hdr(const struct andr_boot_img_hdr_v3 *hdr,
                                               struct andr_image_data *data)
 {
index 56dd7687f51ca3638e109d1e25d8cd924c5cf74b..8332792b8e806f0a006fe0f36caa1ba528b685f2 100644 (file)
@@ -502,7 +502,7 @@ int boot_get_fdt(void *buf, const char *select, uint arch,
                 * Firstly check if this android boot image has dtb field.
                 */
                dtb_idx = (u32)env_get_ulong("adtb_idx", 10, 0);
-               if (android_image_get_dtb_by_index((ulong)hdr, 0,
+               if (android_image_get_dtb_by_index((ulong)hdr, get_avendor_bootimg_addr(),
                                                   dtb_idx, &fdt_addr, &fdt_size)) {
                        fdt_blob = (char *)map_sysmem(fdt_addr, 0);
                        if (fdt_check_header(fdt_blob))