diff options
author | Manish Pandey <manish.pandey2@arm.com> | 2021-03-03 11:31:47 +0000 |
---|---|---|
committer | Olivier Deprez <olivier.deprez@arm.com> | 2021-04-13 18:23:31 +0200 |
commit | f7aafefca84b45a4ad607e069fea95fabbdbd3ff (patch) | |
tree | 42ae454785211e19b307a8b8df2d214004422f48 | |
parent | 87d4c70dbf3bed20da5618d78c3a2fef2c28bfcd (diff) | |
download | tf-a-tests-f7aafefca84b45a4ad607e069fea95fabbdbd3ff.tar.gz |
Cactus: add handler from managed exit FIQ interrupt
Change-Id: I6d4a8c39287dc5102e5fca7af1a4c92bb2d8fbc7
Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
-rw-r--r-- | include/runtime_services/spm_common.h | 3 | ||||
-rw-r--r-- | spm/cactus/cactus_interrupt.c | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/include/runtime_services/spm_common.h b/include/runtime_services/spm_common.h index a32e8fb2c..50159ecb8 100644 --- a/include/runtime_services/spm_common.h +++ b/include/runtime_services/spm_common.h @@ -17,6 +17,9 @@ /* ID for the first Secure Partition. */ #define SPM_VM_ID_FIRST SP_ID(1) +/* INTID for the managed exit virtual interrupt. */ +#define MANAGED_EXIT_INTERRUPT_ID U(4) + /** IRQ/FIQ pin used for signaling a virtual interrupt. */ enum interrupt_pin { INTERRUPT_TYPE_IRQ, diff --git a/spm/cactus/cactus_interrupt.c b/spm/cactus/cactus_interrupt.c index 7926a081a..7de36cf0c 100644 --- a/spm/cactus/cactus_interrupt.c +++ b/spm/cactus/cactus_interrupt.c @@ -10,6 +10,20 @@ #include <sp_helpers.h> #include <spm_helpers.h> +#include "cactus_test_cmds.h" +#include "spm_common.h" + +extern ffa_vm_id_t g_ffa_id; + +static void managed_exit_handler(void) +{ + /* + * Real SP will save its context here. + * Send interrupt ID for acknowledgement + */ + cactus_response(g_ffa_id, HYP_ID, MANAGED_EXIT_INTERRUPT_ID); +} + int cactus_irq_handler(void) { uint32_t irq_num; @@ -27,7 +41,11 @@ int cactus_fiq_handler(void) fiq_num = spm_interrupt_get(); - ERROR("%s: Interrupt ID %u not handled!\n", __func__, fiq_num); + if (fiq_num == MANAGED_EXIT_INTERRUPT_ID) { + managed_exit_handler(); + } else { + ERROR("%s: Interrupt ID %u not handled!\n", __func__, fiq_num); + } return 0; } |