diff options
author | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2023-05-16 13:03:28 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2023-05-16 13:03:28 +0200 |
commit | 493d422363f269744c1459e92ddd622ae384c428 (patch) | |
tree | 4106157064823e8b8ab82d3b61cb57e9e7ce0cf0 | |
parent | dcf430656ca8ef964fa55ad9eb81cf838c7837f2 (diff) | |
parent | 303ef33e7df712a71634eb703646aff7df88a1bf (diff) | |
download | arm-trusted-firmware-493d422363f269744c1459e92ddd622ae384c428.tar.gz |
Merge changes from topics "plat_tests_scalability", "sb/tc-plat-tests" into integration
* changes:
test(tc): unify platform tests traces
test(tc): return test failures count for tfm-testsuite
test(tc): move platform tests in their own function
test(tc): centralize platform error handling
refactor(tc): define PLATFORM_TESTS for scale
-rw-r--r-- | plat/arm/board/tc/include/tc_plat.h | 5 | ||||
-rw-r--r-- | plat/arm/board/tc/nv_counter_test.c | 14 | ||||
-rw-r--r-- | plat/arm/board/tc/platform.mk | 38 | ||||
-rw-r--r-- | plat/arm/board/tc/rss_ap_tests.c | 35 | ||||
-rw-r--r-- | plat/arm/board/tc/tc_bl31_setup.c | 28 |
5 files changed, 82 insertions, 38 deletions
diff --git a/plat/arm/board/tc/include/tc_plat.h b/plat/arm/board/tc/include/tc_plat.h index 195366e48..117fbb430 100644 --- a/plat/arm/board/tc/include/tc_plat.h +++ b/plat/arm/board/tc/include/tc_plat.h @@ -10,10 +10,11 @@ void tc_bl31_common_platform_setup(void); #ifdef PLATFORM_TEST_TFM_TESTSUITE -void run_platform_tests(void); +int run_platform_tests(void); #endif + #ifdef PLATFORM_TEST_NV_COUNTERS -void nv_counter_test(void); +int nv_counter_test(void); #endif #endif /* TC_PLAT_H */ diff --git a/plat/arm/board/tc/nv_counter_test.c b/plat/arm/board/tc/nv_counter_test.c index 76c99159a..f9e001ea8 100644 --- a/plat/arm/board/tc/nv_counter_test.c +++ b/plat/arm/board/tc/nv_counter_test.c @@ -13,7 +13,7 @@ #include <platform_def.h> -void nv_counter_test(void) +int nv_counter_test(void) { psa_status_t status; uint32_t old_val; @@ -23,7 +23,7 @@ void nv_counter_test(void) status = rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE); if (status != PSA_SUCCESS) { printf("Failed to initialize RSS communication channel\n"); - plat_error_handler(-1); + return -1; } for (id = 0; id < 3; id++) { @@ -31,28 +31,30 @@ void nv_counter_test(void) if (status != PSA_SUCCESS) { printf("Failed during first id=(%d) rss_platform_nv_counter_read\n", id); - plat_error_handler(-1); + return -1; } status = rss_platform_nv_counter_increment(id); if (status != PSA_SUCCESS) { printf("Failed during id=(%d) rss_platform_nv_counter_increment\n", id); - plat_error_handler(-1); + return -1; } status = rss_platform_nv_counter_read(id, sizeof(new_val), (uint8_t *)&new_val); if (status != PSA_SUCCESS) { printf("Failed during second id=(%d) rss_platform_nv_counter_read\n", id); - plat_error_handler(-1); + return -1; } if (old_val + 1 != new_val) { printf("Failed nv_counter_test: old_val (%d) + 1 != new_val (%d)\n", old_val, new_val); - plat_error_handler(-1); + return -1; } } printf("Passed nv_counter_test\n"); + + return 0; } diff --git a/plat/arm/board/tc/platform.mk b/plat/arm/board/tc/platform.mk index 98c2e0ed6..c29537c7e 100644 --- a/plat/arm/board/tc/platform.mk +++ b/plat/arm/board/tc/platform.mk @@ -196,28 +196,32 @@ PLAT_INCLUDES += -Iinclude/lib/psa endif -ifeq (${PLATFORM_TEST},rss-nv-counters) - include drivers/arm/rss/rss_comms.mk +ifneq (${PLATFORM_TEST},) + $(eval $(call add_define,PLATFORM_TESTS)) + + ifeq (${PLATFORM_TEST},rss-nv-counters) + include drivers/arm/rss/rss_comms.mk - # Test code. - BL31_SOURCES += plat/arm/board/tc/nv_counter_test.c + # Test code. + BL31_SOURCES += plat/arm/board/tc/nv_counter_test.c - # Code under testing. - BL31_SOURCES += lib/psa/rss_platform.c \ + # Code under testing. + BL31_SOURCES += lib/psa/rss_platform.c \ drivers/arm/rss/rss_comms.c \ ${RSS_COMMS_SOURCES} - PLAT_INCLUDES += -Iinclude/lib/psa - - $(eval $(call add_define,PLATFORM_TEST_NV_COUNTERS)) -else ifeq (${PLATFORM_TEST},tfm-testsuite) - # Add this include as first, before arm_common.mk. This is necessary - # because arm_common.mk builds Mbed TLS, and platform_test.mk can - # change the list of Mbed TLS files that are to be compiled - # (LIBMBEDTLS_SRCS). - include plat/arm/board/tc/platform_test.mk -else ifneq (${PLATFORM_TEST},) - $(error "Unsupported PLATFORM_TEST value") + PLAT_INCLUDES += -Iinclude/lib/psa + + $(eval $(call add_define,PLATFORM_TEST_NV_COUNTERS)) + else ifeq (${PLATFORM_TEST},tfm-testsuite) + # Add this include as first, before arm_common.mk. This is necessary + # because arm_common.mk builds Mbed TLS, and platform_test.mk can + # change the list of Mbed TLS files that are to be compiled + # (LIBMBEDTLS_SRCS). + include plat/arm/board/tc/platform_test.mk + else + $(error "Unsupported PLATFORM_TEST value") + endif endif diff --git a/plat/arm/board/tc/rss_ap_tests.c b/plat/arm/board/tc/rss_ap_tests.c index b62043ece..8c40271ba 100644 --- a/plat/arm/board/tc/rss_ap_tests.c +++ b/plat/arm/board/tc/rss_ap_tests.c @@ -19,21 +19,28 @@ static struct test_suite_t test_suites[] = { {.freg = register_testsuite_measured_boot}, }; -static void run_tests(void) +/* + * Return 0 if we could run all tests. + * Note that this does not mean that all tests passed - only that they all run. + * One should then look at each individual test result inside the + * test_suites[].val field. + */ +static int run_tests(void) { enum test_suite_err_t ret; psa_status_t status; size_t i; + /* Initialize test environment. */ rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE); mbedtls_init(); status = psa_crypto_init(); if (status != PSA_SUCCESS) { printf("\n\npsa_crypto_init failed (status = %d)\n", status); - assert(false); - plat_error_handler(-1); + return -1; } + /* Run all tests. */ for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { struct test_suite_t *suite = &(test_suites[i]); @@ -41,22 +48,33 @@ static void run_tests(void) ret = run_testsuite(suite); if (ret != TEST_SUITE_ERR_NO_ERROR) { printf("\n\nError during executing testsuite '%s'.\n", suite->name); - assert(false); - plat_error_handler(-1); + return -1; } } printf("\nAll tests are run.\n"); + + return 0; } void run_platform_tests(void) { size_t i; + int ret; + int failures = 0; - run_tests(); + ret = run_tests(); + if (ret != 0) { + /* For some reason, we could not run all tests. */ + return ret; + } printf("\n\n"); - /* Print a summary of all the tests that had been run. */ + /* + * Print a summary of all the tests that had been run. + * Also count the number of tests failure and report that back to the + * caller. + */ printf("SUMMARY:\n"); for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { @@ -67,6 +85,7 @@ void run_platform_tests(void) printf(" %s PASSED.\n", suite->name); break; case TEST_FAILED: + failures++; printf(" %s FAILED.\n", suite->name); break; case TEST_SKIPPED: @@ -79,4 +98,6 @@ void run_platform_tests(void) } printf("\n\n"); + + return failures; } diff --git a/plat/arm/board/tc/tc_bl31_setup.c b/plat/arm/board/tc/tc_bl31_setup.c index 6afbd9931..ca3a03279 100644 --- a/plat/arm/board/tc/tc_bl31_setup.c +++ b/plat/arm/board/tc/tc_bl31_setup.c @@ -50,18 +50,34 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, fconf_populate("FW_CONFIG", arg1); } -void tc_bl31_common_platform_setup(void) +#ifdef PLATFORM_TESTS +static __dead2 void tc_run_platform_tests(void) { - arm_bl31_platform_setup(); + int tests_failed; + + printf("\nStarting platform tests...\n"); -#if defined(PLATFORM_TEST_NV_COUNTERS) || defined(PLATFORM_TEST_TFM_TESTSUITE) #ifdef PLATFORM_TEST_NV_COUNTERS - nv_counter_test(); + tests_failed = nv_counter_test(); #elif PLATFORM_TEST_TFM_TESTSUITE - run_platform_tests(); + tests_failed = run_platform_tests(); #endif - /* Suspend booting */ + + printf("Platform tests %s.\n", + (tests_failed != 0) ? "failed" : "succeeded"); + + /* Suspend booting, no matter the tests outcome. */ + printf("Suspend booting...\n"); plat_error_handler(-1); +} +#endif + +void tc_bl31_common_platform_setup(void) +{ + arm_bl31_platform_setup(); + +#ifdef PLATFORM_TESTS + tc_run_platform_tests(); #endif } |