44 lines
1.4 KiB
Diff
44 lines
1.4 KiB
Diff
|
From 058aba8cbd2194c0dfe6b232170f43f8e410f119 Mon Sep 17 00:00:00 2001
|
||
|
From: Alexander Graf <agraf@suse.de>
|
||
|
Date: Thu, 3 Mar 2016 15:02:27 +0100
|
||
|
Subject: [PATCH] bootefi: Mark fdt memory as in-use
|
||
|
|
||
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
||
|
|
||
|
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 <command.h>
|
||
|
#include <efi_loader.h>
|
||
|
#include <errno.h>
|
||
|
+#include <libfdt.h>
|
||
|
#include <libfdt_env.h>
|
||
|
|
||
|
/*
|
||
|
@@ -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;
|