From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com []) by mx.groups.io with SMTP id smtpd.web12.16147.1620419954580423372 for ; Fri, 07 May 2021 13:39:15 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amd.com header.s=selector1 header.b=2LGPUTi7; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: , mailfrom: brijesh.singh@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N6RwndFX9+0GePkt7BcmCBSEN+JGb0YeNb/PMdlvg4Q0xURRRH6czm3wzK7WNDGFZKzHG4TT7GFKSq64Seh4xZUr4hJdIWfXh6XYBuJrfQM1yWNMWbeURxYaJ7EcAtjut9peFJa4v4akwo9cf/5jreaJ7+rZIhbZp1CTmsnLZIQ3U4PPHbEAZaIsOsXnDOPremz42Pe5RQpL9oSdK0Pp2xcZ12BZ7a0gjCBOg0ogthbmBUfoPP5Vn85Qe1PxvvJ3zawADP8N/6yPq5G51qy5nUk0wBPQo1guan9wRsbpGnMRkwqpHcPEZ1q1o7OK7QKXSoYEvqPEA7aug469mTRXlw== 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=kV7iQVmNNE0WPrplP+62FogHa5eaNom2qGKrp/tRQw0=; b=YW2Y7zage2Vf3zeqKUFyFB8x5IHtzl3SaHXpNlulPNcselUgcyBTNKDFeUNBpAqKmbKAsZum3H2xdaFoGp6eBMVblF52J6GQ3PJuTuWKEo6QWpoybDgH+7nePtDQ2gO0uYhRfMX3vXNlvxVLng15zJejz+ylTzpa8HB8rUhtrKAb2+5MmP5mpFfJKSnIWebkehew5AIO7Y4A4UUwXtH0EF88vAWZZnESkJuXjuOmYuQHPJy267D2OfXXoGZRGlhNyya8IiEJ2QfNZZGOu3qawvl9eFTYGsYfDNCsJoOdzbARk/+i8FZJkdpbH8d/aAd/bHkXw5nbyIK6xqjCe76JLg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kV7iQVmNNE0WPrplP+62FogHa5eaNom2qGKrp/tRQw0=; b=2LGPUTi7tfGN4E8H1rSNGGj8k35yyD6Gx1ekoQw4c2Du+VsxP43+pED5if/LtR06X2RoSuuttCESbiPUfekrHZ7rJev9idUHhBLpVSmW9iOYY3kX7HnVcs1FhMhE2Lu2ku0r/DtTOt0sGdiY2c2XDURGNHbFSPK3z4Fg/1sNJSw= Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=amd.com; Received: from SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) by SN6PR12MB2829.namprd12.prod.outlook.com (2603:10b6:805:e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.27; Fri, 7 May 2021 20:39:13 +0000 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.4108.029; Fri, 7 May 2021 20:39:13 +0000 From: "Brijesh Singh" To: devel@edk2.groups.io CC: Tom Lendacky , James Bottomley , Min Xu , Jiewen Yao , Jordan Justen , Ard Biesheuvel , Laszlo Ersek , Erdem Aktas , Michael D Kinney , Liming Gao , Zhiguang Liu , Brijesh Singh Subject: [PATCH 08/13] MdePkg/BaseLib: add support for RMPADJUST instruction Date: Fri, 7 May 2021 15:38:33 -0500 Message-ID: <20210507203838.23706-9-brijesh.singh@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210507203838.23706-1-brijesh.singh@amd.com> References: <20210507203838.23706-1-brijesh.singh@amd.com> X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN7PR04CA0020.namprd04.prod.outlook.com (2603:10b6:806:f2::25) To SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) Return-Path: brijesh.singh@amd.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sbrijesh-desktop.amd.com (165.204.77.1) by SN7PR04CA0020.namprd04.prod.outlook.com (2603:10b6:806:f2::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Fri, 7 May 2021 20:39:13 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d0f6e52c-01ef-4111-8398-08d911982cdb X-MS-TrafficTypeDiagnostic: SN6PR12MB2829: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qJXGX38Pv4QmJyH0Zrj8QieVBA3eSTlbjEFZsrm7B6KsveUAuORfxEGGHr0HGYYMwJ5vKECELkOPZfm6tOvVMc+KYLw7eFzMHgAQ/WnjuTNANOiGzuF8TH0X5KLYGKwymd9WOaQNEySgHCL8/2cSmsU6uDxPBPo4nE073TRBd/ulnsgtZQZp3x8iX8NFUpgKSgvGy1ZAVwuqmfRRO4gjp9cYJ1Cj0pOXpnJqASJlop7XZeMDqxxACuqA/mVm0qHkuLDKKOGVJncbXjz/ws8uu7yxOw9f1Ev1VSkVjCoIpbUAG/TZ15FAujm/bhvG4XQxbLwoLXSY17QFp+ZEvVzRYGTZVI7h3M+R+iK54BTT+E+v2zfi1V4w0AYohthHuic7zoybPnIZdn56Cci6Q71qPgN4zSTrWnen9BLcCdyUMH/xzmkwJ6jLDATJz6A2u5w3IYTr9ruH7JDESRwqzouMmCGcyPb7GDm8iYlfNatUXrI1sBT7n0HsyzhpuiggKUf86pv1guLqu4MOzomg4361twkehvlieqXjkWArveM9WEAeUNPcfHYMgGf6UySaWy67Tw1YpoYc0u8QaC2f4LlDKTzw1JxtCPfl6TRcHq/leLk1P3c5siW+tuk3gbVblseGlkFuLSBdA1hqGIy2riWEZMeMXinreL39PbaNG6oU+NeHR3vlin4c7CdZmY0BtIVSvSj+9ZzR31mkjomYnQi2LaFS3RT53nkE4PUPmeJE0PI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR12MB2718.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(136003)(346002)(39860400002)(2906002)(1076003)(86362001)(44832011)(8936002)(6916009)(186003)(8676002)(6666004)(956004)(478600001)(26005)(7696005)(2616005)(83380400001)(19627235002)(16526019)(52116002)(316002)(36756003)(66946007)(66476007)(54906003)(38100700002)(66556008)(38350700002)(4326008)(7416002)(966005)(6486002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?UyXZO5G7jWxmYGfZCURpiDWTRs5ZA0F9XxIm+wsbxXgWyY2uAg6N9pJ/PjF6?= =?us-ascii?Q?8QQD0K1V/7nRvihGECdSpxLUbXRatZUa/gThHk41plzGUDnBOb1scmyLWLGN?= =?us-ascii?Q?Z04BLvO97I5e0R//B02aT5vvsDI4SZgYuytlFWzZDOTSRUWC58qXk1ecutd7?= =?us-ascii?Q?CARJVc+7X8qKF1LHQLp7/qJqYuxpDA4tImydiynoPlfeDTiq6Hab5Bun70MS?= =?us-ascii?Q?MxtEMGpkMFP/q8HAaMHz1UhYiA+zXzcwrGRhBf++3A1GhDiH93bECeE1rrYg?= =?us-ascii?Q?8gb5InjCzSc0Lim+w4IL+JbliKLb7yW4atj96EVHgNaGSiMG4a8NSRSRi6AP?= =?us-ascii?Q?ROuNWX40IPpZCN89nVSM3LvSiLj3QtGVL34x/f5WaPiY/mpNFW6gYp8cG8P6?= =?us-ascii?Q?oBe6cMktoB2etebOLTNLsCmQIAC/hme3/fUoVY2H0DidAaQJQmzrUc2ArVVF?= =?us-ascii?Q?lTZTcHDkIJUiARiuuab71eYcvQrlorExRu4pX+8K0WyXaUQUugWnMxGcs7VR?= =?us-ascii?Q?pdShwJt1lrw7PZYlSYYG8E7Z+ke6mwI59c0c3aB4oZDlmqyn0xc6MnZLThw5?= =?us-ascii?Q?VNoGO8zq2Pnb1kKVWisXnOd44e2i9/zGDGL9AVxiL2OYY0gGzV3j8aLr8QXp?= =?us-ascii?Q?xvfiR0Uy74T8J3p3aTLybiJMElDmPg6bO8IuLDBFBwZa3BAKZNrbVCCZWh5R?= =?us-ascii?Q?XJhKvsPgEhhal41fVPuQq3CMe7lYe1fq7Ymhu512+NgbiNaLBDXw27VtZeXY?= =?us-ascii?Q?Ha18iqp+D121sOS8MfdJE+YgnBPsqTKqIjpztAEW41sSQHLEfHiQXtelv3Bw?= =?us-ascii?Q?35Dk3nuU0zcG4VXOkzCmVRXlnbEJkIgK9AOGkDHfGtDvMJ8smbXBCJic/9H6?= =?us-ascii?Q?4Ns5axF2YLPcY/XCF9oudeJC7iJRnT/VULZQJiNEP9sfddpmVuiP81bh27v2?= =?us-ascii?Q?iEdbrjHg/0HffGDskYQV+QG8mT3GOwm1bZFOV1QPzC+1EVcKDEXB4UT36RY1?= =?us-ascii?Q?ivYDucuTuXudzGIoTvrWAKato8br1khyUZCMHQ7GnqQyxPME64SEulqhPDoS?= =?us-ascii?Q?ahRtt9yVaEdzng+PMPU76APHRjbztrm1EY9moKvd9heuGfXUtKjqchUXJ5Ld?= =?us-ascii?Q?4eB2pBuwX6CcGPLBG5WuPGTlJIHqrGvNeWMOQyuyF7QAXnRlab1fl67ufonV?= =?us-ascii?Q?odhm+T48KO2MDYrTLNgPVa3CydDS1N3tGcx7L+lbbkrvRSXqbFzZsTZ74FBf?= =?us-ascii?Q?1wXKXPlyHq3SkJ2KYnrlxeFKJp34RPzkmDXJDczC4JpvNcxjkALxRQEnDk6Y?= =?us-ascii?Q?dh8wUHylBZlLCQcnDub4AzGL?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0f6e52c-01ef-4111-8398-08d911982cdb X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB2718.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2021 20:39:13.6499 (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: q+PhG6qMNTwnG/PglDrgwYHfVdbexhrk02a0hiwcY+5hvJQiFhwnXJd7TeIhqsSZ+EAOf5hJiU1hanM9f8cG/w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR12MB2829 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain From: Tom Lendacky BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3275 The RMPADJUST instruction will be used by the SEV-SNP guest to modify the RMP permissions for a guest page. See AMD APM volume 3 for further details. Cc: James Bottomley Cc: Min Xu Cc: Jiewen Yao Cc: Tom Lendacky Cc: Jordan Justen Cc: Ard Biesheuvel Cc: Laszlo Ersek Cc: Erdem Aktas Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Signed-off-by: Tom Lendacky Signed-off-by: Brijesh Singh --- MdePkg/Library/BaseLib/BaseLib.inf | 1 + MdePkg/Include/Library/BaseLib.h | 36 +++++++++++++++++++- MdePkg/Include/X64/Nasm.inc | 8 +++++ MdePkg/Library/BaseLib/X64/RmpAdjust.nasm | 40 +++++++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 MdePkg/Library/BaseLib/X64/RmpAdjust.nasm diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/Ba= seLib.inf index 89a52f72c08a..6ccb8997b7e8 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -319,6 +319,7 @@ [Sources.X64] X64/DisablePaging64.nasm X64/Pvalidate.nasm X64/RdRand.nasm + X64/RmpAdjust.nasm X64/XGetBv.nasm X64/XSetBv.nasm X64/VmgExit.nasm diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/Base= Lib.h index f177034af6a1..04e58f995b9a 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -4857,9 +4857,43 @@ AsmPvalidate ( IN BOOLEAN Validate, IN PHYSICAL_ADDRESS Address ); + +// +// RDX settings for RMPADJUST +// +#define RMPADJUST_VMPL_MAX 3 +#define RMPADJUST_VMPL_MASK 0xFF +#define RMPADJUST_VMPL_SHIFT 0 +#define RMPADJUST_PERMISSION_MASK_MASK 0xFF +#define RMPADJUST_PERMISSION_MASK_SHIFT 8 +#define RMPADJUST_VMSA_PAGE_BIT BIT16 + +/** + Adjusts the permissions of an SEV-SNP guest page. + + Executes a RMPADJUST instruction with the register state specified by Ra= x, + Rcx and Rdx. Returns Eax. This function is only available x64. + + The instruction is available only when CPUID Fn8000_001F_EAX[SNP]=3D1. + + @param[in] Rax The value to load into RAX before executing the RMPADJ= UST + instruction. + @param[in] Rcx The value to load into RCX before executing the RMPADJ= UST + instruction. + @param[in] Rdx The value to load into RDX before executing the RMPADJ= UST + instruction. + + @return Eax +**/ +UINTN +EFIAPI +AsmRmpAdjust ( + IN UINTN Rax, + IN UINTN Rcx, + IN UINTN Rdx + ); #endif =20 - #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) /// /// IA32 and x64 Specific Functions. diff --git a/MdePkg/Include/X64/Nasm.inc b/MdePkg/Include/X64/Nasm.inc index 528bb3385609..cfb14edc9449 100644 --- a/MdePkg/Include/X64/Nasm.inc +++ b/MdePkg/Include/X64/Nasm.inc @@ -41,6 +41,14 @@ DB 0xF2, 0x0F, 0x01, 0xFF %endmacro =20 +; +; Macro for the RMPADJUST instruction, defined in AMD APM volume 3. +; NASM feature request URL: https://bugzilla.nasm.us/show_bug.cgi?id=3D339= 2754 +; +%macro RMPADJUST 0 + DB 0xF3, 0x0F, 0x01, 0xFE +%endmacro + ; NASM provides built-in macros STRUC and ENDSTRUC for structure definitio= n. ; For example, to define a structure called mytype containing a longword, ; a word, a byte and a string of bytes, you might code diff --git a/MdePkg/Library/BaseLib/X64/RmpAdjust.nasm b/MdePkg/Library/Bas= eLib/X64/RmpAdjust.nasm new file mode 100644 index 000000000000..f2c295b67c9c --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/RmpAdjust.nasm @@ -0,0 +1,40 @@ +;-------------------------------------------------------------------------= ---- +; +; Copyright (c) 2021, Advanced Micro Devices, Inc. All rights reserved. +; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; RmpAdjust.Asm +; +; Abstract: +; +; AsmRmpAdjust function +; +; Notes: +; +;-------------------------------------------------------------------------= ---- + +%include "Nasm.inc" + + SECTION .text + +;-------------------------------------------------------------------------= ---- +; UINTN +; EFIAPI +; AsmRmpAdjust ( +; IN UINTN Rax, +; IN UINTN Rcx, +; IN UINTN Rdx +; ) +;-------------------------------------------------------------------------= ---- +global ASM_PFX(AsmRmpAdjust) +ASM_PFX(AsmRmpAdjust): + mov rax, rcx ; Input Rax is in RCX by calling convention + mov rcx, rdx ; Input Rcx is in RDX by calling convention + mov rdx, r8 ; Input Rdx is in R8 by calling convention + + RMPADJUST + + ; RMPADJUST returns the status in the EAX register. + ret --=20 2.17.1