fix(realm): separate pool creation from realm creation helpers

Initialize only one pool per testcase.
Separate pool creation from realm creation helpers.
This fixes the bug where testcase creates 2 realms
and 2 pools, and first pool is lost and not cleaned up.

Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
Change-Id: I817e97ea5ef15510c18261689c5f5d4e0e65b054
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 c654877..168bb0a 100644
--- a/include/runtime_services/host_realm_managment/host_realm_helper.h
+++ b/include/runtime_services/host_realm_managment/host_realm_helper.h
@@ -15,8 +15,6 @@
  */
 bool host_prepare_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t plat_mem_pool_adr,
-		u_register_t realm_pages_size,
 		u_register_t feature_flag,
 		long sl,
 		const u_register_t *rec_flag,
@@ -28,8 +26,6 @@
  */
 bool host_create_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t plat_mem_pool_adr,
-		u_register_t realm_pages_size,
 		u_register_t feature_flag,
 		long sl,
 		const u_register_t *rec_flag,
@@ -41,15 +37,10 @@
  */
 bool host_create_activate_realm_payload(struct realm *realm_ptr,
 		u_register_t realm_payload_adr,
-		u_register_t plat_mem_pool_adr,
-		u_register_t realm_pages_size,
 		u_register_t feature_flag,
 		long sl,
 		const u_register_t *rec_flag,
 		unsigned int rec_count);
-bool host_create_shared_mem(struct realm *realm_ptr,
-		u_register_t ns_shared_mem_adr,
-		u_register_t ns_shared_mem_size);
 bool host_destroy_realm(struct realm *realm_ptr);
 void host_rec_send_sgi(struct realm *realm_ptr,
 		unsigned int sgi, unsigned int rec_num);
diff --git a/include/runtime_services/host_realm_managment/host_realm_mem_layout.h b/include/runtime_services/host_realm_managment/host_realm_mem_layout.h
index 2c3a280..7458146 100644
--- a/include/runtime_services/host_realm_managment/host_realm_mem_layout.h
+++ b/include/runtime_services/host_realm_managment/host_realm_mem_layout.h
@@ -22,19 +22,11 @@
  *   | (REALM_MAX_LOAD_IMG_SIZE  |
  *   +---------------------------+
  *
- * The realm memory pool is a combination of PAGE_POOL and NS_SHARED_MEM
  * +--------------------------------+     +---------------------------+
  * |  Memory Pool                   |     | Heap Memory               |
- * | (NS_REALM_SHARED_MEM_SIZE *    |     | (PAGE_POOL_MAX_SIZE)      |
- * |  MAX_REALM_COUNT)              |     | ....                      |
- * |  + PAGE_POOL_MAX_SIZE *        | ==> | (PAGE_POOL_MAX_SIZE)      |
- * |  MAX_REALM_COUNT)              |     |                           |
  * |                                |     |                           |
- * |                                |     +---------------------------+
- * |                                |     | Shared Region             |
- * |                                |     | (NS_REALM_SHARED_MEM_SIZE)|
- * |                                |     |  ....                     |
- * |                                |     | (NS_REALM_SHARED_MEM_SIZE)|
+ * |  PAGE_POOL_MAX_SIZE            | ==> | PAGE_POOL_MAX_SIZE        |
+ * |                                |     |                           |
  * +--------------------------------+     +---------------------------+*
  * Refer to tftf.lds for the layout.
  */
@@ -44,14 +36,13 @@
  IMPORT_SYM(uintptr_t, __REALM_PAYLOAD_START__, REALM_IMAGE_BASE);
  IMPORT_SYM(uintptr_t, __REALM_POOL_START__, PAGE_POOL_BASE);
  IMPORT_SYM(uintptr_t, __REALM_POOL_END__, PAGE_POOL_END);
