feat(realm): assign MECID when creating realms

This change allows TFTF to assign a MECID to every realm that is
created by passing an extra parameter to the Realm creation helpers.

Signed-off-by: Juan Pablo Conde <juanpablo.conde@arm.com>
Change-Id: I89bf08011eb005d949a195b406b073955f23f5ad
diff --git a/include/lib/aarch64/arch.h b/include/lib/aarch64/arch.h
index 2a9d0d2..f460016 100644
--- a/include/lib/aarch64/arch.h
+++ b/include/lib/aarch64/arch.h
@@ -483,6 +483,11 @@
 #define ID_AA64MMFR3_EL1_TCRX_WIDTH		U(4)
 #define ID_AA64MMFR3_EL1_TCR2_SUPPORTED		ULL(0x1)
 
+#define ID_AA64MMFR3_EL1_MEC_SHIFT              U(28)
+#define ID_AA64MMFR3_EL1_MEC_MASK               ULL(0xf)
+#define ID_AA64MMFR3_EL1_MEC_WIDTH		U(4)
+#define ID_AA64MMFR3_EL1_MEC_SUPPORTED		ULL(0x1)
+
 /* ID_AA64PFR1_EL1 definitions */
 #define ID_AA64PFR1_EL1_DF2_SHIFT		U(56)
 #define ID_AA64PFR1_EL1_DF2_WIDTH		U(4)
@@ -1825,4 +1830,10 @@
 /* RNDRRS definition */
 #define RNDRRS			S3_3_C2_C4_1
 
+/* MEC Registers */
+#define MECIDR_EL2				S3_4_C10_C8_7
+
+#define MECIDR_EL2_MECIDWidthm1_SHIFT		U(0)
+#define MECIDR_EL2_MECIDWidthm1_WIDTH		U(4)
+
 #endif /* ARCH_H */
diff --git a/include/lib/aarch64/arch_features.h b/include/lib/aarch64/arch_features.h
index 3b4fffc..fc004b3 100644
--- a/include/lib/aarch64/arch_features.h
+++ b/include/lib/aarch64/arch_features.h
@@ -583,4 +583,10 @@
 	return EXTRACT(ID_AA64DFR0_DOUBLELOCK, read_id_aa64dfr0_el1())
 			>= DOUBLELOCK_IMPLEMENTED;
 }
+
+static inline bool is_feat_mec_supported(void)
+{
+	return EXTRACT(ID_AA64MMFR3_EL1_MEC, read_id_aa64mmfr3_el1())
+		== ID_AA64MMFR3_EL1_MEC_SUPPORTED;
+}
 #endif /* ARCH_FEATURES_H */
diff --git a/include/lib/aarch64/arch_helpers.h b/include/lib/aarch64/arch_helpers.h
index f562018..6847ce3 100644
--- a/include/lib/aarch64/arch_helpers.h
+++ b/include/lib/aarch64/arch_helpers.h
@@ -733,6 +733,9 @@
 DEFINE_RENAME_SYSREG_RW_FUNCS(tpidr_el2, TPIDR_EL2)
 DEFINE_RENAME_SYSREG_RW_FUNCS(vtcr_el2, VTCR_EL2)
 
+/* Memory Encryption Contexts (MEC) */
+DEFINE_RENAME_SYSREG_READ_FUNC(mecidr_el2, MECIDR_EL2)
+
 static inline u_register_t read_sp(void)
 {
 	u_register_t v;