feat(fvp): set the timer IRQ number depending on GIC version

Change-Id: I8039ee2104effdf052141e52059d45675ca09127
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
diff --git a/plat/arm/common/arm_timers.c b/plat/arm/common/arm_timers.c
index f43fdaa..35171c9 100644
--- a/plat/arm/common/arm_timers.c
+++ b/plat/arm/common/arm_timers.c
@@ -1,10 +1,11 @@
 /*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2025, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
 #include <assert.h>
+#include <drivers/arm/gic_v5.h>
 #include <drivers/arm/system_timer.h>
 #include <platform.h>
 #include <stddef.h>
@@ -12,12 +13,11 @@
 
 #pragma weak plat_initialise_timer_ops
 
-static const plat_timer_t plat_timers = {
+static plat_timer_t plat_timers = {
 	.program = program_systimer,
 	.cancel = cancel_systimer,
 	.handler = handler_systimer,
 	.timer_step_value = 2,
-	.timer_irq = IRQ_CNTPSIRQ1
 };
 
 int plat_initialise_timer_ops(const plat_timer_t **timer_ops)
@@ -25,6 +25,20 @@
 	assert(timer_ops != NULL);
 	*timer_ops = &plat_timers;
 
+	/*
+	 * on GICv2/3 platforms give the INTID verbatim (eg SPI 60, ie. INTID
+	 * 92) although can be a PPI too
+	 * on GICv5 take the same SPI ID but re-use the GICv3 macro for
+	 * compatibility.
+	 * TODO: currently unclear how non-fvp platforms will use this; refactor
+	 * to work elsewhere.
+	 */
+	if (arm_gic_get_version() != 5) {
+		plat_timers.timer_irq = IRQ_CNTPSIRQ1;
+	} else {
+		plat_timers.timer_irq = (IRQ_CNTPSIRQ1 - 32) | INPLACE(INT_TYPE, INT_SPI);
+	}
+
 	/* Initialise the system timer */
 	init_systimer(SYS_CNT_BASE1);