test(realm): add support for s2poe/pie for planes

Add support for s2poe/pie for planes.
Update planes test to run with s2poe/s2pie
both enabled and disabled.

Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
Change-Id: If85b8c4cff9e8fe43978088beaf848fe4b2b9a40
diff --git a/include/runtime_services/host_realm_managment/host_realm_helper.h b/include/runtime_services/host_realm_managment/host_realm_helper.h
index 6ea9b72..e27cfd5 100644
--- a/include/runtime_services/host_realm_managment/host_realm_helper.h
+++ b/include/runtime_services/host_realm_managment/host_realm_helper.h
@@ -7,6 +7,7 @@
 #define HOST_REALM_HELPER_H
 
 #include <stdlib.h>
+#include <debug.h>
 #include <host_realm_rmi.h>
 #include <tftf_lib.h>
 
@@ -15,7 +16,8 @@
  */
 bool host_prepare_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t feature_flag,
+		u_register_t feature_flag0,
+		u_register_t feature_flag1,
 		long sl,
 		const u_register_t *rec_flag,
 		unsigned int rec_count,
@@ -27,7 +29,8 @@
  */
 bool host_create_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t feature_flag,
+		u_register_t feature_flag0,
+		u_register_t feature_flag1,
 		long sl,
 		const u_register_t *rec_flag,
 		unsigned int rec_count,
@@ -39,7 +42,8 @@
  */
 bool host_create_activate_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t feature_flag,
+		u_register_t feature_flag0,
+		u_register_t feature_flag1,
 		long sl,
 		const u_register_t *rec_flag,
 		unsigned int rec_count,
@@ -59,4 +63,21 @@
  */
 void host_realm_set_aux_plane_args(struct realm *realm_ptr, unsigned int plane_num);
 
+static inline bool is_single_rtt_supported(void)
+{
+	u_register_t feature_flag;
+
+	/* Read Realm Feature Reg 0 */
+	if (host_rmi_features(0UL, &feature_flag) != REALM_SUCCESS) {
+		ERROR("%s() failed\n", "host_rmi_features");
+		return false;
+	}
+
+	if (EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) != RMI_PLANE_RTT_AUX) {
+		return true;
+	}
+
+	return false;
+}
+
 #endif /* HOST_REALM_HELPER_H */
diff --git a/include/runtime_services/host_realm_managment/host_realm_rmi.h b/include/runtime_services/host_realm_managment/host_realm_rmi.h
index 6394fb6..771a125 100644
--- a/include/runtime_services/host_realm_managment/host_realm_rmi.h
+++ b/include/runtime_services/host_realm_managment/host_realm_rmi.h
@@ -498,7 +498,8 @@
 #define RMI_REALM_FLAGS0_DA		BIT(3)
 
 /* RmiRealmFlags1 format */
-#define RMI_REALM_FLAGS1_RTT_TREE_PP	BIT(0)
+#define RMI_REALM_FLAGS1_RTT_TREE_PP			BIT(0)
+#define RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT	BIT(1)
 
 /* RmiInterfaceVersion type */
 #define RMI_MAJOR_VERSION		0U
@@ -582,6 +583,8 @@
 #define RMI_FEATURE_REGISTER_0_MAX_NUM_AUX_PLANES_SHIFT	45UL
 #define RMI_FEATURE_REGISTER_0_MAX_NUM_AUX_PLANES_WIDTH	4UL
 
+#define RMI_FEATURE_REGISTER_0_RTT_S2AP_INDIRECT	BIT(50)
+
 /* Possible values for RmiPlaneRttFeature */
 #define RMI_PLANE_RTT_AUX				0UL
 #define RMI_PLANE_RTT_AUX_SINGLE			1UL
