|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v1 00/21] Xen/ARM guest support
This series implements support for executing Tianocore inside a Xen
guest domain on 64-bit ARM systems (AArch64)
The first part addresses ARM platform specifics, primarily to allow a
Tianocore binary image to be runtime relocatable, and execute from DRAM.
The second part refactors the XenBus support, and adds some missing device
drivers that are needed to execute on ARM: a Xen PV console and a real time
clock driver.
Finally, patch #21 wraps it all together and implements the .dsc and .fdf
platform descriptions that can be used to build the binary image.
NOTES:
- the Xen RTC driver is a dummy implementation, as it is a Runtime driver which
is callable through Runtime Services from the OS, and this is currently not
supportable under Xen, due to the need to share the shared info page between
the OS and the firmware
- UEFI maps the entire physical memory space as cached, and relies on Xen to
use the correct stage2 mappings for regions that are backed by devices, such
as the GIC or device passthrough. The reason is that the I/O console ring and
grant table are backed by RAM that Xen maps as cached, which means that UEFI
*must* maps those as cached as well. Instead of discovering those regions
early on (i.e., before enabling the MMU) it is much easier to rely on the
architecturally mandated behavior that stage2 device mappings supersede stage1
cached mappings for the same region.
- this code is not yet tested on x86
I fully expect considerable discussion, and am quite prepared to do major rework
to get this code into shape.
Ard Biesheuvel (21):
ArmPkg: allow HYP timer interrupt to be omitted
ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe
ArmVirtualizationPkg: replace instance of FixedPcdGet()
ArmVirtualizationPkg: move early UART discovery to PlatformPeim
ArmVirtualizationPkg: use a HOB to store device tree blob
ArmVirtualizationPkg: add padding to FDT allocation
ArmPlatformPkg/PrePi: factor out FixedPcdGetXX() and ArmIsMpCore()
ArmPlatformPkg/PrePi: add a relocatable version of PrePi
ArmVirtualizationPkg: implement custom MemoryInitPeiLib
ArmVirtualizationPkg: Xen/PV relocatable platformlib instance
Ovmf/Xen: move Xen interface version to <xen.h>
Ovmf/Xen: fix pointer to int cast in XenBusDxe
Ovmf/Xen: move arch specific hypercall implementation to
XenHypercallLib
Ovmf/Xen: allow non-PCI usage of XenBusDxe
Ovmf/Xen: implement XenHypercallLib for ARM
Ovmf/Xen: add ARM and AArch64 support to XenBusDxe
Ovmf/Xen: add Xen PV console SerialPortLib driver
Ovmf/Xen: implement dummy RealTimeClockLib for Xen
Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root
ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen,xen" DT
node
ArmVirtualizationPkg: add platform description for Xen guests
ArmPkg/Drivers/TimerDxe/TimerDxe.c | 14 +-
.../ArmVirtualizationPkg/ArmVirtualizationPkg.dec | 3 +-
.../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 3 -
.../ArmVirtualizationPkg/ArmVirtualizationXen.dsc | 274 +++++++++++++
.../ArmVirtualizationPkg/ArmVirtualizationXen.fdf | 337 ++++++++++++++++
.../ArmVirtualizationPkg/Include/Guid/FdtHob.h | 26 ++
.../ArmVirtualizationMemoryInitPeiLib.c | 91 +++++
.../ArmVirtualizationMemoryInitPeiLib.inf | 64 +++
.../AARCH64/MemnodeParser.S | 232 +++++++++++
.../AARCH64/RelocatableVirtHelper.S | 161 ++++++++
.../ArmVirtualizationPlatformLib.inf | 1 +
.../ArmXenRelocatablePlatformLib.inf | 66 ++++
.../ArmVirtualizationPlatformLib/RelocatableVirt.c | 78 ++++
.../Library/ArmVirtualizationPlatformLib/Virt.c | 48 +--
.../ArmVirtualizationPlatformLib/XenVirtMem.c | 83 ++++
.../Library/PlatformPeiLib/PlatformPeiLib.c | 75 +++-
.../Library/PlatformPeiLib/PlatformPeiLib.inf | 3 -
.../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c | 129 +++++-
.../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf | 5 +-
ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S | 51 ++-
ArmPlatformPkg/PrePi/MainMPCore.c | 5 +-
ArmPlatformPkg/PrePi/MainUniCore.c | 2 +-
ArmPlatformPkg/PrePi/MainUniCoreRelocatable.c | 38 ++
ArmPlatformPkg/PrePi/PeiUniCoreRelocatable.inf | 108 +++++
ArmPlatformPkg/PrePi/PrePi.c | 25 +-
ArmPlatformPkg/PrePi/PrePi.h | 3 +-
ArmPlatformPkg/PrePi/Scripts/PrePi-PIE.lds | 28 ++
OvmfPkg/Include/Guid/XenBusRootDevice.h | 24 ++
.../Include/IndustryStandard/Xen/arch-arm/xen.h | 436 +++++++++++++++++++++
OvmfPkg/Include/IndustryStandard/Xen/io/console.h | 51 +++
OvmfPkg/Include/IndustryStandard/Xen/xen.h | 7 +-
OvmfPkg/Include/Library/XenHypercallLib.h | 78 ++++
OvmfPkg/Include/Protocol/XenIo.h | 48 +++
.../XenConsoleSerialPortLib.c | 147 +++++++
.../XenConsoleSerialPortLib.inf | 34 ++
.../Library/XenHypercallLib/Aarch64/Hypercall.S | 26 ++
OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S | 25 ++
.../XenHypercallLib}/Ia32/hypercall.nasm | 6 +-
.../XenHypercallLib}/X64/hypercall.nasm | 6 +-
.../Library/XenHypercallLib/XenHypercallLibArm.inf | 40 ++
.../XenHypercallLib/XenHypercallLibCommon.c | 63 +++
.../Library/XenHypercallLib/XenHypercallLibIntel.c | 77 ++++
.../XenHypercallLib/XenHypercallLibIntel.inf | 52 +++
.../XenRealTimeClockLib/XenRealTimeClockLib.c | 196 +++++++++
.../XenRealTimeClockLib/XenRealTimeClockLib.inf | 38 ++
OvmfPkg/OvmfPkg.dec | 6 +
OvmfPkg/OvmfPkgIa32.dsc | 1 +
OvmfPkg/OvmfPkgIa32X64.dsc | 1 +
OvmfPkg/OvmfPkgX64.dsc | 1 +
OvmfPkg/XenBusDxe/AtomicsGcc.c | 44 +++
OvmfPkg/XenBusDxe/ComponentName.c | 2 +-
OvmfPkg/XenBusDxe/EventChannel.c | 14 +-
OvmfPkg/XenBusDxe/GrantTable.c | 15 +-
OvmfPkg/XenBusDxe/GrantTable.h | 3 +-
OvmfPkg/XenBusDxe/XenBus.c | 6 +-
OvmfPkg/XenBusDxe/XenBusDxe.c | 241 ++++++++++--
OvmfPkg/XenBusDxe/XenBusDxe.h | 8 +-
OvmfPkg/XenBusDxe/XenBusDxe.inf | 15 +-
OvmfPkg/XenBusDxe/XenHypercall.c | 118 ------
OvmfPkg/XenBusDxe/XenHypercall.h | 113 ------
OvmfPkg/XenBusDxe/XenStore.c | 6 +-
OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h | 4 -
62 files changed, 3475 insertions(+), 430 deletions(-)
create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf
create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/MemnodeParser.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/RelocatableVirtHelper.S
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmXenRelocatablePlatformLib.inf
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/RelocatableVirt.c
create mode 100644
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/XenVirtMem.c
create mode 100644 ArmPlatformPkg/PrePi/MainUniCoreRelocatable.c
create mode 100755 ArmPlatformPkg/PrePi/PeiUniCoreRelocatable.inf
create mode 100644 ArmPlatformPkg/PrePi/Scripts/PrePi-PIE.lds
create mode 100644 OvmfPkg/Include/Guid/XenBusRootDevice.h
create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h
create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/io/console.h
create mode 100644 OvmfPkg/Include/Library/XenHypercallLib.h
create mode 100644 OvmfPkg/Include/Protocol/XenIo.h
create mode 100644
OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
create mode 100644
OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
create mode 100644 OvmfPkg/Library/XenHypercallLib/Aarch64/Hypercall.S
create mode 100644 OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S
rename OvmfPkg/{XenBusDxe => Library/XenHypercallLib}/Ia32/hypercall.nasm (81%)
rename OvmfPkg/{XenBusDxe => Library/XenHypercallLib}/X64/hypercall.nasm (78%)
create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibArm.inf
create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibCommon.c
create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.c
create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.inf
create mode 100644 OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
create mode 100644 OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf
create mode 100644 OvmfPkg/XenBusDxe/AtomicsGcc.c
delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.c
delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.h
--
1.8.3.2
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |