feat(rmm): pass RD pointer in arg0 register X1

This patch makes changes according to RMM Specification
1.0-eac1 for passing RD pointer in arg0 for RMI_DATA_CREATE,
RMI_DATA_CREATE_UNKNOWN, RMI_REC_CREATE and RMI_RTT_CREATE
commands.

Signed-off-by: AlexeiFedorov <Alexei.Fedorov@arm.com>
Change-Id: Idc1392b22874f26fce7f4e578a08a4125c68ce69
diff --git a/lib/smc/include/smc-rmi.h b/lib/smc/include/smc-rmi.h
index b1f5143..4313cd0 100644
--- a/lib/smc/include/smc-rmi.h
+++ b/lib/smc/include/smc-rmi.h
@@ -185,8 +185,8 @@
 #define RMI_MEASURE_CONTENT  1
 
 /*
- * arg0 == data address
- * arg1 == RD address
+ * arg0 == RD address
+ * arg1 == data address
  * arg2 == map address
  * arg3 == SRC address
  * arg4 == flags
@@ -194,8 +194,8 @@
 #define SMC_RMM_DATA_CREATE			SMC64_RMI_FID(U(0x3))
 
 /*
- * arg0 == data address
- * arg1 == RD address
+ * arg0 == RD address
+ * arg1 == data address
  * arg2 == map address
  */
 #define SMC_RMM_DATA_CREATE_UNKNOWN		SMC64_RMI_FID(U(0x4))
@@ -213,7 +213,7 @@
 
 /*
  * arg0 == RD address
- * arg1 == struct rmi_realm_params addr
+ * arg1 == struct rmi_realm_params address
  */
 #define SMC_RMM_REALM_CREATE			SMC64_RMI_FID(U(0x8))
 
@@ -223,8 +223,8 @@
 #define SMC_RMM_REALM_DESTROY			SMC64_RMI_FID(U(0x9))
 
 /*
- * arg0 == REC address
- * arg1 == RD address
+ * arg0 == RD address
+ * arg1 == REC address
  * arg2 == struct rmm_rec address
  */
 #define SMC_RMM_REC_CREATE			SMC64_RMI_FID(U(0xA))
@@ -236,13 +236,13 @@
 
 /*
  * arg0 == rec address
- * arg1 == rec_run address
+ * arg1 == struct rec_run address
  */
 #define SMC_RMM_REC_ENTER			SMC64_RMI_FID(U(0xC))
 
 /*
- * arg0 == RTT address
- * arg1 == RD address
+ * arg0 == RD address
+ * arg1 == RTT address
  * arg2 == map address
  * arg3 == level
  */
@@ -307,9 +307,9 @@
 #define SMC_RMM_REC_AUX_COUNT			SMC64_RMI_FID(U(0x17))
 
 /*
- * arg1 == RD address
- * arg2 == map address
- * arg3 == level
+ * arg0 == RD address
+ * arg1 == map address
+ * arg2 == level
  */
 #define SMC_RMM_RTT_INIT_RIPAS			SMC64_RMI_FID(U(0x18))
 
diff --git a/plat/host/common/include/host_rmi_wrappers.h b/plat/host/common/include/host_rmi_wrappers.h
index 50326d1..70ad018 100644
--- a/plat/host/common/include/host_rmi_wrappers.h
+++ b/plat/host/common/include/host_rmi_wrappers.h
@@ -12,19 +12,19 @@
 void host_rmi_granule_undelegate(void *granule_address, struct smc_result *ret);
 void host_rmi_realm_create(void *rd, void *params_ptr, struct smc_result *ret);
 void host_rmi_realm_destroy(void *rd, struct smc_result *ret);
