Merge changes from topic "kc/stmm"
* changes:
refactor: move StMM to cactus tertiary
feat(hob): add boot-time prints for cactus-stmm HOB list
refactor(cactus): map boot information regions
feat(hob): add HOB definitions to TFTF
feat(spm): add STMM cactus partition
diff --git a/include/lib/pcie/pcie.h b/include/lib/pcie/pcie.h
index 65e0202..d7188a0 100644
--- a/include/lib/pcie/pcie.h
+++ b/include/lib/pcie/pcie.h
@@ -48,10 +48,10 @@
uint32_t rp_bar32_value;
} pcie_bar_init_t;
-#define PCIE_EXTRACT_BDF_SEG(bdf) ((bdf >> 24) & 0xFF)
-#define PCIE_EXTRACT_BDF_BUS(bdf) ((bdf >> 16) & 0xFF)
-#define PCIE_EXTRACT_BDF_DEV(bdf) ((bdf >> 8) & 0xFF)
-#define PCIE_EXTRACT_BDF_FUNC(bdf) (bdf & 0xFF)
+#define PCIE_EXTRACT_BDF_SEG(bdf) ((bdf >> 16) & 0xFF)
+#define PCIE_EXTRACT_BDF_BUS(bdf) ((bdf >> 8) & 0xFF)
+#define PCIE_EXTRACT_BDF_DEV(bdf) ((bdf >> 3) & 0x1F)
+#define PCIE_EXTRACT_BDF_FUNC(bdf) (bdf & 0x7)
/* PCI-compatible region */
#define PCI_CMP_CFG_SIZE 256
@@ -64,7 +64,7 @@
#define PCIE_MAX_FUNC 8
#define PCIE_CREATE_BDF(Seg, Bus, Dev, Func) \
- ((Seg << 24) | (Bus << 16) | (Dev << 8) | Func)
+ ((Seg << 16) | (Bus << 8) | (Dev << 3) | Func)
#define PCIE_SUCCESS 0x00000000 /* Operation completed successfully */
#define PCIE_NO_MAPPING 0x10000001 /* A mapping to a Function does not exist */
diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h
index 1a51823..8103335 100644
--- a/include/plat/common/platform.h
+++ b/include/plat/common/platform.h
@@ -201,4 +201,16 @@
*/
const struct pcie_info_table *plat_pcie_get_info_table(void);
+/*
+ * This function provides an address that is recognized as invalid for use
+ * as an entry point in the CPU_ON and CPU_SUSPEND calls on this platform.
+ * To be considered invalid, the address must fall within a range that is
+ * not accessible to the caller.
+ *
+ * Typically, most platforms designate address 0 for this purpose. However,
+ * on platforms where address 0 is a valid entry point, this function can
+ * be designed to return an alternative address.
+ */
+uintptr_t plat_get_invalid_addr(void);
+
#endif /* __PLATFORM_H__ */
diff --git a/include/runtime_services/host_realm_managment/host_realm_helper.h b/include/runtime_services/host_realm_managment/host_realm_helper.h
index 6ea9b72..e27cfd5 100644
--- a/include/runtime_services/host_realm_managment/host_realm_helper.h
+++ b/include/runtime_services/host_realm_managment/host_realm_helper.h
@@ -7,6 +7,7 @@
#define HOST_REALM_HELPER_H
#include <stdlib.h>
+#include <debug.h>
#include <host_realm_rmi.h>
#include <tftf_lib.h>
@@ -15,7 +16,8 @@
*/
bool host_prepare_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
- u_register_t feature_flag,
+ u_register_t feature_flag0,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -27,7 +29,8 @@
*/
bool host_create_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
- u_register_t feature_flag,
+ u_register_t feature_flag0,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -39,7 +42,8 @@
*/
bool host_create_activate_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
- u_register_t feature_flag,
+ u_register_t feature_flag0,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -59,4 +63,21 @@
*/
void host_realm_set_aux_plane_args(struct realm *realm_ptr, unsigned int plane_num);
+static inline bool is_single_rtt_supported(void)
+{
+ u_register_t feature_flag;
+
+ /* Read Realm Feature Reg 0 */
+ if (host_rmi_features(0UL, &feature_flag) != REALM_SUCCESS) {
+ ERROR("%s() failed\n", "host_rmi_features");
+ return false;
+ }
+
+ if (EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) != RMI_PLANE_RTT_AUX) {
+ return true;
+ }
+
+ return false;
+}
+
#endif /* HOST_REALM_HELPER_H */
diff --git a/include/runtime_services/host_realm_managment/host_realm_rmi.h b/include/runtime_services/host_realm_managment/host_realm_rmi.h
index 6394fb6..771a125 100644
--- a/include/runtime_services/host_realm_managment/host_realm_rmi.h
+++ b/include/runtime_services/host_realm_managment/host_realm_rmi.h
@@ -498,7 +498,8 @@
#define RMI_REALM_FLAGS0_DA BIT(3)
/* RmiRealmFlags1 format */
-#define RMI_REALM_FLAGS1_RTT_TREE_PP BIT(0)
+#define RMI_REALM_FLAGS1_RTT_TREE_PP BIT(0)
+#define RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT BIT(1)
/* RmiInterfaceVersion type */
#define RMI_MAJOR_VERSION 0U
@@ -582,6 +583,8 @@
#define RMI_FEATURE_REGISTER_0_MAX_NUM_AUX_PLANES_SHIFT 45UL
#define RMI_FEATURE_REGISTER_0_MAX_NUM_AUX_PLANES_WIDTH 4UL
+#define RMI_FEATURE_REGISTER_0_RTT_S2AP_INDIRECT BIT(50)
+
/* Possible values for RmiPlaneRttFeature */
#define RMI_PLANE_RTT_AUX 0UL
#define RMI_PLANE_RTT_AUX_SINGLE 1UL
@@ -671,6 +674,26 @@
#define OA_50_51_MASK MASK(OA_50_51)
/*
+ * When FEAT_S2PIE is enabled PIINDEX is saved at following index
+ */
+#define S2TTE_PI_INDEX_BIT0_SHIFT 6
+#define S2TTE_PI_INDEX_BIT1_SHIFT 51
+#define S2TTE_PI_INDEX_BIT2_SHIFT 53
+#define S2TTE_PI_INDEX_BIT3_SHIFT 54
+#define S2TTE_PI_INDEX_MASK ((1UL << S2TTE_PI_INDEX_BIT0_SHIFT) | \
+ (1UL << S2TTE_PI_INDEX_BIT1_SHIFT) | \
+ (1UL << S2TTE_PI_INDEX_BIT2_SHIFT) | \
+ (1UL << S2TTE_PI_INDEX_BIT3_SHIFT))
+/*
+ * RmiUnprotectedS2AP type
+ * Encoding for S2AP base index value for UNPROTECTED IPA
+ */
+#define RMI_PERM_S2AP_NO_ACCESS_IDX U(0)
+#define RMI_PERM_S2AP_RO_IDX U(1)
+#define RMI_PERM_S2AP_WO_IDX U(2)
+#define RMI_PERM_S2AP_RW_IDX U(3)
+
+/*
* The Realm attribute parameters are shared by the Host via
* RMI_REALM_CREATE::params_ptr. The values can be observed or modified
* either by the Host or by the Realm.
@@ -1120,6 +1143,7 @@
bool payload_created;
bool shared_mem_created;
bool rtt_tree_single;
+ bool rtt_s2ap_enc_indirect;
unsigned short vmid;
enum realm_state state;
long start_level;
diff --git a/plat/common/plat_common.c b/plat/common/plat_common.c
index a4195c3..da58579 100644
--- a/plat/common/plat_common.c
+++ b/plat/common/plat_common.c
@@ -25,6 +25,7 @@
#pragma weak tftf_plat_reset
#pragma weak plat_get_prot_regions
#pragma weak plat_pcie_get_info_table
+#pragma weak plat_get_invalid_addr
#if IMAGE_TFTF
@@ -154,3 +155,8 @@
{
return NULL;
}
+
+uintptr_t plat_get_invalid_addr(void)
+{
+ return (uintptr_t)0x0;
+}
diff --git a/plat/xilinx/versal/include/platform_def.h b/plat/xilinx/versal/include/platform_def.h
index 73b6db2..1e6bd5d 100644
--- a/plat/xilinx/versal/include/platform_def.h
+++ b/plat/xilinx/versal/include/platform_def.h
@@ -39,6 +39,11 @@
#define DRAM_BASE U(0x0)
#define DRAM_SIZE U(0x80000000)
+/*******************************************************************************
+ * LOW DDR MAX defines
+ ******************************************************************************/
+#define PLAT_DDR_LOWMEM_MAX U(0x80000000)
+
/*
* TFTF_NVM_OFFSET/SIZE correspond to the NVM partition in the partition
* table
diff --git a/plat/xilinx/versal/versal_setup.c b/plat/xilinx/versal/versal_setup.c
index 35589ab..fb952f9 100644
--- a/plat/xilinx/versal/versal_setup.c
+++ b/plat/xilinx/versal/versal_setup.c
@@ -79,3 +79,8 @@
{
return mmap;
}
+
+uintptr_t plat_get_invalid_addr(void)
+{
+ return (uintptr_t)PLAT_DDR_LOWMEM_MAX;
+}
diff --git a/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c b/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
index e73fe0d..7d1a246 100644
--- a/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
+++ b/tftf/tests/runtime_services/host_realm_managment/host_realm_helper.c
@@ -122,6 +122,7 @@
bool host_prepare_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
u_register_t feature_flag,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -160,18 +161,29 @@
}
realm_ptr->rtt_tree_single = false;
- if (num_aux_planes > 0U) {
- if (EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) >=
- RMI_PLANE_RTT_SINGLE) {
- ERROR("S2POE not suported on TFTF\n");
- return false;
- }
+ realm_ptr->rtt_s2ap_enc_indirect = false;
- /*
- * @TODO: once S2POE is supported, this should be a parameter
- * so it can be tested with and without support for auxiliary
- * tables.
- */
+ if (num_aux_planes > 0U) {
+ if ((EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, feature_flag) ==
+ RMI_PLANE_RTT_SINGLE)) {
+ if ((EXTRACT(RMI_FEATURE_REGISTER_0_PLANE_RTT, realm_ptr->rmm_feat_reg0) ==
+ RMI_PLANE_RTT_AUX)) {
+ ERROR("%s() failed\n",
+ "Single RTT for multiple planes not support by RMM");
+ return false;
+ } else {
+ realm_ptr->rtt_tree_single = true;
+ }
+ }
+ }
+
+ if ((feature_flag1 & RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT) != 0U) {
+ if ((realm_ptr->rmm_feat_reg0 & RMI_FEATURE_REGISTER_0_RTT_S2AP_INDIRECT) == 0UL) {
+ ERROR("%s() failed\n", "S2AP Indirect Encoding not suported");
+ return false;
+ } else {
+ realm_ptr->rtt_s2ap_enc_indirect = true;
+ }
}
/* Disable PMU if not required */
@@ -288,6 +300,7 @@
bool host_create_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
u_register_t feature_flag,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -298,6 +311,7 @@
ret = host_prepare_realm_payload(realm_ptr,
realm_payload_adr,
feature_flag,
+ feature_flag1,
sl,
rec_flag,
rec_count,
@@ -330,6 +344,7 @@
bool host_create_activate_realm_payload(struct realm *realm_ptr,
u_register_t realm_payload_adr,
u_register_t feature_flag,
+ u_register_t feature_flag1,
long sl,
const u_register_t *rec_flag,
unsigned int rec_count,
@@ -341,6 +356,7 @@
ret = host_create_realm_payload(realm_ptr,
realm_payload_adr,
feature_flag,
+ feature_flag1,
sl,
rec_flag,
rec_count,
diff --git a/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c b/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
index 27b03e8..72d0876 100644
--- a/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
+++ b/tftf/tests/runtime_services/host_realm_managment/host_realm_rmi.c
@@ -693,6 +693,16 @@
return REALM_ERROR;
}
+static u_register_t rtt_s2ap_set_pi_index(u_register_t s2tte, u_register_t pi_index)
+{
+ s2tte &= ~S2TTE_PI_INDEX_MASK;
+ s2tte |= INPLACE(S2TTE_PI_INDEX_BIT0, pi_index & 1) |
+ INPLACE(S2TTE_PI_INDEX_BIT1, (pi_index >> 1) & 1) |
+ INPLACE(S2TTE_PI_INDEX_BIT2, (pi_index >> 2) & 1) |
+ INPLACE(S2TTE_PI_INDEX_BIT3, (pi_index >> 3) & 1);
+ return s2tte;
+}
+
u_register_t host_realm_map_unprotected(struct realm *realm,
u_register_t ns_pa,
u_register_t map_size)
@@ -733,7 +743,12 @@
desc = phys;
}
- desc |= S2TTE_ATTR_FWB_WB_RW;
+ if (realm->rtt_s2ap_enc_indirect) {
+ desc |= S2TTE_MEMATTR_FWB_NORMAL_WB;
+ desc = rtt_s2ap_set_pi_index(desc, RMI_PERM_S2AP_RW_IDX);
+ } else {
+ desc |= S2TTE_ATTR_FWB_WB_RW;
+ }
ret = host_rmi_rtt_mapunprotected(rd, map_addr, map_level, desc);
@@ -925,7 +940,7 @@
u_register_t level1;
/* Unmap from all Aux RTT */
- if (!realm->rtt_tree_single) {
+ if (!realm->rtt_s2ap_enc_indirect) {
for (unsigned int tree_index = 1U;
tree_index <= realm->num_aux_planes;
tree_index++) {
@@ -993,7 +1008,7 @@
}
/* RTT_AUX_DESTROY */
- if (!realm->rtt_tree_single) {
+ if (!realm->rtt_s2ap_enc_indirect) {
ret = host_realm_destroy_free_aux_rtt(realm, map_addr,
level);
@@ -1191,8 +1206,13 @@
params->rtt_num_start = 1U;
if (!realm->rtt_tree_single) {
- params->flags1 = RMI_REALM_FLAGS1_RTT_TREE_PP;
+ params->flags1 |= RMI_REALM_FLAGS1_RTT_TREE_PP;
}
+
+ if (realm->rtt_s2ap_enc_indirect) {
+ params->flags1 |= RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+ }
+
params->num_aux_planes = realm->num_aux_planes;
/* Allocate VMID for all planes */
@@ -1366,8 +1386,8 @@
/* AUX MAP NS buffer for all RTTs */
if (!realm->rtt_tree_single) {
- for (unsigned int i = 0U; i < ns_shared_mem_size / PAGE_SIZE; i++) {
- for (unsigned int j = 0U; j < realm->num_aux_planes; j++) {
+ for (unsigned int j = 0U; j < realm->num_aux_planes; j++) {
+ for (unsigned int i = 0U; i < ns_shared_mem_size / PAGE_SIZE; i++) {
u_register_t fail_index, level_pri, state;
ret = host_rmi_rtt_aux_map_unprotected(realm->rd,
@@ -1748,7 +1768,8 @@
}
/* Handle RSI_MEM_SET_PERM_INDEX by P0, return true to return to realm, false to return to host */
-static bool host_realm_handle_s2ap_change(struct realm *realm, struct rmi_rec_run *run)
+static bool host_realm_handle_s2ap_change(struct realm *realm, struct rmi_rec_run *run,
+ u_register_t rec_num)
{
@@ -1759,7 +1780,7 @@
while (new_base != top) {
ret = host_rmi_rtt_set_s2ap(realm->rd,
- realm->rec[0U],
+ realm->rec[rec_num],
new_base,
top, &new_base,
&rtt_tree);
@@ -1862,7 +1883,7 @@
(((((run->exit.esr & ISS_FSC_MASK) >= FSC_L0_TRANS_FAULT) &&
((run->exit.esr & ISS_FSC_MASK) <= FSC_L3_TRANS_FAULT)) ||
((run->exit.esr & ISS_FSC_MASK) == FSC_L_MINUS1_TRANS_FAULT))) &&
- !realm->rtt_tree_single &&
+ !realm->rtt_s2ap_enc_indirect &&
(realm->num_aux_planes > 0U)) {
re_enter_rec = host_realm_handle_perm_fault(realm, run);
@@ -1876,7 +1897,7 @@
is_adr_in_par(realm, run->exit.s2ap_base) &&
(realm->num_aux_planes > 0U)) {
- re_enter_rec = host_realm_handle_s2ap_change(realm, run);
+ re_enter_rec = host_realm_handle_s2ap_change(realm, run, rec_num);
}
if (ret != RMI_SUCCESS) {
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
index 43d9f01..af5a9ac 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_lpa2_tests.c
@@ -22,7 +22,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- 0UL, RTT_MIN_LEVEL_LPA2, rec_flag, 1U, 0U)) {
+ 0UL, 0UL, RTT_MIN_LEVEL_LPA2, rec_flag, 1U, 0U)) {
return TEST_RESULT_SUCCESS;
}
@@ -40,7 +40,7 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 50UL),
+ INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 50UL), 0UL,
RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
return TEST_RESULT_SUCCESS;
}
@@ -66,7 +66,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL),
+ INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL), 0UL,
RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -98,7 +98,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL),
+ INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL), 0UL,
RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -144,18 +144,18 @@
{
u_register_t rec_flag[1] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL);
+ u_register_t feature_flag0 = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 48UL);
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported() == true) {
return TEST_RESULT_SKIPPED;
} else {
- feature_flag |= RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 |= RMI_FEATURE_REGISTER_0_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
+ feature_flag0, 0UL, RTT_MIN_LEVEL, rec_flag, 1U, 0U)) {
return TEST_RESULT_SUCCESS;
}
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
index 7967828..7fb3a1f 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_mpam_tests.c
@@ -15,7 +15,7 @@
bool ret1, ret2;
u_register_t rec_flag[] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
assert((cmd >= REALM_MPAM_ACCESS) && (cmd <= REALM_MPAM_PRESENT));
@@ -24,12 +24,12 @@
SKIP_TEST_IF_FEAT_MPAM_NOT_SUPPORTED();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0UL, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
index 5c3299a..e6a9cd5 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_payload_multiple_rec_tests.c
@@ -48,7 +48,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+ feature_flag, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -115,7 +115,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 3U, 0U)) {
+ feature_flag, 0U, sl, rec_flag, 3U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -241,7 +241,7 @@
bool ret1, ret2;
u_register_t other_mpidr, my_mpidr, ret;
unsigned int cpu_node, rec_count;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[MAX_REC_COUNT];
@@ -251,7 +251,7 @@
assert(rec_count <= MAX_REC_COUNT);
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -260,7 +260,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, rec_count, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, rec_count, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -301,7 +301,6 @@
return host_cmp_result();
}
-
static test_result_t cpu_on_handler(void)
{
bool ret;
@@ -364,7 +363,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, rec_count, 0U)) {
+ feature_flag, 0U, sl, rec_flag, rec_count, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -502,12 +501,12 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+ feature_flag, 0UL, sl, rec_flag, MAX_REC_COUNT, 0U)) {
return TEST_RESULT_FAIL;
}
if (!host_create_activate_realm_payload(&realm2, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag, 0U, sl, rec_flag, 1U, 0U)) {
ret2 = host_destroy_realm(&realm);
return TEST_RESULT_FAIL;
}
@@ -686,7 +685,7 @@
/* Request more event counters than total, expect failure */
if (host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag, 0UL, sl, rec_flag, 1U, 0U)) {
ERROR("Realm create should have failed\n");
host_destroy_realm(&realm);
return TEST_RESULT_FAIL;
@@ -702,7 +701,7 @@
}
ret1 = host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U);
+ feature_flag, 0U, sl, rec_flag, 1U, 0U);
host_destroy_realm(&realm);
if (!get_feat_hpmn0_supported()) {
@@ -727,7 +726,7 @@
/* Prepare realm, create recs later */
if (!host_prepare_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, rec_count, 0U)) {
+ feature_flag, 0UL, sl, rec_flag, rec_count, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -745,7 +744,7 @@
}
ret1 = host_create_activate_realm_payload(&realm1, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, rec_count, 0U);
+ feature_flag, 0U, sl, rec_flag, rec_count, 0U);
if (!ret1) {
goto test_exit;
}
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c b/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
index 9b03393..06e6475 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_payload_tests.c
@@ -58,7 +58,7 @@
bool ret1, ret2;
u_register_t rec_flag[MAX_REC_COUNT];
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
struct rmi_rec_run *run;
@@ -69,7 +69,7 @@
}
if (is_feat_52b_on_4k_2_supported() == true) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -78,7 +78,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 1U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 1U)) {
return TEST_RESULT_FAIL;
}
@@ -112,12 +112,12 @@
* Host cannot enter Aux Planes directly,
* Host will enter P0, P0 will enter aux plane
*/
-test_result_t host_test_realm_create_planes_enter(void)
+test_result_t host_test_realm_create_planes_enter_multiple_rtt(void)
{
bool ret1, ret2;
u_register_t rec_flag[MAX_REC_COUNT];
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
struct rmi_rec_run *run;
@@ -128,7 +128,7 @@
}
if (is_feat_52b_on_4k_2_supported() == true) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -136,8 +136,15 @@
rec_flag[i] = RMI_RUNNABLE;
}
+ /* Test invalid combination Tree per plane with s2ap indirect */
+ if (host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ feature_flag0, RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT,
+ sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+ return TEST_RESULT_FAIL;
+ }
+
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
return TEST_RESULT_FAIL;
}
@@ -176,6 +183,74 @@
}
/*
+ * @Test_Aim@ Test realm payload creation with 3 Aux Planes, enter all Planes
+ * Host cannot enter Aux Planes directly,
+ * Host will enter P0, P0 will enter aux plane
+ */
+test_result_t host_test_realm_create_planes_enter_single_rtt(void)
+{
+ bool ret1, ret2;
+ u_register_t rec_flag = RMI_RUNNABLE;
+ struct realm realm;
+ u_register_t feature_flag0 = 0UL, feature_flag1;
+ long sl = RTT_MIN_LEVEL;
+ struct rmi_rec_run *run;
+
+ SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
+
+ if (!are_planes_supported() || !is_single_rtt_supported()) {
+ return TEST_RESULT_SKIPPED;
+ }
+
+ if (is_feat_52b_on_4k_2_supported() == true) {
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
+ sl = RTT_MIN_LEVEL_LPA2;
+ }
+
+ /* use single RTT for all planes */
+ feature_flag0 |= INPLACE(RMI_FEATURE_REGISTER_0_PLANE_RTT,
+ RMI_PLANE_RTT_SINGLE);
+
+ feature_flag1 = RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+
+ if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
+ feature_flag0, feature_flag1, sl, &rec_flag, 1U, MAX_AUX_PLANE_COUNT)) {
+ return TEST_RESULT_FAIL;
+ }
+
+ /* CMD for Plane N */
+ for (unsigned int j = 1U; j <= MAX_AUX_PLANE_COUNT; j++) {
+ host_shared_data_set_realm_cmd(&realm, REALM_SLEEP_CMD, j, 0U);
+ host_shared_data_set_host_val(&realm, j, 0U,
+ HOST_ARG1_INDEX, SLEEP_TIME_MS);
+ }
+
+ for (unsigned int j = 1U; j <= MAX_AUX_PLANE_COUNT; j++) {
+ run = (struct rmi_rec_run *)realm.run[0U];
+
+ host_realm_set_aux_plane_args(&realm, j);
+ ret1 = host_enter_realm_execute(&realm, REALM_ENTER_PLANE_N_CMD,
+ RMI_EXIT_HOST_CALL, 0U);
+
+ if (run->exit.exit_reason != RMI_EXIT_HOST_CALL) {
+ ERROR("Rec0 error exit=0x%lx ret1=%d HPFAR=0x%lx \
+ esr=0x%lx far=0x%lx\n",
+ run->exit.exit_reason, ret1,
+ run->exit.hpfar,
+ run->exit.esr, run->exit.far);
+ }
+ }
+ ret2 = host_destroy_realm(&realm);
+
+ if (!ret1 || !ret2) {
+ ERROR("%s(): enter=%d destroy=%d\n",
+ __func__, ret1, ret2);
+ return TEST_RESULT_FAIL;
+ }
+ return host_cmp_result();
+}
+
+/*
* @Test_Aim@ Test realm payload creation, execution and destruction iteratively
*/
test_result_t host_test_realm_create_enter(void)
@@ -183,16 +258,22 @@
bool ret1, ret2;
u_register_t rec_flag[MAX_REC_COUNT];
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL, feature_flag1 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
+ if (is_single_rtt_supported()) {
+ /* Use s2ap encoding indirect */
+ INFO("Using S2ap indirect for single plane\n");
+ feature_flag1 = RMI_REALM_FLAGS1_RTT_S2AP_ENCODING_INDIRECT;
+ }
+
for (unsigned int i = 0U; i < MAX_REC_COUNT; i++) {
rec_flag[i] = RMI_RUNNABLE;
}
@@ -202,7 +283,7 @@
unsigned int run_num = (unsigned int)rand() % MAX_REC_COUNT;
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+ feature_flag0, feature_flag1, sl, rec_flag, MAX_REC_COUNT, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -231,18 +312,18 @@
bool ret1, ret2;
u_register_t rec_flag[] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -270,13 +351,13 @@
bool ret1, ret2;
u_register_t rec_flag[MAX_REC_COUNT];
struct realm realm;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -286,7 +367,7 @@
pauth_test_lib_fill_regs_and_template(pauth_keys_before);
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -337,18 +418,18 @@
bool ret1, ret2;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -426,7 +507,7 @@
static test_result_t host_test_realm_pmuv3(uint8_t cmd)
{
struct realm realm;
- u_register_t feature_flag, rmm_feat_reg0;
+ u_register_t feature_flag0, rmm_feat_reg0;
unsigned int num_cnts;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
@@ -443,16 +524,16 @@
num_cnts = EXTRACT(RMI_FEATURE_REGISTER_0_PMU_NUM_CTRS, rmm_feat_reg0);
host_set_pmu_state(&pmu_state);
- feature_flag = RMI_FEATURE_REGISTER_0_PMU_EN |
+ feature_flag0 = RMI_FEATURE_REGISTER_0_PMU_EN |
INPLACE(RMI_FEATURE_REGISTER_0_PMU_NUM_CTRS, num_cnts);
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag |= RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 |= RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -579,14 +660,14 @@
{
bool ret;
u_register_t rec_flag[MAX_REC_COUNT];
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
unsigned int run_rec[MAX_REALM_COUNT], num;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -600,7 +681,7 @@
ret = host_create_activate_realm_payload(&realm[num],
(u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag,
+ feature_flag0, 0U, sl, rec_flag,
MAX_REC_COUNT, 0U);
if (!ret) {
goto destroy_realms;
@@ -655,18 +736,18 @@
struct rmi_rec_run *run;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
u_register_t test_page_num = 3U;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -754,18 +835,18 @@
struct realm realm;
struct rmi_rec_run *run;
u_register_t rec_flag[1] = {RMI_RUNNABLE}, base;
- u_register_t feature_flag = 0U;
+ u_register_t feature_flag0 = 0U;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -825,19 +906,19 @@
struct realm realm;
struct rmi_rec_run *run;
struct rtt_entry rtt;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 2U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -950,7 +1031,7 @@
struct realm realm;
struct rmi_rec_run *run;
struct rtt_entry rtt;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
test_result_t res = TEST_RESULT_FAIL;
u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
@@ -958,12 +1039,12 @@
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 2U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1060,19 +1141,19 @@
struct realm realm;
struct rmi_rec_run *run;
struct rtt_entry rtt;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 2U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1195,19 +1276,19 @@
u_register_t ret, base, esr;
struct realm realm;
struct rtt_entry rtt;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[] = {RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE};
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 4U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 4U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1337,19 +1418,19 @@
struct realm realm;
struct rtt_entry rtt;
struct rmi_rec_run *run;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE};
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 2U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1441,14 +1522,14 @@
{
bool ret1, ret2;
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[MAX_REC_COUNT], dit;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -1457,7 +1538,7 @@
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, MAX_REC_COUNT, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, MAX_REC_COUNT, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1676,18 +1757,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[2U] = {RMI_RUNNABLE, RMI_RUNNABLE}, base;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 2U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 2U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -1862,18 +1943,18 @@
test_result_t test_result = TEST_RESULT_FAIL;
u_register_t rec_flag[] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
goto destroy_realm;
}
@@ -1909,17 +1990,17 @@
{
bool ret1, ret2;
test_result_t res = TEST_RESULT_FAIL;
- u_register_t base_ipa, esr, feature_flag, base;
+ u_register_t base_ipa, esr, feature_flag0, base;
struct realm realm;
u_register_t rec_flag[4U] = {RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE, RMI_RUNNABLE};
struct rmi_rec_run *run;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
- feature_flag = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 0x2CU);
+ feature_flag0 = INPLACE(RMI_FEATURE_REGISTER_0_S2SZ, 0x2CU);
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, RTT_MIN_LEVEL, rec_flag, 4U, 0U)) {
+ feature_flag0, 0U, RTT_MIN_LEVEL, rec_flag, 4U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -2055,18 +2136,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[] = {RMI_RUNNABLE};
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
ERROR("Realm creation failed\n");
goto destroy_realm;
}
@@ -2212,18 +2293,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[] = {RMI_RUNNABLE};
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
ERROR("Realm creation failed\n");
goto destroy_realm;
}
@@ -2387,18 +2468,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[] = {RMI_RUNNABLE};
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
ERROR("Realm creation failed\n");
goto destroy_realm;
}
@@ -2502,18 +2583,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[] = {RMI_RUNNABLE};
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
ERROR("Realm creation failed\n");
goto destroy_realm;
}
@@ -2615,18 +2696,18 @@
struct realm realm;
struct rtt_entry rtt;
u_register_t rec_flag[] = {RMI_RUNNABLE};
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
ERROR("Realm creation failed\n");
goto destroy_realm;
}
@@ -2727,14 +2808,14 @@
u_register_t base;
struct realm realm;
struct rtt_entry rtt;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
SKIP_TEST_IF_DOUBLE_FAULT2_NOT_SUPPORTED();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
@@ -2742,7 +2823,7 @@
if (!host_create_activate_realm_payload(&realm,
(u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, &rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, &rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -2791,18 +2872,18 @@
bool ret1, ret2;
u_register_t rec_flag[] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
@@ -2832,18 +2913,18 @@
bool ret1, ret2;
u_register_t rec_flag[] = {RMI_RUNNABLE};
struct realm realm;
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP();
if (is_feat_52b_on_4k_2_supported()) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (!host_create_activate_realm_payload(&realm, (u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0U, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
diff --git a/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c b/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
index 40e8590..e999cc9 100644
--- a/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
+++ b/tftf/tests/runtime_services/realm_payload/host_realm_simd_common.c
@@ -22,24 +22,24 @@
test_result_t host_create_sve_realm_payload(struct realm *realm, bool sve_en,
uint8_t sve_vq)
{
- u_register_t feature_flag = 0UL;
+ u_register_t feature_flag0 = 0UL;
long sl = RTT_MIN_LEVEL;
u_register_t rec_flag[1] = {RMI_RUNNABLE};
if (is_feat_52b_on_4k_2_supported() == true) {
- feature_flag = RMI_FEATURE_REGISTER_0_LPA2;
+ feature_flag0 = RMI_FEATURE_REGISTER_0_LPA2;
sl = RTT_MIN_LEVEL_LPA2;
}
if (sve_en) {
- feature_flag |= RMI_FEATURE_REGISTER_0_SVE_EN |
+ feature_flag0 |= RMI_FEATURE_REGISTER_0_SVE_EN |
INPLACE(RMI_FEATURE_REGISTER_0_SVE_VL, sve_vq);
}
/* Initialise Realm payload */
if (!host_create_activate_realm_payload(realm,
(u_register_t)REALM_IMAGE_BASE,
- feature_flag, sl, rec_flag, 1U, 0U)) {
+ feature_flag0, 0UL, sl, rec_flag, 1U, 0U)) {
return TEST_RESULT_FAIL;
}
diff --git a/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
index 8d8758b..05dd73d 100644
--- a/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
+++ b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_hotplug/test_psci_hotplug_invalid.c
@@ -164,7 +164,7 @@
* Entry point address argument can be any invalid address.
*/
- psci_ret = tftf_psci_cpu_on(cpu_mpid, 0, 0);
+ psci_ret = tftf_psci_cpu_on(cpu_mpid, plat_get_invalid_addr(), 0);
if (psci_ret != PSCI_E_INVALID_ADDRESS) {
tftf_testcase_printf("CPU:0x%x Expected: %i Actual: %i\n",
cpu_mpid,
diff --git a/tftf/tests/tests-realm-payload.xml b/tftf/tests/tests-realm-payload.xml
index c8747f6..277e6db 100644
--- a/tftf/tests/tests-realm-payload.xml
+++ b/tftf/tests/tests-realm-payload.xml
@@ -8,8 +8,10 @@
<testsuites>
<testsuite name="Realm payload at EL1" description="Test Realm EL1 framework capabilities" >
- <testcase name="Realm Planes execution test"
- function="host_test_realm_create_planes_enter" />
+ <testcase name="Realm Planes execution test with multiple RTTs"
+ function="host_test_realm_create_planes_enter_multiple_rtt" />
+ <testcase name="Realm Planes execution test with S2POE/single RTT"
+ function="host_test_realm_create_planes_enter_single_rtt" />
<testcase name="Realm Planes register read/write test"
function="host_test_realm_create_planes_register_rw" />
<testcase name="Realm EL1 creation and execution test"