Merge "fix(psci): skip PSCI OSI mode tests if not supported"
diff --git a/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_suspend/test_suspend.c b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_suspend/test_suspend.c
index 9946d78..e802d43 100644
--- a/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_suspend/test_suspend.c
+++ b/tftf/tests/runtime_services/standard_service/psci/api_tests/cpu_suspend/test_suspend.c
@@ -445,6 +445,18 @@
false);
}
+static test_result_t check_osi_mode_support(void) {
+ int feat;
+
+ feat = tftf_get_psci_feature_info(SMC_PSCI_CPU_SUSPEND);
+ if (feat < 0)
+ return TEST_RESULT_FAIL;
+ if ((feat & (1 << CPU_SUSPEND_FEAT_OS_INIT_MODE_SHIFT)) == 0)
+ return TEST_RESULT_SKIPPED;
+
+ return TEST_RESULT_SUCCESS;
+}
+
/*
* @Test_Aim@ Suspend to the specified suspend type targeted at affinity level 0
* in OS-initiated mode
@@ -453,6 +465,10 @@
{
int err, rc;
+ err = check_osi_mode_support();
+ if (err != TEST_RESULT_SUCCESS)
+ return err;
+
err = tftf_psci_set_suspend_mode(PSCI_OS_INIT);
if (err != PSCI_E_SUCCESS)
return TEST_RESULT_FAIL;
@@ -498,6 +514,10 @@
tftf_pwr_domain_node_t pd_node;
int err, rc;
+ err = check_osi_mode_support();
+ if (err != TEST_RESULT_SUCCESS)
+ return err;
+
err = test_init(PSTATE_AFF_LVL_1, suspend_type);
if (err != TEST_RESULT_SUCCESS)
return err;
@@ -572,6 +592,10 @@
tftf_pwr_domain_node_t lvl_1_pd_node, lvl_2_pd_node;
int err, rc;
+ err = check_osi_mode_support();
+ if (err != TEST_RESULT_SUCCESS)
+ return err;
+
err = test_init(PSTATE_AFF_LVL_2, suspend_type);
if (err != TEST_RESULT_SUCCESS)
return err;
@@ -655,6 +679,10 @@
return TEST_RESULT_SKIPPED;
}
+ err = check_osi_mode_support();
+ if (err != TEST_RESULT_SUCCESS)
+ return err;
+
/*
* Non-lead CPUs should be suspended, and the lead CPU should
* attempt to supend to level 2. As there is a cpu running in another
@@ -723,6 +751,10 @@
tftf_pwr_domain_node_t lvl_1_pd_node, lvl_2_pd_node, lvl_3_pd_node;
int err, rc;
+ err = check_osi_mode_support();
+ if (err != TEST_RESULT_SUCCESS)
+ return err;
+
err = test_init(PSTATE_AFF_LVL_3, PSTATE_TYPE_POWERDOWN);
if (err != TEST_RESULT_SUCCESS)
return err;