Removing Ifdef declarations for RME tests

Removing ifdef declarations and creating dummy aarch32
function to return 0 for query of RME capability.
Additonal changes include the fixing of failures with
cleanup of the delegated granules before the end of
each test.  Also changed the SMC code for undelegation
to conform with RMM requirements.

Signed-off-by: Mark Dykes <mark.dykes@arm.com>
Change-Id: I06ff82e86dbca3067e977342c0e7476f1b0e58a9
diff --git a/include/lib/aarch32/arch_features.h b/include/lib/aarch32/arch_features.h
index b61e626..1addc44 100644
--- a/include/lib/aarch32/arch_features.h
+++ b/include/lib/aarch32/arch_features.h
@@ -48,4 +48,9 @@
 		ID_DFR0_COPTRC_MASK) ==
 		ID_DFR0_COPTRC_SUPPORTED;
 }
+
+static inline unsigned int get_armv9_2_feat_rme_support(void)
+{
+	return 0;
+}
 #endif /* ARCH_FEATURES_H */
diff --git a/include/runtime_services/realm_payload/realm_payload_test.h b/include/runtime_services/realm_payload/realm_payload_test.h
index eccdbb3..c31dd6a 100644
--- a/include/runtime_services/realm_payload/realm_payload_test.h
+++ b/include/runtime_services/realm_payload/realm_payload_test.h
@@ -26,7 +26,7 @@
 #define RMI_FNUM_VERSION_REQ		U(0)
 
 #define RMI_FNUM_GRAN_NS_REALM		U(1)
-#define RMI_FNUM_GRAN_REALM_NS		U(0x10)
+#define RMI_FNUM_GRAN_REALM_NS		U(2)
 
 /********************************************************************************/
 
diff --git a/tftf/tests/runtime_services/realm_payload/realm_payload_spm_test.c b/tftf/tests/runtime_services/realm_payload/realm_payload_spm_test.c
index e552ecb..a1e07e9 100644
--- a/tftf/tests/runtime_services/realm_payload/realm_payload_spm_test.c
+++ b/tftf/tests/runtime_services/realm_payload/realm_payload_spm_test.c
@@ -1,3 +1,9 @@
+/*
+ * Copyright (c) 2021, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
 #include <stdlib.h>
 
 #include <debug.h>
@@ -15,7 +21,6 @@
 #include <plat_topology.h>
 #include <runtime_services/realm_payload/realm_payload_test.h>
 
-#ifdef __aarch64__
 static test_result_t realm_multi_cpu_payload_del_undel(void);
 
 #define ECHO_VAL1 U(0xa0a0a0a0)
@@ -29,7 +34,7 @@
 
 /*
  * The following test conducts SPM(direct messaging) tests on a subset of selected CPUs while
- * simultaneously performing another set of tests of the RMI(delelgation)
+ * simultaneously performing another set of tests of the RMI(delegation)
  * on the remaining CPU's to the full platform count. Once that test completes
  * the same test is run again with a different assignment for what CPU does
  * SPM versus RMI.
@@ -213,7 +218,6 @@
 
 	return ret;
 }
-#endif
 
 /*
  * Test function to dispatch a number of SPM and RMI tests to the platform
@@ -222,8 +226,6 @@
  */
 test_result_t test_ffa_secondary_core_direct_realm_msg(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
 	if (get_armv9_2_feat_rme_support() == 0U) {
 		return TEST_RESULT_SKIPPED;
 	}
@@ -231,6 +233,7 @@
 	unsigned int lead_mpid = read_mpidr_el1() & MPID_MASK;
 	unsigned int cpu_node, mpidr;
 	int32_t ret;
+	u_register_t retrmm;
 
 	/**********************************************************************
 	 * Check SPMC has ffa_version and expected FFA endpoints are deployed.
@@ -341,6 +344,18 @@
 
 	}
 
+	for (int i = 0; i < (NUM_GRANULES * PLATFORM_CORE_COUNT) ; i++) {
+		if (bufferstate[i] == B_DELEGATED) {
+			retrmm = realm_granule_undelegate(
+				(u_register_t)&bufferdelegate[i * GRANULE_SIZE]);
+			bufferstate[i] = B_UNDELEGATED;
+			if (retrmm != 0UL) {
+				tftf_testcase_printf("Delegate operation returns fail, %lx\n", retrmm);
+				return TEST_RESULT_FAIL;
+			}
+		}
+	}
+
 	VERBOSE("Done exiting.\n");
 
 	/**********************************************************************
@@ -348,10 +363,8 @@
 	 **********************************************************************/
 
 	return TEST_RESULT_SUCCESS;
-#endif
 }
 
