All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 00/21] Xen/ARM guest support
@ 2015-01-23 15:02 Ard Biesheuvel
  0 siblings, 0 replies; 61+ messages in thread
From: Ard Biesheuvel @ 2015-01-23 15:02 UTC (permalink / raw)
  To: edk2-devel, lersek, olivier.martin, roy.franz, leif.lindholm,
	stefano.stabellini, ian.campbell, anthony.perard,
	christoffer.dall, xen-devel, ilias.biris
  Cc: Ard Biesheuvel

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 #21 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* maps 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

I fully expect considerable discussion, and am quite prepared to do major rework
to get this code into shape. 

Ard Biesheuvel (21):
  ArmPkg: allow HYP timer interrupt to be omitted
  ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe
  ArmVirtualizationPkg: replace instance of FixedPcdGet()
  ArmVirtualizationPkg: move early UART discovery to PlatformPeim
  ArmVirtualizationPkg: use a HOB to store device tree blob
  ArmVirtualizationPkg: add padding to FDT allocation
  ArmPlatformPkg/PrePi: factor out FixedPcdGetXX() and ArmIsMpCore()
  ArmPlatformPkg/PrePi: add a relocatable version of PrePi
  ArmVirtualizationPkg: implement custom MemoryInitPeiLib
  ArmVirtualizationPkg: Xen/PV relocatable platformlib instance
  Ovmf/Xen: move Xen interface version to <xen.h>
  Ovmf/Xen: fix pointer to int cast in XenBusDxe
  Ovmf/Xen: move arch specific hypercall implementation to
    XenHypercallLib
  Ovmf/Xen: allow non-PCI usage of XenBusDxe
  Ovmf/Xen: implement XenHypercallLib for ARM
  Ovmf/Xen: add ARM and AArch64 support to XenBusDxe
  Ovmf/Xen: add Xen PV console SerialPortLib driver
  Ovmf/Xen: implement dummy RealTimeClockLib for Xen
  Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root
  ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen,xen" DT
    node
  ArmVirtualizationPkg: add platform description for Xen guests

 ArmPkg/Drivers/TimerDxe/TimerDxe.c                 |  14 +-
 .../ArmVirtualizationPkg/ArmVirtualizationPkg.dec  |   3 +-
 .../ArmVirtualizationPkg/ArmVirtualizationQemu.dsc |   3 -
 .../ArmVirtualizationPkg/ArmVirtualizationXen.dsc  | 274 +++++++++++++
 .../ArmVirtualizationPkg/ArmVirtualizationXen.fdf  | 337 ++++++++++++++++
 .../ArmVirtualizationPkg/Include/Guid/FdtHob.h     |  26 ++
 .../ArmVirtualizationMemoryInitPeiLib.c            |  91 +++++
 .../ArmVirtualizationMemoryInitPeiLib.inf          |  64 +++
 .../AARCH64/MemnodeParser.S                        | 232 +++++++++++
 .../AARCH64/RelocatableVirtHelper.S                | 161 ++++++++
 .../ArmVirtualizationPlatformLib.inf               |   1 +
 .../ArmXenRelocatablePlatformLib.inf               |  66 ++++
 .../ArmVirtualizationPlatformLib/RelocatableVirt.c |  78 ++++
 .../Library/ArmVirtualizationPlatformLib/Virt.c    |  48 +--
 .../ArmVirtualizationPlatformLib/XenVirtMem.c      |  83 ++++
 .../Library/PlatformPeiLib/PlatformPeiLib.c        |  75 +++-
 .../Library/PlatformPeiLib/PlatformPeiLib.inf      |   3 -
 .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c   | 129 +++++-
 .../ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.inf |   5 +-
 ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S    |  51 ++-
 ArmPlatformPkg/PrePi/MainMPCore.c                  |   5 +-
 ArmPlatformPkg/PrePi/MainUniCore.c                 |   2 +-
 ArmPlatformPkg/PrePi/MainUniCoreRelocatable.c      |  38 ++
 ArmPlatformPkg/PrePi/PeiUniCoreRelocatable.inf     | 108 +++++
 ArmPlatformPkg/PrePi/PrePi.c                       |  25 +-
 ArmPlatformPkg/PrePi/PrePi.h                       |   3 +-
 ArmPlatformPkg/PrePi/Scripts/PrePi-PIE.lds         |  28 ++
 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 +-
 OvmfPkg/Include/Library/XenHypercallLib.h          |  78 ++++
 OvmfPkg/Include/Protocol/XenIo.h                   |  48 +++
 .../XenConsoleSerialPortLib.c                      | 147 +++++++
 .../XenConsoleSerialPortLib.inf                    |  34 ++
 .../Library/XenHypercallLib/Aarch64/Hypercall.S    |  26 ++
 OvmfPkg/Library/XenHypercallLib/Arm/Hypercall.S    |  25 ++
 .../XenHypercallLib}/Ia32/hypercall.nasm           |   6 +-
 .../XenHypercallLib}/X64/hypercall.nasm            |   6 +-
 .../Library/XenHypercallLib/XenHypercallLibArm.inf |  40 ++
 .../XenHypercallLib/XenHypercallLibCommon.c        |  63 +++
 .../Library/XenHypercallLib/XenHypercallLibIntel.c |  77 ++++
 .../XenHypercallLib/XenHypercallLibIntel.inf       |  52 +++
 .../XenRealTimeClockLib/XenRealTimeClockLib.c      | 196 +++++++++
 .../XenRealTimeClockLib/XenRealTimeClockLib.inf    |  38 ++
 OvmfPkg/OvmfPkg.dec                                |   6 +
 OvmfPkg/OvmfPkgIa32.dsc                            |   1 +
 OvmfPkg/OvmfPkgIa32X64.dsc                         |   1 +
 OvmfPkg/OvmfPkgX64.dsc                             |   1 +
 OvmfPkg/XenBusDxe/AtomicsGcc.c                     |  44 +++
 OvmfPkg/XenBusDxe/ComponentName.c                  |   2 +-
 OvmfPkg/XenBusDxe/EventChannel.c                   |  14 +-
 OvmfPkg/XenBusDxe/GrantTable.c                     |  15 +-
 OvmfPkg/XenBusDxe/GrantTable.h                     |   3 +-
 OvmfPkg/XenBusDxe/XenBus.c                         |   6 +-
 OvmfPkg/XenBusDxe/XenBusDxe.c                      | 241 ++++++++++--
 OvmfPkg/XenBusDxe/XenBusDxe.h                      |   8 +-
 OvmfPkg/XenBusDxe/XenBusDxe.inf                    |  15 +-
 OvmfPkg/XenBusDxe/XenHypercall.c                   | 118 ------
 OvmfPkg/XenBusDxe/XenHypercall.h                   | 113 ------
 OvmfPkg/XenBusDxe/XenStore.c                       |   6 +-
 OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h                  |   4 -
 62 files changed, 3475 insertions(+), 430 deletions(-)
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.fdf
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Include/Guid/FdtHob.h
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/MemnodeParser.S
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/AARCH64/RelocatableVirtHelper.S
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/ArmXenRelocatablePlatformLib.inf
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/RelocatableVirt.c
 create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationPlatformLib/XenVirtMem.c
 create mode 100644 ArmPlatformPkg/PrePi/MainUniCoreRelocatable.c
 create mode 100755 ArmPlatformPkg/PrePi/PeiUniCoreRelocatable.inf
 create mode 100644 ArmPlatformPkg/PrePi/Scripts/PrePi-PIE.lds
 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
 create mode 100644 OvmfPkg/Include/Library/XenHypercallLib.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/XenHypercallLibArm.inf
 create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibCommon.c
 create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.c
 create mode 100644 OvmfPkg/Library/XenHypercallLib/XenHypercallLibIntel.inf
 create mode 100644 OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c
 create mode 100644 OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf
 create mode 100644 OvmfPkg/XenBusDxe/AtomicsGcc.c
 delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.c
 delete mode 100644 OvmfPkg/XenBusDxe/XenHypercall.h

