Merge changes from topic "mb/tc-model-update" into integration

* changes:
  docs: update FVP TC2 model version and build (11.23/17)
  fix(tc): increase BL2 maximum size limit
  refactor(tc): update platform tests
  feat(rss): add defines for 'type' range and use them in psa_call()
  feat(rss): adjust parameter packing to match TF-M changes
  refactor(tc): remap console logs
This commit is contained in:
Olivier Deprez 2024-02-15 16:57:33 +01:00 committed by TrustedFirmware Code Review
commit 02088b64f3
11 changed files with 125 additions and 74 deletions

View file

@ -52,7 +52,7 @@ Arm FVPs without shifted affinities, and that do not support threaded CPU cores
- ``FVP_Morello`` (Version 0.11/33) - ``FVP_Morello`` (Version 0.11/33)
- ``FVP_RD_V1`` - ``FVP_RD_V1``
- ``FVP_TC1`` - ``FVP_TC1``
- ``FVP_TC2`` (Version 11.20/24) - ``FVP_TC2`` (Version 11.23/17)
The latest version of the AArch32 build of TF-A has been tested on the The latest version of the AArch32 build of TF-A has been tested on the
following Arm FVPs without shifted affinities, and that do not support threaded following Arm FVPs without shifted affinities, and that do not support threaded

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022, Arm Limited. All rights reserved. * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -84,8 +84,8 @@ psa_status_t psa_call(psa_handle_t handle, int32_t type, const psa_invec *in_vec
psa_status_t return_val; psa_status_t return_val;
size_t idx; size_t idx;
if (type > INT16_MAX || type < INT16_MIN || in_len > PSA_MAX_IOVEC if (type > PSA_CALL_TYPE_MAX || type < PSA_CALL_TYPE_MIN ||
|| out_len > PSA_MAX_IOVEC) { in_len > PSA_MAX_IOVEC || out_len > PSA_MAX_IOVEC) {
return PSA_ERROR_INVALID_ARGUMENT; return PSA_ERROR_INVALID_ARGUMENT;
} }

View file

@ -0,0 +1,35 @@
/*
* Copyright (c) 2024, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/*
* Packing scheme of the control parameter
*
* 31 30-28 27 26-24 23-20 19 18-16 15-0
* +------------+-----+------+-------+-----+-------+-------+------+
* | | | | invec | | | outvec| type |
* | Res | Res | Res | number| Res | Res | number| |
* +------------+-----+------+-------+-----+-------+-------+------+
*
* Res: Reserved.
*/
#ifndef RSS_COMMS_PROTOCOL_COMMON
#define RSS_COMMS_PROTOCOL_COMMON
#define TYPE_OFFSET (0U)
#define TYPE_MASK (0xFFFFUL << TYPE_OFFSET)
#define IN_LEN_OFFSET (24U)
#define IN_LEN_MASK (0x7UL << IN_LEN_OFFSET)
#define OUT_LEN_OFFSET (16U)
#define OUT_LEN_MASK (0x7UL << OUT_LEN_OFFSET)
#define PARAM_PACK(type, in_len, out_len) \
(((((uint32_t)(type)) << TYPE_OFFSET) & TYPE_MASK) | \
((((uint32_t)(in_len)) << IN_LEN_OFFSET) & IN_LEN_MASK) | \
((((uint32_t)(out_len)) << OUT_LEN_OFFSET) & OUT_LEN_MASK))
#endif /* RSS_COMMS_PROTOCOL_COMMON */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022-2023, Arm Limited. All rights reserved. * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
@ -9,20 +9,9 @@
#include <string.h> #include <string.h>
#include <common/debug.h> #include <common/debug.h>
#include "rss_comms_protocol_common.h"
#include "rss_comms_protocol_embed.h" #include "rss_comms_protocol_embed.h"
#define TYPE_OFFSET (16U)
#define TYPE_MASK (0xFFFFUL << TYPE_OFFSET)
#define IN_LEN_OFFSET (8U)
#define IN_LEN_MASK (0xFFUL << IN_LEN_OFFSET)
#define OUT_LEN_OFFSET (0U)
#define OUT_LEN_MASK (0xFFUL << OUT_LEN_OFFSET)
#define PARAM_PACK(type, in_len, out_len) \
(((((uint32_t)type) << TYPE_OFFSET) & TYPE_MASK) | \
((((uint32_t)in_len) << IN_LEN_OFFSET) & IN_LEN_MASK) | \
((((uint32_t)out_len) << OUT_LEN_OFFSET) & OUT_LEN_MASK))
psa_status_t rss_protocol_embed_serialize_msg(psa_handle_t handle, psa_status_t rss_protocol_embed_serialize_msg(psa_handle_t handle,
int16_t type, int16_t type,
const psa_invec *in_vec, const psa_invec *in_vec,

View file

@ -1,25 +1,14 @@
/* /*
* Copyright (c) 2022, Arm Limited. All rights reserved. * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
*/ */
#include <assert.h> #include <assert.h>
#include "rss_comms_protocol_common.h"
#include "rss_comms_protocol_pointer_access.h" #include "rss_comms_protocol_pointer_access.h"
#define TYPE_OFFSET (16U)
#define TYPE_MASK (0xFFFFUL << TYPE_OFFSET)
#define IN_LEN_OFFSET (8U)
#define IN_LEN_MASK (0xFFUL << IN_LEN_OFFSET)
#define OUT_LEN_OFFSET (0U)
#define OUT_LEN_MASK (0xFFUL << OUT_LEN_OFFSET)
#define PARAM_PACK(type, in_len, out_len) \
(((((uint32_t)type) << TYPE_OFFSET) & TYPE_MASK) | \
((((uint32_t)in_len) << IN_LEN_OFFSET) & IN_LEN_MASK) | \
((((uint32_t)out_len) << OUT_LEN_OFFSET) & OUT_LEN_MASK))
psa_status_t rss_protocol_pointer_access_serialize_msg(psa_handle_t handle, psa_status_t rss_protocol_pointer_access_serialize_msg(psa_handle_t handle,
int16_t type, int16_t type,
const psa_invec *in_vec, const psa_invec *in_vec,

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2020-2023, Arm Limited. All rights reserved. * Copyright (c) 2020-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -13,7 +13,7 @@
#size-cells = <2>; #size-cells = <2>;
aliases { aliases {
serial0 = &soc_uart0; serial0 = &ap_ns_uart;
}; };
chosen { chosen {
@ -327,10 +327,10 @@
clock-output-names = "uartclk"; clock-output-names = "uartclk";
}; };
soc_uart0: uart@7ff80000 { ap_ns_uart: uart@2A400000 {
compatible = "arm,pl011", "arm,primecell"; compatible = "arm,pl011", "arm,primecell";
reg = <0x0 0x7ff80000 0x0 0x1000>; reg = <0x0 0x2A400000 0x0 0x1000>;
interrupts = <0x0 116 0x4>; interrupts = <0x0 63 0x4>;
clocks = <&soc_uartclk>, <&soc_refclk100mhz>; clocks = <&soc_uartclk>, <&soc_refclk100mhz>;
clock-names = "uartclk", "apb_pclk"; clock-names = "uartclk", "apb_pclk";
status = "okay"; status = "okay";

View file

@ -1,6 +1,5 @@
/* /*
* Copyright (c) 2018-2021, Arm Limited. All rights reserved. * Copyright (c) 2018-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
@ -17,41 +16,57 @@
#ifndef IOVEC_LEN #ifndef IOVEC_LEN
#define IOVEC_LEN(arr) ((uint32_t)(sizeof(arr)/sizeof(arr[0]))) #define IOVEC_LEN(arr) ((uint32_t)(sizeof(arr)/sizeof(arr[0])))
#endif #endif
/*********************** PSA Client Macros and Types *************************/ /*********************** PSA Client Macros and Types *************************/
/** /**
* The version of the PSA Framework API that is being used to build the calling * The version of the PSA Framework API that is being used to build the calling
* firmware. Only part of features of FF-M v1.1 have been implemented. FF-M v1.1 * firmware. Only part of features of FF-M v1.1 have been implemented. FF-M v1.1
* is compatible with v1.0. * is compatible with v1.0.
*/ */
#define PSA_FRAMEWORK_VERSION (0x0101u) #define PSA_FRAMEWORK_VERSION (0x0101u)
/** /**
* Return value from psa_version() if the requested RoT Service is not present * Return value from psa_version() if the requested RoT Service is not present
* in the system. * in the system.
*/ */
#define PSA_VERSION_NONE (0u) #define PSA_VERSION_NONE (0u)
/** /**
* The zero-value null handle can be assigned to variables used in clients and * The zero-value null handle can be assigned to variables used in clients and
* RoT Services, indicating that there is no current connection or message. * RoT Services, indicating that there is no current connection or message.
*/ */
#define PSA_NULL_HANDLE ((psa_handle_t)0) #define PSA_NULL_HANDLE ((psa_handle_t)0)
/** /**
* Tests whether a handle value returned by psa_connect() is valid. * Tests whether a handle value returned by psa_connect() is valid.
*/ */
#define PSA_HANDLE_IS_VALID(handle) ((psa_handle_t)(handle) > 0) #define PSA_HANDLE_IS_VALID(handle) ((psa_handle_t)(handle) > 0)
/** /**
* Converts the handle value returned from a failed call psa_connect() into * Converts the handle value returned from a failed call psa_connect() into
* an error code. * an error code.
*/ */
#define PSA_HANDLE_TO_ERROR(handle) ((psa_status_t)(handle)) #define PSA_HANDLE_TO_ERROR(handle) ((psa_status_t)(handle))
/** /**
* Maximum number of input and output vectors for a request to psa_call(). * Maximum number of input and output vectors for a request to psa_call().
*/ */
#define PSA_MAX_IOVEC (4u) #define PSA_MAX_IOVEC (4u)
/**
* The minimum and maximum value that can be passed
* as the type parameter in a call to psa_call().
*/
#define PSA_CALL_TYPE_MIN (0)
#define PSA_CALL_TYPE_MAX (INT16_MAX)
/** /**
* An IPC message type that indicates a generic client request. * An IPC message type that indicates a generic client request.
*/ */
#define PSA_IPC_CALL (0) #define PSA_IPC_CALL (0)
typedef int32_t psa_handle_t; typedef int32_t psa_handle_t;
/** /**
* A read-only input memory region provided to an RoT Service. * A read-only input memory region provided to an RoT Service.
*/ */
@ -59,6 +74,7 @@ typedef struct psa_invec {
const void *base; /*!< the start address of the memory buffer */ const void *base; /*!< the start address of the memory buffer */
size_t len; /*!< the size in bytes */ size_t len; /*!< the size in bytes */
} psa_invec; } psa_invec;
/** /**
* A writable output memory region provided to an RoT Service. * A writable output memory region provided to an RoT Service.
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2023, Arm Limited. All rights reserved. * Copyright (c) 2023-2024, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
@ -38,21 +38,28 @@ struct rss_crypto_aead_pack_input {
}; };
/* /*
* Structure used to pack non-pointer types in a call * Structure used to pack non-pointer types in a call to PSA Crypto APIs
*/ */
struct rss_crypto_pack_iovec { struct rss_crypto_pack_iovec {
psa_key_id_t key_id; /* Key id */ psa_key_id_t key_id; /*!< Key id */
psa_algorithm_t alg; /* Algorithm */ psa_algorithm_t alg; /*!< Algorithm */
uint32_t op_handle; /* Frontend context handle associated uint32_t op_handle; /*!< Frontend context handle associated to a
to a multipart operation */ * multipart operation
uint32_t capacity; /* Key derivation capacity */ */
uint32_t ad_length; /* Additional Data length for multipart AEAD */ uint32_t ad_length; /*!< Additional Data length for multipart AEAD */
uint32_t plaintext_length; /* Plaintext length for multipart AEAD */ uint32_t plaintext_length; /*!< Plaintext length for multipart AEAD */
struct rss_crypto_aead_pack_input aead_in; /* Packs AEAD-related inputs */
uint16_t function_id; /* Used to identify the function in the API dispatcher struct rss_crypto_aead_pack_input aead_in; /*!< Packs AEAD-related inputs */
to the service backend. See rss_crypto_func_sid for
detail */ uint16_t function_id; /*!< Used to identify the function in the
uint16_t step; /* Key derivation step */ * API dispatcher to the service backend
* See rss_crypto_func_sid for detail
*/
uint16_t step; /*!< Key derivation step */
union {
size_t capacity; /*!< Key derivation capacity */
uint64_t value; /*!< Key derivation integer for update*/
};
}; };
#endif /* RSS_CRYPTO_DEFS_H */ #endif /* RSS_CRYPTO_DEFS_H */

View file

@ -137,7 +137,7 @@
* little space for growth. Current size is considering that TRUSTED_BOARD_BOOT * little space for growth. Current size is considering that TRUSTED_BOARD_BOOT
* and MEASURED_BOOT is enabled. * and MEASURED_BOOT is enabled.
*/ */
# define PLAT_ARM_MAX_BL2_SIZE 0x26000 # define PLAT_ARM_MAX_BL2_SIZE 0x29000
/* /*
@ -333,4 +333,18 @@
#define PLAT_ARM_FIP_OFFSET_IN_GPT 0x6000 #define PLAT_ARM_FIP_OFFSET_IN_GPT 0x6000
#endif /* ARM_GPT_SUPPORT */ #endif /* ARM_GPT_SUPPORT */
/* UART related constants */
#undef PLAT_ARM_BOOT_UART_BASE
#define PLAT_ARM_BOOT_UART_BASE 0x2A410000
#undef PLAT_ARM_RUN_UART_BASE
#define PLAT_ARM_RUN_UART_BASE 0x2A400000
#undef PLAT_ARM_SP_MIN_RUN_UART_BASE
#define PLAT_ARM_SP_MIN_RUN_UART_BASE PLAT_ARM_RUN_UART_BASE
#undef PLAT_ARM_CRASH_UART_BASE
#define PLAT_ARM_CRASH_UART_BASE PLAT_ARM_RUN_UART_BASE
#endif /* PLATFORM_DEF_H */ #endif /* PLATFORM_DEF_H */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022-2023, Arm Ltd. All rights reserved. * Copyright (c) 2022-2024, Arm Ltd. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -19,11 +19,12 @@
#undef TF_MBEDTLS_HEAP_SIZE #undef TF_MBEDTLS_HEAP_SIZE
#define TF_MBEDTLS_HEAP_SIZE PLATFORM_TEST_MIN_MBEDTLS_HEAP_SIZE #define TF_MBEDTLS_HEAP_SIZE PLATFORM_TEST_MIN_MBEDTLS_HEAP_SIZE
#endif #endif
#endif #endif /* TF_MBEDTLS_HEAP_SIZE */
#define MBEDTLS_PSA_CRYPTO_C #define MBEDTLS_PSA_CRYPTO_C
#define MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG #define MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
#define MBEDTLS_ECP_C #define MBEDTLS_ECP_C
#define MBEDTLS_ECP_DP_SECP384R1_ENABLED #define MBEDTLS_ECP_DP_SECP384R1_ENABLED
#define MBEDTLS_ECP_NO_INTERNAL_RNG
#endif /* PLAT_TC_MBEDTLS_CONFIG_H */ #endif /* PLAT_TC_MBEDTLS_CONFIG_H */

View file

@ -1,4 +1,4 @@
# Copyright (c) 2022-2023, Arm Limited. All rights reserved. # Copyright (c) 2022-2024, Arm Limited. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -13,7 +13,6 @@ ifeq (${PLATFORM_TEST},rss-nv-counters)
# Code under testing. # Code under testing.
BL31_SOURCES += lib/psa/rss_platform.c \ BL31_SOURCES += lib/psa/rss_platform.c \
drivers/arm/rss/rss_comms.c \
${RSS_COMMS_SOURCES} ${RSS_COMMS_SOURCES}
PLAT_INCLUDES += -Iinclude/lib/psa PLAT_INCLUDES += -Iinclude/lib/psa
@ -27,13 +26,13 @@ else ifeq (${PLATFORM_TEST},rss-rotpk)
# Code under testing. # Code under testing.
BL31_SOURCES += lib/psa/rss_platform.c \ BL31_SOURCES += lib/psa/rss_platform.c \
drivers/arm/rss/rss_comms.c \
${RSS_COMMS_SOURCES} ${RSS_COMMS_SOURCES}
PLAT_INCLUDES += -Iinclude/lib/psa PLAT_INCLUDES += -Iinclude/lib/psa
$(eval $(call add_define,PLATFORM_TEST_ROTPK)) $(eval $(call add_define,PLATFORM_TEST_ROTPK))
else ifeq (${PLATFORM_TEST},tfm-testsuite) else ifeq (${PLATFORM_TEST},tfm-testsuite)
include drivers/arm/rss/rss_comms.mk
# The variables need to be set to compile the platform test: # The variables need to be set to compile the platform test:
ifeq (${TF_M_TESTS_PATH},) ifeq (${TF_M_TESTS_PATH},)
@ -56,7 +55,7 @@ else ifeq (${PLATFORM_TEST},tfm-testsuite)
MBEDTLS_CONFIG_FILE = "<plat_tc_mbedtls_config.h>" MBEDTLS_CONFIG_FILE = "<plat_tc_mbedtls_config.h>"
LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \ LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \
entropy.c \ entropy.c \
entropy_poll.c \ entropy_poll.c \
hmac_drbg.c \ hmac_drbg.c \
@ -69,30 +68,31 @@ else ifeq (${PLATFORM_TEST},tfm-testsuite)
psa_crypto_slot_management.c \ psa_crypto_slot_management.c \
) )
BL31_SOURCES += ${RSS_COMMS_SOURCES} \ BL31_SOURCES += ${RSS_COMMS_SOURCES} \
plat/arm/common/arm_dyn_cfg.c \ plat/arm/common/arm_dyn_cfg.c \
${TC_BASE}/rss_ap_tests.c \ ${TC_BASE}/rss_ap_tests.c \
${TC_BASE}/rss_ap_testsuites.c \ ${TC_BASE}/rss_ap_testsuites.c \
${TC_BASE}/rss_ap_test_stubs.c \ ${TC_BASE}/rss_ap_test_stubs.c \
$(TF_M_TESTS_PATH)/test/framework/test_framework.c \ $(TF_M_TESTS_PATH)/tests_reg/test/framework/test_framework.c \
$(MEASURED_BOOT_TESTS_PATH)/measured_boot_common.c \ $(MEASURED_BOOT_TESTS_PATH)/measured_boot_common.c \
$(MEASURED_BOOT_TESTS_PATH)/measured_boot_tests_common.c \ $(MEASURED_BOOT_TESTS_PATH)/measured_boot_tests_common.c \
$(DELEGATED_ATTEST_TESTS_PATH)/delegated_attest_test.c \ $(DELEGATED_ATTEST_TESTS_PATH)/delegated_attest_test.c \
drivers/auth/mbedtls/mbedtls_common.c \ drivers/auth/mbedtls/mbedtls_common.c \
lib/psa/measured_boot.c \ lib/psa/measured_boot.c \
lib/psa/delegated_attestation.c lib/psa/delegated_attestation.c
PLAT_INCLUDES += -I$(TF_M_EXTRAS_PATH)/partitions/measured_boot/interface/include \ PLAT_INCLUDES += -I$(TF_M_EXTRAS_PATH)/partitions/measured_boot/interface/include \
-I$(TF_M_EXTRAS_PATH)/partitions/delegated_attestation/interface/include \ -I$(TF_M_EXTRAS_PATH)/partitions/delegated_attestation/interface/include \
-I$(TF_M_TESTS_PATH)/test/framework \ -I$(TF_M_TESTS_PATH)/tests_reg/test/framework \
-I$(TF_M_TESTS_PATH)/log \ -I$(TF_M_TESTS_PATH)/tests_reg/test/secure_fw/suites/extra \
-I$(TF_M_TESTS_PATH)/test/secure_fw/suites/extra \ -I$(TF_M_TESTS_PATH)/lib/log \
-I$(MEASURED_BOOT_TESTS_PATH)/non_secure \ -I$(MEASURED_BOOT_TESTS_PATH)/non_secure \
-I$(DELEGATED_ATTEST_TESTS_PATH) \ -I$(DELEGATED_ATTEST_TESTS_PATH) \
-I$(DELEGATED_ATTEST_TESTS_PATH)/non_secure \ -I$(DELEGATED_ATTEST_TESTS_PATH)/non_secure \
-Iplat/arm/board/tc \ -Iplat/arm/board/tc \
-Iinclude/drivers/auth/mbedtls \ -Iinclude/drivers/auth/mbedtls \
-Iinclude/drivers/arm -Iinclude/drivers/arm \
-Iinclude/lib/psa
# Some of the PSA functions are declared in multiple header files, that # Some of the PSA functions are declared in multiple header files, that
# triggers this warning. # triggers this warning.