-void host_rmi_rtt_create(void *rtt, void *rd, void *ipa,
+void host_rmi_rtt_create(void *rd, void *rtt, void *ipa,
 			 unsigned int level, struct smc_result *ret);
 void host_rmi_rtt_destroy(void *rtt, void *rd, void *ipa,
 			  unsigned int level, struct smc_result *ret);
 void host_rmi_rec_aux_count(void *rd, struct smc_result *ret);
-void host_rmi_rec_create(void *rec, void *rd, void *params_ptr,
+void host_rmi_rec_create(void *rd, void *rec, void *params_ptr,
 			 struct smc_result *ret);
 void host_rmi_rec_destroy(void *rec, struct smc_result *ret);
 void host_rmi_realm_activate(void *rd, struct smc_result *ret);
 void host_rmi_rec_enter(void *rec, void *run_ptr, struct smc_result *ret);
 void host_rmi_data_create(uintptr_t data, void *rd, uintptr_t ipa,
 			 uintptr_t src, struct smc_result *ret);
-void host_rmi_data_create_unknown(uintptr_t data, void *rd, uintptr_t ipa,
+void host_rmi_data_create_unknown(void *rd, uintptr_t data, uintptr_t ipa,
 			struct smc_result *ret);
 void host_rmi_rtt_init_ripas(void *rd, uintptr_t ipa, int64_t level,
 			struct smc_result *ret);
diff --git a/plat/host/common/src/host_rmi_wrappers.c b/plat/host/common/src/host_rmi_wrappers.c
index e8a4a9a..a4d8cfd 100644
--- a/plat/host/common/src/host_rmi_wrappers.c
+++ b/plat/host/common/src/host_rmi_wrappers.c
@@ -48,11 +48,11 @@
 		ret);
 }
 
-void host_rmi_rtt_create(void *rtt, void *rd, void *ipa, unsigned int level, struct smc_result *ret)
+void host_rmi_rtt_create(void *rd, void *rtt, void *ipa, unsigned int level, struct smc_result *ret)
 {
 	handle_ns_smc(SMC_RMM_RTT_CREATE,
-		(uintptr_t)rtt,
 		(uintptr_t)rd,
+		(uintptr_t)rtt,
 		(uintptr_t)ipa,
 		level,
 		0, 0,
@@ -79,11 +79,11 @@
 		ret);
 }
 
-void host_rmi_rec_create(void *rec, void *rd, void *params_ptr, struct smc_result *ret)
+void host_rmi_rec_create(void *rd, void *rec, void *params_ptr, struct smc_result *ret)
 {
 	handle_ns_smc(SMC_RMM_REC_CREATE,
-		(uintptr_t)rec,
 		(uintptr_t)rd,
+		(uintptr_t)rec,
 		(uintptr_t)params_ptr,
 		0, 0, 0,
 		ret);
@@ -124,12 +124,12 @@
 		ret);
 }
 