-#ifdef __aarch64__
 /*
  * Multi CPU testing of delegate and undelegate of granules
  * The granules are first randomly initialized to either realm or non secure
@@ -369,11 +382,13 @@
 	for (int i = 0; i < NUM_GRANULES; i++) {
 		if (bufferstate[((cpu_node * NUM_GRANULES) + i)] == B_UNDELEGATED) {
 			retrmm = realm_granule_delegate((u_register_t)
-					&bufferdelegate[((cpu_node * NUM_GRANULES) + i) * GRANULE_SIZE]);
+					&bufferdelegate[((cpu_node *
+						NUM_GRANULES) + i) * GRANULE_SIZE]);
 			bufferstate[((cpu_node * NUM_GRANULES) + i)] = B_DELEGATED;
 		} else {
 			retrmm = realm_granule_undelegate((u_register_t)
-					&bufferdelegate[((cpu_node * NUM_GRANULES) + i) * GRANULE_SIZE]);
+					&bufferdelegate[((cpu_node *
+						NUM_GRANULES) + i) * GRANULE_SIZE]);
 			bufferstate[((cpu_node * NUM_GRANULES) + i)] = B_UNDELEGATED;
 		}
 		if (retrmm != 0UL) {
@@ -381,6 +396,6 @@
 			return TEST_RESULT_FAIL;
 		}
 	}
+
 	return TEST_RESULT_SUCCESS;
 }
-#endif
diff --git a/tftf/tests/runtime_services/realm_payload/realm_payload_test.c b/tftf/tests/runtime_services/realm_payload/realm_payload_test.c
index d1063f4..8bdc60a 100644
--- a/tftf/tests/runtime_services/realm_payload/realm_payload_test.c
+++ b/tftf/tests/runtime_services/realm_payload/realm_payload_test.c
@@ -13,14 +13,12 @@
 #include <runtime_services/realm_payload/realm_payload_test.h>
 #include <test_helpers.h>
 
-#ifdef __aarch64__
 static test_result_t realm_multi_cpu_payload_test(void);
 static test_result_t realm_multi_cpu_payload_del_undel(void);
 
 /* Buffer to delegate and undelegate */
 static char bufferdelegate[NUM_GRANULES * GRANULE_SIZE * PLATFORM_CORE_COUNT] __aligned(GRANULE_SIZE);
 static char bufferstate[NUM_GRANULES * PLATFORM_CORE_COUNT];
-#endif
 
 /*
  * Overall test for realm payload in three sections:
@@ -39,7 +37,6 @@
  * twice and then testing a misaligned address
  */
 
-#ifdef __aarch64__
 test_result_t init_buffer_del(void)
 {
 	u_register_t retrmm;
@@ -58,15 +55,12 @@
 	}
 	return TEST_RESULT_SUCCESS;
 }
-#endif
 
 /*
  * Single CPU version check function
  */
 test_result_t realm_version_single_cpu(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
 	u_register_t retrmm;
 
 	if (get_armv9_2_feat_rme_support() == 0U) {
@@ -80,7 +74,6 @@
 			RMI_ABI_VERSION_GET_MINOR(retrmm));
 
 	return TEST_RESULT_SUCCESS;
-#endif
 }
 
 /*
@@ -88,8 +81,6 @@
  */
 test_result_t realm_version_multi_cpu(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
 	u_register_t lead_mpid, target_mpid;
 	int cpu_node;
 	long long ret;
@@ -134,7 +125,6 @@
 	}
 
 	return ret;