-#define NS_REALM_SHARED_MEM_BASE	(PAGE_POOL_BASE + (PAGE_POOL_MAX_SIZE * MAX_REALM_COUNT))
 #endif
 
 #ifdef ENABLE_REALM_PAYLOAD_TESTS
  /* 1MB for shared buffer between Realm and Host */
  #define NS_REALM_SHARED_MEM_SIZE	U(0x100000)
- /* 3MB of memory used as a pool for realm's objects creation */
- #define PAGE_POOL_MAX_SIZE		U(0x300000)
+ /* 8MB of memory used as a pool for realm's objects creation */
+ #define PAGE_POOL_MAX_SIZE		U(0x800000)
 #else
  #define NS_REALM_SHARED_MEM_SIZE       U(0x0)
  #define PAGE_POOL_MAX_SIZE             U(0x0)
diff --git a/tftf/framework/tftf.ld.S b/tftf/framework/tftf.ld.S
index 3621d97..8b4bb88 100644
--- a/tftf/framework/tftf.ld.S
+++ b/tftf/framework/tftf.ld.S
@@ -65,8 +65,7 @@
     /* Memory pool for Realm payload tests. */
     realm_pool (NOLOAD)  : ALIGN(PAGE_SIZE) {
         __REALM_POOL_START__ = .;
-        . = __REALM_POOL_START__ + (NS_REALM_SHARED_MEM_SIZE * MAX_REALM_COUNT) +
-            (PAGE_POOL_MAX_SIZE * MAX_REALM_COUNT);
+        . = __REALM_POOL_START__ + PAGE_POOL_MAX_SIZE;
         __REALM_POOL_END__ = .;
     } >RAM
 
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 28df45d..8a1d1c4 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
@@ -105,10 +105,33 @@
 	return true;
 }
 
+static bool host_create_shared_mem(struct realm *realm_ptr)
+{
+	u_register_t ns_shared_mem_adr = (u_register_t)page_alloc(NS_REALM_SHARED_MEM_SIZE);
+
+	if (ns_shared_mem_adr == 0U) {
+		ERROR("Failed to alloc NS buffer\n");
+		return false;
+	}
+
+	/* RTT map NS shared region */
+	if (host_realm_map_ns_shared(realm_ptr, ns_shared_mem_adr,
+				NS_REALM_SHARED_MEM_SIZE) != REALM_SUCCESS) {
+		ERROR("%s() failed\n", "host_realm_map_ns_shared");
+		realm_ptr->shared_mem_created = false;
+		return false;
+	}
+
+	memset((void *)ns_shared_mem_adr, 0, (size_t)NS_REALM_SHARED_MEM_SIZE);
+	realm_ptr->host_shared_data = ns_shared_mem_adr;
+	realm_ptr->shared_mem_created = true;
+	host_init_realm_print_buffer(realm_ptr);
+
+	return true;
+}
+
 bool host_prepare_realm_payload(struct realm *realm_ptr,
 			       u_register_t realm_payload_adr,
-			       u_register_t plat_mem_pool_adr,
-			       u_register_t realm_pages_size,
 			       u_register_t feature_flag,
 			       long sl,
 			       const u_register_t *rec_flag,
@@ -121,27 +144,6 @@
 		return false;
 	}
 
-	if (plat_mem_pool_adr  == 0UL ||
-			realm_pages_size == 0UL) {
-		ERROR("plat_mem_pool_size or "
-			"realm_pages_size is NULL\n");
-		return false;
-	}
-
-	if (plat_mem_pool_adr < PAGE_POOL_BASE ||
-	    plat_mem_pool_adr + realm_pages_size > NS_REALM_SHARED_MEM_BASE) {
-		ERROR("Invalid pool range\n");
-		return false;
-	}
-
-	INFO("Realm start adr=0x%lx\n", plat_mem_pool_adr);
-
-	/* Initialize  Host NS heap memory to be used in Realm creation*/
-	if (page_pool_init(plat_mem_pool_adr, realm_pages_size)
-		!= HEAP_INIT_SUCCESS) {
-		ERROR("%s() failed\n", "page_pool_init");
-		return false;
-	}
 	memset((char *)realm_ptr, 0U, sizeof(struct realm));
 
 	/* Read Realm Feature Reg 0 */
