summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAndre Przywara <andre.przywara@arm.com>2022-11-17 17:30:43 +0000
committerAndre Przywara <andre.przywara@arm.com>2023-03-22 13:33:22 +0000
commitb8f03d29e172af7bd576eafbce9d485a9f626e2e (patch)
treeb40c972d2a8c0a188db3528ccbe73f8e73fbe230 /common
parent4f5ef849c184313a2ba124ff0dd0b1545ddee217 (diff)
downloadarm-trusted-firmware-b8f03d29e172af7bd576eafbce9d485a9f626e2e.tar.gz
refactor(cpufeat): enable FEAT_ECV for FEAT_STATE_CHECKED
At the moment we only support FEAT_ECV to be either unconditionally compiled in, or to be not supported at all. Add support for runtime detection (ENABLE_FEAT_ECV=2), by splitting is_feat_ecv_present() into an ID register reading function and a second function to report the support status. That function considers both build time settings and runtime information (if needed), and is used before we access the CNTPOFF_EL2 system register. Also move the context saving code from assembly to C, and use the new is_feat_ecv_supported() function to guard its execution. Change the FVP platform default to the now supported dynamic option (=2), so the right decision can be made by the code at runtime. Change-Id: I4acd5384929f1902b62a87ae073aafa1472cd66b Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Diffstat (limited to 'common')
-rw-r--r--common/feat_detect.c15
1 files changed, 1 insertions, 14 deletions
diff --git a/common/feat_detect.c b/common/feat_detect.c
index c51da966c..2f64deb51 100644
--- a/common/feat_detect.c
+++ b/common/feat_detect.c
@@ -164,19 +164,6 @@ static void read_feat_amuv1p1(void)
#endif
}
-/*******************************************************
- * Feature : FEAT_ECV (Enhanced Counter Virtualization)
- ******************************************************/
-static void read_feat_ecv(void)
-{
-#if (ENABLE_FEAT_ECV == FEAT_STATE_ALWAYS)
- unsigned int ecv = get_armv8_6_ecv_support();
-
- feat_detect_panic(((ecv == ID_AA64MMFR0_EL1_ECV_SUPPORTED) ||
- (ecv == ID_AA64MMFR0_EL1_ECV_SELF_SYNCH)), "ECV");
-#endif
-}
-
/***********************************************************
* Feature : FEAT_TWED (Delayed Trapping of WFE Instruction)
**********************************************************/
@@ -269,7 +256,7 @@ void detect_arch_features(void)
/* v8.6 features */
read_feat_amuv1p1();
check_feature(ENABLE_FEAT_FGT, read_feat_fgt_id_field(), "FGT", 1, 1);
- read_feat_ecv();
+ check_feature(ENABLE_FEAT_ECV, read_feat_ecv_id_field(), "ECV", 1, 2);
read_feat_twed();
/* v8.7 features */