From 10feb30c701d3cf264746d0d81bd566f002de24b Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Mon, 22 Apr 2019 09:18:55 +0200 Subject: test/py: pytest.mark.notbuildconfigspec() We already can let a Python test depend on a build option being set via @pytest.mark.buildconfigspec(). It may be necessary to let a test depend on a build option *not* being set. So let's introduce @pytest.mark.notbuildconfigspec for this purpose. Signed-off-by: Heinrich Schuchardt --- test/py/README.md | 1 + test/py/conftest.py | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'test') diff --git a/test/py/README.md b/test/py/README.md index 4d9d2b81d1e..2156661d6c4 100644 --- a/test/py/README.md +++ b/test/py/README.md @@ -310,6 +310,7 @@ instances of: - `buildconfig.get(...` - `@pytest.mark.buildconfigspec(...` +- `@pytest.mark.notbuildconfigspec(...` ### Complete invocation example diff --git a/test/py/conftest.py b/test/py/conftest.py index e40cbf0ba12..00d8ef8ba99 100644 --- a/test/py/conftest.py +++ b/test/py/conftest.py @@ -460,11 +460,15 @@ def setup_buildconfigspec(item): """ mark = item.get_marker('buildconfigspec') - if not mark: - return - for option in mark.args: - if not ubconfig.buildconfig.get('config_' + option.lower(), None): - pytest.skip('.config feature "%s" not enabled' % option.lower()) + if mark: + for option in mark.args: + if not ubconfig.buildconfig.get('config_' + option.lower(), None): + pytest.skip('.config feature "%s" not enabled' % option.lower()) + notmark = item.get_marker('notbuildconfigspec') + if notmark: + for option in notmark.args: + if ubconfig.buildconfig.get('config_' + option.lower(), None): + pytest.skip('.config feature "%s" enabled' % option.lower()) def tool_is_in_path(tool): for path in os.environ["PATH"].split(os.pathsep): -- cgit v1.3.1 From 68066d5bcdd0b427ac75cf04a1f67cfede05ec4f Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 20 Apr 2019 13:33:55 +0200 Subject: efi_selftest: do not run FDT test with ACPI table. The EBBR specification prescribes that we should have either an ACPI table or a device tree but not both. So do not run the device tree unit test on boards with an ACPI table. Hence there is no need any longer to make it 'on request' only. Do not pass $fdtcontroladdr to `bootefi selftest`. Signed-off-by: Heinrich Schuchardt --- lib/efi_selftest/Makefile | 4 ++++ lib/efi_selftest/efi_selftest_fdt.c | 41 +++++++++++++++++++++++++++---------- test/py/tests/test_efi_selftest.py | 3 ++- 3 files changed, 36 insertions(+), 12 deletions(-) (limited to 'test') diff --git a/lib/efi_selftest/Makefile b/lib/efi_selftest/Makefile index c9720c9da8d..fb82e71976a 100644 --- a/lib/efi_selftest/Makefile +++ b/lib/efi_selftest/Makefile @@ -42,6 +42,10 @@ efi_selftest_watchdog.o obj-$(CONFIG_CPU_V7) += efi_selftest_unaligned.o obj-$(CONFIG_EFI_LOADER_HII) += efi_selftest_hii.o +ifeq ($(CONFIG_GENERATE_ACPI_TABLE),) +obj-y += efi_selftest_fdt.o +endif + ifeq ($(CONFIG_BLK)$(CONFIG_PARTITIONS),yy) obj-y += efi_selftest_block_device.o endif diff --git a/lib/efi_selftest/efi_selftest_fdt.c b/lib/efi_selftest/efi_selftest_fdt.c index d545d518120..94d72d3f6d8 100644 --- a/lib/efi_selftest/efi_selftest_fdt.c +++ b/lib/efi_selftest/efi_selftest_fdt.c @@ -13,13 +13,15 @@ #include #include -static struct efi_boot_services *boottime; +static const struct efi_system_table *systemtab; +static const struct efi_boot_services *boottime; static const char *fdt; /* This should be sufficient for */ #define BUFFERSIZE 0x100000 -static efi_guid_t fdt_guid = EFI_FDT_GUID; +static const efi_guid_t fdt_guid = EFI_FDT_GUID; +static const efi_guid_t acpi_guid = EFI_ACPI_TABLE_GUID; /* * Convert FDT value to host endianness. @@ -115,6 +117,23 @@ static char *get_property(const u16 *property) } } +/** + * efi_st_get_config_table() - get configuration table + * + * @guid: GUID of the configuration table + * Return: pointer to configuration table or NULL + */ +static void *efi_st_get_config_table(const efi_guid_t *guid) +{ + size_t i; + + for (i = 0; i < systab.nr_tables; i++) { + if (!guidcmp(guid, &systemtab->tables[i].guid)) + return systemtab->tables[i].table; + } + return NULL; +} + /* * Setup unit test. * @@ -125,21 +144,22 @@ static char *get_property(const u16 *property) static int setup(const efi_handle_t img_handle, const struct efi_system_table *systable) { - efi_uintn_t i; + void *acpi; + systemtab = systable; boottime = systable->boottime; - /* Find configuration tables */ - for (i = 0; i < systable->nr_tables; ++i) { - if (!efi_st_memcmp(&systable->tables[i].guid, &fdt_guid, - sizeof(efi_guid_t))) - fdt = systable->tables[i].table; - } + acpi = efi_st_get_config_table(&acpi_guid); + fdt = efi_st_get_config_table(&fdt_guid); + if (!fdt) { efi_st_error("Missing device tree\n"); return EFI_ST_FAILURE; } - + if (acpi) { + efi_st_error("Found ACPI table and device tree\n"); + return EFI_ST_FAILURE; + } return EFI_ST_SUCCESS; } @@ -183,5 +203,4 @@ EFI_UNIT_TEST(fdt) = { .phase = EFI_EXECUTE_BEFORE_BOOTTIME_EXIT, .setup = setup, .execute = execute, - .on_request = true, }; diff --git a/test/py/tests/test_efi_selftest.py b/test/py/tests/test_efi_selftest.py index bc226a8e637..07e4db04528 100644 --- a/test/py/tests/test_efi_selftest.py +++ b/test/py/tests/test_efi_selftest.py @@ -15,7 +15,7 @@ def test_efi_selftest(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 ${fdtcontroladdr}', wait_for_prompt=False) + u_boot_console.run_command(cmd='bootefi selftest', 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') @@ -27,6 +27,7 @@ def test_efi_selftest(u_boot_console): @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.buildconfigspec('of_control') +@pytest.mark.notbuildconfigspec('generate_acpi_table') def test_efi_selftest_device_tree(u_boot_console): u_boot_console.run_command(cmd='setenv efi_selftest list') output = u_boot_console.run_command('bootefi selftest') -- cgit v1.3.1