LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File efi-map-fdt-as-reserved.patch of Package u-boot-rpi2 (Project home:algraf:rpi-efi)

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;