@@ -107,21 +107,21 @@ finalize_params_linux (void)
void *fdt;
- fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE);
+ /* Set initrd info */
+ if (initrd_start && initrd_end > initrd_start)
+ {
+ fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE);
- if (!fdt)
- goto failure;
+ if (!fdt)
+ goto failure;
- node = grub_fdt_find_subnode (fdt, 0, "chosen");
- if (node < 0)
- node = grub_fdt_add_subnode (fdt, 0, "chosen");
+ node = grub_fdt_find_subnode (fdt, 0, "chosen");
+ if (node < 0)
+ node = grub_fdt_add_subnode (fdt, 0, "chosen");
- if (node < 1)
- goto failure;
+ if (node < 1)
+ goto failure;
- /* Set initrd info */
- if (initrd_start && initrd_end > initrd_start)
- {
grub_dprintf ("linux", "Initrd @ %p-%p\n",
(void *) initrd_start, (void *) initrd_end);
@@ -85,13 +85,16 @@ grub_fdt_install (void)
grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID;
grub_efi_status_t status;
+ if (!fdt && !loaded_fdt)
+ return GRUB_ERR_NONE;
+
b = grub_efi_system_table->boot_services;
- status = b->install_configuration_table (&fdt_guid, fdt);
+ status = b->install_configuration_table (&fdt_guid, fdt ?: loaded_fdt);
if (status != GRUB_EFI_SUCCESS)
return grub_error (GRUB_ERR_IO, "failed to install FDT");
grub_dprintf ("fdt", "Installed/updated FDT configuration table @ %p\n",
- fdt);
+ fdt ?: loaded_fdt);
return GRUB_ERR_NONE;
}