From nobody Fri Apr 19 08:24:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+74645+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+74645+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=amd.com Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1619783555671120.05536038566675; Fri, 30 Apr 2021 04:52:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id QWUDYY1788612xp1LyTOzhii; Fri, 30 Apr 2021 04:52:35 -0700 X-Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com []) by mx.groups.io with SMTP id smtpd.web12.10214.1619783548337545009 for ; Fri, 30 Apr 2021 04:52:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LkQNRi4iMxyAshRfeyIMps3c3H0TK+NRW1rVwGg8CGq/4IAvrjjWoIeIMR3EJWU4Wv9JS8UeR5JqSA9JOoAhgIK4a8ZriuJHfml0A4pdvjyMA73kK/8VROsfcyo4lL7xNWF6M0FFWFsNOnxrb8/ieuGRHwEyKRup0YGnrfSiopWr4PotJKxMSBWOB62+0cZ/0NfkxWou/PYGb/FY1lye6Z6Se7jFEUsrd/4rxX4SvMUjXMBCi6BUw11s8TXv3h/mHGMhyY5zI/DIBrNmYFls98TlP+hmLtIpnCLdMi9NvYocy4ETCwc38GEYh5ZHzy+/vxfA7Z/wCX2YE29PP3PiEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n1Xxssj3ZzWd3ARlI4yH2YXaK1fakrp5X8She7NzXYI=; b=lGhroJ4c55HuUSDaS8zZmh5Ix8QTSoczvxtFyTw8fhrZpj83EEO02wbd8eZ8JGLCQZ4oEeJuYpSXRfl/A2oxPk0MtXgb8fJimKXVITArNMwoN8RVyKLSxzduxI17NfYDApxXAvVlWJvPU6D6gpVIrjKmmIUlh30MYAIcLnQVPEAc2fo/GIHHpreYEsRFKRyAoDIotU5FhXZljjB1UHhd57FZgLJQFeJcvQ7QQQSvfnGv7EGNXd1S9f5qugxtOooK8YVzNYehm4SLCRdoxPplZggb+i7z70G/dNDSE2U0Z3njHy2LV3CY+Bjit9vg9S5z6ognZH5K27pqASt3GfCTBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none X-Received: from SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) by SN6PR12MB2783.namprd12.prod.outlook.com (2603:10b6:805:78::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4065.25; Fri, 30 Apr 2021 11:52:27 +0000 X-Received: from SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94]) by SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94%6]) with mapi id 15.20.4065.027; Fri, 30 Apr 2021 11:52:27 +0000 From: "Brijesh Singh" To: devel@edk2.groups.io Cc: Brijesh Singh , James Bottomley , Min Xu , Jiewen Yao , Tom Lendacky , Jordan Justen , Ard Biesheuvel , Laszlo Ersek , Erdem Aktas Subject: [edk2-devel] [PATCH RFC v2 18/28] OvmfPkg: Add a library to support registering GHCB GPA Date: Fri, 30 Apr 2021 06:51:38 -0500 Message-Id: <20210430115148.22267-19-brijesh.singh@amd.com> In-Reply-To: <20210430115148.22267-1-brijesh.singh@amd.com> References: <20210430115148.22267-1-brijesh.singh@amd.com> X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SA0PR12CA0006.namprd12.prod.outlook.com (2603:10b6:806:6f::11) To SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Received: from sbrijesh-desktop.amd.com (165.204.77.1) by SA0PR12CA0006.namprd12.prod.outlook.com (2603:10b6:806:6f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend Transport; Fri, 30 Apr 2021 11:52:26 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bf64e3e7-fc2c-442a-3542-08d90bce6d29 X-MS-TrafficTypeDiagnostic: SN6PR12MB2783: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: w/dOtqMjydFG5RpNxM6Zb55d3WxuO4a5/3o9wciSGFvsauZoer/gbEmbm/A+BNwkWTQCHRMWgAZnRJ5dOn7K5mueTWFSoKqiuOtsC256D5pdi0vuScgO6dCNxWjntyBwVruoMOKjJzK5equzIwCCJLm2utvClu+7/AOeCaFnKri95KjX7k8MDTVkJyNLBTPEPe/nvCnHLGQaqYYemmNXMwz1nl6PjUgq7hwnmx7RSKUfCfNyLxWiHEvPxJAs6RPC6GvfUq4r2b9u9CgpWY0cBNR+JLtMwC1RzkV7nQOqjpZGE8NCbmzH6DuE18J4UjvfXXdmrle1UQuBAjoBNmo8z3tePK5reHMV+xIJrrNJU6CwkH74p05bd5ygxZe7xWmI8AZbPOEc7sGj7fqsP2OMoRWACQbnJU7z60wYYmCPUKh20p1aGDB3iawI6sBi6zWR/t7+/6vrcfbDZAYVHNpYEaDge7/nCf842gpgYkbCitP5krsABbqIqAfk6zifKEncsQ05fUEJDm9e5oiu3FOc1BRw5QosDa+ODVQulj8LBgQkqXZtN0WEAjCeI50anwr8tHtka9kDUWYe+G19myKa5OoaN5jq1cb9tZ4D8Tb+XDl3TmQt2oAEkYNu436LX1ZNh9bK7o8StcQjU5iDlMmur83vFqmXkxBR1a3cbFRZY06J2LXGhlx9Tgp9tvumMn5xyj+Q3H5n7T8g3djuJs51VOQWjDTrP+HVBjPGkXP+ZJk= X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?YIuNxIbjO2dEo0q6I8NK7g031kYrBntXa/RV3EgW59rlUd3YaleENqaFl6dE?= =?us-ascii?Q?/q1oeorKft3A751kC+AVlubYvDc+HY5xGxcsO5sKnuj6Chqt+9jAvbstHbea?= =?us-ascii?Q?NBcx2iJ11ijP5vXzmtixCzkil8aVo0S2+8ELNXdqgJjkdtxknjJKfE4sIlpA?= =?us-ascii?Q?8YLgQvnLOX6u/0ptzoOtR6A9dA3pRMH32D14ZmtxQWUUxIvtxdnq+woOomrP?= =?us-ascii?Q?kUMDvu3mv3sbrS2FeqduOCR7W1Fd6uGhPDvcDvCccyciAPGmdicR7f/WQgCM?= =?us-ascii?Q?6GlclaLMTX0RcEyLzOV35gqKC7D5gsB1y9Qj/hqZ/wBGTUfhicEdNsA0rWmG?= =?us-ascii?Q?PaWoJ09JXa5qmxN9WoQwkEt1c1O4xpqxMrD+qMDGOR9onjrU51x4lor6g/bT?= =?us-ascii?Q?5fmd7G+ijrMn2zsQ7iIOjPBHIN+cutKXVNb2NQ5rbGlJuISzLSmA6DLRLr+L?= =?us-ascii?Q?YSSsa32/dNLPMPDXcMWXInqpMTPsLnXvjG6yp552dKtXXDBdH/BFroPw7GhN?= =?us-ascii?Q?Ta26DHJwaz42ErHBXHEWDoN34EaVvnbI1ie/3zqzTF2LdRqhqON0xCp8wVRB?= =?us-ascii?Q?fICKqVYQB+LHJoQUWOvnGiuf4Hc7pCfIuhZQklSABXE/T7O1c3sM2nyLoXsE?= =?us-ascii?Q?vx0xc0PbGt8D4pFfWcYrk6Sf89ILWoe1RmGZXFTZ2yenGRrr15F/h6MmS9xz?= =?us-ascii?Q?CsQOEkP2NaxRuzHACRKlyPPv5+owjAaNZO08p5fnKjFbV1sNY5VNwIZxfouw?= =?us-ascii?Q?PPuRnd/f1L84HCb7zCC9u6X7rlVpWnTSOZcwYFsoqHeMzTUEF8+AJwcR1uYR?= =?us-ascii?Q?Kr6nFcysXjS8KE8E05k0tMqQIsRa5LaNPScJhNJGRn0jjB8LzQVSBUoDwOt8?= =?us-ascii?Q?3RNY1C8crMeJKgxBC3VDKv5Zpv7LGbgv3uRarFrvtYaxDV2m1GGx00V/oT5I?= =?us-ascii?Q?ePGkVmJ3zaczHPvurDvf+C4o/tZf4MM5heATaV4ZIfrwJyScYvR1dhSETM4l?= =?us-ascii?Q?+BuNKsHgRrwM0WocFdxe6LPQJ4e0J7AYTOpgKAq/PteBdhnViJ4icyIORL8h?= =?us-ascii?Q?AMzE4d/VZ7B4b2u4eaiesSiqNhVI+vF+kfWDh6M++7+8Cm9VjlkPJtWol8E9?= =?us-ascii?Q?ZtGwQJMFdLLMFWpl1faWLYnchv9ixCOULcJmIMYxAPeBBYq3IQCJ3BuZhk7x?= =?us-ascii?Q?EYMNH7N2DuSKgHCO/6X0l3/NxkMae/QYCd69iZzYIsu9oeYQ5uP6GSDDQWX5?= =?us-ascii?Q?dNX5fqyA6Dezyya4juhzHzdJymiiBThvWpEDCGfDLR/3T6xQDlrozVtmOuRc?= =?us-ascii?Q?KBJbHesv0YDJL5oJY/I0fEa3?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf64e3e7-fc2c-442a-3542-08d90bce6d29 X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB2718.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Apr 2021 11:52:27.3840 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Ta60irmSBaMx+fqonIOOC7OMCrXHncrKgG1c/7MhFgVqSb+A0QF0MEbTBsD00X7+9p5auNUtD0YJUycEeurImg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR12MB2783 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,brijesh.singh@amd.com X-Gm-Message-State: 1Mul6PD1TLvx8wxY247S0ElHx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1619783555; bh=R4yPBALauNJPIm+KIaZOAcTmJH23hgdchBcY3CfzDrU=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=Hy/2Y9cb75O5fAkyNmAiAQlfRo9QBNo4n5meZwWCTJsPxHjOqq9zRbqsytNEfeo0Yis jquCAqPIDLFAGHODhe9VzoKGceDxKsrY7AaLcco6ageEEbwyJe5vXlCn6JnCRVcw6CtIP j1aPabn0v7PL/Sj6nNTg6CCadJF0ymsU7PA= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3275 An SEV-SNP guest us required to perform GHCB GPA registration before using a GHCB. See the GHCB spec section 2.5.2 for more details. Add a library that can be called to perform the GHCB GPA registration. Cc: James Bottomley Cc: Min Xu Cc: Jiewen Yao Cc: Tom Lendacky Cc: Jordan Justen Cc: Ard Biesheuvel Cc: Laszlo Ersek Cc: Erdem Aktas Signed-off-by: Brijesh Singh --- OvmfPkg/Include/Library/GhcbRegisterLib.h | 27 ++++++ OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c | 97 +++++++++++++++++= +++ OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf | 33 +++++++ OvmfPkg/OvmfPkg.dec | 4 + OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + 7 files changed, 164 insertions(+) diff --git a/OvmfPkg/Include/Library/GhcbRegisterLib.h b/OvmfPkg/Include/Li= brary/GhcbRegisterLib.h new file mode 100644 index 0000000000..7d98b6eb36 --- /dev/null +++ b/OvmfPkg/Include/Library/GhcbRegisterLib.h @@ -0,0 +1,27 @@ +/** @file + + Declarations of utility functions used for GHCB GPA registration. + + Copyright (C) 2021, AMD Inc, All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _GHCB_REGISTER_LIB_H_ +#define _GHCB_REGISTER_LIB_H_ + +/** + + This function can be used to register the GHCB GPA. + + @param[in] Address The physical address to registered. + +**/ +VOID +EFIAPI +GhcbRegister ( + IN EFI_PHYSICAL_ADDRESS Address + ); + +#endif // _GHCB_REGISTER_LIB_H_ diff --git a/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c b/OvmfPkg/Li= brary/GhcbRegisterLib/GhcbRegisterLib.c new file mode 100644 index 0000000000..7fe0aad75a --- /dev/null +++ b/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.c @@ -0,0 +1,97 @@ +/** @file + GHCBRegister Support Library. + + Copyright (C) 2021, Advanced Micro Devices, Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include + +/** + Handle an SEV-SNP/GHCB protocol check failure. + + Notify the hypervisor using the VMGEXIT instruction that the SEV-SNP gue= st + wishes to be terminated. + + @param[in] ReasonCode Reason code to provide to the hypervisor for the + termination request. + +**/ +STATIC +VOID +SevEsProtocolFailure ( + IN UINT8 ReasonCode + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + + // + // Use the GHCB MSR Protocol to request termination by the hypervisor + // + Msr.GhcbPhysicalAddress =3D 0; + Msr.GhcbTerminate.Function =3D GHCB_INFO_TERMINATE_REQUEST; + Msr.GhcbTerminate.ReasonCodeSet =3D GHCB_TERMINATE_GHCB; + Msr.GhcbTerminate.ReasonCode =3D ReasonCode; + AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); + + AsmVmgExit (); + + ASSERT (FALSE); + CpuDeadLoop (); +} + +/** + + This function can be used to register the GHCB GPA. + + @param[in] Address The physical address to be registered. + +**/ +VOID +EFIAPI +GhcbRegister ( + IN EFI_PHYSICAL_ADDRESS Address + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + MSR_SEV_ES_GHCB_REGISTER CurrentMsr; + EFI_PHYSICAL_ADDRESS GuestFrameNumber; + + GuestFrameNumber =3D Address >> EFI_PAGE_SHIFT; + + // + // Save the current MSR Value + // + CurrentMsr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + + // + // Use the GHCB MSR Protocol to request to register the GPA. + // + Msr.GhcbPhysicalAddress =3D 0; + Msr.GhcbGpaRegister.Function =3D GHCB_INFO_GHCB_GPA_REGISTER_REQUEST; + Msr.GhcbGpaRegister.GuestFrameNumber =3D GuestFrameNumber; + AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); + + AsmVmgExit (); + + Msr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + + // + // If hypervisor responded with a different GPA than requested then fail. + // + if ((Msr.GhcbGpaRegister.Function !=3D GHCB_INFO_GHCB_GPA_REGISTER_RESPO= NSE) || + (Msr.GhcbGpaRegister.GuestFrameNumber !=3D GuestFrameNumber)) { + SevEsProtocolFailure (GHCB_TERMINATE_GHCB_GENERAL); + } + + // + // Restore the MSR + // + AsmWriteMsr64 (MSR_SEV_ES_GHCB, CurrentMsr.GhcbPhysicalAddress); +} diff --git a/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf b/OvmfPkg/= Library/GhcbRegisterLib/GhcbRegisterLib.inf new file mode 100644 index 0000000000..8cc39ef715 --- /dev/null +++ b/OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf @@ -0,0 +1,33 @@ +## @file +# GHCBRegisterLib Support Library. +# +# Copyright (C) 2021, Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D GhcbRegisterLib + FILE_GUID =3D 0e913c15-12cd-430b-8714-ffe85672a77b + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D GhcbRegisterLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D X64 +# + +[Sources.common] + GhcbRegisterLib.c + +[Packages] + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + UefiCpuPkg/UefiCpuPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 3d5574364b..70948ab478 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -106,6 +106,10 @@ # XenPlatformLib|Include/Library/XenPlatformLib.h =20 + ## @libraryclass Register GHCB GPA + # + GhcbRegisterLib|Include/Library/GhcbRegisterLib.h + [Guids] gUefiOvmfPkgTokenSpaceGuid =3D {0x93bb96af, 0xb9f2, 0x4eb8, {= 0x94, 0x62, 0xe0, 0xba, 0x74, 0x56, 0x42, 0x36}} gEfiXenInfoGuid =3D {0xd3b46f3b, 0xd441, 0x1244, {= 0x9a, 0x12, 0x0, 0x12, 0x27, 0x3f, 0xc1, 0x4d}} diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 1730b6558b..f9355172d6 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -243,6 +243,7 @@ [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 78a559da0d..3f27d7b90d 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -247,6 +247,7 @@ [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 593c0e69f6..92447f6a2d 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -247,6 +247,7 @@ [LibraryClasses.common] BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf VmgExitLib|OvmfPkg/Library/VmgExitLib/VmgExitLib.inf + GhcbRegisterLib|OvmfPkg/Library/GhcbRegisterLib/GhcbRegisterLib.inf =20 [LibraryClasses.common.SEC] TimerLib|OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.inf --=20 2.17.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#74645): https://edk2.groups.io/g/devel/message/74645 Mute This Topic: https://groups.io/mt/82479068/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-