diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index a8840fe42..c5b76ea97 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -58,7 +58,9 @@ static int __do_bootm_linux(struct image_data *data, int swap) kernel = data->os_res->start + data->os_entry; - if (data->initrd_file && data->initrd_address == UIMAGE_INVALID_ADDRESS) { + initrd_start = data->initrd_address; + + if (data->initrd_file && initrd_start == UIMAGE_INVALID_ADDRESS) { initrd_start = data->os_res->start + SZ_8M; if (bootm_verbose(data)) { diff --git a/commands/bootm.c b/commands/bootm.c index 3c47ab5d9..5f858e8a1 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -126,14 +126,6 @@ static int bootm_open_initrd_uimage(struct image_data *data) if (data->initrd_address == UIMAGE_SOME_ADDRESS) data->initrd_address = data->initrd->header.ih_load; - if (data->initrd_address != UIMAGE_INVALID_ADDRESS) { - data->initrd_res = uimage_load_to_sdram(data->initrd, - data->initrd_num, - data->initrd_address); - if (!data->initrd_res) - return -ENOMEM; - } - return 0; } diff --git a/common/uimage.c b/common/uimage.c index 43878b59a..442a7f097 100644 --- a/common/uimage.c +++ b/common/uimage.c @@ -334,7 +334,8 @@ int uimage_load(struct uimage_handle *handle, unsigned int image_no, if (ret < 0) return ret; - if (hdr->ih_comp == IH_COMP_NONE) + /* if ramdisk U-Boot expect to ignore the compression type */ + if (hdr->ih_comp == IH_COMP_NONE || hdr->ih_type == IH_TYPE_RAMDISK) uncompress_fn = uncompress_copy; else uncompress_fn = uncompress; @@ -355,8 +356,9 @@ static struct resource *uimage_resource; static int uimage_sdram_flush(void *buf, unsigned int len) { if (uimage_size + len > resource_size(uimage_resource)) { - resource_size_t start = resource_size(uimage_resource); + resource_size_t start = uimage_resource->start; resource_size_t size = resource_size(uimage_resource) + len; + release_sdram_region(uimage_resource); uimage_resource = request_sdram_region("uimage",