Merge "refactor(sdei): refactor SDEI test to align with new SPSR config"
diff --git a/tftf/tests/runtime_services/standard_service/sdei/system_tests/test_sdei_pstate.c b/tftf/tests/runtime_services/standard_service/sdei/system_tests/test_sdei_pstate.c
index 024352e..339e4ba 100644
--- a/tftf/tests/runtime_services/standard_service/sdei/system_tests/test_sdei_pstate.c
+++ b/tftf/tests/runtime_services/standard_service/sdei/system_tests/test_sdei_pstate.c
@@ -100,111 +100,81 @@
if (is_armv8_1_pan_present()) {
printf("PAN Enabled so testing PAN PSTATE bit\n");
+
+ /* Test that the SPAN condition is met.
+ * Unset the SPAN bit
+ */
+ u_register_t old_sctlr = read_sctlr_el2();
+
+ write_sctlr_el2(old_sctlr & ~SCTLR_SPAN_BIT);
+
+ u_register_t old_hcr_el2 = read_hcr_el2();
+
/*
* Check that when the SPAN bit is 0
* the PAN PSTATE bit is maintained
*/
- /* When PAN bit is 0 */
- u_register_t expected_pan = 0;
+ if ((old_hcr_el2 & HCR_TGE_BIT) == 0U) {
+ /*
+ * Check that when the HCR_EL2.TGE != 1
+ * the PAN bit is maintained
+ */
- write_pan(expected_pan);
- ret = sdei_event_signal(read_mpidr_el1());
- if (ret < 0) {
- tftf_testcase_printf("SDEI event signal failed: " \
- "0x%llx\n", ret);
- goto err2;
- }
- sdei_handler_done();
- if (pan != expected_pan) {
- tftf_testcase_printf("PAN PSTATE bit not maintained " \
- "during SDEI event signal\n" \
- "Expected PAN: 0x%lx, " \
- "Actual PAN: 0x%lx\n",
- expected_pan, pan);
- ret = -1;
- goto err1;
- }
+ /* When PAN bit is 0 */
+ u_register_t expected_pan = 0;
+ write_pan(expected_pan);
- /* When PAN bit is 1 */
- expected_pan = PAN_BIT;
- write_pan(expected_pan);
- ret = sdei_event_signal(read_mpidr_el1());
- if (ret < 0) {
- tftf_testcase_printf("SDEI event signal failed: " \
- "0x%llx\n", ret);
- goto err2;
- }
- sdei_handler_done();
- if (pan != expected_pan) {
- tftf_testcase_printf("PAN PSTATE bit not maintained " \
- "during SDEI event signal\n" \
- "Expected PAN: 0x%lx, " \
- "Actual PAN: 0x%lx\n",
- expected_pan, pan);
- ret = -1;
- goto err1;
- }
+ ret = sdei_event_signal(read_mpidr_el1());
+ if (ret < 0) {
+ tftf_testcase_printf("SDEI event signal failed: " \
+ "0x%llx\n", ret);
+ goto err2;
+ }
+ sdei_handler_done();
+ if (pan != expected_pan) {
+ tftf_testcase_printf("PAN PSTATE bit not maintained" \
+ "during SDEI event signal " \
+ "when the SPAN bit is unset and " \
+ "HCR_EL2.TGE != 1 \n" \
+ "Expected PAN: 0x%lx, " \
+ "Actual PAN: 0x%lx\n",
+ expected_pan, pan);
+ ret = -1;
+ goto err1;
+ }
- /* Test that the SPAN condition is met */
- /* Set the SPAN bit */
- u_register_t old_sctlr = read_sctlr_el2();
+ /* When PAN Bit is 1 */
+ expected_pan = PAN_BIT;
+ write_pan(expected_pan);
+ ret = sdei_event_signal(read_mpidr_el1());
+ if (ret < 0) {
+ tftf_testcase_printf("SDEI event signal failed: " \
+ "0x%llx\n", ret);
+ goto err2;
+ }
+ sdei_handler_done();
+ if (pan != expected_pan) {
+ tftf_testcase_printf("PAN PSTATE bit not maintained" \
+ "during SDEI event signal " \
+ "when the SPAN bit is unset and " \
+ "HCR_EL2.TGE != 1 \n" \
+ "Expected PAN: 0x%lx, " \
+ "Actual PAN: 0x%lx\n",
+ expected_pan, pan);
+ ret = -1;
+ goto err1;
+ }
- write_sctlr_el2(old_sctlr & ~SCTLR_SPAN_BIT);
-
- expected_pan = 0;
- /*
- * Check that when the HCR_EL2.{E2H, TGE} != {1, 1}
- * the PAN bit is maintained
- */
- ret = sdei_event_signal(read_mpidr_el1());
- if (ret < 0) {
- tftf_testcase_printf("SDEI event signal failed: " \
- "0x%llx\n", ret);
- goto err2;
- }
- sdei_handler_done();
- if (pan != expected_pan) {
- tftf_testcase_printf("PAN PSTATE bit not maintained " \
- "during SDEI event signal " \
- "when the SPAN bit is set and " \
- "HCR_EL2.{E2H, TGE} != {1, 1}\n" \
- "Expected PAN: 0x%lx, " \
- "Actual PAN: 0x%lx\n",
- expected_pan, pan);
- ret = -1;
- goto err1;
- }
-
- expected_pan = PAN_BIT;
- write_pan(expected_pan);
- ret = sdei_event_signal(read_mpidr_el1());
- if (ret < 0) {
- tftf_testcase_printf("SDEI event signal failed: " \
- "0x%llx\n", ret);
- goto err2;
- }
- sdei_handler_done();
- if (pan != expected_pan) {
- tftf_testcase_printf("PAN PSTATE bit not maintained " \
- "during SDEI event signal " \
- "when the SPAN bit is set and " \
- "HCR_EL2.{E2H, TGE} != {1, 1}\n" \
- "Expected PAN: 0x%lx, " \
- "Actual PAN: 0x%lx\n",
- expected_pan, pan);
- ret = -1;
- goto err1;
}
/*
- * Check that when the HCR_EL2.{E2H, TGE} = {1, 1}
- * PAN bit is forced to 1
+ * Check that when the HCR_EL2.TGE = 1 and SPAN bit is unset,
+ * PAN bit is forced to 1.
+ * Set the TGE bit
*/
- /* Set E2H Bit */
- u_register_t old_hcr_el2 = read_hcr_el2();
- write_hcr_el2(old_hcr_el2 | HCR_E2H_BIT);
+ write_hcr_el2(old_hcr_el2 | HCR_TGE_BIT);
ret = sdei_event_signal(read_mpidr_el1());
if (ret < 0) {
@@ -215,9 +185,9 @@
sdei_handler_done();
if (pan != PAN_BIT) {
tftf_testcase_printf("PAN PSTATE bit was not forced " \
- "to 1 during SDEI event signal " \
- "when the SPAN bit is set and " \
- "HCR_EL2.{E2H, TGE} = {1, 1}\n");
+ "to 1 during SDEI event signal " \
+ "when the SPAN bit is unset and " \
+ "HCR_EL2.TGE = 1 \n");
ret = -1;
goto err1;
}