From patchwork Thu Jul 4 14:41:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony PERARD X-Patchwork-Id: 11031551 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 5054113BD for ; Thu, 4 Jul 2019 14:44:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36FAD28A97 for ; Thu, 4 Jul 2019 14:44:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2AE8928AA4; Thu, 4 Jul 2019 14:44:13 +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 7634528A97 for ; Thu, 4 Jul 2019 14:44:12 +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 1hj2wc-0003DT-3b; Thu, 04 Jul 2019 14:42:42 +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 1hj2wa-0003DI-PB for xen-devel@lists.xenproject.org; Thu, 04 Jul 2019 14:42:40 +0000 X-Inumbo-ID: f7beaad8-9e69-11e9-ac4e-c3e1c6f4ddec Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id f7beaad8-9e69-11e9-ac4e-c3e1c6f4ddec; Thu, 04 Jul 2019 14:42:38 +0000 (UTC) Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa2.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa2.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa2.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 1jmeM/LQvDx6flcLKSmK1Qn44E8rmW9vTl5nnnXt2ExM5+UGNtjVuzj4O9dnDMZOgSW9h+a+l7 HICw4qO5DGZOo98dNd1Z6ROGIwj8AXhPlMvi8a+M8RSWcf8lTGNIYS4fYD6znZZ8vj5+qtzLwX emQhc0h/7eGS+Gv6TMsKk1lr9DohZDGZnbhkCu9wdJFi7BIiBTjtt7wpAnu0KkYQBXE6Cw8itn PlVxkTj5nDkI7gnXaYQFk0NHVDRDO1zmHZ30+XtxoRRmmdfCsPFvwHvDTwaK9ebD6l5UJ4V1yM e1M= X-SBRS: 2.7 X-MesageID: 2588781 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.63,451,1557201600"; d="scan'208";a="2588781" From: Anthony PERARD To: Date: Thu, 4 Jul 2019 15:41:58 +0100 Message-ID: <20190704144233.27968-1-anthony.perard@citrix.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 00/35] 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 , Andrew Cooper , Anthony PERARD , xen-devel@lists.xenproject.org, Laszlo Ersek , =?utf-8?q?Roger_Pau_Monn=C3=A9?= Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Patch series available in this git branch: https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v3 Hi, I've started to create a Xen specific platform, in OvmfPkg/XenOvmf.dsc with the goal to make it work on both Xen HVM and Xen PVH. 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/OvmfXen.dsc Then use OVMF.fd as a kernel of a pvh guest config file (with xl/libxl). Patch series available in this git branch: https://xenbits.xen.org/git-http/people/aperard/ovmf.git br.platform-xen-pvh-v3 Anthony PERARD (35): OvmfPkg/ResetSystemLib: Add missing dependency on PciLib OvmfPkg: Create platform OvmfXen OvmfPkg: Introduce XenResetVector OvmfPkg: Introduce XenPlatformPei OvmfPkg/OvmfXen: 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 jumpstart from either hvmloader or PVH OvmfPkg/OvmfXen: 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 XenPlatformLib OvmfPkg/AcpiPlatformDxe: Use Xen PVH RSDP if it exist OvmfPkg/XenHypercallLib: Enable it in PEIM OvmfPkg/XenPlatformPei: Reinit XenHypercallLib OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it has run OvmfPkg/XenPlatformPei: Setup HyperPages earlier OvmfPkg/XenPlatformPei: Introduce XenPvhDetected OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h OvmfPkg/XenPlatformPei: no hvmloader: get the 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/XenPlatformLib: Cache result for XenDetected OvmfPkg/PlatformBootManagerLib: Use XenDetected from XenPlatformLib OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus on Xen PVH OvmfPkg/OvmfXen: Override PcdFSBClock to Xen vLAPIC timer frequency OvmfPkg/OvmfXen: Introduce XenTimerDxe OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg OvmfPkg/OvmfXen: use RealTimeClockRuntimeDxe from EmbeddedPkg OvmfPkg/OvmfPkg.dec | 7 + ArmVirtPkg/ArmVirtXen.dsc | 2 +- OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + OvmfPkg/{OvmfPkgX64.dsc => OvmfXen.dsc} | 238 +------- OvmfPkg/OvmfXen.fdf | 539 ++++++++++++++++++ OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf | 2 +- .../PlatformBootManagerLib.inf | 5 + .../Library/ResetSystemLib/ResetSystemLib.inf | 1 + .../XenHypercallLib/XenHypercallLib.inf | 4 +- .../Library/XenPlatformLib/XenPlatformLib.inf | 33 ++ .../XenRealTimeClockLib.inf | 0 OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.inf | 34 ++ OvmfPkg/XenPlatformPei/XenPlatformPei.inf | 100 ++++ OvmfPkg/XenResetVector/XenResetVector.inf | 41 ++ OvmfPkg/XenTimerDxe/XenTimerDxe.inf | 42 ++ OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h | 6 +- OvmfPkg/Include/Guid/XenInfo.h | 8 +- .../Xen/arch-x86/hvm/start_info.h | 143 +++++ OvmfPkg/Include/IndustryStandard/Xen/memory.h | 23 + OvmfPkg/Include/Library/XenHypercallLib.h | 12 + OvmfPkg/Include/Library/XenPlatformLib.h | 53 ++ .../PlatformBootManagerLib/BdsPlatform.h | 1 + OvmfPkg/XenPlatformPei/Cmos.h | 52 ++ OvmfPkg/XenPlatformPei/Platform.h | 129 +++++ OvmfPkg/XenPlatformPei/Xen.h | 39 ++ OvmfPkg/XenTimerDxe/XenTimerDxe.h | 177 ++++++ OvmfPkg/AcpiPlatformDxe/Xen.c | 41 +- .../PlatformBootManagerLib/BdsPlatform.c | 42 +- .../PlatformBootManagerLib/PlatformData.c | 59 +- .../Library/ResetSystemLib/ResetSystemLib.c | 3 +- .../Library/XenHypercallLib/X86XenHypercall.c | 8 +- .../Library/XenHypercallLib/XenHypercall.c | 16 + .../Library/XenPlatformLib/XenPlatformLib.c | 81 +++ .../XenRealTimeClockLib/XenRealTimeClockLib.c | 0 OvmfPkg/OvmfXenElfHeaderGenerator.c | 140 +++++ OvmfPkg/PlatformPei/Xen.c | 3 - OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c | 108 ++++ OvmfPkg/XenPlatformPei/AmdSev.c | 64 +++ OvmfPkg/XenPlatformPei/ClearCache.c | 112 ++++ OvmfPkg/XenPlatformPei/Cmos.c | 60 ++ OvmfPkg/XenPlatformPei/Fv.c | 76 +++ OvmfPkg/XenPlatformPei/MemDetect.c | 492 ++++++++++++++++ OvmfPkg/XenPlatformPei/Platform.c | 452 +++++++++++++++ OvmfPkg/XenPlatformPei/Xen.c | 378 ++++++++++++ OvmfPkg/XenTimerDxe/XenTimerDxe.c | 355 ++++++++++++ .../XenResetVector/Ia16/Real16ToFlat32.asm | 137 +++++ .../XenResetVector/Ia16/ResetVectorVtf0.asm | 81 +++ .../XenResetVector/Ia32/Flat32ToFlat64.asm | 68 +++ OvmfPkg/XenResetVector/Ia32/PageTables64.asm | 149 +++++ .../XenResetVector/Ia32/SearchForBfvBase.asm | 87 +++ OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm | 84 +++ OvmfPkg/XenResetVector/XenResetVector.nasmb | 71 +++ 54 files changed, 4563 insertions(+), 298 deletions(-) copy OvmfPkg/{OvmfPkgX64.dsc => OvmfXen.dsc} (76%) create mode 100644 OvmfPkg/OvmfXen.fdf create mode 100644 OvmfPkg/Library/XenPlatformLib/XenPlatformLib.inf 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 create mode 100644 OvmfPkg/XenPlatformPei/Xen.h 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/OvmfXenElfHeaderGenerator.c 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 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