From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ard Biesheuvel Subject: Re: [PATCH v4 00/29] Xen/ARM guest support Date: Fri, 13 Feb 2015 08:18:15 +0800 Message-ID: References: <1423739961-5945-1-git-send-email-ard.biesheuvel@linaro.org> <20150212211855.11478.90744@jljusten-hsw> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20150212211855.11478.90744@jljusten-hsw> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jordan Justen Cc: "Tian, Feng" , Julien Grall , Ian Campbell , Olivier Martin , Stefano Stabellini , "edk2-devel@lists.sourceforge.net" , Leif Lindholm , xen-devel@lists.xen.org, Roy Franz , "Kinney, Michael D" , Anthony PERARD , Laszlo Ersek List-Id: xen-devel@lists.xenproject.org On 13 February 2015 at 05:18, Jordan Justen wrote: > Do you have this in a public branch based on this tree? > https://github.com/tianocore/edk2 > The patches are available here https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/linaro-topic-xen I also have a version rebased onto the latest upstream, and verified that it builds ok https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/linaro-topic-xen-v4-rebase Regards, Ard. > On 2015-02-12 03:18:52, Ard Biesheuvel wrote: >> 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 #29 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* map 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 (still only build tested for v4) >> >> Changes since v3: >> - rebased onto Olivier's pending GICv3 patches >> - moved InterlockedCompareExchange16 () to BaseSynchronizationLib >> - reimplemented XenBusDxe's TestAndClearBit () using >> InterlockedCompareExchange16 () so that XenBusDxe itself is now completely >> architecture agnostic >> - various minor style and comment changes based on review feedback from >> Laszlo and Olivier >> - added acks and R-b's >> >> Changes since v2: >> - rebased onto latest upstream containing Laszlo's ARM generic timer changes, >> with Olivier's pending GICv3 patches applied on top; >> - moved the relocatable PrePi to a completely separate module, and dropped >> patches changing the original ARM PrePi code: all required changes have been >> incorporated directly into the split off version >> - dropped the ARM BDS entirely, only Intel BDS supported as of now >> - added a constructor to XenConsoleSerialPortLib, otherwise there is no output >> from the release build; >> - implemented all review comments regarding style and correctness, including >> cleaning up the DSC in the final patch >> - added acks and R-b's >> >> Changes since v1: >> - move to PatchableInModule PCDs for the runtime self-relocating PrePi: this is >> semantically more correct, and will make the build system help us spot if >> there are remaining instances of FixedPcdGetXX() which need attention >> - split some prepi and xen patches to make it easier on the reviewers >> - split off the PCI support from XenBusDxe instead of the frankenstein DXE from >> v1 >> - implemented review comments regarding moving of files, splitting of libraries >> and some EDK2 optimizations suggested by Laszlo (casting, use of specific >> types etc) >> - added some acks and R-b's >> >> >> >> Ard Biesheuvel (29): >> ArmPkg: allow HYP timer interrupt to be omitted >> ArmPkg: allow patchable PCDs for memory, FD and FV addresses >> ArmPlatformPkg: allow patchable PCD for FD base address >> ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe >> ArmVirtualizationPkg: allow patchable PCD for device tree base address >> ArmVirtualizationPkg: move early UART discovery to PlatformPeim >> ArmVirtualizationPkg: use a HOB to store device tree blob >> ArmVirtualizationPkg: add padding to FDT allocation >> ArmVirtualizationPkg: add a relocatable version of PrePi >> ArmVirtualizationPkg: implement custom MemoryInitPeiLib >> ArmVirtualizationPkg: allow patchable PCD for FV and DT base addresses >> ArmVirtualizationPkg: Xen/PV relocatable platformlib instance >> MdePkg/BaseSynchronizationLib: Added proper support for ARM >> architecture >> MdePkg/BaseSynchronizationLib: implement 16-bit compare-exchange >> Ovmf/Xen: move Xen interface version to >> Ovmf/Xen: fix pointer to int cast in XenBusDxe >> Ovmf/Xen: refactor XenBusDxe hypercall implementation >> Ovmf/Xen: move XenBusDxe hypercall code to separate library >> Ovmf/Xen: introduce XENIO_PROTOCOL >> Ovmf/Xen: add separate driver for Xen PCI device >> Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL >> Ovmf/Xen: implement XenHypercallLib for ARM >> Ovmf/Xen: port XenBusDxe to other architectures >> Ovmf/Xen: add Xen PV console SerialPortLib driver >> ArmVirtualizationPkg: implement dummy RealTimeClockLib for Xen >> Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root >> ArmVirtualizationPkg: add XenIoMmioLib >> ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen,xen" DT >> node >> ArmVirtualizationPkg: add platform description for Xen guests >> >> ArmPkg/ArmPkg.dec | 25 ++-- >> ArmPkg/Drivers/TimerDxe/TimerDxe.c | 14 +- >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualization.dsc.inc | 2 + >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationPkg.dec | 10 +- >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 4 +- >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc | 218 +++++++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf | 302 ++++++++++++++++++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c | 91 ++++++++++++ >> .../ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf | 66 +++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmVirtualizationPlatformLib.inf | 6 +- >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/Virt.c | 48 +------ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/AARCH64/MemnodeParser.S | 237 +++++++++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/AARCH64/RelocatableVirtHelper.S | 167 ++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/ArmXenRelocatablePlatformLib.inf | 59 ++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/RelocatableVirt.c | 71 ++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/XenVirtMem.c | 83 +++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.c | 65 ++++++++- >> ArmPlatformPkg/ArmVirtualizationPkg/Library/PlatformPeiLib/PlatformPeiLib.inf | 10 +- >> ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c | 196 ++++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf | 38 +++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ArchPrePi.c | 33 +++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ModuleEntryPoint.S | 180 ++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf | 108 +++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/LzmaDecompress.h | 103 ++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.c | 203 +++++++++++++++++++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.h | 77 +++++++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/Scripts/PrePi-PIE.lds | 42 ++++++ >> ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c | 73 +++++++++- >> ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf | 5 +- >> ArmPlatformPkg/Library/ArmPlatformGlobalVariableLib/PrePi/PrePiArmPlatformGlobalVariableLib.inf | 2 +- >> EmbeddedPkg/EmbeddedPkg.dec | 2 + >> EmbeddedPkg/Include/Guid/FdtHob.h | 26 ++++ >> MdePkg/Include/Library/SynchronizationLib.h | 26 ++++ >> MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S | 203 +++++++++++++++++++++++++++ >> MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.c | 115 ---------------- >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S | 211 ++++++++++++++++++++++++++++ >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm | 212 ++++++++++++++++++++++++++++ >> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.c | 115 ---------------- >> MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf | 10 +- >> MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h | 26 ++++ >> MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c | 31 +++++ >> MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c | 42 ++++++ >> .../Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm | 88 ++++++------ >> .../InterlockedCompareExchange16.h => MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c | 89 +++++++----- >> MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s | 30 ++++ >> MdePkg/Library/BaseSynchronizationLib/Synchronization.c | 31 +++++ >> MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c | 44 ++++++ >> .../Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm | 83 +++++------ >> MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c | 54 ++++++++ >> OvmfPkg/Include/Guid/XenBusRootDevice.h | 24 ++++ >> OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h | 436 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> OvmfPkg/Include/IndustryStandard/Xen/io/console.h | 51 +++++++ >> OvmfPkg/Include/IndustryStandard/Xen/xen.h | 7 +- >> OvmfPkg/{XenBusDxe/XenHypercall.h => Include/Library/XenHypercallLib.h} | 44 +----- >> OvmfPkg/Include/Library/XenIoMmioLib.h | 64 +++++++++ >> OvmfPkg/Include/Protocol/XenIo.h | 48 +++++++ >> OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c | 156 +++++++++++++++++++++ >> OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf | 35 +++++ >> OvmfPkg/Library/XenHypercallLib/Aarch64/Hypercall.S | 26 ++++ >> OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S | 25 ++++ >> OvmfPkg/{XenBusDxe => Library/XenHypercallLib}/Ia32/hypercall.nasm | 6 +- >> OvmfPkg/{XenBusDxe => Library/XenHypercallLib}/X64/hypercall.nasm | 6 +- >> OvmfPkg/Library/XenHypercallLib/XenHypercall.c | 63 +++++++++ >> OvmfPkg/Library/XenHypercallLib/XenHypercallIntel.c | 77 +++++++++++ >> OvmfPkg/Library/XenHypercallLib/XenHypercallLibArm.inf | 40 ++++++ >> OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.inf | 52 +++++++ >> OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c | 166 ++++++++++++++++++++++ >> OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.inf | 39 ++++++ >> OvmfPkg/OvmfPkg.dec | 10 ++ >> OvmfPkg/OvmfPkgIa32.dsc | 2 + >> OvmfPkg/OvmfPkgIa32.fdf | 1 + >> OvmfPkg/OvmfPkgIa32X64.dsc | 2 + >> OvmfPkg/OvmfPkgIa32X64.fdf | 1 + >> OvmfPkg/OvmfPkgX64.dsc | 2 + >> OvmfPkg/OvmfPkgX64.fdf | 1 + >> OvmfPkg/XenBusDxe/ComponentName.c | 2 +- >> OvmfPkg/XenBusDxe/EventChannel.c | 14 +- >> OvmfPkg/XenBusDxe/GrantTable.c | 17 ++- >> OvmfPkg/XenBusDxe/GrantTable.h | 3 +- >> OvmfPkg/XenBusDxe/Ia32/TestAndClearBit.nasm | 16 --- >> OvmfPkg/XenBusDxe/InterlockedCompareExchange16.c | 33 ----- >> OvmfPkg/XenBusDxe/TestAndClearBit.c | 46 +++++++ >> OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm | 15 -- >> OvmfPkg/XenBusDxe/XenBus.c | 6 +- >> OvmfPkg/XenBusDxe/XenBusDxe.c | 106 +++++++------- >> OvmfPkg/XenBusDxe/XenBusDxe.h | 16 +-- >> OvmfPkg/XenBusDxe/XenBusDxe.inf | 25 +--- >> OvmfPkg/XenBusDxe/XenHypercall.c | 118 ---------------- >> OvmfPkg/XenBusDxe/XenStore.c | 6 +- >> OvmfPkg/XenIoPciDxe/XenIoPciDxe.c | 367 ++++++++++++++++++++++++++++++++++++++++++++++++ >> OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf | 45 ++++++ >> OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h | 4 - >> 92 files changed, 5417 insertions(+), 782 deletions(-) >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/AARCH64/MemnodeParser.S >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/AARCH64/RelocatableVirtHelper.S >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/ArmXenRelocatablePlatformLib.inf >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/RelocatableVirt.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmXenRelocatablePlatformLib/XenVirtMem.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ArchPrePi.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/AArch64/ModuleEntryPoint.S >> create mode 100755 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/LzmaDecompress.h >> create mode 100755 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.c >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.h >> create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/PrePi/Scripts/PrePi-PIE.lds >> create mode 100644 EmbeddedPkg/Include/Guid/FdtHob.h >> create mode 100644 MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S >> delete mode 100644 MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.c >> create mode 100644 MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S >> create mode 100644 MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm >> delete mode 100644 MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.c >> mode change 100644 => 100755 MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf >> rename OvmfPkg/XenBusDxe/Ia32/InterlockedCompareExchange16.nasm => MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm (86%) >> rename OvmfPkg/XenBusDxe/InterlockedCompareExchange16.h => MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c (52%) >> create mode 100644 MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s >> rename OvmfPkg/XenBusDxe/X64/InterlockedCompareExchange16.nasm => MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm (88%) >> create mode 100644 MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c >> 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 >> rename OvmfPkg/{XenBusDxe/XenHypercall.h => Include/Library/XenHypercallLib.h} (59%) >> create mode 100644 OvmfPkg/Include/Library/XenIoMmioLib.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/XenHypercall.c >> create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallIntel.c >> create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibArm.inf >> create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.inf >> create mode 100644 OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c >> create mode 100644 OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.inf >> delete mode 100644 OvmfPkg/XenBusDxe/Ia32/TestAndClearBit.nasm >> delete mode 100644 OvmfPkg/XenBusDxe/InterlockedCompareExchange16.c >> create mode 100644 OvmfPkg/XenBusDxe/TestAndClearBit.c >> delete mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm >> delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.c >> create mode 100644 OvmfPkg/XenIoPciDxe/XenIoPciDxe.c >> create mode 100644 OvmfPkg/XenIoPciDxe/XenIoPciDxe.inf >> >> -- >> 1.8.3.2 >>