|
@@ -69,6 +69,31 @@ static struct screen_info *setup_graphics(efi_system_table_t *sys_table_arg)
|
|
return si;
|
|
return si;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void install_memreserve_table(efi_system_table_t *sys_table_arg)
|
|
|
|
+{
|
|
|
|
+ struct linux_efi_memreserve *rsv;
|
|
|
|
+ efi_guid_t memreserve_table_guid = LINUX_EFI_MEMRESERVE_TABLE_GUID;
|
|
|
|
+ efi_status_t status;
|
|
|
|
+
|
|
|
|
+ status = efi_call_early(allocate_pool, EFI_LOADER_DATA, sizeof(*rsv),
|
|
|
|
+ (void **)&rsv);
|
|
|
|
+ if (status != EFI_SUCCESS) {
|
|
|
|
+ pr_efi_err(sys_table_arg, "Failed to allocate memreserve entry!\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ rsv->next = 0;
|
|
|
|
+ rsv->base = 0;
|
|
|
|
+ rsv->size = 0;
|
|
|
|
+
|
|
|
|
+ status = efi_call_early(install_configuration_table,
|
|
|
|
+ &memreserve_table_guid,
|
|
|
|
+ rsv);
|
|
|
|
+ if (status != EFI_SUCCESS)
|
|
|
|
+ pr_efi_err(sys_table_arg, "Failed to install memreserve config table!\n");
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* This function handles the architcture specific differences between arm and
|
|
* This function handles the architcture specific differences between arm and
|
|
* arm64 regarding where the kernel image must be loaded and any memory that
|
|
* arm64 regarding where the kernel image must be loaded and any memory that
|
|
@@ -235,6 +260,8 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ install_memreserve_table(sys_table);
|
|
|
|
+
|
|
new_fdt_addr = fdt_addr;
|
|
new_fdt_addr = fdt_addr;
|
|
status = allocate_new_fdt_and_exit_boot(sys_table, handle,
|
|
status = allocate_new_fdt_and_exit_boot(sys_table, handle,
|
|
&new_fdt_addr, efi_get_max_fdt_addr(dram_base),
|
|
&new_fdt_addr, efi_get_max_fdt_addr(dram_base),
|