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_RD_V1``
- ``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
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
*/
@ -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;
size_t idx;
if (type > INT16_MAX || type < INT16_MIN || in_len > PSA_MAX_IOVEC
|| out_len > PSA_MAX_IOVEC) {
if (type > PSA_CALL_TYPE_MAX || type < PSA_CALL_TYPE_MIN ||
in_len > PSA_MAX_IOVEC || out_len > PSA_MAX_IOVEC) {
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
*
@ -9,20 +9,9 @@
#include <string.h>
#include <common/debug.h>
#include "rss_comms_protocol_common.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,
int16_t type,
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
*
*/
#include <assert.h>
#include "rss_comms_protocol_common.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,
int16_t type,
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
*/
@ -13,7 +13,7 @@
#size-cells = <2>;
aliases {
serial0 = &soc_uart0;
serial0 = &ap_ns_uart;
};
chosen {
@ -327,10 +327,10 @@
clock-output-names = "uartclk";
};
soc_uart0: uart@7ff80000 {
ap_ns_uart: uart@2A400000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0x0 0x7ff80000 0x0 0x1000>;
interrupts = <0x0 116 0x4>;
reg = <0x0 0x2A400000 0x0 0x1000>;
interrupts = <0x0 63 0x4>;
clocks = <&soc_uartclk>, <&soc_refclk100mhz>;
clock-names = "uartclk", "apb_pclk";
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
*
@ -17,41 +16,57 @@
#ifndef IOVEC_LEN
#define IOVEC_LEN(arr) ((uint32_t)(sizeof(arr)/sizeof(arr[0])))
#endif
/*********************** PSA Client Macros and Types *************************/
/**
* 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
* is compatible with v1.0.
*/
#define PSA_FRAMEWORK_VERSION (0x0101u)
/**
* Return value from psa_version() if the requested RoT Service is not present
* in the system.
*/
#define PSA_VERSION_NONE (0u)
/**
* 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.
*/
#define PSA_NULL_HANDLE ((psa_handle_t)0)
/**
* Tests whether a handle value returned by psa_connect() is valid.
*/
#define PSA_HANDLE_IS_VALID(handle) ((psa_handle_t)(handle) > 0)
/**
* Converts the handle value returned from a failed call psa_connect() into
* an error code.
*/
#define PSA_HANDLE_TO_ERROR(handle) ((psa_status_t)(handle))
/**
* Maximum number of input and output vectors for a request to psa_call().
*/
#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.
*/
#define PSA_IPC_CALL (0)
typedef int32_t psa_handle_t;
/**
* 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 */
size_t len; /*!< the size in bytes */
} psa_invec;
/**
* 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
*
@ -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 {
psa_key_id_t key_id; /* Key id */
psa_algorithm_t alg; /* Algorithm */
uint32_t op_handle; /* Frontend context handle associated
to a multipart operation */
uint32_t capacity; /* Key derivation capacity */
uint32_t ad_length; /* Additional Data 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
to the service backend. See rss_crypto_func_sid for
detail */
uint16_t step; /* Key derivation step */
psa_key_id_t key_id; /*!< Key id */
psa_algorithm_t alg; /*!< Algorithm */
uint32_t op_handle; /*!< Frontend context handle associated to a
* multipart operation
*/
uint32_t ad_length; /*!< Additional Data 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 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 */

View file

@ -137,7 +137,7 @@
* little space for growth. Current size is considering that TRUSTED_BOARD_BOOT
* 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
#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 */

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
*/
@ -19,11 +19,12 @@
#undef TF_MBEDTLS_HEAP_SIZE
#define TF_MBEDTLS_HEAP_SIZE PLATFORM_TEST_MIN_MBEDTLS_HEAP_SIZE
#endif
#endif
#endif /* TF_MBEDTLS_HEAP_SIZE */
#define MBEDTLS_PSA_CRYPTO_C
#define MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
#define MBEDTLS_ECP_C
#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
#define MBEDTLS_ECP_NO_INTERNAL_RNG
#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
#
@ -13,7 +13,6 @@ ifeq (${PLATFORM_TEST},rss-nv-counters)
# Code under testing.
BL31_SOURCES += lib/psa/rss_platform.c \
drivers/arm/rss/rss_comms.c \
${RSS_COMMS_SOURCES}
PLAT_INCLUDES += -Iinclude/lib/psa
@ -27,13 +26,13 @@ else ifeq (${PLATFORM_TEST},rss-rotpk)
# 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_ROTPK))
else ifeq (${PLATFORM_TEST},tfm-testsuite)
include drivers/arm/rss/rss_comms.mk
# The variables need to be set to compile the platform test:
ifeq (${TF_M_TESTS_PATH},)
@ -56,7 +55,7 @@ else ifeq (${PLATFORM_TEST},tfm-testsuite)
MBEDTLS_CONFIG_FILE = "<plat_tc_mbedtls_config.h>"
LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \
LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \
entropy.c \
entropy_poll.c \
hmac_drbg.c \
@ -69,30 +68,31 @@ else ifeq (${PLATFORM_TEST},tfm-testsuite)
psa_crypto_slot_management.c \
)
BL31_SOURCES += ${RSS_COMMS_SOURCES} \
plat/arm/common/arm_dyn_cfg.c \
${TC_BASE}/rss_ap_tests.c \
${TC_BASE}/rss_ap_testsuites.c \
BL31_SOURCES += ${RSS_COMMS_SOURCES} \
plat/arm/common/arm_dyn_cfg.c \
${TC_BASE}/rss_ap_tests.c \
${TC_BASE}/rss_ap_testsuites.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_tests_common.c \
$(DELEGATED_ATTEST_TESTS_PATH)/delegated_attest_test.c \
drivers/auth/mbedtls/mbedtls_common.c \
lib/psa/measured_boot.c \
drivers/auth/mbedtls/mbedtls_common.c \
lib/psa/measured_boot.c \
lib/psa/delegated_attestation.c
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_TESTS_PATH)/test/framework \
-I$(TF_M_TESTS_PATH)/log \
-I$(TF_M_TESTS_PATH)/test/secure_fw/suites/extra \
-I$(MEASURED_BOOT_TESTS_PATH)/non_secure \
-I$(DELEGATED_ATTEST_TESTS_PATH) \
-I$(DELEGATED_ATTEST_TESTS_PATH)/non_secure \
-Iplat/arm/board/tc \
-Iinclude/drivers/auth/mbedtls \
-Iinclude/drivers/arm
-I$(TF_M_TESTS_PATH)/tests_reg/test/framework \
-I$(TF_M_TESTS_PATH)/tests_reg/test/secure_fw/suites/extra \
-I$(TF_M_TESTS_PATH)/lib/log \
-I$(MEASURED_BOOT_TESTS_PATH)/non_secure \
-I$(DELEGATED_ATTEST_TESTS_PATH) \
-I$(DELEGATED_ATTEST_TESTS_PATH)/non_secure \
-Iplat/arm/board/tc \
-Iinclude/drivers/auth/mbedtls \
-Iinclude/drivers/arm \
-Iinclude/lib/psa
# Some of the PSA functions are declared in multiple header files, that
# triggers this warning.