Link to branch: https://github.com/mediouni-m/qemu hvf-irqchip-and-nested (tag for this submission: hvf-irqchip-and-nested-v6)
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. To do: - Switching ITS to off by default when using HVF w/ vGIC or WHPX (will probably do when both the series are merged) - After that, perhaps exit if ITS is explicitly enabled. PS: I can step up to maintain HVF support if needed. 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 v6: - Addressing review comments Mohamed Mediouni (13): hw/arm: virt: add GICv2m for the case when ITS is not available 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: 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 | 50 +++ 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 | 723 +++++++++++++++++++++++++++++++++++++ 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 | 240 ++++++++++-- target/arm/hvf_arm.h | 3 + 13 files changed, 1057 insertions(+), 33 deletions(-) create mode 100644 hw/intc/arm_gicv3_hvf.c -- 2.39.5 (Apple Git-154)