qemu/hw/arm
Peter Maydell 1ec896fe7c hw/arm/virt: Wire up non-secure EL2 virtual timer IRQ
Armv8.1+ CPUs have the Virtual Host Extension (VHE) which adds a
non-secure EL2 virtual timer.  We implemented the timer itself in the
CPU model, but never wired up its IRQ line to the GIC.

Wire up the IRQ line (this is always safe whether the CPU has the
interrupt or not, since it always creates the outbound IRQ line).
Report it to the guest via dtb and ACPI if the CPU has the feature.

The DTB binding is documented in the kernel's
Documentation/devicetree/bindings/timer/arm\,arch_timer.yaml
and the ACPI table entries are documented in the ACPI specification
version 6.3 or later.

Because the IRQ line ACPI binding is new in 6.3, we need to bump the
FADT table rev to show that we might be using 6.3 features.

Note that exposing this IRQ in the DTB will trigger a bug in EDK2
versions prior to edk2-stable202311, for users who use the virt board
with 'virtualization=on' to enable EL2 emulation and are booting an
EDK2 guest BIOS, if that EDK2 has assertions enabled.  The effect is
that EDK2 will assert on bootup:

 ASSERT [ArmTimerDxe] /home/kraxel/projects/qemu/roms/edk2/ArmVirtPkg/Library/ArmVirtTimerFdtClientLib/ArmVirtTimerFdtClientLib.c(72): PropSize == 36 || PropSize == 48

If you see that assertion you should do one of:
 * update your EDK2 binaries to edk2-stable202311 or newer
 * use the 'virt-8.2' versioned machine type
 * not use 'virtualization=on'