-#endif
 }
 
 /*
@@ -142,8 +132,6 @@
  */
 test_result_t realm_delegate_undelegate(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
 	u_register_t retrmm;
 
 	if (get_armv9_2_feat_rme_support() == 0U) {
@@ -164,21 +152,18 @@
 			(uintptr_t)bufferdelegate);
 
 	return TEST_RESULT_SUCCESS;
-#endif
 }
 
-#ifdef __aarch64__
 static test_result_t realm_multi_cpu_payload_test(void)
 {
 	u_register_t retrmm = realm_version();
 
 	tftf_testcase_printf("Multi CPU RMM version on CPU %llx is: %lu.%lu\n",
-			read_mpidr_el1() & MPID_MASK, RMI_ABI_VERSION_GET_MAJOR(retrmm),
+			(long long)read_mpidr_el1() & MPID_MASK, RMI_ABI_VERSION_GET_MAJOR(retrmm),
 			RMI_ABI_VERSION_GET_MINOR(retrmm));
 
 	return TEST_RESULT_SUCCESS;
 }
-#endif
 
 /*
  * Select all CPU's to randomly delegate/undelegate
@@ -186,11 +171,10 @@
  */
 test_result_t realm_delundel_multi_cpu(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
 	u_register_t lead_mpid, target_mpid;
 	int cpu_node;
 	long long ret;
+	u_register_t retrmm;
 
 	if (get_armv9_2_feat_rme_support() == 0U) {
 		return TEST_RESULT_SKIPPED;
@@ -233,9 +217,23 @@
 		}
 	}
 
+	/*
+	 * Cleanup to set all granules back to undelegated
+	 */
+
+	for (int i = 0; i < (NUM_GRANULES * PLATFORM_CORE_COUNT) ; i++) {
+		if (bufferstate[i] == B_DELEGATED) {
+			retrmm = realm_granule_undelegate((u_register_t)&bufferdelegate[i * GRANULE_SIZE]);
+			bufferstate[i] = B_UNDELEGATED;
+			if (retrmm != 0UL) {
+				tftf_testcase_printf("Delegate operation returns fail, %lx\n", retrmm);
+				return TEST_RESULT_FAIL;
+			}
+		}
+	}
+
 	ret = TEST_RESULT_SUCCESS;
 	return ret;
-#endif
 }
 
 /*
@@ -245,7 +243,6 @@
  * assigns NUM_GRANULES to each CPU for delegation or undelgation
  * depending upon the initial state
  */
-#ifdef __aarch64__
 static test_result_t realm_multi_cpu_payload_del_undel(void)
 {
 	u_register_t retrmm;
@@ -270,7 +267,6 @@
 	}
 	return TEST_RESULT_SUCCESS;
 }
-#endif
 
 /*Fail testing of delegation process. The first is an error expected
  * for processing the same granule twice and the second is submission of
@@ -279,11 +275,20 @@
 
 test_result_t realm_fail_del(void)
 {
-	SKIP_TEST_IF_AARCH32();
-#ifdef __aarch64__
+	if (get_armv9_2_feat_rme_support() == 0U) {
+		return TEST_RESULT_SKIPPED;
+	}
+
 	u_register_t retrmm;
 
 	retrmm = realm_granule_delegate((u_register_t)&bufferdelegate[0]);
+
+	if (retrmm != 0UL) {
+		tftf_testcase_printf
+			("Delegate operation does not pass as expected for double delegation, %lx\n", retrmm);
+		return TEST_RESULT_FAIL;
+	}
+
 	retrmm = realm_granule_delegate((u_register_t)&bufferdelegate[0]);
 
 	if (retrmm == 0UL) {
@@ -300,6 +305,13 @@
 		return TEST_RESULT_FAIL;
 	}
 
+	retrmm = realm_granule_undelegate((u_register_t)&bufferdelegate[0]);
+
+	if (retrmm != 0UL) {
+		tftf_testcase_printf
+			("Delegate operation returns fail for cleanup, %lx\n", retrmm);
+		return TEST_RESULT_FAIL;
+	}
+
 	return TEST_RESULT_SUCCESS;
-#endif
 }