summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShruti Gupta <shruti.gupta@arm.com>2023-10-26 12:01:28 +0100
committerShruti Gupta <shruti.gupta@arm.com>2023-10-30 22:28:50 +0000
commitade6000ff0b3aa41d581d5738ce42f5ea4d3b77d (patch)
treeb444ce4d894c8c84729750b9268afdf4f362df9c
parent0e1dc0f2bc2b0ee9bef9aabbdd52dd42fe4d41b4 (diff)
feat(rmm): update RMI VERSION command as per EAC5
This patch adds necessary support for RMI_VERSION command. This patch sets RMI version numbers to 1.0 as per RMM Specification 1.0-eac5. Change-Id: If7f88d5b5efa58716752488108fa110fc71ae836 Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
-rw-r--r--include/services/rmmd_svc.h4
-rw-r--r--services/std_svc/rmmd/trp/trp_main.c13
2 files changed, 14 insertions, 3 deletions
diff --git a/include/services/rmmd_svc.h b/include/services/rmmd_svc.h
index 55d778e43..a567d2855 100644
--- a/include/services/rmmd_svc.h
+++ b/include/services/rmmd_svc.h
@@ -91,6 +91,10 @@
#define E_RMM_NOMEM -4
#define E_RMM_INVAL -5
+/* Return error codes from RMI SMCs */
+#define RMI_SUCCESS 0
+#define RMI_ERROR_INPUT 1
+
/* Acceptable SHA sizes for Challenge object */
#define SHA256_DIGEST_SIZE 32U
#define SHA384_DIGEST_SIZE 48U
diff --git a/services/std_svc/rmmd/trp/trp_main.c b/services/std_svc/rmmd/trp/trp_main.c
index 4eb3e1266..33f2fb088 100644
--- a/services/std_svc/rmmd/trp/trp_main.c
+++ b/services/std_svc/rmmd/trp/trp_main.c
@@ -106,11 +106,18 @@ void trp_main(void)
/*******************************************************************************
* Returning RMI version back to Normal World
******************************************************************************/
-static void trp_ret_rmi_version(struct trp_smc_result *smc_ret)
+static void trp_ret_rmi_version(unsigned long long rmi_version,
+ struct trp_smc_result *smc_ret)
{
+ if (rmi_version != RMI_ABI_VERSION) {
+ smc_ret->x[0] = RMI_ERROR_INPUT;
+ } else {
+ smc_ret->x[0] = RMI_SUCCESS;
+ }
VERBOSE("RMM version is %u.%u\n", RMI_ABI_VERSION_MAJOR,
RMI_ABI_VERSION_MINOR);
- smc_ret->x[0] = RMI_ABI_VERSION;
+ smc_ret->x[1] = RMI_ABI_VERSION;
+ smc_ret->x[2] = RMI_ABI_VERSION;
}
/*******************************************************************************
@@ -163,7 +170,7 @@ void trp_rmi_handler(unsigned long fid,
switch (fid) {
case RMI_RMM_REQ_VERSION:
- trp_ret_rmi_version(smc_ret);
+ trp_ret_rmi_version(x1, smc_ret);
break;
case RMI_RMM_GRANULE_DELEGATE:
trp_asc_mark_realm(x1, smc_ret);