(The versions shipped with QEMU itself have the fix.)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Message-id: 20240122143537.233498-3-peter.maydell@linaro.org
2024-02-15 11:31:52 +00:00
..
allwinner-a10.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
allwinner-h3.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
allwinner-r40.c hw/arm/allwinner: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
armsse.c hw: Simplify accesses to the CPUState::'start-powered-off' property 2024-01-05 16:20:15 +01:00
armv7m.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
aspeed_ast10x0.c hw/arm/aspeed: Check for CPU types in machine_run_board_init() 2024-02-01 08:13:30 +01:00
aspeed_ast2400.c hw/arm/aspeed: Check for CPU types in machine_run_board_init() 2024-02-01 08:13:30 +01:00
aspeed_ast2600.c hw/arm: Hook up FSI module in AST2600 2024-02-01 08:33:18 +01:00
aspeed_eeprom.c aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
aspeed_eeprom.h aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
aspeed_soc_common.c hw/arm/aspeed: Check for CPU types in machine_run_board_init() 2024-02-01 08:13:30 +01:00
aspeed.c hw/arm/aspeed: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
b-l475e-iot01a.c hw/arm: Add minimal support for the B-L475E-IOT01A board 2024-01-09 14:42:40 +00:00
bananapi_m2u.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
bcm2835_peripherals.c hw/arm: Connect SPI Controller to BCM2835 2024-02-02 13:51:59 +00:00
bcm2836.c target/arm: Move GTimer definitions to new 'gtimer.h' header 2024-01-26 11:30:49 +00:00
boot.c target/arm/arm-powerctl: Correctly init CPUs when powered on to lower EL 2023-10-19 14:32:13 +01:00
collie.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
cubieboard.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
digic_boards.c hw/arm: Don't include qemu-common.h unnecessarily 2021-12-15 10:35:26 +00:00
digic.c arm/digic: replace snprintf() with g_strdup_printf() 2022-04-21 17:03:51 +04:00
exynos4_boards.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
exynos4210.c hw/arm/exynos: Add missing QOM parent for CPU cores 2024-02-02 13:51:58 +00:00
fby35.c hw/arm/aspeed: Move AspeedSoCState::a7mpcore to Aspeed2600SoCState 2023-10-25 09:52:44 +02:00
fsl-imx6.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx6ul.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx7.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx25.c hw/arm/fsl: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
fsl-imx31.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
gumstix.c hw/net/smc91c111: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
highbank.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
imx25_pdk.c hw/arm/fsl-imx25: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
integratorcp.c hw/net/smc91c111: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
Kconfig hw/arm: Connect SPI Controller to BCM2835 2024-02-02 13:51:59 +00:00
kzm.c hw/net/lan9118: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mainstone.c hw/net/smc91c111: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mcimx6ul-evk.c hw/arm/fsl-imx6ul: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
mcimx7d-sabre.c hw/arm/fsl-imx7: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
meson.build hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
microbit.c target/arm: Make boards pass base address to armv7m_load_kernel() 2022-09-14 11:19:40 +01:00
mps2-tz.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
mps2.c hw/net/lan9118: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
msf2-soc.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
msf2-som.c hw/arm/msf2: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
musca.c hw/arm/musca: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
musicpal.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
netduino2.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
netduinoplus2.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
npcm7xx_boards.c hw/arm/npcm7xx_boards: Simplify setting MachineClass::valid_cpu_types[] 2024-02-02 13:51:58 +00:00
npcm7xx.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
nrf51_soc.c hw: Simplify memory_region_init_ram() calls 2024-01-05 16:20:15 +01:00
nseries.c hw/arm/nseries: Unconditionally map the TUSB6010 USB Host controller 2024-01-26 11:30:47 +00:00
olimex-stm32-h405.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
omap1.c target/arm: Move ARM_CPU_IRQ/FIQ definitions to 'cpu-qom.h' header 2024-01-26 11:30:49 +00:00
omap2.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
omap_sx1.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
orangepi.c hw/arm: Check CPU type in machine_run_board_init() 2024-01-05 16:20:15 +01:00
palm.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
pxa2xx_gpio.c hw/arm: Constify VMState 2023-12-29 11:17:30 +11:00
pxa2xx_pic.c hw/arm: Constify VMState 2023-12-29 11:17:30 +11:00
pxa2xx.c hw/arm: Constify VMState 2023-12-29 11:17:30 +11:00
raspi.c hw/arm/raspi: Use arm_write_bootloader() to write boot code 2023-05-02 15:47:41 +01:00
realview.c hw/net/lan9118: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
sabrelite.c hw/arm/fsl-imx6: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
sbsa-ref.c hw/arm/sbsa-ref: use pci_init_nic_devices() 2024-02-02 16:23:47 +00:00
smmu-common.c smmu: Clear SMMUPciBus pointer cache when system reset 2024-02-14 06:09:32 -05:00
smmu-internal.h hw/arm/smmuv3: Add VMID to TLB tagging 2023-05-30 15:50:16 +01:00
smmuv3-internal.h hw/arm/smmuv3: Include missing 'hw/registerfields.h' header 2024-01-26 11:30:48 +00:00
smmuv3.c hw/arm/smmuv3: Consolidate the use of device_class_set_parent_realize() 2024-02-13 10:59:25 +03:00
spitz.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
stellaris.c hw/arm/stellaris: use qemu_find_nic_info() 2024-02-02 16:23:47 +00:00
stm32f100_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32f205_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32f405_soc.c hw/arm/socs: configure priority bits for existing SOCs 2024-01-09 14:42:40 +00:00
stm32l4x5_soc.c hw/arm: Connect STM32L4x5 SYSCFG to STM32L4x5 SoC 2024-01-15 17:12:22 +00:00
stm32vldiscovery.c hw/arm: Add missing QOM parent for v7-M SoCs 2024-01-09 14:42:40 +00:00
strongarm.c hw/arm/strongarm.c: convert DPRINTF to trace events and guest errors 2024-02-02 13:51:58 +00:00
strongarm.h hw/arm/collie: Create the RAM in the board 2019-10-22 17:44:01 +01:00
tosa.c hw/arm/pxa2xx: Simplify pxa255_init() 2023-01-12 17:03:14 +00:00
trace-events hw/arm/xen_arm.c: convert DPRINTF to trace events and error/warn reports 2024-02-02 13:51:59 +00:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
versatilepb.c hw/net/smc91c111: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
vexpress.c target/arm: fix exception syndrome for AArch32 bkpt insn 2024-02-02 18:56:32 +00:00
virt-acpi-build.c hw/arm/virt: Wire up non-secure EL2 virtual timer IRQ 2024-02-15 11:31:52 +00:00
virt.c hw/arm/virt: Wire up non-secure EL2 virtual timer IRQ 2024-02-15 11:31:52 +00:00
xen_arm.c hw/arm/xen_arm.c: convert DPRINTF to trace events and error/warn reports 2024-02-02 13:51:59 +00:00
xilinx_zynq.c hw/arm/xilinx_zynq: Wire FIQ between CPU <> GIC 2024-02-15 11:30:43 +00:00
xlnx-versal-virt.c hw/arm: Build various units only once 2024-01-26 11:30:49 +00:00
xlnx-versal.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
xlnx-zcu102.c hw/arm/xlnx-zynqmp: Remove 'hw/arm/boot.h' from header 2023-10-27 12:42:13 +01:00
xlnx-zynqmp.c hw/arm: use qemu_configure_nic_device() 2024-02-02 16:23:47 +00:00
z2.c hw/arm/z2: convert DPRINTF to trace events and guest errors 2024-02-02 13:51:58 +00:00