On 3 March 2015 at 03:00, Wu, Feng <feng...@intel.com> wrote:
>
>
>> -----Original Message-----
>> From: xen-devel-boun...@lists.xen.org
>> [mailto:xen-devel-boun...@lists.xen.org] On Behalf Of Ard Biesheuvel
>> Sent: Wednesday, February 25, 2015 2:03 AM
>> To: edk2-devel@lists.sourceforge.net; olivier.mar...@arm.com;
>> ler...@redhat.com; roy.fr...@linaro.org; leif.lindh...@linaro.org;
>> stefano.stabell...@eu.citrix.com; ian.campb...@citrix.com;
>> anthony.per...@citrix.com; xen-de...@lists.xen.org; julien.gr...@linaro.org;
>> Justen, Jordan L; Kinney, Michael D
>> Cc: wei.l...@citrix.com; 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.

-- 
Ard.

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to