@@ -181,7 +181,7 @@ static __init void reserve_regions(void)
size = npages << PAGE_SHIFT;
if (is_normal_ram(md))
- early_init_dt_add_memory_arch(paddr, size);
+ early_init_dt_add_memory(paddr, size);
if (is_reserve_region(md)) {
memblock_reserve(paddr, size);
@@ -377,5 +377,9 @@ __setup("keepinitrd", keepinitrd_setup);
void __init early_init_dt_add_memory_arch(u64 base, u64 size)
{
- early_init_dt_add_memory(base, size);
+ /*
+ * Ignore DT memory nodes if we are booting via UEFI.
+ */
+ if (!efi_enabled(EFI_MEMMAP))
+ early_init_dt_add_memory(base, size);
}
@@ -24,7 +24,7 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt,
unsigned long map_size, unsigned long desc_size,
u32 desc_ver)
{
- int node, prev, num_rsv;
+ int node, num_rsv;
int status;
u32 fdt_val32;
u64 fdt_val64;
@@ -54,28 +54,6 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt,
goto fdt_set_fail;
/*
- * Delete any memory nodes present. We must delete nodes which
- * early_init_dt_scan_memory may try to use.
- */
- prev = 0;
- for (;;) {
- const char *type;
- int len;
-
- node = fdt_next_node(fdt, prev, NULL);
- if (node < 0)
- break;
-
- type = fdt_getprop(fdt, node, "device_type", &len);
- if (type && strncmp(type, "memory", len) == 0) {
- fdt_del_node(fdt, node);
- continue;
- }
-
- prev = node;
- }
-
- /*
* Delete all memory reserve map entries. When booting via UEFI,
* kernel will use the UEFI memory map to find reserved regions.
*/