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;
}