|
@@ -1032,7 +1032,6 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|
|
int i;
|
|
|
unsigned long ramdisk_addr;
|
|
|
unsigned long ramdisk_size;
|
|
|
- unsigned long initrd_addr_max;
|
|
|
|
|
|
efi_early = c;
|
|
|
sys_table = (efi_system_table_t *)(unsigned long)efi_early->table;
|
|
@@ -1095,15 +1094,20 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|
|
|
|
|
memset(sdt, 0, sizeof(*sdt));
|
|
|
|
|
|
- if (hdr->xloadflags & XLF_CAN_BE_LOADED_ABOVE_4G)
|
|
|
- initrd_addr_max = -1UL;
|
|
|
- else
|
|
|
- initrd_addr_max = hdr->initrd_addr_max;
|
|
|
-
|
|
|
status = handle_cmdline_files(sys_table, image,
|
|
|
(char *)(unsigned long)hdr->cmd_line_ptr,
|
|
|
- "initrd=", initrd_addr_max,
|
|
|
+ "initrd=", hdr->initrd_addr_max,
|
|
|
&ramdisk_addr, &ramdisk_size);
|
|
|
+
|
|
|
+ if (status != EFI_SUCCESS &&
|
|
|
+ hdr->xloadflags & XLF_CAN_BE_LOADED_ABOVE_4G) {
|
|
|
+ efi_printk(sys_table, "Trying to load files to higher address\n");
|
|
|
+ status = handle_cmdline_files(sys_table, image,
|
|
|
+ (char *)(unsigned long)hdr->cmd_line_ptr,
|
|
|
+ "initrd=", -1UL,
|
|
|
+ &ramdisk_addr, &ramdisk_size);
|
|
|
+ }
|
|
|
+
|
|
|
if (status != EFI_SUCCESS)
|
|
|
goto fail2;
|
|
|
hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
|