[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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.

-- 
Ard.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.