mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-30 19:11:37 +00:00
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
2 changed files with 30 additions and 4 deletions
|
@ -6,13 +6,17 @@
|
||||||
*
|
*
|
||||||
* This unit test checks the following runtime services:
|
* This unit test checks the following runtime services:
|
||||||
* AllocatePages, FreePages, GetMemoryMap
|
* AllocatePages, FreePages, GetMemoryMap
|
||||||
|
*
|
||||||
|
* The memory type used for the device tree is checked.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <efi_selftest.h>
|
#include <efi_selftest.h>
|
||||||
|
|
||||||
#define EFI_ST_NUM_PAGES 8
|
#define EFI_ST_NUM_PAGES 8
|
||||||
|
|
||||||
|
static const efi_guid_t fdt_guid = EFI_FDT_GUID;
|
||||||
static struct efi_boot_services *boottime;
|
static struct efi_boot_services *boottime;
|
||||||
|
static u64 fdt_addr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* setup() - setup unit test
|
* setup() - setup unit test
|
||||||
|
@ -24,8 +28,20 @@ static struct efi_boot_services *boottime;
|
||||||
static int setup(const efi_handle_t handle,
|
static int setup(const efi_handle_t handle,
|
||||||
const struct efi_system_table *systable)
|
const struct efi_system_table *systable)
|
||||||
{
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
boottime = systable->boottime;
|
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;
|
return EFI_ST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +168,14 @@ static int execute(void)
|
||||||
return EFI_ST_FAILURE;
|
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;
|
return EFI_ST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,14 @@ import u_boot_utils
|
||||||
|
|
||||||
@pytest.mark.buildconfigspec('cmd_bootefi_selftest')
|
@pytest.mark.buildconfigspec('cmd_bootefi_selftest')
|
||||||
def test_efi_selftest(u_boot_console):
|
def test_efi_selftest(u_boot_console):
|
||||||
"""
|
"""Test the UEFI implementation
|
||||||
Run bootefi selftest
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
: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='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'])
|
m = u_boot_console.p.expect(['Summary: 0 failures', 'Press any key'])
|
||||||
if m != 0:
|
if m != 0:
|
||||||
raise Exception('Failures occurred during the EFI selftest')
|
raise Exception('Failures occurred during the EFI selftest')
|
||||||
|
|
Loading…
Add table
Reference in a new issue