@@ -671,6 +674,26 @@
 #define OA_50_51_MASK			MASK(OA_50_51)
 
 /*
+ * When FEAT_S2PIE is enabled PIINDEX is saved at following index
+ */
+#define S2TTE_PI_INDEX_BIT0_SHIFT	6
+#define S2TTE_PI_INDEX_BIT1_SHIFT	51
+#define S2TTE_PI_INDEX_BIT2_SHIFT	53
+#define S2TTE_PI_INDEX_BIT3_SHIFT	54
+#define S2TTE_PI_INDEX_MASK		((1UL << S2TTE_PI_INDEX_BIT0_SHIFT) | \
+					(1UL << S2TTE_PI_INDEX_BIT1_SHIFT) | \
+					(1UL << S2TTE_PI_INDEX_BIT2_SHIFT) | \
+					(1UL << S2TTE_PI_INDEX_BIT3_SHIFT))
+/*
+ * RmiUnprotectedS2AP type
+ * Encoding for S2AP base index value for UNPROTECTED IPA
+ */
+#define RMI_PERM_S2AP_NO_ACCESS_IDX		U(0)
+#define RMI_PERM_S2AP_RO_IDX			U(1)
+#define RMI_PERM_S2AP_WO_IDX			U(2)
+#define RMI_PERM_S2AP_RW_IDX			U(3)
+
+/*
  * The Realm attribute parameters are shared by the Host via
  * RMI_REALM_CREATE::params_ptr. The values can be observed or modified
  * either by the Host or by the Realm.
@@ -1120,6 +1143,7 @@
 	bool             payload_created;
 	bool             shared_mem_created;
 	bool             rtt_tree_single;
+	bool		 rtt_s2ap_enc_indirect;
 	unsigned short   vmid;
 	enum realm_state state;
 	long start_level;
diff --git a/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c b/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
index e73fe0d..7d1a246 100644
--- a/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
+++ b/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
@@ -122,6 +122,7 @@
 bool host_prepare_realm_payload(struct realm *realm_ptr,
 			       u_register_t realm_payload_adr,
 			       u_register_t feature_flag,
+			       u_register_t feature_flag1,
 			       long sl,
 			       const u_register_t *rec_flag,
 			       unsigned int rec_count,
@@ -160,18 +161,29 @@
 	}
 
 	realm_ptr->rtt_tree_single = false;
-	if (num_aux_planes > 0U) {
-		if (EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) >=
-							RMI_PLANE_RTT_SINGLE) {
-			ERROR("S2POE not suported on TFTF\n");
-			return false;
-		}
+	realm_ptr->rtt_s2ap_enc_indirect = false;
 
-		/*
-		 * @TODO: once S2POE is supported, this should be a parameter
-		 * so it can be tested with and without support for auxiliary
-		 * tables.
-		 */
+	if (num_aux_planes > 0U) {
+		if ((EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) ==
+					RMI_PLANE_RTT_SINGLE)) {
+			if ((EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, realm_ptr->rmm_feat_reg0) ==
+						RMI_PLANE_RTT_AUX)) {
+				ERROR("%s() failed\n",
+					"Single RTT for multiple planes not support by RMM");
+				return false;
+			} else {
+				realm_ptr->rtt_tree_single = true;
+			}
+		}
+	}
+
+	if ((feature_flag1 & RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT) != 0U) {
+		if ((realm_ptr->rmm_feat_reg0 & RMI_FEATURE_REGISTER_0_RTT_S2AP_INDIRECT) == 0UL) {
+			ERROR("%s() failed\n", "S2AP Indirect Encoding not suported");
+			return false;
+		} else {
+			realm_ptr->rtt_s2ap_enc_indirect = true;
+		}
 	}
 
 	/* Disable PMU if not required */
@@ -288,6 +300,7 @@
 bool host_create_realm_payload(struct realm *realm_ptr,
 			       u_register_t realm_payload_adr,
 			       u_register_t feature_flag,
+			       u_register_t feature_flag1,
 			       long sl,
 			       const u_register_t *rec_flag,
 			       unsigned int rec_count,
@@ -298,6 +311,7 @@
 	ret = host_prepare_realm_payload(realm_ptr,
 			realm_payload_adr,
 			feature_flag,
+			feature_flag1,
 			sl,
 			rec_flag,
 			rec_count,
@@ -330,6 +344,7 @@
 bool host_create_activate_realm_payload(struct realm *realm_ptr,
 			u_register_t realm_payload_adr,
 			u_register_t feature_flag,
+			u_register_t feature_flag1,
 			long sl,
 			const u_register_t *rec_flag,
 			unsigned int rec_count,
@@ -341,6 +356,7 @@
 	ret = host_create_realm_payload(realm_ptr,
 			realm_payload_adr,
 			feature_flag,
+			feature_flag1,
 			sl,
 			rec_flag,
 			rec_count,
diff --git a/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c b/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
index 27b03e8..82a80a1 100644
--- a/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
+++ b/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
@@ -693,6 +693,16 @@
 	return REALM_ERROR;
 }
 
+static u_register_t rtt_s2ap_set_pi_index(u_register_t s2tte, u_register_t pi_index)
+{
+	s2tte &= ~S2TTE_PI_INDEX_MASK;
+	s2tte |= INPLACE(S2TTE_PI_INDEX_BIT0, pi_index & 1) |
+		INPLACE(S2TTE_PI_INDEX_BIT1, (pi_index >> 1) & 1) |
+		INPLACE(S2TTE_PI_INDEX_BIT2, (pi_index >> 2) & 1) |
+		INPLACE(S2TTE_PI_INDEX_BIT3, (pi_index >> 3) & 1);
+	return s2tte;
+}
+
 u_register_t host_realm_map_unprotected(struct realm *realm,
 					u_register_t ns_pa,
 					u_register_t map_size)
@@ -733,7 +743,12 @@
 		desc = phys;
 	}
 
-	desc |= S2TTE_ATTR_FWB_WB_RW;
+	if (realm->rtt_s2ap_enc_indirect) {
+		desc |= S2TTE_MEMATTR_FWB_NORMAL_WB;
+		desc = rtt_s2ap_set_pi_index(desc, RMI_PERM_S2AP_RW_IDX);
+	} else {
+		desc |= S2TTE_ATTR_FWB_WB_RW;
+	}
 
 	ret = host_rmi_rtt_mapunprotected(rd, map_addr, map_level, desc);
 
@@ -925,7 +940,7 @@
 				u_register_t level1;
 
 				/* Unmap from all Aux RTT */
-				if (!realm->rtt_tree_single) {
+				if (!realm->rtt_s2ap_enc_indirect) {
 					for (unsigned int tree_index = 1U;
 						tree_index <= realm->num_aux_planes;
 						tree_index++) {
@@ -993,7 +1008,7 @@
 			}
 
 			/* RTT_AUX_DESTROY */
-			if (!realm->rtt_tree_single) {
+			if (!realm->rtt_s2ap_enc_indirect) {
 				ret = host_realm_destroy_free_aux_rtt(realm, map_addr,
 						level);
 
@@ -1191,8 +1206,13 @@
 	params->rtt_num_start = 1U;
 
 	if (!realm->rtt_tree_single) {
-		params->flags1 = RMI_REALM_FLAGS1_RTT_TREE_PP;
+		params->flags1 |= RMI_REALM_FLAGS1_RTT_TREE_PP;
 	}
+
+	if (realm->rtt_s2ap_enc_indirect) {
+		params->flags1 |= RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+	}
+
 	params->num_aux_planes = realm->num_aux_planes;
 
 	/* Allocate VMID for all planes */
@@ -1366,8 +1386,8 @@
 
 	/* AUX MAP NS buffer for all RTTs */
 	if (!realm->rtt_tree_single) {
-		for (unsigned int i = 0U; i < ns_shared_mem_size / PAGE_SIZE; i++) {
-			for (unsigned int j = 0U; j < realm->num_aux_planes; j++) {
+		for (unsigned int j = 0U; j < realm->num_aux_planes; j++) {
+			for (unsigned int i = 0U; i < ns_shared_mem_size / PAGE_SIZE; i++) {
 				u_register_t fail_index, level_pri, state;
 
 				ret = host_rmi_rtt_aux_map_unprotected(realm->rd,
@@ -1862,7 +1882,7 @@
 		     (((((run->exit.esr & ISS_FSC_MASK) >= FSC_L0_TRANS_FAULT) &&
 		     ((run->exit.esr & ISS_FSC_MASK) <= FSC_L3_TRANS_FAULT)) ||
 		     ((run->exit.esr & ISS_FSC_MASK) == FSC_L_MINUS1_TRANS_FAULT))) &&
-		     !realm->rtt_tree_single &&
+		     !realm->rtt_s2ap_enc_indirect &&
 		     (realm->num_aux_planes > 0U)) {
 
 			re_enter_rec = host_realm_handle_perm_fault(realm, run);
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
index 43d9f01..af5a9ac 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
@@ -22,7 +22,7 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			0UL, RTT_MIN_LEVEL_LPA2, rec_flag, 1U, 0U)) {
+			0UL, 0UL, RTT_MIN_LEVEL_LPA2, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_SUCCESS;
 	}
 
@@ -40,7 +40,7 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 50UL),
+			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 50UL), 0UL,
 			RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_SUCCESS;
 	}
@@ -66,7 +66,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL),
+			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL), 0UL,
 			RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
@@ -98,7 +98,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL),
+			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL), 0UL,
 			RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
@@ -144,18 +144,18 @@
 {
 	u_register_t rec_flag[1] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL);
+	u_register_t feature_flag0 = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL);
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported() == true) {
 		return TEST_RESULT_SKIPPED;
 	} else {
-		feature_flag |= RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 |= RMI_FEATURE_REGISTER_0_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
+			feature_flag0, 0UL, RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_SUCCESS;
 	}
 
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
index 7967828..7fb3a1f 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
@@ -15,7 +15,7 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	assert((cmd >= REALM_MPAM_ACCESS) && (cmd <= REALM_MPAM_PRESENT));
@@ -24,12 +24,12 @@
 	SKIP_TEST_IF_FEAT_MPAM_NOT_SUPPORTED();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0UL, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
index 5c3299a..e6a9cd5 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
@@ -48,7 +48,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+			feature_flag, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -115,7 +115,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 3U, 0U)) {
+			feature_flag, 0U, sl, rec_flag, 3U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -241,7 +241,7 @@
 	bool ret1, ret2;
 	u_register_t other_mpidr, my_mpidr, ret;
 	unsigned int cpu_node, rec_count;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[MAX_REC_COUNT];
 
@@ -251,7 +251,7 @@
 	assert(rec_count <= MAX_REC_COUNT);
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -260,7 +260,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, rec_count, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, rec_count, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -301,7 +301,6 @@
 	return host_cmp_result();
 }
 
