feat(timer): support PPI timer interrupts
Add support for timers that use a PPI as timer interrupt. A new
function, tftf_initialise_timer_secondary_core(), is added to initialize
the PPI on the secondary CPUs from tftf_warm_boot_main().
Change-Id: Ia343ce10b0b51e72b9e520b1fab0ea7ba0a43f2c
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/tftf/framework/timer/timer_framework.c b/tftf/framework/timer/timer_framework.c
index 49fd07f..46fe987 100644
--- a/tftf/framework/timer/timer_framework.c
+++ b/tftf/framework/timer/timer_framework.c
@@ -96,6 +96,14 @@
return 0;
}
+void tftf_initialise_timer_secondary_core(void)
+{
+ if (!IS_SPI(TIMER_IRQ)) {
+ arm_gic_set_intr_priority(TIMER_IRQ, GIC_HIGHEST_NS_PRIORITY);
+ arm_gic_intr_enable(TIMER_IRQ);
+ }
+}
+
/*
* It returns the core number of next timer request to be serviced or
* -1 if there is no request from any core. The next service request
@@ -179,7 +187,9 @@
if ((!get_current_prog_time()) || (interrupt_req_time[core_pos] <
(get_current_prog_time() - TIMER_STEP_VALUE))) {
- arm_gic_set_intr_target(TIMER_IRQ, core_pos);
+ if (IS_SPI(TIMER_IRQ)) {
+ arm_gic_set_intr_target(TIMER_IRQ, core_pos);
+ }
rc = PROGRAM_TIMER(time_out_ms);
/* We don't expect timer programming to fail */