From 2948d1f81904f02034a0d12faf9b8c7f34b05795 Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Mon, 23 Dec 2024 16:18:58 +0000 Subject: [PATCH] fix(arm): reinit secure and non-secure tls Initializing the transfer list using `transfer_list_ensure` allows reuse of an already initialized transfer list. While this is beneficial when receiving a transfer list and ensuring one exists, it causes issues during a system RESET if the old content of SRAM is not cleared. To prevent this, at least one step in the reset path must zero intialise the transfer list memory. Unless a previous stage explicitly provides a transfer list via boot arguments, a fresh transfer list should be created. This change ensures that BL1 and BL31 properly reinitialize the transfer lists, preserving correctness for secure and non-secure handoffs in TF-A. Change-Id: I3bfaa9e76df932a637031d645e4a22d857a094a5 Signed-off-by: Harrison Mutai --- plat/arm/common/arm_bl1_setup.c | 2 +- plat/arm/common/arm_bl31_setup.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plat/arm/common/arm_bl1_setup.c b/plat/arm/common/arm_bl1_setup.c index b8e502760..75d6a5360 100644 --- a/plat/arm/common/arm_bl1_setup.c +++ b/plat/arm/common/arm_bl1_setup.c @@ -90,7 +90,7 @@ void arm_bl1_early_platform_setup(void) bl1_tzram_layout.total_size = ARM_BL_RAM_SIZE; #if TRANSFER_LIST - secure_tl = transfer_list_ensure((void *)PLAT_ARM_EL3_FW_HANDOFF_BASE, + secure_tl = transfer_list_init((void *)PLAT_ARM_EL3_FW_HANDOFF_BASE, PLAT_ARM_FW_HANDOFF_SIZE); assert(secure_tl != NULL); #endif diff --git a/plat/arm/common/arm_bl31_setup.c b/plat/arm/common/arm_bl31_setup.c index 0503acf10..b67df36b0 100644 --- a/plat/arm/common/arm_bl31_setup.c +++ b/plat/arm/common/arm_bl31_setup.c @@ -382,8 +382,8 @@ void arm_bl31_platform_setup(void) struct transfer_list_entry *te __unused; #if TRANSFER_LIST && !RESET_TO_BL31 - ns_tl = transfer_list_ensure((void *)FW_NS_HANDOFF_BASE, - PLAT_ARM_FW_HANDOFF_SIZE); + ns_tl = transfer_list_init((void *)FW_NS_HANDOFF_BASE, + PLAT_ARM_FW_HANDOFF_SIZE); if (ns_tl == NULL) { ERROR("Non-secure transfer list initialisation failed!\n"); panic();