|
|
|
#
|
|
|
|
# Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
#
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Include Makefile for the SPM-MM implementation
|
|
|
|
################################################################################
|
|
|
|
ifeq (${SUPPORT_UNKNOWN_MPID},1)
|
|
|
|
ifeq (${DEBUG},0)
|
|
|
|
$(warning WARNING: SUPPORT_UNKNOWN_MPID enabled)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${SPM_MM},1)
|
|
|
|
ifeq (${EL3_EXCEPTION_HANDLING},0)
|
|
|
|
$(error EL3_EXCEPTION_HANDLING must be 1 for SPM-MM support)
|
|
|
|
else
|
|
|
|
$(info Including SPM Management Mode (MM) makefile)
|
|
|
|
include services/std_svc/spm/common/spm.mk
|
|
|
|
include services/std_svc/spm/spm_mm/spm_mm.mk
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
include lib/extensions/amu/amu.mk
|
|
|
|
include lib/mpmm/mpmm.mk
|
|
|
|
|
|
|
|
ifeq (${SPMC_AT_EL3},1)
|
|
|
|
$(warning "EL3 SPMC is an experimental feature")
|
|
|
|
$(info Including EL3 SPMC makefile)
|
|
|
|
include services/std_svc/spm/common/spm.mk
|
|
|
|
include services/std_svc/spm/el3_spmc/spmc.mk
|
|
|
|
endif
|
|
|
|
|
|
|
|
include lib/psci/psci_lib.mk
|
|
|
|
|
|
|
|
BL31_SOURCES += bl31/bl31_main.c \
|
|
|
|
bl31/interrupt_mgmt.c \
|
|
|
|
bl31/aarch64/bl31_entrypoint.S \
|
|
|
|
bl31/aarch64/crash_reporting.S \
|
|
|
|
bl31/aarch64/ea_delegate.S \
|
|
|
|
bl31/aarch64/runtime_exceptions.S \
|
|
|
|
bl31/bl31_context_mgmt.c \
|
|
|
|
bl31/bl31_traps.c \
|
|
|
|
common/runtime_svc.c \
|
|
|
|
lib/cpus/aarch64/dsu_helpers.S \
|
|
|
|
plat/common/aarch64/platform_mp_stack.S \
|
|
|
|
services/arm_arch_svc/arm_arch_svc_setup.c \
|
|
|
|
services/std_svc/std_svc_setup.c \
|
|
|
|
${PSCI_LIB_SOURCES} \
|
|
|
|
${SPMD_SOURCES} \
|
|
|
|
${SPM_MM_SOURCES} \
|
|
|
|
${SPMC_SOURCES} \
|
|
|
|
${SPM_SOURCES}
|
|
|
|
|
|
|
|
ifeq (${DISABLE_MTPMU},1)
|
|
|
|
BL31_SOURCES += lib/extensions/mtpmu/aarch64/mtpmu.S
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_PMF}, 1)
|
|
|
|
BL31_SOURCES += lib/pmf/pmf_main.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
include lib/debugfs/debugfs.mk
|
|
|
|
ifeq (${USE_DEBUGFS},1)
|
|
|
|
BL31_SOURCES += $(DEBUGFS_SRCS)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${EL3_EXCEPTION_HANDLING},1)
|
|
|
|
BL31_SOURCES += bl31/ehf.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${SDEI_SUPPORT},1)
|
|
|
|
ifeq (${EL3_EXCEPTION_HANDLING},0)
|
|
|
|
$(error EL3_EXCEPTION_HANDLING must be 1 for SDEI support)
|
|
|
|
endif
|
SDEI: Make dispatches synchronous
SDEI event dispatches currently only sets up the Non-secure context
before returning to the caller. The actual dispatch only happens upon
exiting EL3 next time.
However, for various error handling scenarios, it's beneficial to have
the dispatch happen synchronously. I.e. when receiving SDEI interrupt,
or for a successful sdei_dispatch_event() call, the event handler is
executed; and upon the event completion, dispatcher execution resumes
after the point of dispatch. The jump primitives introduced in the
earlier patch facilitates this feature.
With this patch:
- SDEI interrupts and calls to sdei_dispatch_event prepares the NS
context for event dispatch, then sets a jump point, and immediately
exits EL3. This results in the client handler executing in
Non-secure.
- When the SDEI client completes the dispatched event, the SDEI
dispatcher does a longjmp to the jump pointer created earlier. For
the caller of the sdei_dispatch_event() in particular, this would
appear as if call returned successfully.
The dynamic workaround for CVE_2018_3639 is slightly shifted around as
part of related minor refactoring. It doesn't affect the workaround
functionality.
Documentation updated.
NOTE: This breaks the semantics of the explicit dispatch API, and any
exiting usages should be carefully reviewed.
Change-Id: Ib9c876d27ea2af7fb22de49832e55a0da83da3f9
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
7 years ago
|
|
|
BL31_SOURCES += services/std_svc/sdei/sdei_dispatch.S \
|
|
|
|
services/std_svc/sdei/sdei_event.c \
|
|
|
|
services/std_svc/sdei/sdei_intr_mgmt.c \
|
|
|
|
services/std_svc/sdei/sdei_main.c \
|
|
|
|
services/std_svc/sdei/sdei_state.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${TRNG_SUPPORT},1)
|
|
|
|
BL31_SOURCES += services/std_svc/trng/trng_main.c \
|
|
|
|
services/std_svc/trng/trng_entropy_pool.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_SPE_FOR_LOWER_ELS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/spe/spe.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_AMU},1)
|
|
|
|
BL31_SOURCES += ${AMU_SOURCES}
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_MPMM},1)
|
|
|
|
BL31_SOURCES += ${MPMM_SOURCES}
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_SME_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/sme/sme.c
|
|
|
|
BL31_SOURCES += lib/extensions/sve/sve.c
|
|
|
|
else
|
|
|
|
ifeq (${ENABLE_SVE_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/sve/sve.c
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_MPAM_FOR_LOWER_ELS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/mpam/mpam.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_TRBE_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/trbe/trbe.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_BRBE_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/brbe/brbe.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_SYS_REG_TRACE_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/sys_reg_trace/aarch64/sys_reg_trace.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_TRF_FOR_NS},1)
|
|
|
|
BL31_SOURCES += lib/extensions/trf/aarch64/trf.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${WORKAROUND_CVE_2017_5715},1)
|
|
|
|
BL31_SOURCES += lib/cpus/aarch64/wa_cve_2017_5715_bpiall.S \
|
|
|
|
lib/cpus/aarch64/wa_cve_2017_5715_mmu.S
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(SMC_PCI_SUPPORT),1)
|
|
|
|
BL31_SOURCES += services/std_svc/pci_svc.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${ENABLE_RME},1)
|
|
|
|
include lib/gpt_rme/gpt_rme.mk
|
|
|
|
|
|
|
|
BL31_SOURCES += ${GPT_LIB_SRCS} \
|
|
|
|
${RMMD_SOURCES}
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(FEATURE_DETECTION),1)
|
|
|
|
BL31_SOURCES += common/feat_detect.c
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq (${DRTM_SUPPORT},1)
|
|
|
|
BL31_SOURCES += services/std_svc/drtm/drtm_main.c \
|
|
|
|
services/std_svc/drtm/drtm_dma_prot.c \
|
|
|
|
services/std_svc/drtm/drtm_res_address_map.c \
|
|
|
|
services/std_svc/drtm/drtm_measurements.c \
|
|
|
|
services/std_svc/drtm/drtm_remediation.c \
|
|
|
|
${MBEDTLS_SOURCES}
|
|
|
|
endif
|
|
|
|
|
|
|
|
BL31_LINKERFILE := bl31/bl31.ld.S
|
|
|
|
|
|
|
|
# Flag used to indicate if Crash reporting via console should be included
|
|
|
|
# in BL31. This defaults to being present in DEBUG builds only
|
|
|
|
ifndef CRASH_REPORTING
|
|
|
|
CRASH_REPORTING := $(DEBUG)
|
|
|
|
endif
|
|
|
|
|
|
|
|
$(eval $(call assert_booleans,\
|
|
|
|
$(sort \
|
|
|
|
CRASH_REPORTING \
|
|
|
|
EL3_EXCEPTION_HANDLING \
|
|
|
|
SDEI_SUPPORT \
|
|
|
|
)))
|
|
|
|
|
|
|
|
$(eval $(call add_defines,\
|
|
|
|
$(sort \
|
|
|
|
CRASH_REPORTING \
|
|
|
|
EL3_EXCEPTION_HANDLING \
|
|
|
|
SDEI_SUPPORT \
|
|
|
|
)))
|