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>
This commit is contained in:
parent
0c9ac06a28
commit
34c96659ed
@ -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;
|
||||
}
|
||||
|
||||
|
@ -8,12 +8,14 @@ import u_boot_utils
|
||||
|
||||
@pytest.mark.buildconfigspec('cmd_bootefi_selftest')
|
||||
def test_efi_selftest(u_boot_console):
|
||||
"""
|
||||
Run bootefi selftest
|
||||
"""
|
||||
"""Test the UEFI implementation
|
||||
|
||||
:param u_boot_console: U-Boot console
|
||||
|
||||
This function executes all selftests that are not marked as on request.
|
||||
"""
|
||||
u_boot_console.run_command(cmd='setenv efi_selftest')
|
||||
u_boot_console.run_command(cmd='bootefi selftest', wait_for_prompt=False)
|
||||
u_boot_console.run_command(cmd='bootefi selftest ${fdtcontroladdr}', wait_for_prompt=False)
|
||||
m = u_boot_console.p.expect(['Summary: 0 failures', 'Press any key'])
|
||||
if m != 0:
|
||||
raise Exception('Failures occurred during the EFI selftest')
|
||||
|
Loading…
Reference in New Issue
Block a user