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

[Xen-devel] [PATCH RFC 00/14] Specific platform to run OVMF in Xen PVH and HVM guests



Hi,

I've started to create a Xen specifig plaform, in OvmfPkg/XenOvmf.dsc
with the goal to make it work on both Xen HVM and Xen PVHv2

The first few patches only create the platform and duplicate some code from
OvmfPkg and the later patches (from OvmfPkg/XenPlatformPei: Add xen PVH
specific code) makes OVMF boot in a Xen PVH guest, and can boot a Linux.

== Part 1: XenOvmf.dsc

- OvmfPkg: Create platform XenOvmf
which for now remove virtio drivers and some SMM

- OvmfPkg/XenOvmf: Update debug IO port for Xen

- OvmfPkg/XenOvmf.dsc: Introduce XenResetVector
Just for one change, enable cache in CR0 as on Xen, OVMF run from RAM, that
disabling cache can make OVMF very slow.

- OvmfPkg: Introduce XenPlatformPei
remove some QEMU/KVM specific code from PlatformPei.

- OvmfPkg/Library: add XenPciHostBridgeLib
same with PciHostBridgeLib

== Part 2: PVH enabled

- OvmfPkg/XenPlatformPei: Add xen PVH specific code
To figure out the memory size from E820

- OvmfPkg/XenResetVector: Add new entry point for Xen PVH
which is in 32bits

- OvmfPkg/PlatformBootManagerLib: Workaround missing PCI bus on Xen PVH
to avoid the Unknown Host Bridge Device ID error

- OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
- UefiCpuPkg/BaseXApicX2ApicLib: Fix initialisation on my system and ...
- OvmfPkg/XenOvmf: Adding XenTimerLocalApic
to replace the ACPI timer

- OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
- OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
- XenOvmf: Use a different RTC
which does always return the same value

== to build and boot

To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc

To run, I currently use a loader, base on hvmloader which does some setup, read
the e820 and copy ovmf to the right place to start it.

The loader is avaible in branch `ovmf-pvhloader' from
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git

And the guest I'm using:
builder = 'hvm'
memory = 512
name = "pvh-ovmf"
kernel = 'pvh-ovmf-loader'
ramdisk='OVMF.fd'
extra='ovmf=1'
disk = [ 'file:iso/archlinux-2016.10.01-dual.iso,hdc:cdrom,r', ]
device_model_version = 'none'
serial = 'pty'

Anthony PERARD (14):
  OvmfPkg: Create platform XenOvmf
  OvmfPkg/XenOvmf: Update debug IO port for Xen
  OvmfPkg/XenOvmf.dsc: Introduce XenResetVector
  OvmfPkg: Introduce XenPlatformPei
  OvmfPkg/Library: add XenPciHostBridgeLib
  OvmfPkg/XenPlatformPei: Add xen PVH specific code
  OvmfPkg/XenResetVector: Add new entry point for Xen PVH
  OvmfPkg/PlatformBootManagerLib: Workaround missing PCI bus on Xen PVH
  OvmfPkg/ResetSystemLib: Add missing dependency on PciLib
  UefiCpuPkg/BaseXApicX2ApicLib: Fix initialisation on my system and ...
  OvmfPkg/XenOvmf: Adding XenTimerLocalApic
  OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn
  OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables
  XenOvmf: Use a different RTC

 .../Library/PlatformBootManagerLib/BdsPlatform.c   |  35 +
 .../PlatformBootManagerLib.inf                     |   2 +
 OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf  |   1 +
 .../Library/XenPciHostBridgeLib/XenPciHostBridge.h |  75 ++
 .../XenPciHostBridgeLib/XenPciHostBridgeLib.c      | 291 ++++++++
 .../XenPciHostBridgeLib/XenPciHostBridgeLib.inf    |  58 ++
 OvmfPkg/Library/XenPciHostBridgeLib/XenSupport.c   | 456 ++++++++++++
 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c                  | 263 +++++++
 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf                |  45 ++
 OvmfPkg/XenOvmf.dsc                                | 809 +++++++++++++++++++++
 OvmfPkg/XenOvmf.fdf                                | 506 +++++++++++++
 OvmfPkg/XenPlatformPei/Cmos.c                      |  64 ++
 OvmfPkg/XenPlatformPei/Cmos.h                      |  56 ++
 OvmfPkg/XenPlatformPei/Fv.c                        | 100 +++
 OvmfPkg/XenPlatformPei/MemDetect.c                 | 520 +++++++++++++
 OvmfPkg/XenPlatformPei/Platform.c                  | 541 ++++++++++++++
 OvmfPkg/XenPlatformPei/Platform.h                  | 114 +++
 OvmfPkg/XenPlatformPei/Xen.c                       | 231 ++++++
 OvmfPkg/XenPlatformPei/Xen.h                       |  45 ++
 OvmfPkg/XenPlatformPei/XenPlatformPei.inf          | 110 +++
 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm     | 133 ++++
 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm    |  79 ++
 OvmfPkg/XenResetVector/Ia32/PageTables64.asm       |  93 +++
 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm         |  23 +
 OvmfPkg/XenResetVector/XenResetVector.inf          |  37 +
 OvmfPkg/XenResetVector/XenResetVector.nasmb        |  67 ++
 OvmfPkg/XenTimerLocalApic/Timer.h                  | 191 +++++
 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.c      | 386 ++++++++++
 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.inf    |  51 ++
 UefiCpuPkg/Include/Library/LocalApicLib.h          |  40 +
 .../BaseXApicX2ApicLib/BaseXApicX2ApicLib.c        |  10 +-
 31 files changed, 5427 insertions(+), 5 deletions(-)
 create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridge.h
 create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridgeLib.c
 create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenPciHostBridgeLib.inf
 create mode 100644 OvmfPkg/Library/XenPciHostBridgeLib/XenSupport.c
 create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c
 create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf
 create mode 100644 OvmfPkg/XenOvmf.dsc
 create mode 100644 OvmfPkg/XenOvmf.fdf
 create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c
 create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h
 create mode 100644 OvmfPkg/XenPlatformPei/Fv.c
 create mode 100644 OvmfPkg/XenPlatformPei/MemDetect.c
 create mode 100644 OvmfPkg/XenPlatformPei/Platform.c
 create mode 100644 OvmfPkg/XenPlatformPei/Platform.h
 create mode 100644 OvmfPkg/XenPlatformPei/Xen.c
 create mode 100644 OvmfPkg/XenPlatformPei/Xen.h
 create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf
 create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm
 create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
 create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf
 create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb
 create mode 100644 OvmfPkg/XenTimerLocalApic/Timer.h
 create mode 100644 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.c
 create mode 100644 OvmfPkg/XenTimerLocalApic/XenTimerLocalApic.inf

-- 
Anthony PERARD


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

 


Rackspace

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