This is v4 of the series that 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
- Cortex-A15 CPU (if built for 32-bit ARM)
Peripherals detected at runtime:
- GIC interrupt controller
- timer interrupt line
- PL031 RTC
- system memory size
- virtio MMIO transports
There are some dependencies on QEMU and KVM changes that are not yet upstream:
- QEMU: 'hw/arm/virt: Provide flash devices for boot ROMs'
- QEMU: copy DTB to base of DRAM if no -kernel option is passed
- KVM: 'KVM: Introduce gfn_to_hva_memslot_prot'
- KVM: 'arm/arm64: KVM: Support KVM_CAP_READONLY_MEM'
- KVM: 'arm/arm64: KVM: Complete WFI/WFE instructions'
The code was tested in TCG mode on x64_64 (AArch64, ARM) and in TCG and KVM mode
on a ARMv8 Foundation Model emulator (AArch64 only)
Changes since v3:
- lots of minor style changes, added ASSERT()s, etc.
- added support for 32-bit ARM, the code can now be built with '-t ARM' instead
of '-t AARCH64' and it will work with QEMU mach-virt/cortex-a15
- eliminate AArch64 references where not appropriate
- added 32-bit ARM .S alternatives where appropriate
- refactor into separate patches for all of the modules that make up the
QEMU mach-virt platform implementation
- move everything under ArmPlatformPkg/ArmVirtualizationPkg
- eliminate references to KVM where plain QEMU suffices
Changes since v2:
- fixed *lots* of EDK2 Style Guide violations
- use EFI_D_ERROR only where appropriate
- use ASSERT()s to ensure we are running with at least 128 MB and not executing
from shadowed NOR flash, and relocate the DTB device tree image earlier so
we can be confident it does not get clobbered inadvertently
- handle 32-bit PCDs that may get initialized from 64-bit DT nodes more
consistently, and don't abort the DT traversal if virtio transports fail to
install
Changes since v1:
- rebased onto upstream GitHub tianocore/edk2.git (421ccda307)
- moved primary FV 0x1000 bytes into flash image, and added jump to it at 0x0
- dropped patch to allow FVs at physical offset 0x0
- dropped patch introducing device config table GUID, and used the upstream one
instead (EmbeddedPkg/Include/Guid/Fdt.h)
- added 'Contributed-under:' lines to commit logs
- style fixes: remove redundant '== TRUE', add space between function and (
- updated/removed comments related to arch timer PCD and arch timer imask
- use feature PCD to define whether to use the virtual timer
Ard Biesheuvel (15):
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
ArmPkg: introduce PCD gArmTokenSpaceGuid.PcdDeviceTreeBaseAddress
ArmPlatformPkg: separate PlatformPei and PlatformPeiLib
ArmVirtualizationPkg: add Include/ArmPlatform.h
ArmVirtualizationPkg: add VirtFdtDxe driver
ArmVirtualizationPkg: add ArmVirtualizationPlatformLib library
ArmVirtualizationPkg: add ArmVirtualizationPlatformSysConfigLib
library
ArmVirtualizationPkg: add PlatformPeiLib library
ArmVirtualizationPkg: add ResetSystemLib library
ArmVirtualizationPkg: add driver for QEMU's NOR flash
ArmVirtualizationPkg: add ArmVirtualizationQemu platform
Michael Casadevall (1):
ArmPkg/TimerDxe: allow virtual timer to be selected
ArmPkg/ArmPkg.dec | 34 ++-
ArmPkg/Drivers/ArmGic/ArmGicDxe.inf | 4 +-
ArmPkg/Drivers/ArmGic/GicV2/ArmGicV2Dxe.c | 37 ++-
ArmPkg/Drivers/TimerDxe/TimerDxe.c | 12 +-
ArmPkg/Drivers/TimerDxe/TimerDxe.inf | 4 +-
ArmPkg/Library/ArmLib/AArch64/AArch64ArchTimer.c | 74 ++++-
ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf | 4 +
ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf | 3 +
ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf | 3 +
ArmPkg/Library/ArmLib/ArmV7/ArmV7ArchTimer.c | 70 ++++-
ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf | 3 +
ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf | 3 +
ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf | 3 +
ArmPkg/Library/BdsLib/BdsLib.inf | 5 +-
ArmPlatformPkg/ArmPlatformPkg.dec | 9 +-
.../ArmVirtualizationPkg/ArmVirtualization.dsc.inc | 337 +++++++++++++++++++++
.../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 247 +++++++++++++++
.../ArmVirtualizationPkg/ArmVirtualizationQemu.fdf | 314 +++++++++++++++++++
.../ArmVirtualizationPkg/Include/ArmPlatform.h | 33 ++
.../AARCH64/VirtHelper.S | 86 ++++++
.../ArmVirtualizationPlatformLib/ARM/VirtHelper.S | 81 +++++
.../ArmVirtualizationPlatformLib.inf | 60 ++++
.../Library/ArmVirtualizationPlatformLib/Virt.c | 151 +++++++++
.../Library/ArmVirtualizationPlatformLib/VirtMem.c | 107 +++++++
.../ArmVirtualizationPlatformSysConfigLib.c | 90 ++++++
.../ArmVirtualizationPlatformSysConfigLib.inf | 35 +++
.../Library/NorFlashQemuLib/NorFlashQemuLib.c | 63 ++++
.../Library/NorFlashQemuLib/NorFlashQemuLib.inf | 35 +++
.../Library/PlatformPeiLib/PlatformPeiLib.c | 48 +++
.../Library/PlatformPeiLib/PlatformPeiLib.inf | 47 +++
.../ResetSystemLib/AARCH64/ResetSystemPsci.S | 40 +++
.../Library/ResetSystemLib/ARM/ResetSystemPsci.S | 41 +++
.../Library/ResetSystemLib/ResetSystemLib.c | 97 ++++++
.../Library/ResetSystemLib/ResetSystemLib.inf | 41 +++
.../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c | 261 ++++++++++++++++
.../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf | 59 ++++
.../PrePi/PrePiArmPlatformGlobalVariableLib.inf | 7 +-
ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf | 6 +-
ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c | 16 +-
ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf | 6 +-
ArmPlatformPkg/PlatformPei/PlatformPeim.inf | 2 +-
ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf | 3 -
ArmPlatformPkg/PrePi/PeiUniCore.inf | 6 +-
43 files changed, 2504 insertions(+), 83 deletions(-)
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualization.dsc.inc
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.fdf
create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Include/ArmPlatform.h
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/VirtHelper.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ARM/VirtHelper.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/VirtMem.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformSysConfigLib/ArmVirtualizationPlatformSysConfigLib.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformSysConfigLib/ArmVirtualizationPlatformSysConfigLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/NorFlashQemuLib/NorFlashQemuLib.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ResetSystemLib/AARCH64/ResetSystemPsci.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ResetSystemLib/ARM/ResetSystemPsci.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ResetSystemLib/ResetSystemLib.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ResetSystemLib/ResetSystemLib.inf
create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf
--
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