Hi Eddie,

Thank you for the patch.

On mer., mai 21, 2025 at 15:26, Eddie Kovsky <ekov...@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 <ekov...@redhat.com>

Reviewed-by: Mattijs Korpershoek <mkorpersh...@kernel.org>

Boot tested on Khadas VIM3 using khadas-vim3_android_defconfig

Tested-by: Mattijs Korpershoek <mkorpersh...@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

Reply via email to