From 3547270f59a3e27eab316a99cdaab6a835c10e85 Mon Sep 17 00:00:00 2001 From: Govindraj Raja Date: Wed, 20 Sep 2023 14:32:24 -0500 Subject: [PATCH] refactor(build): reorder platform Makefile evaluation Commit(f5211420b refactor(cpufeat): refactor arch feature build options) ensures mandatory arch features are enabled based on ARM_ARCH_MAJOR and ARM_ARCH_MINOR, which would be expected to be provided from platform makefile. However it missed ensuring platform makefile is included before parsing and enabling any mandatory arch features. Signed-off-by: Govindraj Raja Change-Id: Ia0ccb7d73b2d24c87d3d235babed4704230bec28 --- Makefile | 116 ++++++++++++++++++++++++++++++++-- make_helpers/arch_features.mk | 36 +++++------ 2 files changed, 128 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index 5edd6259c..417e51276 100644 --- a/Makefile +++ b/Makefile @@ -447,6 +447,96 @@ INCLUDES += -Iinclude \ include common/backtrace/backtrace.mk +################################################################################ +# Generic definitions +################################################################################ +include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk + +ifeq (${BUILD_BASE},) + BUILD_BASE := ./build +endif +BUILD_PLAT := $(abspath ${BUILD_BASE})/${PLAT}/${BUILD_TYPE} + +SPDS := $(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*)))) + +# Platforms providing their own TBB makefile may override this value +INCLUDE_TBBR_MK := 1 + +################################################################################ +# Include SPD Makefile if one has been specified +################################################################################ + +ifneq (${SPD},none) + ifeq (${ARCH},aarch32) + $(error "Error: SPD is incompatible with AArch32.") + endif + + ifdef EL3_PAYLOAD_BASE + $(warning "SPD and EL3_PAYLOAD_BASE are incompatible build options.") + $(warning "The SPD and its BL32 companion will be present but \ + ignored.") + endif + + ifeq (${SPD},spmd) + # SPMD is located in std_svc directory + SPD_DIR := std_svc + + ifeq ($(SPMD_SPM_AT_SEL2),1) + CTX_INCLUDE_EL2_REGS := 1 + ifeq ($(SPMC_AT_EL3),1) + $(error SPM cannot be enabled in both S-EL2 and EL3.) + endif + endif + + ifeq ($(findstring optee_sp,$(ARM_SPMC_MANIFEST_DTS)),optee_sp) + DTC_CPPFLAGS += -DOPTEE_SP_FW_CONFIG + endif + + ifeq ($(TS_SP_FW_CONFIG),1) + DTC_CPPFLAGS += -DTS_SP_FW_CONFIG + endif + + ifneq ($(ARM_BL2_SP_LIST_DTS),) + DTC_CPPFLAGS += -DARM_BL2_SP_LIST_DTS=$(ARM_BL2_SP_LIST_DTS) + endif + + ifneq ($(SP_LAYOUT_FILE),) + BL2_ENABLE_SP_LOAD := 1 + endif + else + # All other SPDs in spd directory + SPD_DIR := spd + endif #(SPD) + + # We expect to locate an spd.mk under the specified SPD directory + SPD_MAKE := $(wildcard services/${SPD_DIR}/${SPD}/${SPD}.mk) + + ifeq (${SPD_MAKE},) + $(error Error: No services/${SPD_DIR}/${SPD}/${SPD}.mk located) + endif + $(info Including ${SPD_MAKE}) + include ${SPD_MAKE} + + # If there's BL32 companion for the chosen SPD, we expect that the SPD's + # Makefile would set NEED_BL32 to "yes". In this case, the build system + # supports two mutually exclusive options: + # * BL32 is built from source: then BL32_SOURCES must contain the list + # of source files to build BL32 + # * BL32 is a prebuilt binary: then BL32 must point to the image file + # that will be included in the FIP + # If both BL32_SOURCES and BL32 are defined, the binary takes precedence + # over the sources. +endif #(SPD=none) + +ifeq (${ENABLE_SPMD_LP}, 1) +ifneq (${SPD},spmd) + $(error Error: ENABLE_SPMD_LP requires SPD=spmd.) +endif +ifeq ($(SPMC_AT_EL3),1) + $(error SPMC at EL3 not supported when enabling SPMD Logical partitions.) +endif +endif + ################################################################################ # Process BRANCH_PROTECTION value and set # Pointer Authentication and Branch Target Identification flags @@ -491,6 +581,18 @@ ifeq (${ENABLE_PAUTH}, 1) BL_COMMON_SOURCES += lib/extensions/pauth/pauth_helpers.S endif +################################################################################ +# Include the platform specific Makefile after the SPD Makefile (the platform +# makefile may use all previous definitions in this file) +################################################################################ +include ${PLAT_MAKEFILE_FULL} + +################################################################################ +# Setup arch_features based on ARM_ARCH_MAJOR, ARM_ARCH_MINOR provided from +# platform. +################################################################################ +include ${MAKE_HELPERS_DIRECTORY}arch_features.mk + #################################################### # Enable required options for Memory Stack Tagging. #################################################### @@ -670,12 +772,14 @@ include services/std_svc/rmmd/rmmd.mk $(warning "RME is an experimental feature") endif -################################################################################ -# Include the platform specific Makefile after the SPD Makefile (the platform -# makefile may use all previous definitions in this file) -################################################################################ - -include ${PLAT_MAKEFILE_FULL} +ifeq (${CTX_INCLUDE_EL2_REGS}, 1) + ifeq (${SPD},none) + ifeq (${ENABLE_RME},0) + $(error CTX_INCLUDE_EL2_REGS is available only when SPD \ + or RME is enabled) + endif + endif +endif ################################################################################ # Platform specific Makefile might provide us ARCH_MAJOR/MINOR use that to come diff --git a/make_helpers/arch_features.mk b/make_helpers/arch_features.mk index c92b4a57f..d519e436d 100644 --- a/make_helpers/arch_features.mk +++ b/make_helpers/arch_features.mk @@ -35,19 +35,6 @@ ENABLE_FEAT_VHE := 0 # Enable RAS Support. ENABLE_FEAT_RAS := 0 -#---- -# 8.3 -#---- - -# Flag to enable Pointer Authentication. Internal flag not meant for -# direct setting. Use BRANCH_PROTECTION to enable PAUTH. -ENABLE_PAUTH := 0 - -# Include pointer authentication (ARMv8.3-PAuth) registers in cpu context. This -# must be set to 1 if the platform wants to use this feature in the Secure -# world. It is not necessary for use in the Non-secure world. -CTX_INCLUDE_PAUTH_REGS := 0 - #---- # 8.4 #---- @@ -73,11 +60,6 @@ ENABLE_FEAT_RNG := 0 # Flag to enable Speculation Barrier Instruction. ENABLE_FEAT_SB := 0 -# Flag to enable Branch Target Identification. -# Internal flag not meant for direct setting. -# Use BRANCH_PROTECTION to enable BTI. -ENABLE_BTI := 0 - #---- # 8.6 #---- @@ -203,6 +185,19 @@ else ifeq (${ARCH},aarch32) endif endif +#---- +# 8.3 +#---- + +# Flag to enable Pointer Authentication. Internal flag not meant for +# direct setting. Use BRANCH_PROTECTION to enable PAUTH. +ENABLE_PAUTH ?= 0 + +# Include pointer authentication (ARMv8.3-PAuth) registers in cpu context. This +# must be set to 1 if the platform wants to use this feature in the Secure +# world. It is not necessary for use in the Non-secure world. +CTX_INCLUDE_PAUTH_REGS ?= 0 + #---- # 8.4 #---- @@ -243,6 +238,11 @@ ENABLE_FEAT_RNG_TRAP ?= 0 # enabled at ELX. CTX_INCLUDE_MTE_REGS ?= 0 +# Flag to enable Branch Target Identification. +# Internal flag not meant for direct setting. +# Use BRANCH_PROTECTION to enable BTI. +ENABLE_BTI ?= 0 + #---- # 8.6 #----