aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2018-11-18 17:58:54 +0100
committerAlexander Graf <agraf@suse.de>2018-12-02 21:59:37 +0100
commit34c96659ed578b50f08bbba40e39fdb9d15865e1 (patch)
tree042ba911904f06e22b8daa83196fc8ce7493627b /lib
parent0c9ac06a2894ea08488b5f8f5d1e5cbd57808900 (diff)
downloadu-boot-34c96659ed578b50f08bbba40e39fdb9d15865e1.zip
u-boot-34c96659ed578b50f08bbba40e39fdb9d15865e1.tar.gz
u-boot-34c96659ed578b50f08bbba40e39fdb9d15865e1.tar.bz2
efi_selftest: check fdt is marked as runtime data
Check that the memory area containing the device tree is marked as runtime data. Update the Python test to pass ${fdtcontroladdr} to bootefi. Update the description of the Python test. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_selftest/efi_selftest_memory.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/efi_selftest/efi_selftest_memory.c b/lib/efi_selftest/efi_selftest_memory.c
index 0623e8e..24b4438 100644
--- a/lib/efi_selftest/efi_selftest_memory.c
+++ b/lib/efi_selftest/efi_selftest_memory.c
@@ -6,13 +6,17 @@
*
* This unit test checks the following runtime services:
* AllocatePages, FreePages, GetMemoryMap
+ *
+ * The memory type used for the device tree is checked.
*/
#include <efi_selftest.h>
#define EFI_ST_NUM_PAGES 8
+static const efi_guid_t fdt_guid = EFI_FDT_GUID;
static struct efi_boot_services *boottime;
+static u64 fdt_addr;
/**
* setup() - setup unit test
@@ -24,8 +28,20 @@ static struct efi_boot_services *boottime;
static int setup(const efi_handle_t handle,
const struct efi_system_table *systable)
{
+ size_t i;
+
boottime = systable->boottime;
+ for (i = 0; i < systable->nr_tables; ++i) {
+ if (!efi_st_memcmp(&systable->tables[i].guid, &fdt_guid,
+ sizeof(efi_guid_t))) {
+ if (fdt_addr) {
+ efi_st_error("Duplicate device tree\n");
+ return EFI_ST_FAILURE;
+ }
+ fdt_addr = (uintptr_t)systable->tables[i].table;
+ }
+ }
return EFI_ST_SUCCESS;
}
@@ -152,6 +168,14 @@ static int execute(void)
return EFI_ST_FAILURE;
}
+ /* Check memory reservation for the device tree */
+ if (fdt_addr &&
+ find_in_memory_map(map_size, memory_map, desc_size, fdt_addr,
+ EFI_RUNTIME_SERVICES_DATA) != EFI_ST_SUCCESS) {
+ efi_st_error
+ ("Device tree not marked as runtime services data\n");
+ return EFI_ST_FAILURE;
+ }
return EFI_ST_SUCCESS;
}