diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2021-12-17 11:06:17 -0600 |
---|---|---|
committer | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2022-03-17 13:14:54 -0500 |
commit | 407befcf35d6e62303eceb7efc82610c940c3ef2 (patch) | |
tree | 2dfb5135c625f49798b4d059364de3ddac1206fc /spm | |
parent | 1208ad5edf9e7be58a2cc0520309ec2e7b7a709c (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.c | 33 |
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); +} |