-- 
1.8.3.2

^ permalink raw reply	[flat|nested] 61+ messages in thread

end of thread, other threads:[~2015-01-26 14:19 UTC | newest]

Thread overview: 61+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1422025390-8036-1-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 15:02 ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 07/21] ArmPlatformPkg/PrePi: factor out FixedPcdGetXX() and ArmIsMpCore() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 08/21] ArmPlatformPkg/PrePi: add a relocatable version of PrePi Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 16/21] Ovmf/Xen: add ARM and AArch64 support to XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 18/21] Ovmf/Xen: implement dummy RealTimeClockLib for Xen Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 19/21] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 21/21] ArmVirtualizationPkg: add platform description for Xen guests Ard Biesheuvel
     [not found] ` <1422025390-8036-14-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:24   ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Stefano Stabellini
2015-01-24  0:02     ` Laszlo Ersek
     [not found] ` <1422025390-8036-16-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:41   ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Stefano Stabellini
2015-01-23 19:00     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-18-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:54   ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Stefano Stabellini
2015-01-23 19:19     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu8fE6xirv0U-T_e0SrQx_x0-STMo-rfUedO=xsnSa+X2A@mail.gmail.com>
2015-01-26 11:22       ` Stefano Stabellini
     [not found] ` <1422025390-8036-21-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:03   ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Stefano Stabellini
2015-01-23 19:22     ` Ard Biesheuvel
2015-01-23 19:08 ` [PATCH v1 00/21] Xen/ARM guest support Laszlo Ersek
     [not found] ` <1422025390-8036-2-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Olivier Martin
