[PATCH v2 00/12] KVM: arm64: Add NV timer support

Marc Zyngier
2024-12-17T14:23:26Z

Here's another version of the series initially posted at [1], which
implements support for timers in NV context.

From v1:

- Repainted EL0->EL1 when rambling about the timers

- Simplified access to EL1 counters from HYP context

- Update the status register when handled as an early trap

- Added some documentation about the default PPI numbers

The whole thing has been tested with 6.13-rc3 as part of the my NV
integration branch [2], and is functional enough to run an L3 guest
with kvmtool as the VMM and EDK2 as the firmware. YMMV.

[1] https://lore.kernel.org/r/20241202172134.384923-1-maz@kernel.org
[2] https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/log/?h=kvm-arm64/nv-next

Marc Zyngier (12):
KVM: arm64: nv: Add handling of EL2-specific timer registers
KVM: arm64: nv: Sync nested timer state with FEAT_NV2
KVM: arm64: nv: Publish emulated timer interrupt state in the
in-memory state
KVM: arm64: nv: Use FEAT_ECV to trap access to EL0 timers
KVM: arm64: nv: Accelerate EL0 timer read accesses when FEAT_ECV in
use
KVM: arm64: nv: Accelerate EL0 counter accesses from hypervisor
context
KVM: arm64: Handle counter access early in non-HYP context
KVM: arm64: nv: Add trap routing for
CNTHCTL_EL2.EL1{NVPCT,NVVCT,TVT,TVCT}
KVM: arm64: nv: Propagate CNTHCTL_EL2.EL1NV{P,V}CT bits
KVM: arm64: nv: Sanitise CNTHCTL_EL2
KVM: arm64: Work around x1e's CNTVOFF_EL2 bogosity
KVM: arm64: nv: Document EL2 timer API

Documentation/virt/kvm/devices/vcpu.rst | 15 +-
arch/arm64/include/asm/cputype.h | 2 +
arch/arm64/include/asm/kvm_host.h | 2 +-
arch/arm64/include/asm/sysreg.h | 4 +
arch/arm64/kernel/cpu_errata.c | 8 ++
arch/arm64/kernel/image-vars.h | 3 +
arch/arm64/kvm/arch_timer.c | 179 +++++++++++++++++++++---
arch/arm64/kvm/arm.c | 3 +
arch/arm64/kvm/emulate-nested.c | 58 +++++++-
arch/arm64/kvm/hyp/include/hyp/switch.h | 39 ++++--
arch/arm64/kvm/hyp/nvhe/timer-sr.c | 16 ++-
arch/arm64/kvm/hyp/vhe/switch.c | 107 ++++++++++++++
arch/arm64/kvm/nested.c | 15 ++
arch/arm64/kvm/sys_regs.c | 146 ++++++++++++++++++-
arch/arm64/tools/cpucaps | 1 +
include/clocksource/arm_arch_timer.h | 6 +
include/kvm/arm_arch_timer.h | 23 +++
17 files changed, 580 insertions(+), 47 deletions(-)

--
2.39.2