summaryrefslogtreecommitdiff
path: root/spm
diff options
context:
space:
mode:
authorMadhukar Pappireddy <madhukar.pappireddy@arm.com>2021-12-17 11:06:17 -0600
committerMadhukar Pappireddy <madhukar.pappireddy@arm.com>2022-03-17 13:14:54 -0500
commit407befcf35d6e62303eceb7efc82610c940c3ef2 (patch)
tree2dfb5135c625f49798b4d059364de3ddac1206fc /spm
parent1208ad5edf9e7be58a2cc0520309ec2e7b7a709c (diff)
refactor(interrupts): enhance secure interrupt handling test
This test makes sure SPMC was able to handle back-to-back secure interrupts targetting Cactus SP while the SP was in RUNNING state. Signed-off-by: Madhukar Pappireddy <madhukar.pappireddy@arm.com> Change-Id: If2e93017e2c21ad91fe527fb140f0fd5e0252370
Diffstat (limited to 'spm')
-rw-r--r--spm/cactus/cactus_tests/cactus_test_interrupts.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/spm/cactus/cactus_tests/cactus_test_interrupts.c b/spm/cactus/cactus_tests/cactus_test_interrupts.c
index ced5dca..2d37f8a 100644
--- a/spm/cactus/cactus_tests/cactus_test_interrupts.c
+++ b/spm/cactus/cactus_tests/cactus_test_interrupts.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021, Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -101,3 +101,34 @@ CACTUS_CMD_HANDLER(twdog_cmd, CACTUS_TWDOG_START_CMD)
return cactus_success_resp(vm_id, source, time_ms);
}
+
+CACTUS_CMD_HANDLER(sleep_twdog_cmd, CACTUS_SLEEP_TRIGGER_TWDOG_CMD)
+{
+ uint64_t time_lapsed;
+ uint32_t sleep_time = cactus_get_sleep_time(*args) / 2;
+ uint64_t time_ms = cactus_get_wdog_trigger_duration(*args);
+
+ VERBOSE("Request to sleep %x for %ums.\n", ffa_dir_msg_dest(*args),
+ sleep_time);
+
+ time_lapsed = sp_sleep_elapsed_time(sleep_time);
+
+ /* Lapsed time should be at least equal to sleep time. */
+ VERBOSE("Sleep complete: %llu\n", time_lapsed);
+
+ VERBOSE("Starting TWDOG: %llums\n", time_ms);
+ sp805_twdog_refresh();
+ sp805_twdog_start((time_ms * ARM_SP805_TWDG_CLK_HZ) / 1000);
+
+ VERBOSE("2nd Request to sleep %x for %ums.\n", ffa_dir_msg_dest(*args),
+ sleep_time);
+
+ time_lapsed += sp_sleep_elapsed_time(sleep_time);
+
+ /* Lapsed time should be at least equal to sleep time. */
+ VERBOSE("2nd Sleep complete: %llu\n", time_lapsed);
+
+ return cactus_response(ffa_dir_msg_dest(*args),
+ ffa_dir_msg_source(*args),
+ time_lapsed);
+}