From d5384b69d1180a596a48014d99e46eb4341f3455 Mon Sep 17 00:00:00 2001 From: Andre Przywara Date: Fri, 27 Jan 2023 14:09:20 +0000 Subject: refactor(cpufeat): enable FEAT_NV2 for FEAT_STATE_CHECKED At the moment we only support for FEAT_NV2 to be either unconditionally compiled in, or to be not supported at all. Add support for runtime detection (CTX_INCLUDE_NEVE_REGS=2), by splitting get_armv8_4_feat_nv_support() 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 VNCR_EL2 system register. Also move the context saving code from assembly to C, and use the new is_feat_nv2_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: I85b080641995fb72cfd4ac933f7a3f75770c2cb9 Signed-off-by: Andre Przywara --- common/feat_detect.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'common') diff --git a/common/feat_detect.c b/common/feat_detect.c index b335a610f..1c505e211 100644 --- a/common/feat_detect.c +++ b/common/feat_detect.c @@ -90,18 +90,6 @@ static void read_feat_dit(void) #endif } -/************************************************************** - * Feature : FEAT_NV2 (Enhanced Nested Virtualization Support) - *************************************************************/ -static void read_feat_nv2(void) -{ -#if (CTX_INCLUDE_NEVE_REGS == FEAT_STATE_ALWAYS) - unsigned int nv = get_armv8_4_feat_nv_support(); - - feat_detect_panic((nv == ID_AA64MMFR2_EL1_NV2_SUPPORTED), "NV2"); -#endif -} - /*********************************** * Feature : FEAT_SEL2 (Secure EL2) **********************************/ @@ -223,7 +211,8 @@ void detect_arch_features(void) "AMUv1", 1, 2); check_feature(ENABLE_MPAM_FOR_LOWER_ELS, read_feat_mpam_version(), "MPAM", 1, 17); - read_feat_nv2(); + check_feature(CTX_INCLUDE_NEVE_REGS, read_feat_nv_id_field(), + "NV2", 2, 2); read_feat_sel2(); check_feature(ENABLE_TRF_FOR_NS, read_feat_trf_id_field(), "TRF", 1, 1); -- cgit v1.2.1