This series adds a platform config to support QEMU based virtual machines, either in TCG or KVM mode. These virtual machines declare their platform configuration by passing a device tree which needs to be parsed by Tianocore rather than relying on hardcoded peripherals.
Currently, the only assumptions made with respect to the platform config are: - at least 1 MB of DRAM at 0x4000_0000 - NOR flash at 0x0 - PL011 UART at 0x900_0000 Peripherals detected at runtime: - GIC interrupt controller - timer interrupt line - PL031 RTC - system memory base and size, although changing the base is not currently supported - virtio MMIO transports There are some dependencies on QEMU and KVM changes that are not yet upstream: - QEMU: add -bios param and wire it up to NOR flash banks at 0x0 and 0x400_0000 - QEMU: copy DTB to base of DRAM if no -kernel option is passed - KVM: add support for CAP_READONLY_MEM - KVM: advance PC when resuming guest after a WFI Note that most of the patches are minor ones that make certain peripherals configurable at runtime. The patch 'ArmPlatformPkg: add support for a QEMU/mach-virt target' is the primary patch that implements most of the QEMU/KVM interface logic, most notably parsing of the device tree to set PCDs containing base addresses etc. The code was tested in TCG mode on x64_64 and in TCG and KVM mode on a ARMv8 Foundation Model (software emulator) Ard Biesheuvel (9): Add minimal support for passing a device tree image PeiCore: allow FVs residing at physical address 0x0 ArmPkg: allow dynamically discovered virtual timer interrupt ArmPkg: allow dynamic GIC base addresses ArmPlatformPkg/PrePeiCore: remove GIC related PCDs from unicore ArmPlatformPkg: allow dynamically discovered PL031 RTC ArmPkg,ArmPlatformPkg: allow dynamic PCDs for memory base and size ArmPlatformPkg: add support for a QEMU/mach-virt target AArch64-KVM: add support for non-volatile variable store Michael Casadevall (1): ArmPkg/TimerDxe: allow virtual timer to be selected ArmPkg/ArmPkg.dec | 34 +- ArmPkg/Drivers/ArmGic/ArmGicDxe.c | 34 +- ArmPkg/Drivers/ArmGic/ArmGicDxe.inf | 4 +- ArmPkg/Drivers/TimerDxe/TimerDxe.c | 12 +- ArmPkg/Drivers/TimerDxe/TimerDxe.inf | 3 + ArmPkg/Library/ArmLib/AArch64/AArch64ArchTimer.c | 66 +++- ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf | 2 + ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf | 1 + ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf | 1 + ArmPkg/Library/BdsLib/BdsLib.inf | 5 +- .../AArch64Virtualization-KVM.dsc | 236 ++++++++++++++ .../AArch64Virtualization-KVM.fdf | 301 ++++++++++++++++++ .../AArch64Virtualization.dsc.inc | 354 +++++++++++++++++++++ .../AArch64VirtualizationPkg/Driver/VirtFdt.inf | 60 ++++ .../AArch64VirtualizationPkg/Driver/VirtFdtDxe.c | 216 +++++++++++++ .../Include/Platform/KVM/ArmPlatform.h | 38 +++ .../AArch64VirtualizationLibKVM/AArch64KVMLib.inf | 53 +++ .../Library/AArch64VirtualizationLibKVM/KVM.c | 127 ++++++++ .../AArch64VirtualizationLibKVM/KVMHelper.S | 70 ++++ .../Library/AArch64VirtualizationLibKVM/KVMMem.c | 106 ++++++ .../AArch64VirtualizationSysConfigLibKVM.c | 95 ++++++ .../AArch64VirtualizationSysConfigLibKVM.inf | 35 ++ .../Library/NorFlashKVM/NorFlashKVM.c | 63 ++++ .../Library/NorFlashKVM/NorFlashKVM.inf | 35 ++ .../Library/ResetSystemLib/ResetSystemLib.c | 96 ++++++ .../Library/ResetSystemLib/ResetSystemLib.inf | 33 ++ ArmPlatformPkg/ArmPlatformPkg.dec | 9 +- .../PrePi/PrePiArmPlatformGlobalVariableLib.inf | 7 +- ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf | 6 +- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c | 16 +- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf | 6 +- ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf | 2 - ArmPlatformPkg/PrePi/PeiUniCore.inf | 6 +- MdeModulePkg/Core/Pei/FwVol/FwVol.c | 6 +- MdeModulePkg/MdeModulePkg.dec | 2 + MdeModulePkg/MdeModulePkg.dsc | 2 + .../Universal/Fdt/FdtTableDxe/FdtTableDxe.c | 33 ++ .../Universal/Fdt/FdtTableDxe/FdtTableDxe.inf | 48 +++ MdePkg/Include/Guid/FdtTable.h | 26 ++ MdePkg/MdePkg.dec | 3 + 40 files changed, 2181 insertions(+), 71 deletions(-) create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/AArch64Virtualization-KVM.dsc create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/AArch64Virtualization-KVM.fdf create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/AArch64Virtualization.dsc.inc create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Driver/VirtFdt.inf create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Driver/VirtFdtDxe.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Include/Platform/KVM/ArmPlatform.h create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationLibKVM/AArch64KVMLib.inf create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationLibKVM/KVM.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationLibKVM/KVMHelper.S create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationLibKVM/KVMMem.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationSysConfigLibKVM/AArch64VirtualizationSysConfigLibKVM.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/AArch64VirtualizationSysConfigLibKVM/AArch64VirtualizationSysConfigLibKVM.inf create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/NorFlashKVM/NorFlashKVM.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/NorFlashKVM/NorFlashKVM.inf create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/ResetSystemLib/ResetSystemLib.c create mode 100644 ArmPlatformPkg/AArch64VirtualizationPkg/Library/ResetSystemLib/ResetSystemLib.inf create mode 100644 MdeModulePkg/Universal/Fdt/FdtTableDxe/FdtTableDxe.c create mode 100644 MdeModulePkg/Universal/Fdt/FdtTableDxe/FdtTableDxe.inf create mode 100644 MdePkg/Include/Guid/FdtTable.h -- 1.8.3.2 ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
