From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from SMTP.CITRIX.COM (smtp.citrix.com [66.165.176.89]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B4E4D81F5B for ; Thu, 8 Dec 2016 07:45:53 -0800 (PST) X-IronPort-AV: E=Sophos;i="5.33,320,1477958400"; d="scan'208";a="393758314" From: Anthony PERARD To: , CC: Anthony PERARD Date: Thu, 8 Dec 2016 15:33:26 +0000 Message-ID: <20161208153340.2285-1-anthony.perard@citrix.com> X-Mailer: git-send-email 2.10.2 MIME-Version: 1.0 Subject: [PATCH RFC 00/14] Specific platform to run OVMF in Xen PVH and HVM guests X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Dec 2016 15:45:54 -0000 Content-Type: text/plain 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