-
 static test_result_t cpu_on_handler(void)
 {
 	bool ret;
@@ -364,7 +363,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, rec_count, 0U)) {
+			feature_flag, 0U, sl, rec_flag, rec_count, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -502,12 +501,12 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+			feature_flag, 0UL, sl, rec_flag, MAX_REC_COUNT, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
 	if (!host_create_activate_realm_payload(&realm2, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag, 0U, sl, rec_flag, 1U, 0U)) {
 		ret2 = host_destroy_realm(&realm);
 		return TEST_RESULT_FAIL;
 	}
@@ -686,7 +685,7 @@
 
 		/* Request more event counters than total, expect failure */
 		if (host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-							feature_flag, sl, rec_flag, 1U, 0U)) {
+							feature_flag, 0UL, sl, rec_flag, 1U, 0U)) {
 			ERROR("Realm create should have failed\n");
 			host_destroy_realm(&realm);
 			return TEST_RESULT_FAIL;
@@ -702,7 +701,7 @@
 	}
 
 	ret1 = host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-						feature_flag, sl, rec_flag, 1U, 0U);
+						feature_flag, 0U, sl, rec_flag, 1U, 0U);
 	host_destroy_realm(&realm);
 
 	if (!get_feat_hpmn0_supported()) {
@@ -727,7 +726,7 @@
 
 	/* Prepare realm, create recs later */
 	if (!host_prepare_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, rec_count, 0U)) {
+			feature_flag, 0UL, sl, rec_flag, rec_count, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -745,7 +744,7 @@
 	}
 
 	ret1 = host_create_activate_realm_payload(&realm1, (u_register_t)REALM_IMAGE_BASE,
-					feature_flag, sl, rec_flag, rec_count, 0U);
+					feature_flag, 0U, sl, rec_flag, rec_count, 0U);
 	if (!ret1) {
 		goto test_exit;
 	}
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
index 9b03393..06e6475 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
@@ -58,7 +58,7 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[MAX_REC_COUNT];
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	struct rmi_rec_run *run;
 