-void host_rmi_data_create_unknown(uintptr_t data, void *rd, uintptr_t ipa,
+void host_rmi_data_create_unknown(void *rd, uintptr_t data, uintptr_t ipa,
 			struct smc_result *ret)
 {
 	handle_ns_smc(SMC_RMM_DATA_CREATE_UNKNOWN,
-		(uintptr_t)data,
-		(uintptr_t)rd, ipa,
+		(uintptr_t)rd,
+		(uintptr_t)data, ipa,
 		0, 0, 0,
 		ret);
 }
diff --git a/plat/host/host_build/src/host_setup.c b/plat/host/host_build/src/host_setup.c
index 8f6c1b5..b380b85 100644
--- a/plat/host/host_build/src/host_setup.c
+++ b/plat/host/host_build/src/host_setup.c
@@ -165,7 +165,7 @@
 
 	/* Create RTT table to start at IPA 0x0 */
 	for (i = 1; i < RTT_COUNT; ++i) {
-		host_rmi_rtt_create(rtts[i], rd, 0, i, &result);
+		host_rmi_rtt_create(rd, rtts[i], 0, i, &result);
 		CHECK_RMI_RESULT();
 	}
 
@@ -176,7 +176,7 @@
 	host_rmi_rtt_init_ripas(rd, REALM_BUFFER_IPA, 3, &result);
 	CHECK_RMI_RESULT();
 
-	host_rmi_data_create_unknown(realm_buffer, rd, REALM_BUFFER_IPA, &result);
+	host_rmi_data_create_unknown(rd, realm_buffer, REALM_BUFFER_IPA, &result);
 	CHECK_RMI_RESULT();
 
 	host_rmi_rec_aux_count(rd, &result);
@@ -197,7 +197,7 @@
 	rec_params->flags |= REC_PARAMS_FLAG_RUNNABLE;
 	rec_params->pc = (uintptr_t)realm_start;
 
-	host_rmi_rec_create(rec, rd, rec_params, &result);
+	host_rmi_rec_create(rd, rec, rec_params, &result);
 	CHECK_RMI_RESULT();
 	host_rmi_realm_activate(rd, &result);
 	CHECK_RMI_RESULT();
diff --git a/runtime/include/smc-handler.h b/runtime/include/smc-handler.h
index e9e49fc..390dc4c 100644
--- a/runtime/include/smc-handler.h
+++ b/runtime/include/smc-handler.h
@@ -13,14 +13,14 @@
 void smc_read_feature_register(unsigned long index,
 				struct smc_result *ret_struct);
 
-unsigned long smc_data_create(unsigned long data_addr,
-			      unsigned long rd_addr,
+unsigned long smc_data_create(unsigned long rd_addr,
+			      unsigned long data_addr,
 			      unsigned long map_addr,
 			      unsigned long src_addr,
 			      unsigned long flags);
 
-unsigned long smc_data_create_unknown(unsigned long data_addr,
-				      unsigned long rd_addr,
+unsigned long smc_data_create_unknown(unsigned long rd_addr,
+				      unsigned long data_addr,
 				      unsigned long map_addr);
 
 unsigned long smc_data_destroy(unsigned long rd_addr,
@@ -37,8 +37,8 @@
 
 unsigned long smc_realm_destroy(unsigned long rd_addr);
 
-unsigned long smc_rec_create(unsigned long rec_addr,
-			     unsigned long rd_addr,
+unsigned long smc_rec_create(unsigned long rd_addr,
+			     unsigned long rec_addr,
 			     unsigned long rec_params_addr);
 
 unsigned long smc_rec_destroy(unsigned long rec_addr);
@@ -49,8 +49,8 @@
 void smc_rec_aux_count(unsigned long rd_addr,
 			struct smc_result *ret_struct);
 
-unsigned long smc_rtt_create(unsigned long rtt_addr,
-			     unsigned long rd_addr,
+unsigned long smc_rtt_create(unsigned long rd_addr,
+			     unsigned long rtt_addr,
 			     unsigned long map_addr,
 			     unsigned long ulevel);
 
diff --git a/runtime/rmi/rec.c b/runtime/rmi/rec.c
index 84e292d..fd23252 100644
--- a/runtime/rmi/rec.c
+++ b/runtime/rmi/rec.c
@@ -184,8 +184,8 @@
 	}
 }
 
-unsigned long smc_rec_create(unsigned long rec_addr,
-			     unsigned long rd_addr,
+unsigned long smc_rec_create(unsigned long rd_addr,
+			     unsigned long rec_addr,
 			     unsigned long rec_params_addr)
 {
 	struct granule *g_rd;
diff --git a/runtime/rmi/rtt.c b/runtime/rmi/rtt.c
index df08dd5..ebcd395 100644
--- a/runtime/rmi/rtt.c
+++ b/runtime/rmi/rtt.c
@@ -78,8 +78,8 @@
 	return validate_map_addr(map_addr, level, rd);
 }
 
-unsigned long smc_rtt_create(unsigned long rtt_addr,
-			     unsigned long rd_addr,
+unsigned long smc_rtt_create(unsigned long rd_addr,
+			     unsigned long rtt_addr,
 			     unsigned long map_addr,
 			     unsigned long ulevel)
 {
@@ -822,8 +822,8 @@
  * if @g_src == NULL, this implemented Data.CreateUnknown
  * and otherwise this implemented Data.Create.
  */
-static unsigned long data_create(unsigned long data_addr,
-				 unsigned long rd_addr,
+static unsigned long data_create(unsigned long rd_addr,
+				 unsigned long data_addr,
 				 unsigned long map_addr,
 				 struct granule *g_src,
 				 unsigned long flags)
@@ -926,14 +926,13 @@
 	return ret;
 }
 
-unsigned long smc_data_create(unsigned long data_addr,
-			      unsigned long rd_addr,
+unsigned long smc_data_create(unsigned long rd_addr,
+			      unsigned long data_addr,
 			      unsigned long map_addr,
 			      unsigned long src_addr,
 			      unsigned long flags)
 {
 	struct granule *g_src;
-	unsigned long ret;
 
 	if (flags != RMI_NO_MEASURE_CONTENT && flags != RMI_MEASURE_CONTENT) {
 		return RMI_ERROR_INPUT;
@@ -944,16 +943,14 @@
 		return RMI_ERROR_INPUT;
 	}
 
-	ret = data_create(data_addr, rd_addr, map_addr, g_src, flags);
-
-	return ret;
+	return data_create(rd_addr, data_addr, map_addr, g_src, flags);
 }
 
-unsigned long smc_data_create_unknown(unsigned long data_addr,
-				      unsigned long rd_addr,
+unsigned long smc_data_create_unknown(unsigned long rd_addr,
+				      unsigned long data_addr,
 				      unsigned long map_addr)
 {
-	return data_create(data_addr, rd_addr, map_addr, NULL, 0);
+	return data_create(rd_addr, data_addr, map_addr, NULL, 0);
 }
 
 unsigned long smc_data_destroy(unsigned long rd_addr,
@@ -1148,6 +1145,7 @@
 
 	rtt_walk_lock_unlock(g_rtt_root, sl, ipa_bits,
 				map_addr, level, &wi);
+
 	if (wi.last_level != level) {
 		ret = pack_return_code(RMI_ERROR_RTT, wi.last_level);
 		goto out_unlock_llt;