@@ -257,6 +259,11 @@
 		goto destroy_realm;
 	}
 
+	if (!host_create_shared_mem(realm_ptr)) {
+		ERROR("%s() failed\n", "host_create_shared_mem");
+		goto destroy_realm;
+	}
+
 	realm_ptr->payload_created = true;
 
 	return true;
@@ -273,8 +280,6 @@
 
 bool host_create_realm_payload(struct realm *realm_ptr,
 			       u_register_t realm_payload_adr,
-			       u_register_t plat_mem_pool_adr,
-			       u_register_t realm_pages_size,
 			       u_register_t feature_flag,
 			       long sl,
 			       const u_register_t *rec_flag,
@@ -284,8 +289,6 @@
 
 	ret = host_prepare_realm_payload(realm_ptr,
 			realm_payload_adr,
-			plat_mem_pool_adr,
-			realm_pages_size,
 			feature_flag,
 			sl,
 			rec_flag,
@@ -317,8 +320,6 @@
 
 bool host_create_activate_realm_payload(struct realm *realm_ptr,
 			u_register_t realm_payload_adr,
-			u_register_t plat_mem_pool_adr,
-			u_register_t realm_pages_size,
 			u_register_t feature_flag,
 			long sl,
 			const u_register_t *rec_flag,
@@ -329,8 +330,6 @@
 
 	ret = host_create_realm_payload(realm_ptr,
 			realm_payload_adr,
-			plat_mem_pool_adr,
-			realm_pages_size,
 			feature_flag,
 			sl,
 			rec_flag,
@@ -354,47 +353,20 @@
 	return false;
 }
 
-bool host_create_shared_mem(struct realm *realm_ptr,
-			    u_register_t ns_shared_mem_adr,
-			    u_register_t ns_shared_mem_size)
-{
-	if (ns_shared_mem_adr < NS_REALM_SHARED_MEM_BASE  ||
-			ns_shared_mem_adr + ns_shared_mem_size > PAGE_POOL_END) {
-		ERROR("%s() Invalid adr range\n", "host_realm_map_ns_shared");
-		return false;
-	}
-
-	/* RTT map NS shared region */
-	if (host_realm_map_ns_shared(realm_ptr, ns_shared_mem_adr,
-				ns_shared_mem_size) != REALM_SUCCESS) {
-		ERROR("%s() failed\n", "host_realm_map_ns_shared");
-		realm_ptr->shared_mem_created = false;
-		return false;
-	}
-
-	memset((void *)ns_shared_mem_adr, 0, (size_t)ns_shared_mem_size);
-	realm_ptr->host_shared_data = ns_shared_mem_adr;
-	realm_ptr->shared_mem_created = true;
-	host_init_realm_print_buffer(realm_ptr);
-
-	return true;
-}
-
 bool host_destroy_realm(struct realm *realm_ptr)
 {
-	/* Free test resources */
-	page_pool_reset();
-
 	if (!realm_ptr->payload_created) {
 		ERROR("%s() failed\n", "payload_created");
 		return false;
 	}
 
 	realm_ptr->payload_created = false;
+
 	if (host_realm_destroy(realm_ptr) != REALM_SUCCESS) {
 		ERROR("%s() failed\n", "host_realm_destroy");
 		return false;
 	}
+
 	memset((char *)realm_ptr, 0U, sizeof(struct realm));
 
 	return true;
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 a99fcd5..56a4992 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
@@ -37,6 +37,8 @@
 
 static bool rmi_cmp_result;
 static unsigned short vmid;
+static spinlock_t pool_lock;
+static unsigned int pool_counter;
 
 static smc_ret_values host_rmi_handler(smc_args *args, unsigned int in_reg)
 {
@@ -701,10 +703,26 @@
 {
 	struct rmi_realm_params *params;
 	u_register_t ret;
+	unsigned int count;
 
 	realm->par_size = REALM_MAX_LOAD_IMG_SIZE;
 
 	realm->state = REALM_STATE_NULL;
+
+	/* Initialize  Host NS heap memory to be used in Realm creation*/
+	spin_lock(&pool_lock);
+	count = pool_counter;
+	pool_counter++;
+	spin_unlock(&pool_lock);
+
+	if (count == 0U) {
+		if (page_pool_init(PAGE_POOL_BASE, PAGE_POOL_MAX_SIZE)
+			!= HEAP_INIT_SUCCESS) {
+			ERROR("%s() failed\n", "page_pool_init");
+			return REALM_ERROR;
+		}
+	}
+
 	/*
 	 * Allocate memory for PAR - Realm image. Granule delegation
 	 * of PAR will be performed during rtt creation.
@@ -713,9 +731,11 @@
 	if (realm->par_base == HEAP_NULL_PTR) {
 		ERROR("page_alloc failed, base=0x%lx, size=0x%lx\n",
 			  realm->par_base, realm->par_size);
-		return REALM_ERROR;
+		goto pool_reset;
 	}
 
+	INFO("Realm start adr=0x%lx\n", realm->par_base);
+
 	/* Allocate and delegate RD */
 	realm->rd = (u_register_t)page_alloc(PAGE_SIZE);
 	if (realm->rd == HEAP_NULL_PTR) {
@@ -833,6 +853,18 @@
 err_free_par:
 	page_free(realm->par_base);
 
+pool_reset:
+	/* Free test resources */
+	spin_lock(&pool_lock);
+	pool_counter--;
+	count = pool_counter;
+	spin_unlock(&pool_lock);
+
+	if (count == 0U) {
+		INFO("Reset pool\n");
+		page_pool_reset();
+	}
+
 	return REALM_ERROR;
 }
 
@@ -1149,6 +1181,7 @@
 			ERROR("host_realm_tear_down_rtt_range() line=%u\n", __LINE__);
 			return REALM_ERROR;
 		}
+		page_free(realm->host_shared_data);
 	}
 
 	/*
@@ -1181,6 +1214,12 @@
 	page_free(realm->rtt_addr);
 	page_free(realm->par_base);
 
+
+	/* Free test resources */
+	spin_lock(&pool_lock);
+	pool_counter--;
+	spin_unlock(&pool_lock);
+
 	return REALM_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 58014e8..34c684c 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,8 +22,6 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			0UL, RTT_MIN_LEVEL_LPA2, rec_flag, 1U)) {
 		return TEST_RESULT_SUCCESS;
 	}
@@ -42,8 +40,6 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 50UL),
 			RTT_MIN_LEVEL, rec_flag, 1U)) {
 		return TEST_RESULT_SUCCESS;
@@ -70,8 +66,6 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL),
 			RTT_MIN_LEVEL, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
