summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHarrison Mutai <harrison.mutai@arm.com>2026-05-15 15:46:20 +0100
committerHarrison Mutai <harrison.mutai@arm.com>2026-06-29 13:37:46 +0100
commit1cdb2e13ae7147b11f65f8cd6be0de9871fb3b20 (patch)
tree760bf628e231e78d87adcd2a966bc7874db90680 /include
parent0ff6f48335d66e69cfdc42bb9c4d49a43b819bfc (diff)
downloadarm-trusted-firmware-1cdb2e13ae7147b11f65f8cd6be0de9871fb3b20.tar.gz
arm-trusted-firmware-1cdb2e13ae7147b11f65f8cd6be0de9871fb3b20.zip
feat(firme): introduce FIRME MECID service
Add the FIRME MECID management ABI and service implementation, advertise the service through the base feature register when available, and provide platform hooks for MEC refresh. Change-Id: I1a1a2f2dd615274956d0db85049b0d6760fbcbc4 Signed-off-by: Harrison Mutai <harrison.mutai@arm.com>
Diffstat (limited to 'include')
-rw-r--r--include/arch/aarch64/arch.h3
-rw-r--r--include/services/firme_svc.h26
2 files changed, 26 insertions, 3 deletions
diff --git a/include/arch/aarch64/arch.h b/include/arch/aarch64/arch.h
index bbd04ded1..4aa8035f3 100644
--- a/include/arch/aarch64/arch.h
+++ b/include/arch/aarch64/arch.h
@@ -1992,8 +1992,9 @@
* FEAT_MEC - Memory Encryption Contexts
******************************************************************************/
#define MECIDR_EL2 S3_4_C10_C8_7
-#define MECIDR_EL2_MECIDWidthm1_MASK U(0xf)
#define MECIDR_EL2_MECIDWidthm1_SHIFT U(0)
+#define MECIDR_EL2_MECIDWidthm1_WIDTH U(4)
+#define MECIDR_EL2_MECIDWidthm1_MASK GENMASK(3, 0)
/******************************************************************************
* FEAT_FGWTE3 - Fine Grained Write Trap
diff --git a/include/services/firme_svc.h b/include/services/firme_svc.h
index c229d116b..052c1077f 100644
--- a/include/services/firme_svc.h
+++ b/include/services/firme_svc.h
@@ -110,7 +110,10 @@ typedef struct {
#define FIRME_BASE_MAX_SH_BUF_PG_CNT_MASK U(0x3FFF)
#define FIRME_BASE_SERVICE_LIST_SHIFT U(16)
#define FIRME_BASE_SERVICE_LIST_MASK U(0xFFFF)
-#define FIRME_BASE_SERVICE_GRANULE_MGMT_BIT BIT(16)
+#define FIRME_BASE_SERVICE_BIT(_id) BIT((_id) + \
+ FIRME_BASE_SERVICE_LIST_SHIFT)
+#define FIRME_BASE_SERVICE_GRANULE_MGMT_BIT FIRME_BASE_SERVICE_BIT(0)
+#define FIRME_BASE_SERVICE_MECID_BIT FIRME_BASE_SERVICE_BIT(2)
/* Granule management service feature register definitions. */
#define FIRME_GM_GPI_SET_BIT BIT(0)
@@ -205,7 +208,17 @@ typedef struct {
#define FIRME_IDE_KEYSET_POLL SMC64_FIRME_FID(U(0x6))
/* MECID management service */
-#define FIRME_MEC_REFRESH SMC64_FIRME_FID(U(0x7))
+#define FIRME_MEC_REFRESH_FID SMC64_FIRME_FID(U(0x7))
+
+#define MEC_REFRESH_REASON_REALM_CREATE U(0)
+#define MEC_REFRESH_REASON_REALM_DESTROY U(1)
+
+#define MEC_PARAM_MECID_SHIFT U(32)
+#define MEC_PARAM_MECID_WIDTH U(16)
+#define MEC_PARAM_MECID_MASK MASK(MEC_PARAM_MECID)
+
+#define FIRME_MECID_FEATURE_REG_COUNT U(1)
+#define FIRME_MECID_FEAT_REG0_MEC_REFRESH_BIT BIT(0)
/* Attestation service */
#define FIRME_ATTEST_PAT_GET SMC64_FIRME_FID(U(0x8))
@@ -224,6 +237,9 @@ uint64_t firme_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
uint64_t x4, void *cookie, void *handle, uint64_t flags);
firme_service_info_t *firme_granule_mgmt_service_get_info(void);
+firme_service_info_t *firme_mecid_service_get_info(void);
+
+int plat_firme_mec_refresh(uint16_t mecid, uint8_t reason);
u_register_t firme_base_service_handler(firme_instance_e instance, uint32_t smc_fid,
uint64_t x1, uint64_t x2, uint64_t x3,
@@ -236,4 +252,10 @@ u_register_t firme_granule_mgmt_service_handler(firme_instance_e instance,
uint64_t x4, void *cookie,
void *handle, uint64_t flags);
+u_register_t firme_mecid_service_handler(firme_instance_e instance,
+ uint32_t smc_fid, uint64_t x1,
+ uint64_t x2, uint64_t x3,
+ uint64_t x4, void *cookie,
+ void *handle, uint64_t flags);
+
#endif /* FIRME_SVC_H */