test(realm): add new api to create and activate realm
* Add new API to create realm payload and activate realm.
host_create_activate_realm_payload().
* Also add API to create realm without activate.
host_create_realm_payload(). Host will need to call
host_realm_activate() separately prior to entering.
Change-Id: I67c330c2672a02438cbb9a99c6c1741d3eda3cc3
Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
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 5a8fcd3..6a975b7 100644
--- a/include/runtime_services/host_realm_managment/host_realm_helper.h
+++ b/include/runtime_services/host_realm_managment/host_realm_helper.h
@@ -18,6 +18,14 @@
u_register_t feature_flag,
const u_register_t *rec_flag,
unsigned int rec_count);
+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 plat_mem_pool_size,
+ u_register_t realm_pages_size,
+ u_register_t feature_flag,
+ 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);
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 26b39f9..e8a5c0b 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
@@ -242,12 +242,6 @@
goto destroy_realm;
}
- /* Activate Realm */
- if (host_realm_activate(realm_ptr) != REALM_SUCCESS) {
- ERROR("%s() failed\n", "host_realm_activate");
- goto destroy_realm;
- }
-
realm_ptr->payload_created = true;
return true;
@@ -262,6 +256,45 @@
return false;
}
+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 plat_mem_pool_size,
+ u_register_t realm_pages_size,
+ u_register_t feature_flag,
+ const u_register_t *rec_flag,
+ unsigned int rec_count)
+
+{
+ bool ret;
+
+ ret = host_create_realm_payload(realm_ptr,
+ realm_payload_adr,
+ plat_mem_pool_adr,
+ plat_mem_pool_size,
+ realm_pages_size,
+ feature_flag,
+ rec_flag,
+ rec_count);
+ if (!ret) {
+ goto destroy_realm;
+ } else {
+ /* Activate Realm */
+ if (host_realm_activate(realm_ptr) != REALM_SUCCESS) {
+ ERROR("%s() failed\n", "host_realm_activate");
+ goto destroy_realm;
+ }
+ }
+ return true;
+
+destroy_realm:
+ if (host_realm_destroy(realm_ptr) != REALM_SUCCESS) {
+ ERROR("%s() failed\n", "host_realm_destroy");
+ }
+ realm_ptr->payload_created = false;
+ 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)
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 0341f7d..321e85d 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
@@ -34,7 +34,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -92,7 +92,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -235,7 +235,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
SKIP_TEST_IF_LESS_THAN_N_CPUS(rec_count);
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_payload_simd_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_payload_simd_tests.c
index 102d40f..97b10d5 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_payload_simd_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_payload_simd_tests.c
@@ -99,7 +99,7 @@
}
/* Initialise Realm payload */
- if (!host_create_realm_payload(&realm,
+ 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 +
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 7e77cb9..01de09b 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
@@ -36,7 +36,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
for (unsigned int i = 0U; i < 5U; i++) {
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -74,7 +74,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -114,7 +114,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
pauth_test_lib_fill_regs_and_template();
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -168,7 +168,7 @@
struct realm realm;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -266,7 +266,7 @@
feature_flag = RMI_FEATURE_REGISTER_0_PMU_EN |
INPLACE(FEATURE_PMU_NUM_CTRS, (unsigned long long)(-1));
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -371,7 +371,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload(&realm1, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -381,7 +381,7 @@
}
- if (!host_create_realm_payload(&realm2, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_spm.c b/tftf/tests/runtime_services/realm_payload/host_realm_spm.c
index c6fe4e2..ccf90d4 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_spm.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_spm.c
@@ -56,7 +56,7 @@
/*
* Initialise Realm payload
*/
- if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),