diff options
author | laurenw-arm <lauren.wehrmeister@arm.com> | 2023-02-07 13:40:05 -0600 |
---|---|---|
committer | laurenw-arm <lauren.wehrmeister@arm.com> | 2023-03-08 12:05:06 -0600 |
commit | 1b0761130bab90306b48674dcdd86b42543fb81e (patch) | |
tree | 87c8b67549b2ec069c18d02cc246db1a5e5e3763 | |
parent | 2b7150b381f3497d391ec28e2f34be01b2968ada (diff) | |
download | arm-trusted-firmware-1b0761130bab90306b48674dcdd86b42543fb81e.tar.gz |
test(tc): test for AP/RSS NV counter interface
Change in PLATFORM_TEST build flag from boolean -> string, with the
current string options being tfm-testsuite and rss-nv-counters.
To get the old behavior, i.e. where we used to use PLATFORM_TEST=1,
we now need to pass PLATFORM_TEST=tfm-testsuite.
Adding new test of the AP/RSS interface for non-volatile counters.
The test reads, increments, and reads again each 3 types of NV
counters for: CCA, secure, and non-secure firmware. Enabled by
PLATFORM_TEST=rss-nv-counters.
Change-Id: I2044cc9b2f37984697e0754c9c824eab51a11e7f
Signed-off-by: Lauren Wehrmeister <lauren.wehrmeister@arm.com>
Signed-off-by: Raef Coles <raef.coles@arm.com>
-rw-r--r-- | plat/arm/board/tc/include/tc_plat.h | 3 | ||||
-rw-r--r-- | plat/arm/board/tc/nv_counter_test.c | 58 | ||||
-rw-r--r-- | plat/arm/board/tc/platform.mk | 30 | ||||
-rw-r--r-- | plat/arm/board/tc/platform_test.mk | 4 | ||||
-rw-r--r-- | plat/arm/board/tc/tc_bl31_setup.c | 10 |
5 files changed, 94 insertions, 11 deletions
diff --git a/plat/arm/board/tc/include/tc_plat.h b/plat/arm/board/tc/include/tc_plat.h index f7ce2fe1d..ba1831fb3 100644 --- a/plat/arm/board/tc/include/tc_plat.h +++ b/plat/arm/board/tc/include/tc_plat.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2021-2023, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -11,6 +11,7 @@ void tc_bl31_common_platform_setup(void); #ifdef PLATFORM_TEST void run_platform_tests(void); +void 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 new file mode 100644 index 000000000..76c99159a --- /dev/null +++ b/plat/arm/board/tc/nv_counter_test.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <stdint.h> +#include <stdio.h> + +#include <drivers/arm/rss_comms.h> +#include <plat/common/platform.h> +#include "rss_platform_api.h" + +#include <platform_def.h> + +void nv_counter_test(void) +{ + psa_status_t status; + uint32_t old_val; + uint32_t new_val; + uint32_t id; + + 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); + } + + for (id = 0; id < 3; id++) { + status = rss_platform_nv_counter_read(id, sizeof(old_val), (uint8_t *)&old_val); + if (status != PSA_SUCCESS) { + printf("Failed during first id=(%d) rss_platform_nv_counter_read\n", + id); + plat_error_handler(-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); + } + + 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); + } + + 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); + } + } + printf("Passed nv_counter_test\n"); +} diff --git a/plat/arm/board/tc/platform.mk b/plat/arm/board/tc/platform.mk index 218247769..05dca915e 100644 --- a/plat/arm/board/tc/platform.mk +++ b/plat/arm/board/tc/platform.mk @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2022, Arm Limited. All rights reserved. +# Copyright (c) 2021-2023, Arm Limited. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -196,10 +196,30 @@ PLAT_INCLUDES += -Iinclude/lib/psa endif -# 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 +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 + + # 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)) +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") +endif + include plat/arm/common/arm_common.mk include plat/arm/css/common/css_common.mk diff --git a/plat/arm/board/tc/platform_test.mk b/plat/arm/board/tc/platform_test.mk index c2ee69ef5..5cdbb86be 100644 --- a/plat/arm/board/tc/platform_test.mk +++ b/plat/arm/board/tc/platform_test.mk @@ -1,9 +1,9 @@ -# Copyright (c) 2022, Arm Limited. All rights reserved. +# Copyright (c) 2022-2023, Arm Limited. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # -ifeq (${PLATFORM_TEST},1) +ifeq (${PLATFORM_TEST},tfm-testsuite) # The variables need to be set to compile the platform test: ifeq (${TF_M_TESTS_PATH},) diff --git a/plat/arm/board/tc/tc_bl31_setup.c b/plat/arm/board/tc/tc_bl31_setup.c index c79558de3..1c1e2fb2a 100644 --- a/plat/arm/board/tc/tc_bl31_setup.c +++ b/plat/arm/board/tc/tc_bl31_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020-2022, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2020-2023, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -52,9 +52,13 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, void tc_bl31_common_platform_setup(void) { arm_bl31_platform_setup(); -#ifdef PLATFORM_TEST - run_platform_tests(); +#ifdef PLATFORM_TEST +#if PLATFORM_TEST == rss-nv-counters + nv_counter_test(); +#elif PLATFORM_TEST == tfm-testsuite + run_platform_tests() +#endif /* Suspend booting */ plat_error_handler(-1); #endif |