fix(cpufeat): add feat_hcx check before enabling FEAT_MOPS

This patch also checks for FEAT_HCX before enabling FEAT_MOPS
when INIT_UNUSED_NS_EL1 = 1 and adds build dependency check.

Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com>
Change-Id: Iff4a068aa392fc8d29e2e4da7a2e7df0b3104e65
diff --git a/Makefile b/Makefile
index f457453..e111be2 100644
--- a/Makefile
+++ b/Makefile
@@ -1021,6 +1021,14 @@
     endif
 endif
 
+# Enabling FEAT_MOPS requires access to hcrx_el2 registers which is
+# available only when FEAT_HCX is enabled.
+ifneq (${ENABLE_FEAT_MOPS},0)
+	ifeq (${ENABLE_FEAT_HCX},0)
+		$(error "ENABLE_FEAT_MOPS requires ENABLE_FEAT_HCX")
+	endif
+endif
+
 # Enabling SVE for both the worlds typically requires the context
 # management of SVE registers. The only exception being SPMC at S-EL2.
 ifeq (${ENABLE_SVE_FOR_SWD}, 1)
diff --git a/lib/el3_runtime/aarch64/context_mgmt.c b/lib/el3_runtime/aarch64/context_mgmt.c
index c35aae9..d870da4 100644
--- a/lib/el3_runtime/aarch64/context_mgmt.c
+++ b/lib/el3_runtime/aarch64/context_mgmt.c
@@ -905,7 +905,7 @@
 		sme_init_el2_unused();
 	}
 
-	if (is_feat_mops_supported()) {
+	if (is_feat_mops_supported() && is_feat_hcx_supported()) {
 		write_hcrx_el2(read_hcrx_el2() | HCRX_EL2_MSCEn_BIT);
 	}