From patchwork Tue Apr 9 11:08:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony PERARD X-Patchwork-Id: 10890999 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3FBF9139A for ; Tue, 9 Apr 2019 11:11:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2A2AA288D0 for ; Tue, 9 Apr 2019 11:11:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1EAC028891; Tue, 9 Apr 2019 11:11:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5056928898 for ; Tue, 9 Apr 2019 11:11:10 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hDocp-00064i-Ey; Tue, 09 Apr 2019 11:09:11 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hDoco-000634-3C for xen-devel@lists.xenproject.org; Tue, 09 Apr 2019 11:09:10 +0000 X-Inumbo-ID: e2fb6fc8-5ab7-11e9-a63f-9b2fa11be7e5 Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id e2fb6fc8-5ab7-11e9-a63f-9b2fa11be7e5; Tue, 09 Apr 2019 11:09:05 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.60,329,1549929600"; d="scan'208";a="83095184" From: Anthony PERARD To: 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 Subject: [Xen-devel] [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Ard Biesheuvel , Jordan Justen , Julien Grall , Anthony PERARD , xen-devel@lists.xenproject.org, Laszlo Ersek Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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