This series adds supports for nested virtualisation when using HVF on arm64 Macs.
It has three parts:
- Apple vGICv3 support and necessary infrastructure changes for it
- support for MSI interrupts in GICv3 + GICv2m configurations, which is independent
from Apple platforms and can be merged independently.
- Nested virtualisation support. Note that the nested virtualisation implementation
shipping as of macOS 26.0 is nVHE only, and does not leverage VNCR (FEAT_NV1-style).
Known issues:
- when nested virt is enabled, no UI response within EDK2
and a permanent wait. Workaround: -boot menu=on,splash-time=0. Interrupts do
work later on in Linux.
- This series doesn't contain EL2 physical timer emulation, which is
needed if not leveraging the Apple vGIC.
However, this is usable and there seems to be some interest for it. Hopefully
it'll be at least somewhat useful.
PS: I can step up to maintain HVF support if needed. WHPX arm64 patch series
is coming soon too.
v1->v2:
Oops. I did a mistake when preparing my patches.
- Add hvf_arm_el2_enable(_) call to virt_set_virt
- Fix nested virt support check to add HVF
v2->v3:
- LORC_EL1 patch was merged separately, remove from this series.
- fix LPIs when kernel-irqchip disabled and using TCG
- remove spurious if case in vGIC supported version detection (inapplicable now)
- Add hvf_enabled() check in combination with hvf kernel-irqchip checks
- cleanly fail on attempt to use the platform vGIC together with ITS
v3->v4:
- GIC state save improvements, including saving the opaque Apple-specific state
- Saving HVF system register state when using the vGIC and/or EL2
v5:
- oops, fixed up save/restore to be functional
- misc changes otherwise
Mohamed Mediouni (13):
hvf: switch hvf_arm_get_host_cpu_features to not create a vCPU
accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC
hw/intc: Add hvf vGIC interrupt controller support
hw/arm, target/arm: nested virtualisation on HVF
hvf: save/restore Apple GIC state
target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1
hw/arm: virt: add GICv2m for the case when ITS is not available
hw/arm: virt: cleanly fail on attempt to use the platform vGIC
together with ITS
hvf: only call hvf_sync_vtimer() when running without the platform
vGIC
hvf: sync registers used at EL2
hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2
target/arm: hvf: instantiate GIC early
target/arm: hvf: add asserts for code paths not leveraged when using
the vGIC
accel/hvf/hvf-all.c | 44 +++
accel/stubs/hvf-stub.c | 1 +
hw/arm/virt-acpi-build.c | 4 +-
hw/arm/virt.c | 43 ++-
hw/intc/arm_gicv3_common.c | 3 +
hw/intc/arm_gicv3_hvf.c | 722 +++++++++++++++++++++++++++++++++++++
hw/intc/meson.build | 1 +
include/hw/arm/virt.h | 2 +
include/system/hvf.h | 3 +
system/vl.c | 2 +
target/arm/hvf-stub.c | 15 +
target/arm/hvf/hvf.c | 239 ++++++++++--
target/arm/hvf_arm.h | 3 +
13 files changed, 1049 insertions(+), 33 deletions(-)
create mode 100644 hw/intc/arm_gicv3_hvf.c
--
2.39.5 (Apple Git-154)