@@ -105,13 +99,12 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, RTT_MIN_LEVEL, rec_flag, 1U)) {
 		return TEST_RESULT_SUCCESS;
 	}
 
 	(void)host_destroy_realm(&realm);
+
 	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 81294cd..0047d30 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
@@ -43,15 +43,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	for (unsigned int i = 0; i < MAX_REC_COUNT; i++) {
 		host_shared_data_set_host_val(&realm, i, HOST_ARG1_INDEX, 10U);
@@ -106,15 +100,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 3U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	ret1 = host_enter_realm_execute(&realm, REALM_MULTIPLE_REC_PSCI_DENIED_CMD,
 			RMI_EXIT_PSCI, 0U);
@@ -254,15 +242,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, rec_count)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	is_secondary_cpu_on = 0U;
 	my_mpidr = read_mpidr_el1() & MPID_MASK;
@@ -360,15 +342,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	is_secondary_cpu_on = 0U;
 	init_spinlock(&secondary_cpu_lock);
@@ -500,25 +476,16 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
 
 	if (!host_create_activate_realm_payload(&realm2, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE + PAGE_POOL_MAX_SIZE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ret2 = host_destroy_realm(&realm);
 		return TEST_RESULT_FAIL;
 	}
 
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
-
 	/* Realm to request CPU_ON for rec 2 */
 	host_shared_data_set_host_val(&realm, 0U, HOST_ARG1_INDEX, 2U);
 	ret1 = host_enter_realm_execute(&realm, REALM_MULTIPLE_REC_MULTIPLE_CPU_CMD,
@@ -567,6 +534,7 @@
 		ERROR("Expected error\n");
 		goto destroy_realm;
 	}
+
 	ret3 = TEST_RESULT_SUCCESS;
 
 destroy_realm:
@@ -578,6 +546,7 @@
 		__func__, ret1, ret2);
 		return TEST_RESULT_FAIL;
 	}