@@ -69,7 +69,7 @@
 	}
 
 	if (is_feat_52b_on_4k_2_supported() == true) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -78,7 +78,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 1U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -112,12 +112,12 @@
  * Host cannot enter Aux Planes directly,
  * Host will enter P0, P0 will enter aux plane
  */
-test_result_t host_test_realm_create_planes_enter(void)
+test_result_t host_test_realm_create_planes_enter_multiple_rtt(void)
 {
 	bool ret1, ret2;
 	u_register_t rec_flag[MAX_REC_COUNT];
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	struct rmi_rec_run *run;
 
@@ -128,7 +128,7 @@
 	}
 
 	if (is_feat_52b_on_4k_2_supported() == true) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -136,8 +136,15 @@
 		rec_flag[i] = RMI_RUNNABLE;
 	}
 
+	/* Test invalid combination Tree per plane with s2ap indirect */
+	if (host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+			feature_flag0, RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT,
+			sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+		return TEST_RESULT_FAIL;
+	}
+
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -176,6 +183,74 @@
 }
 
 /*
+ * @Test_Aim@ Test realm payload creation with 3 Aux Planes, enter all Planes
+ * Host cannot enter Aux Planes directly,
+ * Host will enter P0, P0 will enter aux plane
+ */
+test_result_t host_test_realm_create_planes_enter_single_rtt(void)
+{
+	bool ret1, ret2;
+	u_register_t rec_flag = RMI_RUNNABLE;
+	struct realm realm;
+	u_register_t feature_flag0 = 0UL, feature_flag1;
+	long sl = RTT_MIN_LEVEL;
+	struct rmi_rec_run *run;
+
+	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
+
+	if (!are_planes_supported() || !is_single_rtt_supported()) {
+		return TEST_RESULT_SKIPPED;
+	}
+
+	if (is_feat_52b_on_4k_2_supported() == true) {
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
+		sl = RTT_MIN_LEVEL_LPA2;
+	}
+
+	/* use single RTT for all planes */
+	feature_flag0 |= INPLACE(RMI_FEATURE_REGISTER_0_PLANE_RTT,
+			RMI_PLANE_RTT_SINGLE);
+
+	feature_flag1 = RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+
+	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+			feature_flag0, feature_flag1, sl, &rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+		return TEST_RESULT_FAIL;
+	}
+
+	/* CMD for Plane N */
+	for (unsigned int j = 1U; j <= MAX_AUX_PLANE_COUNT; j++) {
+		host_shared_data_set_realm_cmd(&realm, REALM_SLEEP_CMD, j, 0U);
+		host_shared_data_set_host_val(&realm, j, 0U,
+			HOST_ARG1_INDEX, SLEEP_TIME_MS);
+	}
+
+	for (unsigned int j = 1U; j <= MAX_AUX_PLANE_COUNT; j++) {
+		run = (struct rmi_rec_run *)realm.run[0U];
+
+		host_realm_set_aux_plane_args(&realm, j);
+		ret1 = host_enter_realm_execute(&realm, REALM_ENTER_PLANE_N_CMD,
+				RMI_EXIT_HOST_CALL, 0U);
+
+		if (run->exit.exit_reason != RMI_EXIT_HOST_CALL) {
+			ERROR("Rec0 error exit=0x%lx ret1=%d HPFAR=0x%lx \
+				esr=0x%lx far=0x%lx\n",
+				run->exit.exit_reason, ret1,
+				run->exit.hpfar,
+				run->exit.esr, run->exit.far);
+		}
+	}
+	ret2 = host_destroy_realm(&realm);
+
+	if (!ret1 || !ret2) {
+		ERROR("%s(): enter=%d destroy=%d\n",
+		__func__, ret1, ret2);
+		return TEST_RESULT_FAIL;
+	}
+	return host_cmp_result();
+}
+
+/*
  * @Test_Aim@ Test realm payload creation, execution and destruction iteratively
  */
 test_result_t host_test_realm_create_enter(void)
