u-boot/efi-map-fdt-as-reserved.patch

44 lines
1.4 KiB
Diff
Raw Normal View History

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;