+
 	return ret3;
 }
 
@@ -663,8 +632,6 @@
 
 	/* Request more PMU counter than total, expect failure */
 	if (host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm create should have failed\n");
 		host_destroy_realm(&realm);
@@ -680,8 +647,6 @@
 	}
 
 	ret1 = host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				(u_register_t)PAGE_POOL_BASE,
-				(u_register_t)PAGE_POOL_MAX_SIZE,
 				feature_flag, sl, rec_flag, 1U);
 
 	if (!get_feat_hpmn0_supported()) {
@@ -708,16 +673,10 @@
 
 	/* Prepare realm0, create recs for realm0 later */
 	if (!host_prepare_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		goto test_exit;
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto test_exit;
-	}
 
 	/* Second realm with less num of PMU counters */
 	feature_flag = RMI_FEATURE_REGISTER_0_PMU_EN |
@@ -728,15 +687,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm1, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE + PAGE_POOL_MAX_SIZE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		goto test_exit2;
 	}
-	if (!host_create_shared_mem(&realm1, NS_REALM_SHARED_MEM_BASE + NS_REALM_SHARED_MEM_SIZE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto test_exit2;
-	}
 
 	/* create realm0 recs, activate realm0 */
 	if (host_realm_rec_create(&realm) != REALM_SUCCESS) {
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 34ff786..278e72e 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
@@ -50,15 +50,9 @@
 
 	for (unsigned int i = 0U; i < 5U; i++) {
 		if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				(u_register_t)PAGE_POOL_BASE,
-				(u_register_t)PAGE_POOL_MAX_SIZE,
 				feature_flag, sl, rec_flag, 1U)) {
 			return TEST_RESULT_FAIL;
 		}
-		if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-				NS_REALM_SHARED_MEM_SIZE)) {
-			return TEST_RESULT_FAIL;
-		}
 
 		host_shared_data_set_host_val(&realm, 0U, HOST_ARG1_INDEX, SLEEP_TIME_MS);
 		ret1 = host_enter_realm_execute(&realm, REALM_SLEEP_CMD, RMI_EXIT_HOST_CALL, 0U);
@@ -93,15 +87,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	ret1 = host_enter_realm_execute(&realm, REALM_GET_RSI_VERSION, RMI_EXIT_HOST_CALL, 0U);
 	ret2 = host_destroy_realm(&realm);
