Merge "plat/sgi: increase number of xlat tables"
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 6886a09..1bfc70f 100644
--- a/include/runtime_services/host_realm_managment/host_realm_helper.h
+++ b/include/runtime_services/host_realm_managment/host_realm_helper.h
@@ -10,21 +10,22 @@
#include <host_realm_rmi.h>
#include <tftf_lib.h>
-bool host_create_realm_payload(u_register_t realm_payload_adr,
+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 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(
+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(void);
-void host_rec_send_sgi(unsigned int sgi, unsigned int rec_num);
-bool host_enter_realm_execute(uint8_t cmd, struct realm **realm_ptr,
- unsigned int test_exit_reason,
- unsigned int rec_num);
+bool host_destroy_realm(struct realm *realm_ptr);
+void host_rec_send_sgi(struct realm *realm_ptr,
+ unsigned int sgi, unsigned int rec_num);
+bool host_enter_realm_execute(struct realm *realm_ptr, uint8_t cmd,
+ int test_exit_reason, unsigned int rec_num);
test_result_t host_cmp_result(void);
void realm_print_handler(unsigned int rec_num);
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 d60e15e..ac6a6f1 100644
--- a/include/runtime_services/host_realm_managment/host_realm_rmi.h
+++ b/include/runtime_services/host_realm_managment/host_realm_rmi.h
@@ -503,25 +503,28 @@
};
struct realm {
- unsigned int rec_count;
- u_register_t par_base;
- u_register_t par_size;
- u_register_t rd;
- u_register_t rtt_addr;
- u_register_t rec[MAX_REC_COUNT];
- u_register_t run[MAX_REC_COUNT];
- u_register_t rec_flag[MAX_REC_COUNT];
- u_register_t mpidr[MAX_REC_COUNT];
- u_register_t host_mpidr[MAX_REC_COUNT];
- u_register_t num_aux;
- u_register_t rmm_feat_reg0;
- u_register_t ipa_ns_buffer;
- u_register_t ns_buffer_size;
- u_register_t aux_pages_all_rec[MAX_REC_COUNT][REC_PARAMS_AUX_GRANULES];
- uint8_t sve_vl;
- uint8_t num_bps;
- uint8_t num_wps;
- uint8_t pmu_num_ctrs;
+ unsigned int rec_count;
+ u_register_t par_base;
+ u_register_t par_size;
+ u_register_t rd;
+ u_register_t rtt_addr;
+ u_register_t rec[MAX_REC_COUNT];
+ u_register_t run[MAX_REC_COUNT];
+ u_register_t rec_flag[MAX_REC_COUNT];
+ u_register_t mpidr[MAX_REC_COUNT];
+ u_register_t host_mpidr[MAX_REC_COUNT];
+ u_register_t num_aux;
+ u_register_t rmm_feat_reg0;
+ u_register_t ipa_ns_buffer;
+ u_register_t ns_buffer_size;
+ u_register_t aux_pages_all_rec[MAX_REC_COUNT][REC_PARAMS_AUX_GRANULES];
+ uint8_t sve_vl;
+ uint8_t num_bps;
+ uint8_t num_wps;
+ uint8_t pmu_num_ctrs;
+ bool payload_created;
+ bool shared_mem_created;
+ unsigned short vmid;
enum realm_state state;
};
diff --git a/realm/realm_rsi.c b/realm/realm_rsi.c
index d82aa6f..ba60ba8 100644
--- a/realm/realm_rsi.c
+++ b/realm/realm_rsi.c
@@ -11,8 +11,6 @@
#include <realm_rsi.h>
#include <smccc.h>
-static struct rsi_host_call host_cal __aligned(sizeof(struct rsi_host_call));
-
/* This function return RSI_ABI_VERSION */
u_register_t rsi_get_version(u_register_t req_ver)
{
@@ -32,6 +30,7 @@
u_register_t rsi_get_ns_buffer(void)
{
smc_ret_values res = {};
+ struct rsi_host_call host_cal __aligned(sizeof(struct rsi_host_call));
host_cal.imm = HOST_CALL_GET_SHARED_BUFF_CMD;
res = tftf_smc(&(smc_args) {RSI_HOST_CALL, (u_register_t)&host_cal,
@@ -45,6 +44,8 @@
/* This function call Host and request to exit Realm with proper exit code */
void rsi_exit_to_host(enum host_call_cmd exit_code)
{
+ struct rsi_host_call host_cal __aligned(sizeof(struct rsi_host_call));
+
host_cal.imm = exit_code;
host_cal.gprs[0] = read_mpidr_el1() & MPID_MASK;
tftf_smc(&(smc_args) {RSI_HOST_CALL, (u_register_t)&host_cal,
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 1ba67ed..9a4f5d9 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
@@ -23,11 +23,6 @@
#include <test_helpers.h>
#include <xlat_tables_v2.h>
-static struct realm realm;
-static bool realm_payload_created;
-static bool shared_mem_created;
-static volatile bool timer_enabled;
-
#define RMI_EXIT(id) \
[RMI_EXIT_##id] = #id
@@ -71,32 +66,34 @@
* and try to find another CPU other than the lead one to
* handle the Realm message logging.
*/
-static void host_init_realm_print_buffer(void)
+static void host_init_realm_print_buffer(struct realm *realm_ptr)
{
host_shared_data_t *host_shared_data;
- for (unsigned int i = 0U; i < realm.rec_count; i++) {
+ for (unsigned int i = 0U; i < realm_ptr->rec_count; i++) {
host_shared_data = host_get_shared_structure(i);
(void)memset((char *)host_shared_data, 0, sizeof(host_shared_data_t));
}
}
-static bool host_enter_realm(u_register_t *exit_reason,
- unsigned int *host_call_result, unsigned int rec_num)
+static bool host_enter_realm(struct realm *realm_ptr,
+ u_register_t *exit_reason,
+ unsigned int *host_call_result,
+ unsigned int rec_num)
{
u_register_t ret;
- if (!realm_payload_created) {
- ERROR("%s() failed\n", "realm_payload_created");
+ if (!realm_ptr->payload_created) {
+ ERROR("%s() failed\n", "payload_created");
return false;
}
- if (!shared_mem_created) {
+ if (!realm_ptr->shared_mem_created) {
ERROR("%s() failed\n", "shared_mem_created");
return false;
}
/* Enter Realm */
- ret = host_realm_rec_enter(&realm, exit_reason, host_call_result, rec_num);
+ ret = host_realm_rec_enter(realm_ptr, exit_reason, host_call_result, rec_num);
if (ret != REALM_SUCCESS) {
ERROR("%s() failed, ret=%lx\n", "host_realm_rec_enter", ret);
return false;
@@ -105,13 +102,14 @@
return true;
}
-bool host_create_realm_payload(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_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)
{
int8_t value;
@@ -135,73 +133,74 @@
ERROR("%s() failed\n", "page_pool_init");
return false;
}
+ memset((char *)realm_ptr, 0U, sizeof(struct realm));
/* Read Realm Feature Reg 0 */
- if (host_rmi_features(0UL, &realm.rmm_feat_reg0) != REALM_SUCCESS) {
+ if (host_rmi_features(0UL, &realm_ptr->rmm_feat_reg0) != REALM_SUCCESS) {
ERROR("%s() failed\n", "host_rmi_features");
return false;
}
/* Disable PMU if not required */
if ((feature_flag & RMI_FEATURE_REGISTER_0_PMU_EN) == 0UL) {
- realm.rmm_feat_reg0 &= ~RMI_FEATURE_REGISTER_0_PMU_EN;
- realm.pmu_num_ctrs = 0U;
+ realm_ptr->rmm_feat_reg0 &= ~RMI_FEATURE_REGISTER_0_PMU_EN;
+ realm_ptr->pmu_num_ctrs = 0U;
} else {
value = EXTRACT(FEATURE_PMU_NUM_CTRS, feature_flag);
if (value != -1) {
- realm.pmu_num_ctrs = (unsigned int)value;
+ realm_ptr->pmu_num_ctrs = (unsigned int)value;
} else {
- realm.pmu_num_ctrs =
+ realm_ptr->pmu_num_ctrs =
EXTRACT(RMI_FEATURE_REGISTER_0_PMU_NUM_CTRS,
- realm.rmm_feat_reg0);
+ realm_ptr->rmm_feat_reg0);
}
}
/* Disable SVE if not required */
if ((feature_flag & RMI_FEATURE_REGISTER_0_SVE_EN) == 0UL) {
- realm.rmm_feat_reg0 &= ~RMI_FEATURE_REGISTER_0_SVE_EN;
- realm.sve_vl = 0U;
+ realm_ptr->rmm_feat_reg0 &= ~RMI_FEATURE_REGISTER_0_SVE_EN;
+ realm_ptr->sve_vl = 0U;
} else {
- realm.sve_vl = EXTRACT(FEATURE_SVE_VL, feature_flag);
+ realm_ptr->sve_vl = EXTRACT(FEATURE_SVE_VL, feature_flag);
}
/* Requested number of breakpoints */
value = EXTRACT(FEATURE_NUM_BPS, feature_flag);
if (value != -1) {
- realm.num_bps = (unsigned int)value;
+ realm_ptr->num_bps = (unsigned int)value;
} else {
- realm.num_bps = EXTRACT(RMI_FEATURE_REGISTER_0_NUM_BPS,
- realm.rmm_feat_reg0);
+ realm_ptr->num_bps = EXTRACT(RMI_FEATURE_REGISTER_0_NUM_BPS,
+ realm_ptr->rmm_feat_reg0);
}
/* Requested number of watchpoints */
value = EXTRACT(FEATURE_NUM_WPS, feature_flag);
if (value != -1) {
- realm.num_wps = (unsigned int)value;
+ realm_ptr->num_wps = (unsigned int)value;
} else {
- realm.num_wps = EXTRACT(RMI_FEATURE_REGISTER_0_NUM_WPS,
- realm.rmm_feat_reg0);
+ realm_ptr->num_wps = EXTRACT(RMI_FEATURE_REGISTER_0_NUM_WPS,
+ realm_ptr->rmm_feat_reg0);
}
/* Set SVE bits from feature_flag */
- realm.rmm_feat_reg0 &= ~(RMI_FEATURE_REGISTER_0_SVE_EN |
+ realm_ptr->rmm_feat_reg0 &= ~(RMI_FEATURE_REGISTER_0_SVE_EN |
MASK(RMI_FEATURE_REGISTER_0_SVE_VL));
if ((feature_flag & RMI_FEATURE_REGISTER_0_SVE_EN) != 0UL) {
- realm.rmm_feat_reg0 |= RMI_FEATURE_REGISTER_0_SVE_EN |
+ realm_ptr->rmm_feat_reg0 |= RMI_FEATURE_REGISTER_0_SVE_EN |
INPLACE(RMI_FEATURE_REGISTER_0_SVE_VL,
EXTRACT(RMI_FEATURE_REGISTER_0_SVE_VL,
feature_flag));
}
- if (realm.rec_count > MAX_REC_COUNT) {
+ if (realm_ptr->rec_count > MAX_REC_COUNT) {
ERROR("Invalid Rec Count\n");
return false;
}
- realm.rec_count = rec_count;
+ realm_ptr->rec_count = rec_count;
for (unsigned int i = 0U; i < rec_count; i++) {
if (rec_flag[i] == RMI_RUNNABLE ||
rec_flag[i] == RMI_NOT_RUNNABLE) {
- realm.rec_flag[i] = rec_flag[i];
+ realm_ptr->rec_flag[i] = rec_flag[i];
} else {
ERROR("Invalid Rec Flag\n");
return false;
@@ -209,84 +208,85 @@
}
/* Create Realm */
- if (host_realm_create(&realm) != REALM_SUCCESS) {
+ if (host_realm_create(realm_ptr) != REALM_SUCCESS) {
ERROR("%s() failed\n", "host_realm_create");
return false;
}
- if (host_realm_init_ipa_state(&realm, 0U, 0U, 1ULL << 32)
+ if (host_realm_init_ipa_state(realm_ptr, 0U, 0U, 1ULL << 32)
!= RMI_SUCCESS) {
ERROR("%s() failed\n", "host_realm_init_ipa_state");
goto destroy_realm;
}
/* RTT map Realm image */
- if (host_realm_map_payload_image(&realm, realm_payload_adr) !=
+ if (host_realm_map_payload_image(realm_ptr, realm_payload_adr) !=
REALM_SUCCESS) {
ERROR("%s() failed\n", "host_realm_map_payload_image");
goto destroy_realm;
}
/* Create REC */
- if (host_realm_rec_create(&realm) != REALM_SUCCESS) {
+ if (host_realm_rec_create(realm_ptr) != REALM_SUCCESS) {
ERROR("%s() failed\n", "host_realm_rec_create");
goto destroy_realm;
}
/* Activate Realm */
- if (host_realm_activate(&realm) != REALM_SUCCESS) {
+ if (host_realm_activate(realm_ptr) != REALM_SUCCESS) {
ERROR("%s() failed\n", "host_realm_activate");
goto destroy_realm;
}
- realm_payload_created = true;
+ realm_ptr->payload_created = true;
- return realm_payload_created;
+ return true;
/* Free test resources */
destroy_realm:
- if (host_realm_destroy(&realm) != REALM_SUCCESS) {
+ if (host_realm_destroy(realm_ptr) != REALM_SUCCESS) {
ERROR("%s() failed\n", "host_realm_destroy");
}
- realm_payload_created = false;
+ realm_ptr->payload_created = false;
- return realm_payload_created;
+ return false;
}
-bool host_create_shared_mem(u_register_t ns_shared_mem_adr,
- u_register_t ns_shared_mem_size)
+bool host_create_shared_mem(struct realm *realm_ptr,
+ u_register_t ns_shared_mem_adr,
+ u_register_t ns_shared_mem_size)
{
/* RTT map NS shared region */
- if (host_realm_map_ns_shared(&realm, ns_shared_mem_adr,
+ 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");
- shared_mem_created = false;
+ realm_ptr->shared_mem_created = false;
return false;
}
memset((void *)ns_shared_mem_adr, 0, (size_t)ns_shared_mem_size);
- host_init_realm_print_buffer();
- shared_mem_created = true;
+ host_init_realm_print_buffer(realm_ptr);
+ realm_ptr->shared_mem_created = true;
- return shared_mem_created;
+ return true;
}
-bool host_destroy_realm(void)
+bool host_destroy_realm(struct realm *realm_ptr)
{
/* Free test resources */
- timer_enabled = false;
page_pool_reset();
- if (!realm_payload_created) {
- ERROR("%s() failed\n", "realm_payload_created");
+ if (!realm_ptr->payload_created) {
+ ERROR("%s() failed\n", "payload_created");
return false;
}
- realm_payload_created = false;
- if (host_realm_destroy(&realm) != REALM_SUCCESS) {
+ 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;
}
@@ -301,30 +301,32 @@
* TEST_RESULT_SUCCESS.
* false: On error.
*/
-bool host_enter_realm_execute(uint8_t cmd, struct realm **realm_ptr,
- unsigned int test_exit_reason,
+bool host_enter_realm_execute(struct realm *realm_ptr,
+ uint8_t cmd,
+ int test_exit_reason,
unsigned int rec_num)
{
u_register_t realm_exit_reason = RMI_EXIT_INVALID;
unsigned int host_call_result = TEST_RESULT_FAIL;
+ if (realm_ptr == NULL || realm_ptr->payload_created == false) {
+ return false;
+ }
+
if (test_exit_reason >= RMI_EXIT_INVALID) {
ERROR("Invalid RmiRecExitReason\n");
return false;
}
- if (rec_num >= realm.rec_count) {
+ if (rec_num >= realm_ptr->rec_count) {
ERROR("Invalid Rec Count\n");
return false;
}
host_shared_data_set_realm_cmd(cmd, rec_num);
- if (!host_enter_realm(&realm_exit_reason, &host_call_result, rec_num)) {
+ if (!host_enter_realm(realm_ptr, &realm_exit_reason, &host_call_result, rec_num)) {
return false;
}
- if (realm_ptr != NULL) {
- *realm_ptr = &realm;
- }
if (test_exit_reason == realm_exit_reason) {
if (realm_exit_reason != RMI_EXIT_HOST_CALL) {
@@ -365,10 +367,11 @@
* Returns Host core position for specified Rec
* Host mpidr is saved on every rec enter
*/
-static unsigned int host_realm_find_core_pos_by_rec(unsigned int rec_num)
+static unsigned int host_realm_find_core_pos_by_rec(struct realm *realm_ptr,
+ unsigned int rec_num)
{
- if (rec_num < MAX_REC_COUNT && realm.run[rec_num] != 0U) {
- return platform_get_core_pos(realm.host_mpidr[rec_num]);
+ if (rec_num < MAX_REC_COUNT && realm_ptr->run[rec_num] != 0U) {
+ return platform_get_core_pos(realm_ptr->host_mpidr[rec_num]);
}
return (unsigned int)-1;
}
@@ -377,9 +380,11 @@
* Send SGI on core running specified Rec
* API can be used to forcefully exit from Realm
*/
-void host_rec_send_sgi(unsigned int sgi, unsigned int rec_num)
+void host_rec_send_sgi(struct realm *realm_ptr,
+ unsigned int sgi,
+ unsigned int rec_num)
{
- unsigned int core_pos = host_realm_find_core_pos_by_rec(rec_num);
+ unsigned int core_pos = host_realm_find_core_pos_by_rec(realm_ptr, rec_num);
if (core_pos < PLATFORM_CORE_COUNT) {
tftf_send_sgi(sgi, core_pos);
}
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 916e848..4df9005 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
@@ -20,6 +20,8 @@
#include <host_shared_data.h>
static uint64_t is_secondary_cpu_on;
+static struct realm realm;
+
/*
* Test tries to create max Rec
* Enters all Rec from single CPU
@@ -32,7 +34,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -40,21 +42,21 @@
0UL, rec_flag, MAX_REC_COUNT)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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(i, HOST_ARG1_INDEX, 10U);
- ret1 = host_enter_realm_execute(REALM_SLEEP_CMD, NULL,
+ ret1 = host_enter_realm_execute(&realm, REALM_SLEEP_CMD,
RMI_EXIT_HOST_CALL, i);
if (!ret1) {
break;
}
}
- ret2 = host_destroy_realm();
+ ret2 = host_destroy_realm(&realm);
if (!ret1 || !ret2) {
ERROR("%s(): enter=%d destroy=%d\n",
@@ -79,7 +81,6 @@
*/
test_result_t host_realm_multi_rec_psci_denied(void)
{
- struct realm *realm_ptr;
bool ret1, ret2;
u_register_t ret;
unsigned int host_call_result;
@@ -91,7 +92,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -99,28 +100,28 @@
0UL, rec_flag, 3U)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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_MULTIPLE_REC_PSCI_DENIED_CMD, &realm_ptr,
+ ret1 = host_enter_realm_execute(&realm, REALM_MULTIPLE_REC_PSCI_DENIED_CMD,
RMI_EXIT_PSCI, 0U);
- run = (struct rmi_rec_run *)realm_ptr->run[0];
+ run = (struct rmi_rec_run *)realm.run[0];
if (run->exit.gprs[0] != SMC_PSCI_CPU_ON_AARCH64) {
ERROR("Host did not receive CPU ON request\n");
ret1 = false;
goto destroy_realm;
}
- rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], realm_ptr);
+ rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], &realm);
if (rec_num != 1U) {
ERROR("Invalid mpidr requested\n");
ret1 = false;
goto destroy_realm;
}
INFO("Requesting PSCI Complete Status Denied REC %d\n", rec_num);
- ret = host_rmi_psci_complete(realm_ptr->rec[0], realm_ptr->rec[rec_num],
+ ret = host_rmi_psci_complete(realm.rec[0], realm.rec[rec_num],
(unsigned long)PSCI_E_DENIED);
if (ret != RMI_SUCCESS) {
ERROR("host_rmi_psci_complete failed\n");
@@ -129,27 +130,27 @@
}
/* Enter rec1, should fail */
- ret = host_realm_rec_enter(realm_ptr, &exit_reason, &host_call_result, 1U);
+ ret = host_realm_rec_enter(&realm, &exit_reason, &host_call_result, 1U);
if (ret == RMI_SUCCESS) {
ERROR("Rec1 enter should have failed\n");
ret1 = false;
goto destroy_realm;
}
- ret = host_realm_rec_enter(realm_ptr, &exit_reason, &host_call_result, 0U);
+ ret = host_realm_rec_enter(&realm, &exit_reason, &host_call_result, 0U);
if (run->exit.gprs[0] != SMC_PSCI_AFFINITY_INFO_AARCH64) {
ERROR("Host did not receive PSCI_AFFINITY_INFO request\n");
ret1 = false;
goto destroy_realm;
}
- rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], realm_ptr);
+ rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], &realm);
if (rec_num != 1U) {
ERROR("Invalid mpidr requested\n");
goto destroy_realm;
}
INFO("Requesting PSCI Complete Affinity Info REC %d\n", rec_num);
- ret = host_rmi_psci_complete(realm_ptr->rec[0], realm_ptr->rec[rec_num],
+ ret = host_rmi_psci_complete(realm.rec[0], realm.rec[rec_num],
(unsigned long)PSCI_E_SUCCESS);
if (ret != RMI_SUCCESS) {
ERROR("host_rmi_psci_complete failed\n");
@@ -158,7 +159,7 @@
}
/* Re-enter REC0 complete PSCI_AFFINITY_INFO */
- ret = host_realm_rec_enter(realm_ptr, &exit_reason, &host_call_result, 0U);
+ ret = host_realm_rec_enter(&realm, &exit_reason, &host_call_result, 0U);
if (run->exit.gprs[0] != SMC_PSCI_CPU_ON_AARCH64) {
@@ -166,7 +167,7 @@
ret1 = false;
goto destroy_realm;
}
- rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], realm_ptr);
+ rec_num = host_realm_find_rec_by_mpidr(run->exit.gprs[1], &realm);
if (rec_num != 2U) {
ERROR("Invalid mpidr requested\n");
ret1 = false;
@@ -175,7 +176,7 @@
INFO("Requesting PSCI Complete Status Denied REC %d\n", rec_num);
/* PSCI_DENIED should fail as rec2 is RMI_RUNNABLE */
- ret = host_rmi_psci_complete(realm_ptr->rec[0], realm_ptr->rec[rec_num],
+ ret = host_rmi_psci_complete(realm.rec[0], realm.rec[rec_num],
(unsigned long)PSCI_E_DENIED);
if (ret == RMI_SUCCESS) {
ret1 = false;
@@ -183,7 +184,7 @@
goto destroy_realm;
}
- ret = host_realm_rec_enter(realm_ptr, &exit_reason, &host_call_result, 0U);
+ ret = host_realm_rec_enter(&realm, &exit_reason, &host_call_result, 0U);
if (ret != RMI_SUCCESS) {
ERROR("Rec0 re-enter failed\n");
ret1 = false;
@@ -191,7 +192,7 @@
}
destroy_realm:
- ret2 = host_destroy_realm();
+ ret2 = host_destroy_realm(&realm);
if (!ret1 || !ret2) {
ERROR("%s(): enter=%d destroy=%d\n",
@@ -213,7 +214,8 @@
is_secondary_cpu_on++;
spin_unlock(&secondary_cpu_lock);
- ret = host_enter_realm_execute(REALM_LOOP_CMD, NULL, RMI_EXIT_IRQ, is_secondary_cpu_on);
+ ret = host_enter_realm_execute(&realm, REALM_LOOP_CMD,
+ RMI_EXIT_IRQ, is_secondary_cpu_on);
if (!ret) {
return TEST_RESULT_FAIL;
}
@@ -233,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((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -241,14 +243,14 @@
0UL, rec_flag, rec_count)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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;
- ret1 = host_enter_realm_execute(REALM_GET_RSI_VERSION, NULL, RMI_EXIT_HOST_CALL, 0U);
+ ret1 = host_enter_realm_execute(&realm, REALM_GET_RSI_VERSION, RMI_EXIT_HOST_CALL, 0U);
for_each_cpu(cpu_node) {
other_mpidr = tftf_get_mpidr_from_node(cpu_node);
if (other_mpidr == my_mpidr) {
@@ -270,10 +272,10 @@
tftf_irq_enable(IRQ_NS_SGI_7, GIC_HIGHEST_NS_PRIORITY);
for (unsigned int i = 1U; i < rec_count; i++) {
INFO("Raising NS IRQ for rec %d\n", i);
- host_rec_send_sgi(IRQ_NS_SGI_7, i);
+ host_rec_send_sgi(&realm, IRQ_NS_SGI_7, i);
}
tftf_irq_disable(IRQ_NS_SGI_7);
- ret2 = host_destroy_realm();
+ ret2 = host_destroy_realm(&realm);
if (!ret1 || !ret2) {
ERROR("%s(): enter=%d destroy=%d\n",
__func__, ret1, ret2);
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 3528319..b6ea5d4 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
@@ -66,6 +66,8 @@
static fpu_cs_regs_t ns_fpu_cs_regs_write;
static fpu_cs_regs_t ns_fpu_cs_regs_read;
+static struct realm realm;
+
/* Skip test if SVE is not supported in H/W or in RMI features */
#define CHECK_SVE_SUPPORT_IN_HW_AND_IN_RMI(_reg0) \
do { \
@@ -97,7 +99,8 @@
}
/* Initialise Realm payload */
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -107,7 +110,7 @@
}
/* Create shared memory between Host and Realm */
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
NS_REALM_SHARED_MEM_SIZE)) {
return TEST_RESULT_FAIL;
}
@@ -170,7 +173,7 @@
return TEST_RESULT_FAIL;
}
- realm_rc = host_enter_realm_execute(REALM_SVE_RDVL, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_RDVL,
RMI_EXIT_HOST_CALL, 0U);
if (realm_rc != true) {
rc = TEST_RESULT_FAIL;
@@ -191,7 +194,7 @@
}
rm_realm:
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -218,7 +221,7 @@
rc = host_create_sve_realm_payload(true, (sve_vq + 1));
if (rc == TEST_RESULT_SUCCESS) {
ERROR("Error: Realm created with invalid SVE VL %u\n", (sve_vq + 1));
- host_destroy_realm();
+ host_destroy_realm(&realm);
return TEST_RESULT_FAIL;
}
@@ -246,7 +249,7 @@
return rc;
}
- realm_rc = host_enter_realm_execute(REALM_SVE_ID_REGISTERS, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_ID_REGISTERS,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
rc = TEST_RESULT_FAIL;
@@ -280,7 +283,7 @@
}
rm_realm:
- host_destroy_realm();
+ host_destroy_realm(&realm);
return rc;
}
@@ -333,7 +336,7 @@
*/
vl_bitmap_expected = sve_probe_vl(sve_vq);
- realm_rc = host_enter_realm_execute(REALM_SVE_PROBE_VL, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_PROBE_VL,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
rc = TEST_RESULT_FAIL;
@@ -356,7 +359,7 @@
}
rm_realm:
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -394,7 +397,7 @@
ns_zcr_el2 = read_zcr_el2();
/* Call Realm to run SVE command */
- realm_rc = host_enter_realm_execute(REALM_SVE_RDVL, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_RDVL,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
ERROR("Realm command REALM_SVE_RDVL failed\n");
@@ -410,7 +413,7 @@
}
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -427,7 +430,7 @@
static bool callback_realm_do_sve(void)
{
- return !host_enter_realm_execute(REALM_SVE_OPS, NULL,
+ return !host_enter_realm_execute(&realm, REALM_SVE_OPS,
RMI_EXIT_HOST_CALL, 0U);
}
@@ -440,7 +443,7 @@
*/
static bool callback_realm_do_fpu(void)
{
- return !host_enter_realm_execute(REALM_REQ_FPU_FILL_CMD, NULL,
+ return !host_enter_realm_execute(&realm, REALM_REQ_FPU_FILL_CMD,
RMI_EXIT_HOST_CALL, 0U);
}
@@ -507,7 +510,7 @@
}
rm_realm:
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -622,7 +625,7 @@
}
/* 4. Call Realm to fill in Z registers */
- realm_rc = host_enter_realm_execute(REALM_SVE_FILL_REGS, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_FILL_REGS,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
rc = TEST_RESULT_FAIL;
@@ -648,7 +651,7 @@
}
rm_realm:
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -672,7 +675,7 @@
return rc;
}
- realm_rc = host_enter_realm_execute(REALM_SVE_UNDEF_ABORT, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_UNDEF_ABORT,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
ERROR("Realm didn't receive undefined abort\n");
@@ -681,7 +684,7 @@
rc = TEST_RESULT_SUCCESS;
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -1007,7 +1010,7 @@
rl_fill_cmd = REALM_REQ_FPU_FILL_CMD;
}
- rc = host_enter_realm_execute(rl_fill_cmd, NULL, RMI_EXIT_HOST_CALL, 0U);
+ rc = host_enter_realm_execute(&realm, rl_fill_cmd, RMI_EXIT_HOST_CALL, 0U);
assert(rc);
return type;
@@ -1025,7 +1028,7 @@
rl_cmp_cmd = REALM_REQ_FPU_CMP_CMD;
}
- return host_enter_realm_execute(rl_cmp_cmd, NULL, RMI_EXIT_HOST_CALL,
+ return host_enter_realm_execute(&realm, rl_cmp_cmd, RMI_EXIT_HOST_CALL,
0U);
}
@@ -1171,7 +1174,7 @@
tftf_smc_set_sve_hint(false);
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
@@ -1197,7 +1200,7 @@
return rc;
}
- realm_rc = host_enter_realm_execute(REALM_SME_ID_REGISTERS, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SME_ID_REGISTERS,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
rc = TEST_RESULT_FAIL;
@@ -1220,7 +1223,7 @@
}
rm_realm:
- host_destroy_realm();
+ host_destroy_realm(&realm);
return rc;
}
@@ -1240,7 +1243,7 @@
return rc;
}
- realm_rc = host_enter_realm_execute(REALM_SME_UNDEF_ABORT, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SME_UNDEF_ABORT,
RMI_EXIT_HOST_CALL, 0U);
if (!realm_rc) {
ERROR("Realm didn't receive undefined abort\n");
@@ -1249,7 +1252,7 @@
rc = TEST_RESULT_SUCCESS;
}
- host_destroy_realm();
+ host_destroy_realm(&realm);
return rc;
}
@@ -1318,13 +1321,12 @@
* SVE support, so run SVE command else run FPU command
*/
if (sve_en) {
- realm_rc = host_enter_realm_execute(REALM_SVE_RDVL, NULL,
+ realm_rc = host_enter_realm_execute(&realm, REALM_SVE_RDVL,
RMI_EXIT_HOST_CALL,
0U);
} else {
- realm_rc = host_enter_realm_execute(
+ realm_rc = host_enter_realm_execute(&realm,
REALM_REQ_FPU_FILL_CMD,
- NULL,
RMI_EXIT_HOST_CALL, 0U);
}
@@ -1357,7 +1359,7 @@
sme_smstop(SMSTOP_SM);
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
return TEST_RESULT_FAIL;
}
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 f2d1861..0c3349d 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
@@ -25,36 +25,39 @@
extern const char *rmi_exit[];
/*
- * @Test_Aim@ Test realm payload creation and execution
+ * @Test_Aim@ Test realm payload creation, execution and destruction iteratively
*/
test_result_t host_test_realm_create_enter(void)
{
bool ret1, ret2;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
+ struct realm realm;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
- (u_register_t)PAGE_POOL_BASE,
- (u_register_t)(PAGE_POOL_MAX_SIZE +
- NS_REALM_SHARED_MEM_SIZE),
- (u_register_t)PAGE_POOL_MAX_SIZE,
- 0UL, rec_flag, 1U)) {
- return TEST_RESULT_FAIL;
- }
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
- NS_REALM_SHARED_MEM_SIZE)) {
- return TEST_RESULT_FAIL;
- }
+ for (unsigned int i = 0U; i < 5U; i++) {
+ 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 +
+ NS_REALM_SHARED_MEM_SIZE),
+ (u_register_t)PAGE_POOL_MAX_SIZE,
+ 0UL, 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(0U, HOST_ARG1_INDEX, SLEEP_TIME_MS);
- ret1 = host_enter_realm_execute(REALM_SLEEP_CMD, NULL, RMI_EXIT_HOST_CALL, 0U);
- ret2 = host_destroy_realm();
+ host_shared_data_set_host_val(0U, HOST_ARG1_INDEX, SLEEP_TIME_MS);
+ ret1 = host_enter_realm_execute(&realm, REALM_SLEEP_CMD, RMI_EXIT_HOST_CALL, 0U);
+ ret2 = host_destroy_realm(&realm);
- if (!ret1 || !ret2) {
- ERROR("%s(): enter=%d destroy=%d\n",
- __func__, ret1, ret2);
- return TEST_RESULT_FAIL;
+ if (!ret1 || !ret2) {
+ ERROR("%s(): enter=%d destroy=%d\n",
+ __func__, ret1, ret2);
+ return TEST_RESULT_FAIL;
+ }
}
return host_cmp_result();
@@ -67,10 +70,11 @@
{
bool ret1, ret2;
u_register_t rec_flag[] = {RMI_RUNNABLE};
+ struct realm realm;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -78,13 +82,13 @@
0UL, rec_flag, 1U)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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_GET_RSI_VERSION, NULL, RMI_EXIT_HOST_CALL, 0U);
- ret2 = host_destroy_realm();
+ ret1 = host_enter_realm_execute(&realm, REALM_GET_RSI_VERSION, RMI_EXIT_HOST_CALL, 0U);
+ ret2 = host_destroy_realm(&realm);
if (!ret1 || !ret2) {
ERROR("%s(): enter=%d destroy=%d\n",
@@ -105,11 +109,12 @@
#else
bool ret1, ret2;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
+ struct realm realm;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
pauth_test_lib_fill_regs_and_template();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -118,20 +123,20 @@
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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_PAUTH_SET_CMD, NULL, RMI_EXIT_HOST_CALL, 0U);
+ ret1 = host_enter_realm_execute(&realm, REALM_PAUTH_SET_CMD, RMI_EXIT_HOST_CALL, 0U);
if (ret1) {
/* Re-enter Realm to compare PAuth registers. */
- ret1 = host_enter_realm_execute(REALM_PAUTH_CHECK_CMD, NULL,
+ ret1 = host_enter_realm_execute(&realm, REALM_PAUTH_CHECK_CMD,
RMI_EXIT_HOST_CALL, 0U);
}
- ret2 = host_destroy_realm();
+ ret2 = host_destroy_realm(&realm);
if (!ret1) {
ERROR("%s(): enter=%d destroy=%d\n",
@@ -160,9 +165,10 @@
#else
bool ret1, ret2;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
+ struct realm realm;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -170,13 +176,13 @@
0UL, rec_flag, 1U)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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_PAUTH_FAULT, NULL, RMI_EXIT_HOST_CALL, 0U);
- ret2 = host_destroy_realm();
+ ret1 = host_enter_realm_execute(&realm, REALM_PAUTH_FAULT, RMI_EXIT_HOST_CALL, 0U);
+ ret2 = host_destroy_realm(&realm);
if (!ret1) {
ERROR("%s(): enter=%d destroy=%d\n",
@@ -248,7 +254,7 @@
*/
static test_result_t host_test_realm_pmuv3(uint8_t cmd)
{
- struct realm *realm_ptr;
+ struct realm realm;
u_register_t feature_flag;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
bool ret1, ret2;
@@ -260,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((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -268,22 +274,22 @@
feature_flag, rec_flag, 1U)) {
return TEST_RESULT_FAIL;
}
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ 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(cmd, &realm_ptr,
+ ret1 = host_enter_realm_execute(&realm, cmd,
(cmd == REALM_PMU_INTERRUPT) ?
RMI_EXIT_IRQ : RMI_EXIT_HOST_CALL, 0U);
if (!ret1 || (cmd != REALM_PMU_INTERRUPT)) {
goto test_exit;
}
- ret1 = host_realm_handle_irq_exit(realm_ptr, 0U);
+ ret1 = host_realm_handle_irq_exit(&realm, 0U);
test_exit:
- ret2 = host_destroy_realm();
+ ret2 = host_destroy_realm(&realm);
if (!ret1 || !ret2) {
ERROR("%s() enter=%u destroy=%u\n", __func__, ret1, ret2);
return TEST_RESULT_FAIL;
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 a187584..6001113 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_spm.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_spm.c
@@ -25,6 +25,7 @@
static fpu_state_t ns_fpu_state_write;
static fpu_state_t ns_fpu_state_read;
+static struct realm realm;
typedef enum security_state {
NONSECURE_WORLD = 0U,
@@ -55,7 +56,7 @@
/*
* Initialise Realm payload
*/
- if (!host_create_realm_payload((u_register_t)REALM_IMAGE_BASE,
+ 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 +
NS_REALM_SHARED_MEM_SIZE),
@@ -66,7 +67,7 @@
/*
* Create shared memory between Host and Realm
*/
- if (!host_create_shared_mem(NS_REALM_SHARED_MEM_BASE,
+ if (!host_create_shared_mem(&realm, NS_REALM_SHARED_MEM_BASE,
NS_REALM_SHARED_MEM_SIZE)) {
return TEST_RESULT_FAIL;
}
@@ -120,7 +121,7 @@
/* Send request to Realm to fill FPU/SIMD regs with realm template values */
static bool fpu_fill_rl(void)
{
- if (!host_enter_realm_execute(REALM_REQ_FPU_FILL_CMD, NULL, RMI_EXIT_HOST_CALL, 0U)) {
+ if (!host_enter_realm_execute(&realm, REALM_REQ_FPU_FILL_CMD, RMI_EXIT_HOST_CALL, 0U)) {
ERROR("%s failed %d\n", __func__, __LINE__);
return false;
}
@@ -130,7 +131,7 @@
/* Send request to Realm to compare FPU/SIMD regs with previous realm template values */
static bool fpu_cmp_rl(void)
{
- if (!host_enter_realm_execute(REALM_REQ_FPU_CMP_CMD, NULL, RMI_EXIT_HOST_CALL, 0U)) {
+ if (!host_enter_realm_execute(&realm, REALM_REQ_FPU_CMP_CMD, RMI_EXIT_HOST_CALL, 0U)) {
ERROR("%s failed %d\n", __func__, __LINE__);
return false;
}
@@ -180,7 +181,6 @@
*/
test_result_t host_realm_sec_interrupt_can_preempt_rl(void)
{
- struct realm *realm_ptr;
struct ffa_value ret_values;
test_result_t res;
@@ -220,12 +220,12 @@
* timer triggers during this time.
*/
host_shared_data_set_host_val(0U, HOST_ARG1_INDEX, REALM_TIME_SLEEP);
- host_enter_realm_execute(REALM_SLEEP_CMD, &realm_ptr, RMI_EXIT_FIQ, 0U);
+ host_enter_realm_execute(&realm, REALM_SLEEP_CMD, RMI_EXIT_FIQ, 0U);
/*
* Check if Realm exit reason is FIQ.
*/
- if (!host_realm_handle_fiq_exit(realm_ptr, 0U)) {
+ if (!host_realm_handle_fiq_exit(&realm, 0U)) {
ERROR("Trusted watchdog timer interrupt not fired\n");
goto destroy_realm;
}
@@ -250,7 +250,7 @@
goto destroy_realm;
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
ERROR("host_destroy_realm error\n");
return TEST_RESULT_FAIL;
}
@@ -258,7 +258,7 @@
return TEST_RESULT_SUCCESS;
destroy_realm:
- host_destroy_realm();
+ host_destroy_realm(&realm);
return TEST_RESULT_FAIL;
}
@@ -404,12 +404,12 @@
}
}
- if (!host_destroy_realm()) {
+ if (!host_destroy_realm(&realm)) {
ERROR("host_destroy_realm error\n");
return TEST_RESULT_FAIL;
}
return TEST_RESULT_SUCCESS;
destroy_realm:
- host_destroy_realm();
+ host_destroy_realm(&realm);
return TEST_RESULT_FAIL;
}