[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 00/29] Xen/ARM guest support
> -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx] > Sent: Tuesday, March 03, 2015 3:10 PM > To: Wu, Feng > Cc: edk2-devel@xxxxxxxxxxxxxxxxxxxxx; olivier.martin@xxxxxxx; > lersek@xxxxxxxxxx; roy.franz@xxxxxxxxxx; leif.lindholm@xxxxxxxxxx; > stefano.stabellini@xxxxxxxxxxxxx; ian.campbell@xxxxxxxxxx; > anthony.perard@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx; julien.grall@xxxxxxxxxx; > Justen, Jordan L; Kinney, Michael D; Dong, Eddie; wei.liu2@xxxxxxxxxx > Subject: Re: [Xen-devel] [PATCH v5 00/29] Xen/ARM guest support > > On 3 March 2015 at 03:00, Wu, Feng <feng.wu@xxxxxxxxx> wrote: > > > > > >> -----Original Message----- > >> From: xen-devel-bounces@xxxxxxxxxxxxx > >> [mailto:xen-devel-bounces@xxxxxxxxxxxxx] On Behalf Of Ard Biesheuvel > >> Sent: Wednesday, February 25, 2015 2:03 AM > >> To: edk2-devel@xxxxxxxxxxxxxxxxxxxxx; olivier.martin@xxxxxxx; > >> lersek@xxxxxxxxxx; roy.franz@xxxxxxxxxx; leif.lindholm@xxxxxxxxxx; > >> stefano.stabellini@xxxxxxxxxxxxx; ian.campbell@xxxxxxxxxx; > >> anthony.perard@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx; > julien.grall@xxxxxxxxxx; > >> Justen, Jordan L; Kinney, Michael D > >> Cc: wei.liu2@xxxxxxxxxx; Ard Biesheuvel > >> Subject: [Xen-devel] [PATCH v5 00/29] 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 #29 ties 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 now tested on Ovmf/x86, and no regressions have been > reported > >> (thanks Wei Liu) > >> > >> Changes since v4: > >> - rename InterlockedCompareExchange16 () patch as suggested by Jordan, > and > >> added > >> his ack > >> - fix a bug spotted by Anthony in the TestAndClearBit () implementation > >> - added more acks and R-b's > >> > >> 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: Add InterlockedCompareExchange16 > >> Ovmf/Xen: move Xen interface version to <xen.h> > >> 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 +- > >> .../ArmVirtualizationPkg/ArmVirtualization.dsc.inc | 2 + > >> .../ArmVirtualizationPkg/ArmVirtualizationPkg.dec | 10 +- > >> .../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc | 4 +- > >> .../ArmVirtualizationPkg/ArmVirtualizationXen.dsc | 230 +++++++++++ > >> .../ArmVirtualizationPkg/ArmVirtualizationXen.fdf | 302 > ++++++++++++++ > >> .../ArmVirtualizationMemoryInitPeiLib.c | 91 +++++ > >> .../ArmVirtualizationMemoryInitPeiLib.inf | 66 ++++ > >> .../ArmVirtualizationPlatformLib.inf | 6 +- > >> .../Library/ArmVirtualizationPlatformLib/Virt.c | 48 +-- > >> .../AARCH64/MemnodeParser.S | 237 > >> +++++++++++ > >> .../AARCH64/RelocatableVirtHelper.S | 167 ++++++++ > >> .../ArmXenRelocatablePlatformLib.inf | 59 +++ > >> .../ArmXenRelocatablePlatformLib/RelocatableVirt.c | 71 ++++ > >> .../ArmXenRelocatablePlatformLib/XenVirtMem.c | 83 ++++ > >> .../Library/PlatformPeiLib/PlatformPeiLib.c | 65 ++- > >> .../Library/PlatformPeiLib/PlatformPeiLib.inf | 10 +- > >> .../XenRealTimeClockLib/XenRealTimeClockLib.c | 196 +++++++++ > >> .../XenRealTimeClockLib/XenRealTimeClockLib.inf | 38 ++ > >> .../ArmVirtualizationPkg/PrePi/AArch64/ArchPrePi.c | 33 ++ > >> .../PrePi/AArch64/ModuleEntryPoint.S | 180 +++++++++ > >> .../PrePi/ArmVirtPrePiUniCoreRelocatable.inf | 108 +++++ > >> .../ArmVirtualizationPkg/PrePi/LzmaDecompress.h | 103 +++++ > >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.c | 203 ++++++++++ > >> ArmPlatformPkg/ArmVirtualizationPkg/PrePi/PrePi.h | 77 ++++ > >> .../PrePi/Scripts/PrePi-PIE.lds | 42 ++ > >> .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c | 73 +++- > >> .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf | 5 +- > >> .../PrePi/PrePiArmPlatformGlobalVariableLib.inf | 2 +- > >> EmbeddedPkg/EmbeddedPkg.dec | 2 + > >> EmbeddedPkg/Include/Guid/FdtHob.h | 26 ++ > >> MdePkg/Include/Library/SynchronizationLib.h | 26 ++ > >> .../AArch64/Synchronization.S | 203 > ++++++++++ > >> .../AArch64/Synchronization.c | 115 ------ > >> .../BaseSynchronizationLib/Arm/Synchronization.S | 211 ++++++++++ > >> .../BaseSynchronizationLib/Arm/Synchronization.asm | 212 ++++++++++ > >> .../BaseSynchronizationLib/Arm/Synchronization.c | 115 ------ > >> .../BaseSynchronizationLib.inf | 10 +- > >> .../BaseSynchronizationLibInternals.h | 26 ++ > >> .../BaseSynchronizationLib/Ebc/Synchronization.c | 31 ++ > >> .../BaseSynchronizationLib/Ia32/GccInline.c | 42 ++ > >> .../Ia32/InterlockedCompareExchange16.asm | 88 +++-- > >> .../Ia32/InterlockedCompareExchange16.c | 89 +++-- > >> .../Ipf/InterlockedCompareExchange16.s | 30 ++ > >> .../BaseSynchronizationLib/Synchronization.c | 31 ++ > >> .../BaseSynchronizationLib/SynchronizationGcc.c | 31 ++ > >> .../BaseSynchronizationLib/SynchronizationMsc.c | 31 ++ > >> .../Library/BaseSynchronizationLib/X64/GccInline.c | 44 +++ > >> .../X64/InterlockedCompareExchange16.asm | 83 ++-- > >> .../X64/InterlockedCompareExchange16.c | 54 +++ > >> 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 +- > >> .../Library/XenHypercallLib.h} | 48 +-- > >> OvmfPkg/Include/Library/XenIoMmioLib.h | 64 +++ > >> OvmfPkg/Include/Protocol/XenIo.h | 48 +++ > >> .../XenConsoleSerialPortLib.c | 156 ++++++++ > >> .../XenConsoleSerialPortLib.inf | 35 ++ > >> .../Library/XenHypercallLib/Aarch64/Hypercall.S | 26 ++ > >> OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S | 25 ++ > >> .../XenHypercallLib}/Ia32/hypercall.nasm | 6 +- > >> .../XenHypercallLib}/X64/hypercall.nasm | 6 +- > >> OvmfPkg/Library/XenHypercallLib/XenHypercall.c | 63 +++ > >> .../Library/XenHypercallLib/XenHypercallIntel.c | 77 ++++ > >> .../Library/XenHypercallLib/XenHypercallLibArm.inf | 40 ++ > >> .../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 | 45 +++ > >> 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 - > >> 94 files changed, 5492 insertions(+), 784 deletions(-) > >> create mode 100644 > >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc > >> create mode 100644 > >> ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf > >> create mode 100644 > >> > ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPe > >> iLib/ArmVirtualizationMemoryInitPeiLib.c > >> create mode 100644 > >> > ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPe > >> iLib/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/XenRealTi > >> meClockLib.c > >> create mode 100644 > >> > ArmPlatformPkg/ArmVirtualizationPkg/Library/XenRealTimeClockLib/XenRealTi > >> meClockLib.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} (57%) > >> 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 > >> > > > > Which tree will these patches be merged in? Do you develop these based on > > the same tree with ovmf/x86? Thanks a lot! > > > > > Yes, these have been merged upstream in the mean time by Laszlo. Thanks a lot for your feedback, Ard. Thanks, Feng > > -- > Ard. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |