[PATCH] image: android: fix ramdisk default address
Mattijs Korpershoek
mkorpershoek at kernel.org
Fri May 30 11:15:17 CEST 2025
Hi Eddie,
Thank you for the patch.
On mer., mai 21, 2025 at 15:26, Eddie Kovsky <ekovsky at redhat.com> wrote:
> 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 <ekovsky at redhat.com>
Reviewed-by: Mattijs Korpershoek <mkorpershoek at kernel.org>
Boot tested on Khadas VIM3 using khadas-vim3_android_defconfig
Tested-by: Mattijs Korpershoek <mkorpershoek at kernel.org> # khadas vim3
> ---
>
> boot/image-android.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/boot/image-android.c b/boot/image-android.c
> index 1746b0189008..459cdb8456c4 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;
> --
> 2.49.0
More information about the U-Boot
mailing list