@@ -140,17 +128,10 @@
 
 	pauth_test_lib_fill_regs_and_template(pauth_keys_before);
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				(u_register_t)PAGE_POOL_BASE,
-				(u_register_t)PAGE_POOL_MAX_SIZE,
 				feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
 
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-				NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
-
 	for (unsigned int i = 0U; i < MAX_REC_COUNT; i++) {
 		ret1 = host_enter_realm_execute(&realm, REALM_PAUTH_SET_CMD,
 				RMI_EXIT_HOST_CALL, i);
@@ -207,16 +188,11 @@
 	}
 
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
+
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-				(u_register_t)PAGE_POOL_BASE,
-				(u_register_t)PAGE_POOL_MAX_SIZE,
 				feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-				NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	ret1 = host_enter_realm_execute(&realm, REALM_PAUTH_FAULT, RMI_EXIT_HOST_CALL, 0U);
 	ret2 = host_destroy_realm(&realm);
@@ -309,17 +285,10 @@
 		sl = RTT_MIN_LEVEL_LPA2;
 	}
 
-
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	ret1 = host_enter_realm_execute(&realm, cmd,
 					(cmd == REALM_PMU_INTERRUPT) ?
@@ -421,33 +390,17 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm1, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
 
 
 	if (!host_create_activate_realm_payload(&realm2, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE + PAGE_POOL_MAX_SIZE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ret2 = host_destroy_realm(&realm1);
 		return TEST_RESULT_FAIL;
 	}
 
-	if (!host_create_shared_mem(&realm1, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		ret1 = false;
-		goto destroy_realms;
-	}
-
-	if (!host_create_shared_mem(&realm2, NS_REALM_SHARED_MEM_BASE +
-				NS_REALM_SHARED_MEM_SIZE, NS_REALM_SHARED_MEM_SIZE)) {
-		ret1 = false;
-		goto destroy_realms;
-	}
-
 	host_shared_data_set_host_val(&realm1, 0U, HOST_ARG1_INDEX, SLEEP_TIME_MS);
 	ret1 = host_enter_realm_execute(&realm1, REALM_SLEEP_CMD, RMI_EXIT_HOST_CALL, 0U);
 	if (!ret1) {
@@ -503,15 +456,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	host_shared_data_set_host_val(&realm, 0U, HOST_ARG1_INDEX, 10U);
 	ret1 = host_enter_realm_execute(&realm, REALM_SLEEP_CMD, RMI_EXIT_HOST_CALL, 0U);
@@ -608,15 +555,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	base = (u_register_t)page_alloc(PAGE_SIZE);
 
@@ -686,15 +627,9 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 2U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	base = (u_register_t)page_alloc(PAGE_SIZE);
 
@@ -818,15 +753,9 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 2U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/* This is dummy allocation to get a base address */
 	base = (u_register_t)page_alloc(PAGE_SIZE);
@@ -933,15 +862,9 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 2U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	base = (u_register_t)page_alloc(PAGE_SIZE);
 	run = (struct rmi_rec_run *)realm.run[0];
@@ -1074,15 +997,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 4U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	base = (u_register_t)page_alloc(PAGE_SIZE);
 
@@ -1222,15 +1139,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 2U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/* Can choose any unprotected IPA adr, TFTF_BASE chosen for convenience */
 	base = TFTF_BASE;
@@ -1333,15 +1244,9 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, MAX_REC_COUNT)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
 
 	/* Enable FEAT_DIT on Host */
 	write_dit(DIT_BIT);
@@ -1508,6 +1413,7 @@
 		ERROR("Wrong state after host_rmi_rtt_destroy\n");
 		return TEST_RESULT_FAIL;
 	}
+
 	return TEST_RESULT_SUCCESS;
 }
 
@@ -1568,15 +1474,9 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 2U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	INFO("Test 1\n");
 	base = (u_register_t)page_alloc(PAGE_SIZE);
@@ -1734,6 +1634,7 @@
 		__func__, ret1);
 		return TEST_RESULT_FAIL;
 	}
+
 	return test_result;
 }
 
@@ -1759,15 +1660,9 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	test_result = test_rtt_destroy_ram(&realm, true);
 	if (test_result != TEST_RESULT_SUCCESS) {
@@ -1809,16 +1704,11 @@
 	SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
 
 	feature_flag = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 0x2CU);
