From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=softfail (domain: citrix.com, ip: , mailfrom: prvs=99536ed25=anthony.perard@citrix.com) Received: from SMTP03.CITRIX.COM (SMTP03.CITRIX.COM []) by groups.io with SMTP; Tue, 09 Apr 2019 04:09:04 -0700 X-IronPort-AV: E=Sophos;i="5.60,329,1549929600"; d="scan'208";a="83095184" From: "Anthony PERARD" To: CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Julien Grall , , Anthony PERARD Subject: [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests Date: Tue, 9 Apr 2019 12:08:13 +0100 Message-ID: <20190409110844.14746-1-anthony.perard@citrix.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Return-Path: anthony.perard@citrix.com Content-Transfer-Encoding: 8bit Content-Type: text/plain Resent, to send to the new edk2 ML. Patch series available in this git branch: https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v2 Hi, I've created a Xen specific platform, in OvmfPkg/XenOvmf.dsc with the goal to make it work on both Xen HVM and Xen PVH. https://bugzilla.tianocore.org/show_bug.cgi?id=1689 The first few patches only create the platform and duplicate some code from OvmfPkg and the later patches makes OVMF boot in a Xen PVH guest and can boot a Linux guest. After this patch series, I'd like to wait a bit before removing Xen support from the OvmfPkg*.dsc, to allow time to switch to the new Xen only platform, maybe 1 year. To build and boot: To build, simply run OvmfPkg/build.sh -p OvmfPkg/XenOvmf.dsc Then use OVMF.fd as a kernel of a pvh guest config file (with xl/libxl). Anthony PERARD (31): OvmfPkg/ResetSystemLib: Add missing dependency on PciLib OvmfPkg: Create platform XenOvmf OvmfPkg: Introduce XenResetVector OvmfPkg: Introduce XenPlatformPei OvmfPkg/XenOvmf: Creating an ELF header OvmfPkg/XenResetVector: Add new entry point for Xen PVH OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or PVH OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820 OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct OvmfPkg/Library/XenPlatformLib: New library OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist OvmfPkg/XenHypercallLib: Enable it in PEIM OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as runned OvmfPkg/XenPlatformPei: Setup HyperPages earlier OvmfPkg/XenPlatformPei: Introduce XenPvhDetected OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h OvmfPkg/XenPlatformPei: Get E820 table via hypercall ... OvmfPkg/XenPlatformPei: Rework memory detection OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen PVH OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency OvmfPkg/XenOvmf: Introduce XenTimerDxe OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg OvmfPkg/OvmfPkg.dec | 4 + ArmVirtPkg/ArmVirtXen.dsc | 2 +- OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} | 236 ++------ OvmfPkg/XenOvmf.fdf | 561 ++++++++++++++++++++ OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf | 2 +- OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 4 + OvmfPkg/Library/ResetSystemLib/ResetSystemLib.inf | 1 + OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf | 2 +- ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf | 30 +- {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf | 0 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf | 35 ++ OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 107 ++++ OvmfPkg/XenResetVector/XenResetVector.inf | 46 ++ OvmfPkg/XenTimerDxe/XenTimerDxe.inf | 49 ++ OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h | 6 +- OvmfPkg/Include/Guid/XenInfo.h | 8 +- OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h | 159 ++++++ OvmfPkg/Include/IndustryStandard/Xen/memory.h | 23 + OvmfPkg/Include/Library/XenHypercallLib.h | 12 + OvmfPkg/Include/Library/XenPlatformLib.h | 59 ++ OvmfPkg/Include/OvmfPlatforms.h | 6 + OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h | 1 + OvmfPkg/XenPlatformPei/Cmos.h | 58 ++ OvmfPkg/XenPlatformPei/Platform.h | 135 +++++ OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h | 0 OvmfPkg/XenTimerDxe/XenTimerDxe.h | 183 +++++++ OvmfPkg/AcpiPlatformDxe/Xen.c | 41 +- OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c | 15 +- OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c | 59 ++ OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c | 3 +- OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c | 11 + OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c | 75 +++ {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c | 0 OvmfPkg/PlatformPei/Xen.c | 3 - OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c | 38 ++ OvmfPkg/XenPlatformPei/AmdSev.c | 70 +++ OvmfPkg/XenPlatformPei/ClearCache.c | 118 ++++ OvmfPkg/XenPlatformPei/Cmos.c | 66 +++ OvmfPkg/XenPlatformPei/Fv.c | 82 +++ OvmfPkg/XenPlatformPei/MemDetect.c | 498 +++++++++++++++++ OvmfPkg/XenPlatformPei/Platform.c | 458 ++++++++++++++++ OvmfPkg/XenPlatformPei/Xen.c | 381 +++++++++++++ OvmfPkg/XenTimerDxe/XenTimerDxe.c | 361 +++++++++++++ generate_elf_header.c | 78 +++ OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm | 144 +++++ OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm | 87 +++ OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm | 66 +++ OvmfPkg/XenResetVector/Ia32/PageTables64.asm | 156 ++++++ OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm | 93 ++++ OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm | 75 +++ OvmfPkg/XenResetVector/XenResetVector.nasmb | 78 +++ 54 files changed, 4526 insertions(+), 262 deletions(-) copy OvmfPkg/{OvmfPkgX64.dsc => XenOvmf.dsc} (78%) create mode 100644 OvmfPkg/XenOvmf.fdf copy ArmVirtPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf => OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf (50%) rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf (100%) create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf create mode 100644 OvmfPkg/XenPlatformPei/XenPlatformPei.inf create mode 100644 OvmfPkg/XenResetVector/XenResetVector.inf create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.inf create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h create mode 100644 OvmfPkg/Include/Library/XenPlatformLib.h create mode 100644 OvmfPkg/XenPlatformPei/Cmos.h create mode 100644 OvmfPkg/XenPlatformPei/Platform.h copy OvmfPkg/{PlatformPei => XenPlatformPei}/Xen.h (100%) create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.h create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c rename {ArmVirtPkg => OvmfPkg}/Library/XenRealTimeClockLib/XenRealTimeClockLib.c (100%) create mode 100644 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c create mode 100644 OvmfPkg/XenPlatformPei/AmdSev.c create mode 100644 OvmfPkg/XenPlatformPei/ClearCache.c create mode 100644 OvmfPkg/XenPlatformPei/Cmos.c 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/Xen.c create mode 100644 OvmfPkg/XenTimerDxe/XenTimerDxe.c create mode 100644 generate_elf_header.c create mode 100644 OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm create mode 100644 OvmfPkg/XenResetVector/Ia16/ResetVectorVtf0.asm create mode 100644 OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm create mode 100644 OvmfPkg/XenResetVector/Ia32/PageTables64.asm create mode 100644 OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm create mode 100644 OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm create mode 100644 OvmfPkg/XenResetVector/XenResetVector.nasmb -- Anthony PERARD