[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: 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!

Thanks,
Feng

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

_______________________________________________
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®.