From 058aba8cbd2194c0dfe6b232170f43f8e410f119 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 3 Mar 2016 15:02:27 +0100 Subject: [PATCH] bootefi: Mark fdt memory as in-use Signed-off-by: Alexander Graf diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 6119854..8ba2c53 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -10,6 +10,7 @@ #include #include #include +#include #include /* @@ -91,6 +92,7 @@ static unsigned long do_bootefi_exec(void *efi) { ulong (*entry)(void *image_handle, struct efi_system_table *st); bootm_headers_t img = { 0 }; + ulong fdt_pages, fdt_size, fdt_start, fdt_end; /* * gd lives in a fixed register which may get clobbered while we execute @@ -111,6 +113,15 @@ static unsigned long do_bootefi_exec(void *efi) systab.tables[0].guid = EFI_FDT_GUID; systab.tables[0].table = working_fdt; systab.nr_tables = 1; + + /* And reserve the space in the memory map */ + fdt_start = ((ulong)working_fdt) & ~EFI_PAGE_MASK; + fdt_end = ((ulong)working_fdt) + fdt_totalsize(working_fdt); + fdt_size = (fdt_end - fdt_start) + EFI_PAGE_MASK; + fdt_pages = (fdt_size >> EFI_PAGE_SHIFT) + 2; + efi_add_memory_map(fdt_start, fdt_pages, + EFI_BOOT_SERVICES_DATA, true); + } else { printf("WARNING: No device tree loaded, expect boot to fail\n"); systab.nr_tables = 0;