@@ -183,16 +258,22 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[MAX_REC_COUNT];
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL, feature_flag1 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
+	if (is_single_rtt_supported()) {
+		/* Use s2ap encoding indirect */
+		INFO("Using S2ap indirect for single plane\n");
+		feature_flag1 = RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+	}
+
 	for (unsigned int i = 0U; i < MAX_REC_COUNT; i++) {
 		rec_flag[i] = RMI_RUNNABLE;
 	}
@@ -202,7 +283,7 @@
 		unsigned int run_num = (unsigned int)rand() % MAX_REC_COUNT;
 
 		if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+				feature_flag0, feature_flag1, sl, rec_flag, MAX_REC_COUNT, 0U)) {
 			return TEST_RESULT_FAIL;
 		}
 
@@ -231,18 +312,18 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -270,13 +351,13 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[MAX_REC_COUNT];
 	struct realm realm;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -286,7 +367,7 @@
 
 	pauth_test_lib_fill_regs_and_template(pauth_keys_before);
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+				feature_flag0, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -337,18 +418,18 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[1] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, rec_flag, 1U, 0U)) {
+				feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -426,7 +507,7 @@
 static test_result_t host_test_realm_pmuv3(uint8_t cmd)
 {
 	struct realm realm;
-	u_register_t feature_flag, rmm_feat_reg0;
+	u_register_t feature_flag0, rmm_feat_reg0;
 	unsigned int num_cnts;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[1] = {RMI_RUNNABLE};
@@ -443,16 +524,16 @@
 	num_cnts = EXTRACT(RMI_FEATURE_REGISTER_0_PMU_NUM_CTRS, rmm_feat_reg0);
 	host_set_pmu_state(&pmu_state);
 
-	feature_flag = RMI_FEATURE_REGISTER_0_PMU_EN |
+	feature_flag0 = RMI_FEATURE_REGISTER_0_PMU_EN |
 			INPLACE(RMI_FEATURE_REGISTER_0_PMU_NUM_CTRS, num_cnts);
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag |= RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 |= RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -579,14 +660,14 @@
 {
 	bool ret;
 	u_register_t rec_flag[MAX_REC_COUNT];
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 	unsigned int run_rec[MAX_REALM_COUNT], num;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -600,7 +681,7 @@
 
 		ret = host_create_activate_realm_payload(&realm[num],
 							(u_register_t)REALM_IMAGE_BASE,
-							feature_flag, sl, rec_flag,
+							feature_flag0, 0U, sl, rec_flag,
 							MAX_REC_COUNT, 0U);
 		if (!ret) {
 			goto destroy_realms;
@@ -655,18 +736,18 @@
 	struct rmi_rec_run *run;
 	u_register_t rec_flag[1] = {RMI_RUNNABLE};
 	u_register_t test_page_num = 3U;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -754,18 +835,18 @@
 	struct realm realm;
 	struct rmi_rec_run *run;
 	u_register_t rec_flag[1] = {RMI_RUNNABLE}, base;
-	u_register_t feature_flag = 0U;
+	u_register_t feature_flag0 = 0U;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -825,19 +906,19 @@
 	struct realm realm;
 	struct rmi_rec_run *run;
 	struct rtt_entry rtt;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 2U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -950,7 +1031,7 @@
 	struct realm realm;
 	struct rmi_rec_run *run;
 	struct rtt_entry rtt;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	test_result_t res = TEST_RESULT_FAIL;
 	u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
@@ -958,12 +1039,12 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 2U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1060,19 +1141,19 @@
 	struct realm realm;
 	struct rmi_rec_run *run;
 	struct rtt_entry rtt;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 2U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1195,19 +1276,19 @@
 	u_register_t ret, base, esr;
 	struct realm realm;
 	struct rtt_entry rtt;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[] = {RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE};
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 4U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 4U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1337,19 +1418,19 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	struct rmi_rec_run *run;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE};
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 2U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1441,14 +1522,14 @@
 {
 	bool ret1, ret2;
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[MAX_REC_COUNT], dit;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -1457,7 +1538,7 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1676,18 +1757,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 2U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -1862,18 +1943,18 @@
 	test_result_t test_result = TEST_RESULT_FAIL;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		goto destroy_realm;
 	}
 
@@ -1909,17 +1990,17 @@
 {
 	bool ret1, ret2;
 	test_result_t res = TEST_RESULT_FAIL;
-	u_register_t base_ipa, esr, feature_flag, base;
+	u_register_t base_ipa, esr, feature_flag0, base;
 	struct realm realm;
 	u_register_t rec_flag[4U] = {RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE};
 	struct rmi_rec_run *run;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
-	feature_flag = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 0x2CU);
+	feature_flag0 = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 0x2CU);
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, RTT_MIN_LEVEL, rec_flag, 4U, 0U)) {
+			feature_flag0, 0U, RTT_MIN_LEVEL, rec_flag, 4U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -2055,18 +2136,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
@@ -2212,18 +2293,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
@@ -2387,18 +2468,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
@@ -2502,18 +2583,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
@@ -2615,18 +2696,18 @@
 	struct realm realm;
 	struct rtt_entry rtt;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			feature_flag, sl, rec_flag, 1U, 0U)) {
+			feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
@@ -2727,14 +2808,14 @@
 	u_register_t base;
 	struct realm realm;
 	struct rtt_entry rtt;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 	SKIP_TEST_IF_DOUBLE_FAULT2_NOT_SUPPORTED();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
@@ -2742,7 +2823,7 @@
 
 	if (!host_create_activate_realm_payload(&realm,
 					(u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, &rec_flag, 1U, 0U)) {
+				feature_flag0, 0U, sl, &rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -2791,18 +2872,18 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, rec_flag, 1U, 0U)) {
+				feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
@@ -2832,18 +2913,18 @@
 	bool ret1, ret2;
 	u_register_t rec_flag[] = {RMI_RUNNABLE};
 	struct realm realm;
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (is_feat_52b_on_4k_2_supported()) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				feature_flag, sl, rec_flag, 1U, 0U)) {
+				feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c b/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
index 40e8590..e999cc9 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
@@ -22,24 +22,24 @@
 test_result_t host_create_sve_realm_payload(struct realm *realm, bool sve_en,
 					    uint8_t sve_vq)
 {
-	u_register_t feature_flag = 0UL;
+	u_register_t feature_flag0 = 0UL;
 	long sl = RTT_MIN_LEVEL;
 	u_register_t rec_flag[1] = {RMI_RUNNABLE};
 
 	if (is_feat_52b_on_4k_2_supported() == true) {
-		feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+		feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
 	if (sve_en) {
-		feature_flag |= RMI_FEATURE_REGISTER_0_SVE_EN |
+		feature_flag0 |= RMI_FEATURE_REGISTER_0_SVE_EN |
 				INPLACE(RMI_FEATURE_REGISTER_0_SVE_VL, sve_vq);
 	}
 
 	/* Initialise Realm payload */
 	if (!host_create_activate_realm_payload(realm,
 				       (u_register_t)REALM_IMAGE_BASE,
-				       feature_flag, sl, rec_flag, 1U, 0U)) {
+				       feature_flag0, 0UL, sl, rec_flag, 1U, 0U)) {
 		return TEST_RESULT_FAIL;
 	}
 
diff --git a/tftf/tests/tests-realm-payload.xml b/tftf/tests/tests-realm-payload.xml
index c8747f6..277e6db 100644
--- a/tftf/tests/tests-realm-payload.xml
+++ b/tftf/tests/tests-realm-payload.xml
@@ -8,8 +8,10 @@
 
 <testsuites>
   <testsuite name="Realm payload at EL1" description="Test Realm EL1 framework capabilities" >
-	  <testcase name="Realm Planes execution test"
-	  function="host_test_realm_create_planes_enter" />
+	  <testcase name="Realm Planes execution test with multiple RTTs"
+	  function="host_test_realm_create_planes_enter_multiple_rtt" />
+	  <testcase name="Realm Planes execution test with S2POE/single RTT"
+	  function="host_test_realm_create_planes_enter_single_rtt" />
 	  <testcase name="Realm Planes register read/write test"
 	  function="host_test_realm_create_planes_register_rw" />
 	  <testcase name="Realm EL1 creation and execution test"