Merge changes from topic "kc/stmm"

* changes:
  refactor: move StMM to cactus tertiary
  feat(hob): add boot-time prints for cactus-stmm HOB list
  refactor(cactus): map boot information regions
  feat(hob): add HOB definitions to TFTF
  feat(spm): add STMM cactus partition
diff --git a/include/lib/pcie/pcie.h b/include/lib/pcie/pcie.h
index 65e0202..d7188a0 100644
--- a/include/lib/pcie/pcie.h
+++ b/include/lib/pcie/pcie.h
@@ -48,10 +48,10 @@
 	uint32_t rp_bar32_value;
 } pcie_bar_init_t;
 
-#define PCIE_EXTRACT_BDF_SEG(bdf)	((bdf >> 24) & 0xFF)
-#define PCIE_EXTRACT_BDF_BUS(bdf)	((bdf >> 16) & 0xFF)
-#define PCIE_EXTRACT_BDF_DEV(bdf)	((bdf >> 8) & 0xFF)
-#define PCIE_EXTRACT_BDF_FUNC(bdf)	(bdf & 0xFF)
+#define PCIE_EXTRACT_BDF_SEG(bdf)	((bdf >> 16) & 0xFF)
+#define PCIE_EXTRACT_BDF_BUS(bdf)	((bdf >> 8) & 0xFF)
+#define PCIE_EXTRACT_BDF_DEV(bdf)	((bdf >> 3) & 0x1F)
+#define PCIE_EXTRACT_BDF_FUNC(bdf)	(bdf & 0x7)
 
 /* PCI-compatible region */
 #define PCI_CMP_CFG_SIZE	256
@@ -64,7 +64,7 @@
 #define PCIE_MAX_FUNC		8
 
 #define PCIE_CREATE_BDF(Seg, Bus, Dev, Func)	\
-			((Seg << 24) | (Bus << 16) | (Dev << 8) | Func)
+			((Seg << 16) | (Bus << 8) | (Dev << 3) | Func)
 
 #define PCIE_SUCCESS		0x00000000  /* Operation completed successfully */
 #define PCIE_NO_MAPPING		0x10000001  /* A mapping to a Function does not exist */
diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h
index 1a51823..8103335 100644
--- a/include/plat/common/platform.h
+++ b/include/plat/common/platform.h
@@ -201,4 +201,16 @@
  */
 const struct pcie_info_table *plat_pcie_get_info_table(void);
 
+/*
+ * This function provides an address that is recognized as invalid for use
+ * as an entry point in the CPU_ON and CPU_SUSPEND calls on this platform.
+ * To be considered invalid, the address must fall within a range that is
+ * not accessible to the caller.
+ *
+ * Typically, most platforms designate address 0 for this purpose. However,
+ * on platforms where address 0 is a valid entry point, this function can
+ * be designed to return an alternative address.
+ */
+uintptr_t plat_get_invalid_addr(void);
+
 #endif /* __PLATFORM_H__ */
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/plat/common/plat_common.c b/plat/common/plat_common.c
index a4195c3..da58579 100644
--- a/plat/common/plat_common.c
+++ b/plat/common/plat_common.c
@@ -25,6 +25,7 @@
 #pragma weak tftf_plat_reset
 #pragma weak plat_get_prot_regions
 #pragma weak plat_pcie_get_info_table
+#pragma weak plat_get_invalid_addr
 
 #if IMAGE_TFTF
 
@@ -154,3 +155,8 @@
 {
 	return NULL;
 }
+
+uintptr_t plat_get_invalid_addr(void)
+{
+	return (uintptr_t)0x0;
+}
diff --git a/plat/xilinx/versal/include/platform_def.h b/plat/xilinx/versal/include/platform_def.h
index 73b6db2..1e6bd5d 100644
--- a/plat/xilinx/versal/include/platform_def.h
+++ b/plat/xilinx/versal/include/platform_def.h
@@ -39,6 +39,11 @@
 #define DRAM_BASE				U(0x0)
 #define DRAM_SIZE				U(0x80000000)
 
+/*******************************************************************************
+ * LOW DDR MAX defines
+ ******************************************************************************/
+#define PLAT_DDR_LOWMEM_MAX		U(0x80000000)
+
 /*
  * TFTF_NVM_OFFSET/SIZE correspond to the NVM partition in the partition
  * table
diff --git a/plat/xilinx/versal/versal_setup.c b/plat/xilinx/versal/versal_setup.c
index 35589ab..fb952f9 100644
--- a/plat/xilinx/versal/versal_setup.c
+++ b/plat/xilinx/versal/versal_setup.c
@@ -79,3 +79,8 @@
 {
 	return mmap;
 }
+
+uintptr_t plat_get_invalid_addr(void)
+{
+	return (uintptr_t)PLAT_DDR_LOWMEM_MAX;
+}
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..72d0876 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,
@@ -1748,7 +1768,8 @@
 }
 
 /* Handle RSI_MEM_SET_PERM_INDEX by P0, return true to return to realm, false to return to host */
-static bool host_realm_handle_s2ap_change(struct realm *realm, struct rmi_rec_run *run)
+static bool host_realm_handle_s2ap_change(struct realm *realm, struct rmi_rec_run *run,
+		u_register_t rec_num)
 {
 
 
@@ -1759,7 +1780,7 @@
 
 	while (new_base != top) {
 		ret = host_rmi_rtt_set_s2ap(realm->rd,
-				    realm->rec[0U],
+				    realm->rec[rec_num],
 				    new_base,
 				    top, &new_base,
 				    &rtt_tree);
@@ -1862,7 +1883,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);
@@ -1876,7 +1897,7 @@
 		    is_adr_in_par(realm, run->exit.s2ap_base) &&
 		    (realm->num_aux_planes > 0U)) {
 
-			re_enter_rec = host_realm_handle_s2ap_change(realm, run);
+			re_enter_rec = host_realm_handle_s2ap_change(realm, run, rec_num);
 		}
 
 		if (ret != RMI_SUCCESS) {
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/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
index 8d8758b..05dd73d 100644
--- a/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
+++ b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
@@ -164,7 +164,7 @@
 		 * Entry point address argument can be any invalid address.
 		 */
 
-		psci_ret = tftf_psci_cpu_on(cpu_mpid, 0, 0);
+		psci_ret = tftf_psci_cpu_on(cpu_mpid, plat_get_invalid_addr(), 0);
 		if (psci_ret != PSCI_E_INVALID_ADDRESS) {
 			tftf_testcase_printf("CPU:0x%x Expected: %i Actual: %i\n",
 						cpu_mpid,
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"