From: Andre Przywara <andre.przywara@arm.com>
To: Will Deacon <will@kernel.org>,
Julien Thierry <julien.thierry.kdev@gmail.com>
Cc: maz@kernel.org, Sascha Bischoff <Sascha.Bischoff@arm.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev,
Alexandru Elisei <alexandru.elisei@arm.com>
Subject: [PATCH kvmtool v7 5/6] arm64: Generate HYP timer interrupt specifiers
Date: Mon, 23 Mar 2026 17:47:16 +0100 [thread overview]
Message-ID: <20260323164717.2571585-6-andre.przywara@arm.com> (raw)
In-Reply-To: <20260323164717.2571585-1-andre.przywara@arm.com>
From: Marc Zyngier <maz@kernel.org>
FEAT_VHE introduced a non-secure EL2 virtual timer, along with its
interrupt line. Consequently the arch timer DT binding introduced a fifth
interrupt to communicate this interrupt number.
Refactor the interrupts property generation code to deal with a variable
number of interrupts, and forward five interrupts instead of four in case
nested virt is enabled.
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Sascha Bischoff <sascha.bischoff@arm.com>
---
arm64/arm-cpu.c | 4 +---
arm64/include/kvm/timer.h | 2 +-
arm64/timer.c | 29 ++++++++++++-----------------
3 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/arm64/arm-cpu.c b/arm64/arm-cpu.c
index 0843ac05..5b5484d8 100644
--- a/arm64/arm-cpu.c
+++ b/arm64/arm-cpu.c
@@ -12,10 +12,8 @@
static void generate_fdt_nodes(void *fdt, struct kvm *kvm)
{
- int timer_interrupts[4] = {13, 14, 11, 10};
-
gic__generate_fdt_nodes(fdt, kvm);
- timer__generate_fdt_nodes(fdt, kvm, timer_interrupts);
+ timer__generate_fdt_nodes(fdt, kvm);
pmu__generate_fdt_nodes(fdt, kvm);
}
diff --git a/arm64/include/kvm/timer.h b/arm64/include/kvm/timer.h
index 928e9ea7..81e093e4 100644
--- a/arm64/include/kvm/timer.h
+++ b/arm64/include/kvm/timer.h
@@ -1,6 +1,6 @@
#ifndef ARM_COMMON__TIMER_H
#define ARM_COMMON__TIMER_H
-void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm, int *irqs);
+void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm);
#endif /* ARM_COMMON__TIMER_H */
diff --git a/arm64/timer.c b/arm64/timer.c
index 861f2d99..2ac6144f 100644
--- a/arm64/timer.c
+++ b/arm64/timer.c
@@ -5,31 +5,26 @@
#include "kvm/timer.h"
#include "kvm/util.h"
-void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm, int *irqs)
+void timer__generate_fdt_nodes(void *fdt, struct kvm *kvm)
{
const char compatible[] = "arm,armv8-timer\0arm,armv7-timer";
u32 cpu_mask = gic__get_fdt_irq_cpumask(kvm);
- u32 irq_prop[] = {
- cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI),
- cpu_to_fdt32(irqs[0]),
- cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW),
+ int irqs[5] = {13, 14, 11, 10, 12};
+ int nr = ARRAY_SIZE(irqs);
+ u32 irq_prop[nr * 3];
- cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI),
- cpu_to_fdt32(irqs[1]),
- cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW),
+ if (!kvm->cfg.arch.nested_virt)
+ nr--;
- cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI),
- cpu_to_fdt32(irqs[2]),
- cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW),
-
- cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI),
- cpu_to_fdt32(irqs[3]),
- cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW),
- };
+ for (int i = 0; i < nr; i++) {
+ irq_prop[i * 3 + 0] = cpu_to_fdt32(GIC_FDT_IRQ_TYPE_PPI);
+ irq_prop[i * 3 + 1] = cpu_to_fdt32(irqs[i]);
+ irq_prop[i * 3 + 2] = cpu_to_fdt32(cpu_mask | IRQ_TYPE_LEVEL_LOW);
+ }
_FDT(fdt_begin_node(fdt, "timer"));
_FDT(fdt_property(fdt, "compatible", compatible, sizeof(compatible)));
- _FDT(fdt_property(fdt, "interrupts", irq_prop, sizeof(irq_prop)));
+ _FDT(fdt_property(fdt, "interrupts", irq_prop, nr * 3 * sizeof(irq_prop[0])));
_FDT(fdt_property(fdt, "always-on", NULL, 0));
if (kvm->cfg.arch.force_cntfrq > 0)
_FDT(fdt_property_cell(fdt, "clock-frequency", kvm->cfg.arch.force_cntfrq));
--
2.43.0
next prev parent reply other threads:[~2026-03-23 16:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-23 16:47 [PATCH kvmtool v7 0/6] arm64: Nested virtualization support Andre Przywara
2026-03-23 16:47 ` [PATCH kvmtool v7 1/6] arm64: Initial nested virt support Andre Przywara
2026-03-23 16:47 ` [PATCH kvmtool v7 2/6] arm64: nested: Add support for setting maintenance IRQ Andre Przywara
2026-04-07 13:47 ` Sascha Bischoff
2026-03-23 16:47 ` [PATCH kvmtool v7 3/6] arm64: Add counter offset control Andre Przywara
2026-03-23 16:47 ` [PATCH kvmtool v7 4/6] arm64: Add FEAT_E2H0 support Andre Przywara
2026-03-23 16:47 ` Andre Przywara [this message]
2026-03-23 16:47 ` [PATCH kvmtool v7 6/6] arm64: Handle virtio endianness reset when running nested Andre Przywara
2026-04-07 13:49 ` Sascha Bischoff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260323164717.2571585-6-andre.przywara@arm.com \
--to=andre.przywara@arm.com \
--cc=Sascha.Bischoff@arm.com \
--cc=alexandru.elisei@arm.com \
--cc=julien.thierry.kdev@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox