feat(interrupts): delegate group0 interrupt handling to EL3
This patch adds a helper function to delegate handling of Group0
secure interrupt to EL3 firmware using FFA_EL3_INTR_HANDLE SMC
call.
Signed-off-by: Madhukar Pappireddy <madhukar.pappireddy@arm.com>
Change-Id: I46df6b96bb77cccd69011ee8074368d44a7bcd9d
diff --git a/src/arch/aarch64/hypervisor/handler.c b/src/arch/aarch64/hypervisor/handler.c
index 3ef7546..0d38365 100644
--- a/src/arch/aarch64/hypervisor/handler.c
+++ b/src/arch/aarch64/hypervisor/handler.c
@@ -1080,6 +1080,20 @@
#endif
}
+#if SECURE_WORLD == 1
+static void spmd_group0_intr_delegate(void)
+{
+ struct ffa_value ret;
+
+ dlog_verbose("Delegating Group0 interrupt to SPMD\n");
+
+ ret = smc_ffa_call((struct ffa_value){.func = FFA_EL3_INTR_HANDLE_32});
+
+ /* Check if the Group0 interrupt was handled successfully. */
+ CHECK(ret.func == FFA_SUCCESS_32);
+}
+#endif
+
struct vcpu *fiq_lower(void)
{
#if SECURE_WORLD == 1
@@ -1092,10 +1106,11 @@
/* Check for the highest priority pending Group0 interrupt. */
if (intid != SPURIOUS_INTID_OTHER_WORLD) {
- /*
- * TODO: Delegate handling of Group0 interrupt to EL3 firmware.
- */
- panic();
+ /* Delegate handling of Group0 interrupt to EL3 firmware. */
+ spmd_group0_intr_delegate();
+
+ /* Resume current vCPU. */
+ return NULL;
}
/*