From: Eddie Kovsky Date: Wed, 21 May 2025 21:26:59 +0000 (-0600) Subject: image: android: fix ramdisk default address X-Git-Tag: v2025.07-rc4~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b22a276f039f818d5564bec6637071cfc8a7e432;p=thirdparty%2Fu-boot.git image: android: fix ramdisk default address Commit 21e7fa0e3ac5 ("image: android: handle ramdisk default address") changed the default behavior for header versions less than or equal to 2. The ramdisk address (img_data.ramdisk_ptr) is only assigned to *rd_data if the physical load address (img_data.ramdisk_addr) is equal to 0 or the Android default ramdisk address. /* Ramdisk can be used in-place, use current ptr */ if (img_data.ramdisk_addr == 0 || img_data.ramdisk_addr == ANDROID_IMAGE_DEFAULT_RAMDISK_ADDR) { *rd_data = img_data.ramdisk_ptr; } else { ramdisk_ptr = img_data.ramdisk_addr; *rd_data = ramdisk_ptr; memcpy((void *)(ramdisk_ptr), (void *)img_data.ramdisk_ptr, img_data.ramdisk_size); } When the img_data.ramdisk_addr and the img_data.kernel_addr are the same *rd_data needs to be assigned to the ramdisk address (ramdisk_ptr), not the physical address (ramdisk_addr). As a result of the current behavior, we can no longer boot a kernel on the Renesas R-Car S4 board. Add an additional check to the if clause so that the ramdisk address is assigned when the kernel address and the ramdisk address are the same, restoring the previous default behavior. Fixes: 21e7fa0e3ac5 ("image: android: handle ramdisk default address") Signed-off-by: Eddie Kovsky Reviewed-by: Mattijs Korpershoek Tested-by: Mattijs Korpershoek # khadas vim3 --- diff --git a/boot/image-android.c b/boot/image-android.c index 1746b018900..459cdb8456c 100644 --- a/boot/image-android.c +++ b/boot/image-android.c @@ -488,7 +488,8 @@ int android_image_get_ramdisk(const void *hdr, const void *vendor_boot_img, } else { /* Ramdisk can be used in-place, use current ptr */ if (img_data.ramdisk_addr == 0 || - img_data.ramdisk_addr == ANDROID_IMAGE_DEFAULT_RAMDISK_ADDR) { + img_data.ramdisk_addr == ANDROID_IMAGE_DEFAULT_RAMDISK_ADDR || + img_data.ramdisk_addr == img_data.kernel_addr) { *rd_data = img_data.ramdisk_ptr; } else { ramdisk_ptr = img_data.ramdisk_addr;