2015-01-23 19:17   ` Laszlo Ersek
     [not found] ` <1422025390-8036-3-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Olivier Martin
2015-01-23 19:20   ` Laszlo Ersek
     [not found] ` <1422025390-8036-4-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:59   ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Olivier Martin
2015-01-23 19:38   ` Laszlo Ersek
     [not found]   ` <54C2A34B.8010507@redhat.com>
2015-01-26 10:57     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu_qDfxACEqoxbW2h84R4kd2Eng8oNo6J4sU=5OuH=ELEA@mail.gmail.com>
2015-01-26 11:11       ` Laszlo Ersek
     [not found] ` <1422025390-8036-10-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:59   ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Laszlo Ersek
     [not found]   ` <54C2B619.7060800@redhat.com>
2015-01-26 11:35     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-11-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 21:09   ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Laszlo Ersek
     [not found] ` <1422025390-8036-12-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:07   ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Stefano Stabellini
2015-01-23 23:54   ` Laszlo Ersek
     [not found] ` <1422025390-8036-13-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:14   ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Stefano Stabellini
2015-01-24  0:00   ` Laszlo Ersek
     [not found] ` <1422025390-8036-15-git-send-email-ard.biesheuvel@linaro.org>
2015-01-26  9:27   ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Laszlo Ersek
     [not found]   ` <54C60883.8030706@redhat.com>
2015-01-26  9:46     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9qdLjngX9j6wppT+sucCEhwDW4Cnfez2QJC5p+FAm4uw@mail.gmail.com>
2015-01-26 10:28       ` Laszlo Ersek
     [not found]       ` <54C616D7.2030407@redhat.com>
2015-01-26 13:52         ` Ard Biesheuvel
     [not found]         ` <CAKv+Gu_6zrybkQ_zFghuh8s7odSeC=swLvbx41ukd9LJdx0x8w@mail.gmail.com>
2015-01-26 14:10           ` Laszlo Ersek
     [not found]           ` <54C64AED.8030800@redhat.com>
2015-01-26 14:19             ` Ard Biesheuvel
     [not found] ` <1422025390-8036-5-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:44   ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Laszlo Ersek
2015-01-26 10:54   ` Olivier Martin
     [not found] ` <1422025390-8036-6-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:22   ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Laszlo Ersek
2015-01-26 11:08   ` Olivier Martin
     [not found] ` <1422025390-8036-7-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 23:52   ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Laszlo Ersek
2015-01-26 11:47   ` Olivier Martin
     [not found]   ` <54c6294f.8638e50a.7237.ffffa2f5SMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-26 11:48     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9ZDwbZ+O+JPAm44_FbjEYXcTK+yn5=7U4Cn88niLqJOA@mail.gmail.com>
2015-01-26 11:51       ` Olivier Martin
2015-01-23 15:02 [PATCH v1 00/21] Xen/ARM guest support Ard Biesheuvel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.