+
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, RTT_MIN_LEVEL, rec_flag, 4U)) {
 		return TEST_RESULT_FAIL;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/* Any Adr */
 	base = TFTF_BASE;
@@ -1963,16 +1853,10 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/* Find an address not mapped at L1 and mapped at L0 as unassigned empty */
 	base = ALIGN_DOWN(TFTF_BASE, RTT_MAP_SIZE(1U));
@@ -2126,16 +2010,10 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/* Find an address not mapped at L1 and mapped at L0 as unassigned empty */
 	base = ALIGN_DOWN(TFTF_BASE, RTT_MAP_SIZE(1U));
@@ -2307,16 +2185,10 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/*
 	 * Pick an address which is to be mapped to unprotected IPA space.
@@ -2428,22 +2300,17 @@
 	}
 
 	if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/*
 	 * Any 2 MB range not mapped in RTT and which can be delegated,
 	 * using heap for second realm here.
 	 */
-	base = ALIGN_DOWN(PAGE_POOL_BASE + PAGE_POOL_MAX_SIZE, RTT_L2_BLOCK_SIZE);
+	base = ALIGN_DOWN(PAGE_POOL_BASE + (PAGE_POOL_MAX_SIZE - RTT_L2_BLOCK_SIZE),
+			RTT_L2_BLOCK_SIZE);
 
 	for (unsigned int i = 0U; i < 512; i++) {
 		ret = host_realm_delegate_map_protected_data(true, &realm, base + (PAGE_SIZE * i),
@@ -2546,22 +2413,17 @@
 	}
 
 	if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
-			(u_register_t)PAGE_POOL_BASE,
-			(u_register_t)PAGE_POOL_MAX_SIZE,
 			feature_flag, sl, rec_flag, 1U)) {
 		ERROR("Realm creation failed\n");
 		goto destroy_realm;
 	}
-	if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
-			NS_REALM_SHARED_MEM_SIZE)) {
-		goto destroy_realm;
-	}
 
 	/*
 	 * Any 2 MB range not mapped in RTT and which can be delegated,
 	 * using heap for second realm here.
 	 */
-	base = ALIGN_DOWN(PAGE_POOL_BASE + (PAGE_POOL_MAX_SIZE), RTT_L2_BLOCK_SIZE);
+	base = ALIGN_DOWN(PAGE_POOL_BASE + (PAGE_POOL_MAX_SIZE - RTT_L2_BLOCK_SIZE),
+			RTT_L2_BLOCK_SIZE);
 
 	INFO("base=0x%lx\n", base);
 	for (unsigned int i = 0U; i < 512; i++) {
@@ -2579,7 +2441,7 @@
 	if (ret != RMI_SUCCESS || rtt.state != RMI_ASSIGNED ||
 			(rtt.ripas != RMI_RAM)) {
 		ERROR("wrong state after INIT_RIPAS\n");
-		return TEST_RESULT_FAIL;
+		goto undelegate_destroy;
 	}
 	host_realm_activate(&realm);
 
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 9f666a9..02c5d0f 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
@@ -39,17 +39,9 @@
 	/* Initialise Realm payload */
 	if (!host_create_activate_realm_payload(realm,
 				       (u_register_t)REALM_IMAGE_BASE,
-				       (u_register_t)PAGE_POOL_BASE,
-				       (u_register_t)PAGE_POOL_MAX_SIZE,
 				       feature_flag, sl, rec_flag, 1U)) {
 		return TEST_RESULT_FAIL;
 	}
 
-	/* Create shared memory between Host and Realm */
-	if (!host_create_shared_mem(realm, NS_REALM_SHARED_MEM_BASE,
-				    NS_REALM_SHARED_MEM_SIZE)) {
-		return TEST_RESULT_FAIL;
-	}
-
 	return TEST_RESULT_SUCCESS;
 }