From nobody Mon Feb 9 11:07:26 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+64182+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+64182+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1597325075973702.3651317936537; Thu, 13 Aug 2020 06:24:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id tiG3YY1788612xo0J32oPUG6; Thu, 13 Aug 2020 06:24:35 -0700 X-Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.89]) by mx.groups.io with SMTP id smtpd.web11.9808.1597325073951232313 for ; Thu, 13 Aug 2020 06:24:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jTfdwvcLoPdEI/URQFl2t90oVUMDyV7hgR6g1pBjOhdXsxYwlwh+hZiYRc29uhOOSoQQNH9klPc/2sQ/867qpZHVDTUdDUdXK07v3PxCFYhjsaWx9UA01nnP5eWsYCPh0fOFCebjSEdxFX0nklBpRS9H8lMokfv8w0/O0I4Lb7s7x17lGLI+jEgr8a/caSK2TjCtmQdI67isLAUWK+VCPBOp5aMUpg2ntyG5kWIsiTRubcUYPZWYbdC2wgbeFYOObZijtQHkJZdkrZZScEUmDUmHOOl1iHvgP/vGF7adE7bfqF01+DIVWPJMc12mDFmA3mauY4Q7auNL+K/rN6HV1w== 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=mTw/jk7Vyf2n4mlur5gJs3s6w5Tm9JHi1x88CHvr+WU=; b=kdYFbM3Chv97IZzSBsOsO7AkInzaG+4Py2Dw/Jrpz3B3l8gGluDDjTd9NygKfBo8hq+wJyEraX9Qmsa01pUOwUEkPiCaUqdFnMYZO1N7jJk6EXcHbwRq0vSUxXazGNWMqBXNONuLHyNt+jIn71X6e491a38L0eRAEj2dLfYvczZZgTq6gkouJD064bOmb0Tl4a9u0XSiNc2cXckHDHjYmaHRE3BWtQ8v4sSk5zFhs4KJNQza5v4kGcDqZeVP3+lzIHCrHeLrkVwpg6pYwpVMLhl3hJJJyLsoKBPkpqd1opgY3HyycKB3ZKvCeMb7LmAyDJpTaXG9WyJsTLve5NNKdA== 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 DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) by DM5PR1201MB0026.namprd12.prod.outlook.com (2603:10b6:4:52::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.20; Thu, 13 Aug 2020 13:24:32 +0000 X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::25ec:e6ba:197c:4eb0]) by DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::25ec:e6ba:197c:4eb0%8]) with mapi id 15.20.3261.025; Thu, 13 Aug 2020 13:24:32 +0000 From: "Lendacky, Thomas" To: devel@edk2.groups.io CC: Brijesh Singh , Ard Biesheuvel , Eric Dong , Jordan Justen , Laszlo Ersek , Liming Gao , Michael D Kinney , Ray Ni Subject: [edk2-devel] [PATCH v15 06/46] MdePkg/BaseLib: Add support for the XGETBV instruction Date: Thu, 13 Aug 2020 08:22:53 -0500 Message-ID: <7f4d35b919931ea60e4dd8c12537706398235249.1597325013.git.thomas.lendacky@amd.com> In-Reply-To: References: X-ClientProxiedBy: DM6PR11CA0013.namprd11.prod.outlook.com (2603:10b6:5:190::26) To DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Received: from tlendack-t1.amd.com (165.204.77.1) by DM6PR11CA0013.namprd11.prod.outlook.com (2603:10b6:5:190::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.15 via Frontend Transport; Thu, 13 Aug 2020 13:24:31 +0000 X-Originating-IP: [165.204.77.1] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 70c2c4c8-0dae-4950-9bb5-08d83f8c3708 X-MS-TrafficTypeDiagnostic: DM5PR1201MB0026: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: 2l6TmLh7E47DWLnAXS+TRxWjK1hRvkqpF++BjsKOjOg6amhl2k3m2L1pxqSyaB043rVidPJsKw2fX1Wjqm1iENRVqMowOjG2ROKWmm6djoiCkeDfPr4ICMANWV+zIJrYeuvkONDPKsdQzx8fGcJrC5HO4VNunK4ZA/R7WgEurPI0BfEDJAPoznTyJzH+Dui3blO5IJOajHxEzBAPHPKLOQiH4lRqTFZQoQTJHSGKFQ9YqYhdSqFzwTbMH0r1WYXsCmqHjH53rrkmcwLTqWE4DlL60WbeD19Rb1i+qL8P/GH1COAujcW4yev9gprZxZlgmE+TCk6WLW03ea5SJLEIwwus1booIzgp9XRumRTWXSXjzMr+6t+1COxLhgCmwQcvjne7U3Jdg1xuYrNjGPitumLxssVYM5Y0Il97X+9ySNADu4M8VeKxKhoEqXNwwy9IKyLIjj8Kmux4C70VsBlxAQ== X-MS-Exchange-AntiSpam-MessageData: XEW9ZyCl32ACPJNJ4wLbaIceD1wF9p+oomxDymQIPQW0KDiQOPYMREs28mGAPTSu/SRnDsyC6KeBiKSErqlvO91WhoDGiBmzIuXY7EjZvAJ9mpfOTuNe1clcYYj74rYZBjBJvDdzlRLkU+ESOzTy5RQBnLS/pFq5tO7gRLu4wDHD/8A7Svh0qsdAr2qEBYg50I6Uhn3eYCh/9TMaY+GoibuQnIryAH8UNmeEqfPLG2n7WbXDsao3k2NkXLpsrJCvOlE00dKvIEN+JNLV8UWDIuA+3509VbmoEI/h3Akm53d5dqetj7A92rIQ6NQKZNC7ApF1LgGe+ft37+TwKQY34eAf6eU8RQXlA0TJFzabQuZ61JwN/qa7kJOBpufN0EDdm/TaEFhFkxjOkV/5vH1onELs/NTLajsngENbZXy5HJD5BwQbYBWO6OQHUvDtDJkOYtCuFp/xnyL3nvY4n7sPcM+6mLGHvlQThOx+MHRqvOj9r/+YALJPSJakZXkyL7o8nb8kF5DWCfHM1Iyiq98cRDa5/fwnHmPJOEqPOIH1v97QDhl8OVtXCvkO3rr8OfnR1QtZMwNBz7b7+P9W+KTIrlOh8xsM77Q5LwZtQ84kk8x2HhtS+jtd/pphEQtztBHfdT04H9M+UxRAlv+b8vDQ+Q== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70c2c4c8-0dae-4950-9bb5-08d83f8c3708 X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1355.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Aug 2020 13:24:32.6426 (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: 6r4RKoXd/EvPsxVpZdjDVjzw8pdRxO7k0BlL5C7B2IuThX/w2pmNN3KnYBVABSvnIC/60LrMYuEyRdujHByn5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0026 Precedence: Bulk List-Unsubscribe: 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,thomas.lendacky@amd.com X-Gm-Message-State: iqwcmcLtn671stfFvvcUHIKCx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1597325075; bh=JEpYbu94zx8UcbqPa5ZKplZojql6oPLhiXLd6dVEb3A=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=pmt4h9v2ukXb1cvOJUAt7xy3Lkk0+Zj6A1dHJs7PWzvTEBxJ5EEOQ0A4SqyeuZHX5Um mHO2J5UIkjiW11Lw82myctzfVrHu4Jc+OF/CVLkj16mJDWTT6XzmI2Ztk8lmwidp9Cqux drFQud+d5QgvRgiMmZrHPY4oiuHqZtT0Yv8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Tom Lendacky BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2198 Under SEV-ES, a CPUID instruction requires the current value of the XCR0 register. In order to retrieve that value, the XGETBV instruction needs to be executed. Provide the necessary support to execute the XGETBV instruction. Cc: Michael D Kinney Cc: Liming Gao Reviewed-by: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Library/BaseLib/BaseLib.inf | 2 ++ MdePkg/Include/Library/BaseLib.h | 17 ++++++++++ MdePkg/Library/BaseLib/Ia32/XGetBv.nasm | 31 ++++++++++++++++++ MdePkg/Library/BaseLib/X64/XGetBv.nasm | 34 ++++++++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/Ba= seLib.inf index c740a819cacf..3b93b5db8d24 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -183,6 +183,7 @@ [Sources.Ia32] Ia32/EnableCache.nasm| GCC Ia32/DisableCache.nasm| GCC Ia32/RdRand.nasm + Ia32/XGetBv.nasm =20 Ia32/DivS64x64Remainder.c Ia32/InternalSwitchStack.c | MSFT @@ -315,6 +316,7 @@ [Sources.X64] X64/EnableDisableInterrupts.nasm X64/DisablePaging64.nasm X64/RdRand.nasm + X64/XGetBv.nasm ChkStkGcc.c | GCC =20 [Sources.EBC] diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/Base= Lib.h index 8e7b87cbda4e..7edf0051a0a0 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -7831,6 +7831,23 @@ AsmLfence ( VOID ); =20 +/** + Executes a XGETBV instruction + + Executes a XGETBV instruction. This function is only available on IA-32 = and + x64. + + @param[in] Index Extended control register index + + @return The current value of the extended control regist= er +**/ +UINT64 +EFIAPI +AsmXGetBv ( + IN UINT32 Index + ); + + /** Patch the immediate operand of an IA32 or X64 instruction such that the = byte, word, dword or qword operand is encoded at the end of the instruction's diff --git a/MdePkg/Library/BaseLib/Ia32/XGetBv.nasm b/MdePkg/Library/BaseL= ib/Ia32/XGetBv.nasm new file mode 100644 index 000000000000..9f7b03bbff35 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/XGetBv.nasm @@ -0,0 +1,31 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; XGetBv.Asm +; +; Abstract: +; +; AsmXgetBv function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + SECTION .text + +;-------------------------------------------------------------------------= ----- +; UINT64 +; EFIAPI +; AsmXGetBv ( +; IN UINT32 Index +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmXGetBv) +ASM_PFX(AsmXGetBv): + mov ecx, [esp + 4] + xgetbv + ret diff --git a/MdePkg/Library/BaseLib/X64/XGetBv.nasm b/MdePkg/Library/BaseLi= b/X64/XGetBv.nasm new file mode 100644 index 000000000000..09f3be8ae0a8 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/XGetBv.nasm @@ -0,0 +1,34 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; XGetBv.Asm +; +; Abstract: +; +; AsmXgetBv function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + DEFAULT REL + SECTION .text + +;-------------------------------------------------------------------------= ----- +; UINT64 +; EFIAPI +; AsmXGetBv ( +; IN UINT32 Index +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmXGetBv) +ASM_PFX(AsmXGetBv): + xgetbv + shl rdx, 32 + or rax, rdx + ret + --=20 2.28.0 -=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 (#64182): https://edk2.groups.io/g/devel/message/64182 Mute This Topic: https://groups.io/mt/76166943/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-