mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2026-07-05 21:01:21 +00:00
The FEAT_LSE enablement predates the FEAT_STATE framework and has never been converted. Since the introduction of USE_SPINLOCK_CAS we've gained lots of quality of life features that allow for better feature enablement. This patch converts USE_SPINLOCK_CAS to tri-state and adds it to FEATURE_DETECTION to align with all other features. Instead of introducing the assembly checking for tri-state, this patch translates all locking routines to C inline assembly and uses the standard C helpers. The main benefit is that this gives greater visibility to the compiler about what the functions are doing and lets it optimise better. Namely, it is able to allocate registers itself and inline the functions when LTO is enabled. An unsuccessful attempt was made to use the instructions directly and have even flow control in C. This, however, made code very complicated and less efficient in the tight loops of the spinlock. The last use of ARM_ARCH_AT_LEAST goes away with this change and so this macro is removed. It has now been fully superseded by the FEAT_STATE framework. This change exposes a limitation - RME_GPT_BITLOCK_BLOCK requires USE_SPINLOCK_CAS. This patch does not address this in any way but makes the relationship explicit. Change-Id: I580081549aceded2dca3e0f4564ee7510a7e56ae Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
61 lines
1.6 KiB
Makefile
61 lines
1.6 KiB
Makefile
#
|
|
# Copyright (c) 2013-2025, Arm Limited and Contributors. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
INCLUDES += -Iinclude/bl32/tsp
|
|
|
|
ifeq (${SPMC_AT_EL3},1)
|
|
BL32_SOURCES += bl32/tsp/tsp_ffa_main.c \
|
|
bl32/tsp/ffa_helpers.c
|
|
else
|
|
BL32_SOURCES += bl32/tsp/tsp_main.c
|
|
endif
|
|
|
|
BL32_SOURCES += bl32/tsp/aarch64/tsp_entrypoint.S \
|
|
bl32/tsp/aarch64/tsp_exceptions.S \
|
|
bl32/tsp/aarch64/tsp_request.S \
|
|
bl32/tsp/tsp_interrupt.c \
|
|
bl32/tsp/tsp_timer.c \
|
|
bl32/tsp/tsp_common.c \
|
|
bl32/tsp/tsp_context.c \
|
|
common/aarch64/early_exceptions.S \
|
|
|
|
BL32_DEFAULT_LINKER_SCRIPT_SOURCE := bl32/tsp/tsp.ld.S
|
|
|
|
# CRYPTO_SUPPORT
|
|
NEED_AUTH := 0
|
|
NEED_HASH := $(if $(filter 1,$(MEASURED_BOOT)),1,)
|
|
$(eval $(call set_crypto_support,NEED_AUTH,NEED_HASH))
|
|
|
|
# BL32_CPPFLAGS
|
|
$(eval BL32_CPPFLAGS += $(call make_defines, \
|
|
$(sort \
|
|
CRYPTO_SUPPORT \
|
|
)))
|
|
|
|
# Numeric_Flags
|
|
$(eval $(call assert_numerics,\
|
|
$(sort \
|
|
CRYPTO_SUPPORT \
|
|
)))
|
|
|
|
# This flag determines if the TSPD initializes BL32 in tspd_init() (synchronous
|
|
# method) or configures BL31 to pass control to BL32 instead of BL33
|
|
# (asynchronous method).
|
|
TSP_INIT_ASYNC := 0
|
|
|
|
$(eval $(call assert_boolean,TSP_INIT_ASYNC))
|
|
$(eval $(call add_define,TSP_INIT_ASYNC))
|
|
|
|
# Include the platform-specific TSP Makefile
|
|
# If no platform-specific TSP Makefile exists, it means TSP is not supported
|
|
# on this platform.
|
|
TSP_PLAT_MAKEFILE := $(wildcard ${PLAT_DIR}/tsp/tsp-${PLAT}.mk)
|
|
ifeq (,${TSP_PLAT_MAKEFILE})
|
|
$(error TSP is not supported on platform ${PLAT})
|
|
else
|
|
include ${TSP_PLAT_MAKEFILE}
|
|
endif
|