From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web09.30895.1652097285736218950 for ; Mon, 09 May 2022 04:54:46 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=PLbsfvoA; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652097285; x=1683633285; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=wXUkeVN9rzu1FiI/7VJJxzBnT7WWWEQtb1lj2FofJxo=; b=PLbsfvoARi3PtjPpbNPdjIeQ6+pfU8j645tZ2gz3kjmTsDNkKKxPvBTg 2ZA1aMDUDm5ZNMzZNXxDnXt/Ijb9cI3MUJX830WwKhXT21ocxY1PGgbp+ /Y9Rgi7rJm140WSoVkDaBuz4P3ZYjdD4UNTh1gaR4vQKE6/CL0R1fcZuz ttmXVcD0RbJpxnwLuvPv1CLKApukhsbsglIjRmpGpt24L9jFVfVSlY3m/ CwQ3bBn/h00JqKqSrc/43oEfU9BibDFIy3AuhLKAAFKc/kjCmLwVlFXmk nXwhBxDa+8C0d+oyOPJU31XrVIVgRUZHBuq+8fqiETJJu+orM5XWN57MG Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10341"; a="266615916" X-IronPort-AV: E=Sophos;i="5.91,211,1647327600"; d="scan'208";a="266615916" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2022 04:54:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,211,1647327600"; d="scan'208";a="669102766" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga002.fm.intel.com with ESMTP; 09 May 2022 04:54:44 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 9 May 2022 04:54:44 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) by ORSMSX609.amr.corp.intel.com (10.22.229.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 9 May 2022 04:54:43 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx609.amr.corp.intel.com (10.22.229.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 9 May 2022 04:54:43 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.171) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 9 May 2022 04:54:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HAc24Fm9WLnMe6lOx+2KtRv+fuZ2MkSse4Q2tzDni25mQJt7NEeTvfiPW/r4ZAKYteDQ5R2dU7WBZzA7vPKxrzM/MBnqPb7G0CCde8l5o9io1IOZATY98rHi9rCAykN1RYXtZIiwmpc6LbhMws4JwKjWimM4LGMe10+KLhuNXKf2yl3hHZBzMmePsEO4fbak1u8inwtlKoHrUXGgB6+3ymRDRNqFiC0neYtkYGoUPGvSBDesjj70GxjtA154yKORuTFS4ZI/qB2gofgRNUTV+51hWEgUaGHN4AJyAI5bE4YfLPPVy4e/nYVC+Dta3uxkDXu8qGfo3nP3T2zvCyisrg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iS5Z+juLQMaH4Ji/oNxBT4XsOgL1uiq9tv0OYvae4j0=; b=W0RZQfSlakuNBC/KAsKBYQNBiAf279D/LfrEESFQrMj8+SFPXbqPudJ2yR2bTx6AwYNbzaNbzOijDJBjAmXjY7hB+YvEr220eR1CuDy8e4fNQUxXQHMQczEoA8SvQ2AS87hMy8ON/lF68d65Hbh9C4uyDNPG3KW5aEtgVEt486X5gADiBQCr+AXIAAz7yUAxQIVta4Qt+2nPOTBoLObj5hrCMJpe76yHoCLvOCxHC8l1BMgEIkQdT/ZCiY2Pfe5oL5cYj4Q2tXbpBj3mFROLZmlmiF80xq9nwt9NJkpDfxkO5VtWnGknxOva3xmy3XfdeChpMMq23vpgUihPqI2lXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by DM6PR11MB4346.namprd11.prod.outlook.com (2603:10b6:5:1dd::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.22; Mon, 9 May 2022 11:54:41 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::2d8b:3e7f:83d7:1e56]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::2d8b:3e7f:83d7:1e56%8]) with mapi id 15.20.5227.023; Mon, 9 May 2022 11:54:41 +0000 From: "Ni, Ray" To: Tom Lendacky CC: "Dong, Eric" , "Kumar, Rahul1" , Michael Roth , "devel@edk2.groups.io" , "Xu, Min M" , "Yao, Jiewen" , Tom Lendacky , "Justen, Jordan L" , Ard Biesheuvel , "Aktas, Erdem" , Gerd Hoffmann , James Bottomley Subject: Re: [edk2-devel] [PATCH 3/4] MpInitLib: Put SEV logic in separate file Thread-Topic: [edk2-devel] [PATCH 3/4] MpInitLib: Put SEV logic in separate file Thread-Index: AQHYYiUKiIIQXD0UdEacJjrPeaL7560Wcqkg Date: Mon, 9 May 2022 11:54:41 +0000 Message-ID: References: <20220507151313.115-1-ray.ni@intel.com> <16ECDB685492F55B.14104@groups.io> In-Reply-To: <16ECDB685492F55B.14104@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3abd8ad4-89ce-489f-25d0-08da31b2b3a1 x-ms-traffictypediagnostic: DM6PR11MB4346:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: XC4B0U3/Sq4EB2QDLnm8Bw9spfuJeFaAV/jjjQHplgbHUQzvWSulqQolQ1O9CnDchHub6xaC4bc/1rzKE4rzJJSbGS79NEP6yDk9whaES1Fl8fAfIqfcS89lwELmHZWL6kqLiDln0sl09yT3QUMKRRDYxvfZnyp5ZGjkTEv7H7qK4bql9F+YMDSMgqm+FYBL4QK7uHkONFTL9A1NfzHU9K2LysngMakmIXeP1BOQNV7Ds8EboL7g0qO1QFmhV4a4U8ZLPZmAiLOXePgxg+vd0ZbiURQf2E0d5K7brMHWny5v8AhtpLpdQnUYadeIgDQn/TdrdkqY7KB75AXv0pTqnv1h0UNxQCTqfg6JUOjx9EevCBg4rQG7LNgQRFcXb1WRvNcJHBoXq0y1texbiETm7TKvjhf6d2qvoZjrOJSwF6JTV99iOKDt4rhv72kYvLzGXcV/Oc5DnJ/waWy2gspAuHRkyDvO1gfR9hr3Sjn4BIDz1RJKaeOL/0zoQ9mqsQWEFeDvCMHsmRplv+qFyLOkIAvz+ad5xNIVWywuPSXLRruEYZpbaROgaJQ1N9uFWbFzjrAU1ranx4Oln1pwtkdTUCOVjs1HhxROhLUzVzdD0K7AqczPoxZbi2HAABumzvWxye4Gn+yucidtx4ttGZmY/Xi7ET7n9+e37vTd7uMVSdwJbPxHcOpTz2ZLA4dX3vZkWUULleXQ0VsAFBMwj5W2t9hw0q2TdNrOqgdF+ZNBNXB+tPdln5aKKtlr0Q59QwE4MxypJ4fEK4TACCgoRKV1YZXWTYruzooWD9JiquVosv57VoOjQMfn6Yc1BPJtf1zZtbYXG/Y68afIRmnC27R0iQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(6029001)(366004)(55016003)(30864003)(9686003)(52536014)(5660300002)(6506007)(7696005)(33656002)(53546011)(26005)(186003)(66476007)(66446008)(6916009)(4326008)(76116006)(54906003)(66946007)(8676002)(64756008)(2906002)(66556008)(19627235002)(38070700005)(71200400001)(122000001)(83380400001)(8936002)(508600001)(86362001)(966005)(82960400001)(38100700002)(316002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?sYi0xhjAHg9mg2zN8zPng7RFnzQWe/88kBs/d046CDl7E97hoRStZGNApOAc?= =?us-ascii?Q?/cRLDtWfMPd+U5t2V13xFdhHWF5cg4YwWdEg08gVLe7abzCkGrq7odcMq0+j?= =?us-ascii?Q?F6A2RIZhsPNkCqmKkRlVvt3Oa9rrrAkf0oy1ZIYb7UbrJWlQDDKZXqC4SoUw?= =?us-ascii?Q?sjLJAh7xexJfgTOhR/6sXQNlX9YkXIdC4tAqb5nJE14aUzXIDjvZqJRbQQq2?= =?us-ascii?Q?a1BMttgF9VvK2UfFFXKu51INodn5AIQV7ZQLuUdFoEo2gy+BBXBI5XcQLeRN?= =?us-ascii?Q?OxqDGJmMI0Zgu7lY5B1uRMyUs4jMLnJUmCRju7a3HYBCWSFnOUC4hq7liF9V?= =?us-ascii?Q?/XuYPVM2eT50TWDDWB4NFTT2PeBYGga2Lgq++gFMpiI4LrdYWPyEuaSmNrly?= =?us-ascii?Q?DRhrdrSs+h6KDQZEmYWHM0TUBvCFb+Eh76g9ddNW7XFj105ZxEwNfH6pFjE2?= =?us-ascii?Q?xoMf5vY8lMPX8SoKXobch7KJuQWFdfdRXQ3ZAjg/Tb6kmnthSY9XWGvMsA6y?= =?us-ascii?Q?l3a+3vFY6L37Mt6JRbDHq+r9iUg17TCoGR0XAZWv9O6NdS9izuwmgVGW5Yyn?= =?us-ascii?Q?YpebRn1xh2VPx02DieCKfWLfQ2UnCvz0Ox7w5k2PNEhwGtK6YccrM7rn1b5X?= =?us-ascii?Q?WpPddaE/DH6XTiFMD95Q1X2aQhWj0rXGqP5Qs0XrXLLeR7V9xwFFULfdE/Qg?= =?us-ascii?Q?7i3w+la3InphIzwhm72itMQVgZqrBEUyiArQtjHgT0WVrfAbcapCertjK3Vl?= =?us-ascii?Q?bcOpRugfQvE7+TbMzoOZiVOId82t51NOBaqVCEHvrgCZwYBafcCgaBnzUUXa?= =?us-ascii?Q?DINuY99JHONAnUy3A4BOeAo9MXL1GJPG8qi4J14ZAvNhKHcqlOvgPsl6ESPZ?= =?us-ascii?Q?mZVcnJ3MTo5L29wght98YBG7CdAe+5JYmLum5N1Hj2YdHevukQRhhCyfl5De?= =?us-ascii?Q?RegLs9gW82ZptzTJdDEFDgoKY/7LTMt11PmRDHPmB/MJrIszKq7w+XAZ+3vX?= =?us-ascii?Q?AvKNjZ/HNvIZhz6X6lZNYuZFuj92NPhb/C272YzWemllrvkOkhWi3X7z12vU?= =?us-ascii?Q?pbu7DEtfmsS1nAOnpfiXhpb7PWQUopJwnIMXVyi4E5KujU7jp/5Ap/UbSQeQ?= =?us-ascii?Q?tvz58rH1CrSo4PNhnNbZe6eH6TMtaHbH0va/49BmIazTCznckllr8GwppdPn?= =?us-ascii?Q?3XvU6H/iWhfKlAroGtddRc8pwv/tHrekt38BMtBYVadSh9K4BpctszCq9Zao?= =?us-ascii?Q?VL6YLTQmIzI1ksCvbQSpH+r+jedGNUk+/imLhJN2pFoQQD0thgDTCJxdzaD8?= =?us-ascii?Q?rdQQQF89385P2QU7YxofOe1Bxpgmy25Rf5EBAQK3QmqrOnCktlJj5YWcG9T8?= =?us-ascii?Q?+11Ov2QyMbJT2I7beG/eOaZcDfiJd0a0avR9gNVpWaK5cFtZ+WKPcOk9VqwX?= =?us-ascii?Q?vP3u2ms5TWhCSo1kOxgLW/FtkKzQZCcYZ+xMDYsvfed6BEQuoxh64o+ESWbI?= =?us-ascii?Q?d7+NckJZtfrMI44IDQmgVMsP5MKfx7gsR3ZLaFP+6G1FQELMWT63B7CGWW2U?= =?us-ascii?Q?f0Xc6hz6xdkCUK+6XvtBlGOPDACQtIqcvyzK3qJ8j5+nOYxOfX8qz6t/3SVY?= =?us-ascii?Q?SYb7DwuWTYKeBcClTz2yzeLCQFILW93lOquOMlep7umt576UUKGYKpj7Nh2j?= =?us-ascii?Q?8ZPW+qqiHPmXRku+YwRtcGYtzZC7TCpaAVOlzNmBqKUEbCmV?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3abd8ad4-89ce-489f-25d0-08da31b2b3a1 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2022 11:54:41.3343 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mokBrN4wX3SGGum++KOyI4+V9lESQBQOkC+vpcGQBRxa9RqBhcrHGNzbUeVnY+p23tD+t7A4OzXFd5gcebP4Ww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4346 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Tom, Can you please review this change? Does it cause any regression to SEV feat= ure? > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Ni, Ray > Sent: Saturday, May 7, 2022 11:13 PM > To: devel@edk2.groups.io > Cc: Dong, Eric ; Kumar, Rahul1 ; Michael Roth ; > James Bottomley ; Xu, Min M ; Yao= , Jiewen ; Tom > Lendacky ; Justen, Jordan L ; Ard Biesheuvel > ; Aktas, Erdem ; Gerd H= offmann > Subject: [edk2-devel] [PATCH 3/4] MpInitLib: Put SEV logic in separate fi= le >=20 > Signed-off-by: Ray Ni > Cc: Eric Dong > Cc: Ray Ni > Cc: Rahul Kumar > Cc: Michael Roth > Cc: James Bottomley > Cc: Min Xu > Cc: Jiewen Yao > Cc: Tom Lendacky > Cc: Jordan Justen > Cc: Ard Biesheuvel > Cc: Erdem Aktas > Cc: Gerd Hoffmann > --- > .../Library/MpInitLib/Ia32/MpFuncs.nasm | 3 +- > UefiCpuPkg/Library/MpInitLib/MpLib.c | 13 +- > UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm | 148 +++++++++++++++++ > UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 157 +----------------- > 4 files changed, 159 insertions(+), 162 deletions(-) >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm b/UefiCpuPkg/= Library/MpInitLib/Ia32/MpFuncs.nasm > index 8981c32722..67f9ed05cf 100644 > --- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm > +++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm > @@ -199,7 +199,6 @@ CProcedureInvoke: > call eax ; Invoke C function >=20 >=20 >=20 > jmp $ ; Never reach here >=20 > -RendezvousFunnelProcEnd: >=20 >=20 >=20 > ;-----------------------------------------------------------------------= -------------- >=20 > ;SwitchToRealProc procedure follows. >=20 > @@ -209,6 +208,8 @@ SwitchToRealProcStart: > jmp $ ; Never reach here >=20 > SwitchToRealProcEnd: >=20 >=20 >=20 > +RendezvousFunnelProcEnd: >=20 > + >=20 > ;-----------------------------------------------------------------------= -------------- >=20 > ; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOf= ApStack, CountTofinish, Pm16CodeSegment, > SevEsAPJumpTable, WakeupBuffer); >=20 > ; >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/Mp= InitLib/MpLib.c > index 3dc1b9f872..722ff3fd42 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c > @@ -938,8 +938,7 @@ FillExchangeInfoData ( > // EfiBootServicesCode to avoid page fault if NX memory protection is = enabled. >=20 > // >=20 > if (CpuMpData->WakeupBufferHigh !=3D 0) { >=20 > - Size =3D CpuMpData->AddressMap.RendezvousFunnelSize + >=20 > - CpuMpData->AddressMap.SwitchToRealSize - >=20 > + Size =3D CpuMpData->AddressMap.RendezvousFunnelSize - >=20 > CpuMpData->AddressMap.ModeTransitionOffset; >=20 > CopyMem ( >=20 > (VOID *)CpuMpData->WakeupBufferHigh, >=20 > @@ -993,8 +992,7 @@ BackupAndPrepareWakeupBuffer ( > CopyMem ( >=20 > (VOID *)CpuMpData->WakeupBuffer, >=20 > (VOID *)CpuMpData->AddressMap.RendezvousFunnelAddress, >=20 > - CpuMpData->AddressMap.RendezvousFunnelSize + >=20 > - CpuMpData->AddressMap.SwitchToRealSize >=20 > + CpuMpData->AddressMap.RendezvousFunnelSize >=20 > ); >=20 > } >=20 >=20 >=20 > @@ -1031,7 +1029,6 @@ GetApResetVectorSize ( > UINTN Size; >=20 >=20 >=20 > Size =3D AddressMap->RendezvousFunnelSize + >=20 > - AddressMap->SwitchToRealSize + >=20 > sizeof (MP_CPU_EXCHANGE_INFO); >=20 >=20 >=20 > return Size; >=20 > @@ -1056,11 +1053,9 @@ AllocateResetVector ( > CpuMpData->WakeupBuffer =3D GetWakeupBuffer (ApResetVectorSize)= ; >=20 > CpuMpData->MpCpuExchangeInfo =3D (MP_CPU_EXCHANGE_INFO *)(UINTN) >=20 > (CpuMpData->WakeupBuffer + >=20 > - CpuMpData->AddressMap.RendezvousFunn= elSize + >=20 > - CpuMpData->AddressMap.SwitchToRealSi= ze); >=20 > + CpuMpData->AddressMap.RendezvousFunn= elSize); >=20 > CpuMpData->WakeupBufferHigh =3D AllocateCodeBuffer ( >=20 > - CpuMpData->AddressMap.RendezvousFunn= elSize + >=20 > - CpuMpData->AddressMap.SwitchToRealSi= ze - >=20 > + CpuMpData->AddressMap.RendezvousFunn= elSize - >=20 > CpuMpData->AddressMap.ModeTransition= Offset >=20 > ); >=20 > // >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm b/UefiCpuPkg/Li= brary/MpInitLib/X64/AmdSev.nasm > index 8bb1161fa0..7c2469f9c5 100644 > --- a/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm > +++ b/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm > @@ -198,3 +198,151 @@ RestoreGhcb: >=20 >=20 > SevEsGetApicIdExit: >=20 > OneTimeCallRet SevEsGetApicId >=20 > + >=20 > + >=20 > +;-----------------------------------------------------------------------= -------------- >=20 > +;SwitchToRealProc procedure follows. >=20 > +;ALSO THIS PROCEDURE IS EXECUTED BY APs TRANSITIONING TO 16 BIT MODE. HE= NCE THIS PROC >=20 > +;IS IN MACHINE CODE. >=20 > +; SwitchToRealProc (UINTN BufferStart, UINT16 Code16, UINT16 Code32, UI= NTN StackStart) >=20 > +; rcx - Buffer Start >=20 > +; rdx - Code16 Selector Offset >=20 > +; r8 - Code32 Selector Offset >=20 > +; r9 - Stack Start >=20 > +;-----------------------------------------------------------------------= -------------- >=20 > +SwitchToRealProcStart: >=20 > +BITS 64 >=20 > + cli >=20 > + >=20 > + ; >=20 > + ; Get RDX reset value before changing stacks since the >=20 > + ; new stack won't be able to accomodate a #VC exception. >=20 > + ; >=20 > + push rax >=20 > + push rbx >=20 > + push rcx >=20 > + push rdx >=20 > + >=20 > + mov rax, 1 >=20 > + cpuid >=20 > + mov rsi, rax ; Save off the reset value fo= r RDX >=20 > + >=20 > + pop rdx >=20 > + pop rcx >=20 > + pop rbx >=20 > + pop rax >=20 > + >=20 > + ; >=20 > + ; Establish stack below 1MB >=20 > + ; >=20 > + mov rsp, r9 >=20 > + >=20 > + ; >=20 > + ; Push ultimate Reset Vector onto the stack >=20 > + ; >=20 > + mov rax, rcx >=20 > + shr rax, 4 >=20 > + push word 0x0002 ; RFLAGS >=20 > + push ax ; CS >=20 > + push word 0x0000 ; RIP >=20 > + push word 0x0000 ; For alignment, will be disc= arded >=20 > + >=20 > + ; >=20 > + ; Get address of "16-bit operand size" label >=20 > + ; >=20 > + lea rbx, [PM16Mode] >=20 > + >=20 > + ; >=20 > + ; Push addresses used to change to compatibility mode >=20 > + ; >=20 > + lea rax, [CompatMode] >=20 > + push r8 >=20 > + push rax >=20 > + >=20 > + ; >=20 > + ; Clear R8 - R15, for reset, before going into 32-bit mode >=20 > + ; >=20 > + xor r8, r8 >=20 > + xor r9, r9 >=20 > + xor r10, r10 >=20 > + xor r11, r11 >=20 > + xor r12, r12 >=20 > + xor r13, r13 >=20 > + xor r14, r14 >=20 > + xor r15, r15 >=20 > + >=20 > + ; >=20 > + ; Far return into 32-bit mode >=20 > + ; >=20 > + retfq >=20 > + >=20 > +BITS 32 >=20 > +CompatMode: >=20 > + ; >=20 > + ; Set up stack to prepare for exiting protected mode >=20 > + ; >=20 > + push edx ; Code16 CS >=20 > + push ebx ; PM16Mode label address >=20 > + >=20 > + ; >=20 > + ; Disable paging >=20 > + ; >=20 > + mov eax, cr0 ; Read CR0 >=20 > + btr eax, 31 ; Set PG=3D0 >=20 > + mov cr0, eax ; Write CR0 >=20 > + >=20 > + ; >=20 > + ; Disable long mode >=20 > + ; >=20 > + mov ecx, 0c0000080h ; EFER MSR number >=20 > + rdmsr ; Read EFER >=20 > + btr eax, 8 ; Set LME=3D0 >=20 > + wrmsr ; Write EFER >=20 > + >=20 > + ; >=20 > + ; Disable PAE >=20 > + ; >=20 > + mov eax, cr4 ; Read CR4 >=20 > + btr eax, 5 ; Set PAE=3D0 >=20 > + mov cr4, eax ; Write CR4 >=20 > + >=20 > + mov edx, esi ; Restore RDX reset value >=20 > + >=20 > + ; >=20 > + ; Switch to 16-bit operand size >=20 > + ; >=20 > + retf >=20 > + >=20 > +BITS 16 >=20 > + ; >=20 > + ; At entry to this label >=20 > + ; - RDX will have its reset value >=20 > + ; - On the top of the stack >=20 > + ; - Alignment data (two bytes) to be discarded >=20 > + ; - IP for Real Mode (two bytes) >=20 > + ; - CS for Real Mode (two bytes) >=20 > + ; >=20 > + ; This label is also used with AsmRelocateApLoop. During MP finaliza= tion, >=20 > + ; the code from PM16Mode to SwitchToRealProcEnd is copied to the sta= rt of >=20 > + ; the WakeupBuffer, allowing a parked AP to be booted by an OS. >=20 > + ; >=20 > +PM16Mode: >=20 > + mov eax, cr0 ; Read CR0 >=20 > + btr eax, 0 ; Set PE=3D0 >=20 > + mov cr0, eax ; Write CR0 >=20 > + >=20 > + pop ax ; Discard alignment data >=20 > + >=20 > + ; >=20 > + ; Clear registers (except RDX and RSP) before going into 16-bit mode >=20 > + ; >=20 > + xor eax, eax >=20 > + xor ebx, ebx >=20 > + xor ecx, ecx >=20 > + xor esi, esi >=20 > + xor edi, edi >=20 > + xor ebp, ebp >=20 > + >=20 > + iret >=20 > + >=20 > +SwitchToRealProcEnd: >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/L= ibrary/MpInitLib/X64/MpFuncs.nasm > index d7e0e1fabd..53df478661 100644 > --- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm > +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm > @@ -152,11 +152,6 @@ SkipEnable5LevelPaging: >=20 >=20 > BITS 64 >=20 >=20 >=20 > -; >=20 > -; Required for the AMD SEV helper functions >=20 > -; >=20 > -%include "AmdSev.nasm" >=20 > - >=20 > LongModeStart: >=20 > mov esi, ebx >=20 > lea edi, [esi + MP_CPU_EXCHANGE_INFO_FIELD (InitFlag)] >=20 > @@ -265,154 +260,12 @@ CProcedureInvoke: > add rsp, 20h >=20 > jmp $ ; Should never reach here >=20 >=20 >=20 > -RendezvousFunnelProcEnd: >=20 > - >=20 > -;-----------------------------------------------------------------------= -------------- >=20 > -;SwitchToRealProc procedure follows. >=20 > -;ALSO THIS PROCEDURE IS EXECUTED BY APs TRANSITIONING TO 16 BIT MODE. HE= NCE THIS PROC >=20 > -;IS IN MACHINE CODE. >=20 > -; SwitchToRealProc (UINTN BufferStart, UINT16 Code16, UINT16 Code32, UI= NTN StackStart) >=20 > -; rcx - Buffer Start >=20 > -; rdx - Code16 Selector Offset >=20 > -; r8 - Code32 Selector Offset >=20 > -; r9 - Stack Start >=20 > -;-----------------------------------------------------------------------= -------------- >=20 > -SwitchToRealProcStart: >=20 > -BITS 64 >=20 > - cli >=20 > - >=20 > - ; >=20 > - ; Get RDX reset value before changing stacks since the >=20 > - ; new stack won't be able to accomodate a #VC exception. >=20 > - ; >=20 > - push rax >=20 > - push rbx >=20 > - push rcx >=20 > - push rdx >=20 > - >=20 > - mov rax, 1 >=20 > - cpuid >=20 > - mov rsi, rax ; Save off the reset value fo= r RDX >=20 > - >=20 > - pop rdx >=20 > - pop rcx >=20 > - pop rbx >=20 > - pop rax >=20 > - >=20 > - ; >=20 > - ; Establish stack below 1MB >=20 > - ; >=20 > - mov rsp, r9 >=20 > - >=20 > - ; >=20 > - ; Push ultimate Reset Vector onto the stack >=20 > - ; >=20 > - mov rax, rcx >=20 > - shr rax, 4 >=20 > - push word 0x0002 ; RFLAGS >=20 > - push ax ; CS >=20 > - push word 0x0000 ; RIP >=20 > - push word 0x0000 ; For alignment, will be disc= arded >=20 > - >=20 > - ; >=20 > - ; Get address of "16-bit operand size" label >=20 > - ; >=20 > - lea rbx, [PM16Mode] >=20 > - >=20 > - ; >=20 > - ; Push addresses used to change to compatibility mode >=20 > - ; >=20 > - lea rax, [CompatMode] >=20 > - push r8 >=20 > - push rax >=20 > - >=20 > - ; >=20 > - ; Clear R8 - R15, for reset, before going into 32-bit mode >=20 > - ; >=20 > - xor r8, r8 >=20 > - xor r9, r9 >=20 > - xor r10, r10 >=20 > - xor r11, r11 >=20 > - xor r12, r12 >=20 > - xor r13, r13 >=20 > - xor r14, r14 >=20 > - xor r15, r15 >=20 > - >=20 > - ; >=20 > - ; Far return into 32-bit mode >=20 > - ; >=20 > - retfq >=20 > - >=20 > -BITS 32 >=20 > -CompatMode: >=20 > - ; >=20 > - ; Set up stack to prepare for exiting protected mode >=20 > - ; >=20 > - push edx ; Code16 CS >=20 > - push ebx ; PM16Mode label address >=20 > - >=20 > - ; >=20 > - ; Disable paging >=20 > - ; >=20 > - mov eax, cr0 ; Read CR0 >=20 > - btr eax, 31 ; Set PG=3D0 >=20 > - mov cr0, eax ; Write CR0 >=20 > - >=20 > - ; >=20 > - ; Disable long mode >=20 > - ; >=20 > - mov ecx, 0c0000080h ; EFER MSR number >=20 > - rdmsr ; Read EFER >=20 > - btr eax, 8 ; Set LME=3D0 >=20 > - wrmsr ; Write EFER >=20 > - >=20 > - ; >=20 > - ; Disable PAE >=20 > - ; >=20 > - mov eax, cr4 ; Read CR4 >=20 > - btr eax, 5 ; Set PAE=3D0 >=20 > - mov cr4, eax ; Write CR4 >=20 > - >=20 > - mov edx, esi ; Restore RDX reset value >=20 > - >=20 > - ; >=20 > - ; Switch to 16-bit operand size >=20 > - ; >=20 > - retf >=20 > - >=20 > -BITS 16 >=20 > - ; >=20 > - ; At entry to this label >=20 > - ; - RDX will have its reset value >=20 > - ; - On the top of the stack >=20 > - ; - Alignment data (two bytes) to be discarded >=20 > - ; - IP for Real Mode (two bytes) >=20 > - ; - CS for Real Mode (two bytes) >=20 > - ; >=20 > - ; This label is also used with AsmRelocateApLoop. During MP finaliza= tion, >=20 > - ; the code from PM16Mode to SwitchToRealProcEnd is copied to the sta= rt of >=20 > - ; the WakeupBuffer, allowing a parked AP to be booted by an OS. >=20 > - ; >=20 > -PM16Mode: >=20 > - mov eax, cr0 ; Read CR0 >=20 > - btr eax, 0 ; Set PE=3D0 >=20 > - mov cr0, eax ; Write CR0 >=20 > - >=20 > - pop ax ; Discard alignment data >=20 > - >=20 > - ; >=20 > - ; Clear registers (except RDX and RSP) before going into 16-bit mode >=20 > - ; >=20 > - xor eax, eax >=20 > - xor ebx, ebx >=20 > - xor ecx, ecx >=20 > - xor esi, esi >=20 > - xor edi, edi >=20 > - xor ebp, ebp >=20 > - >=20 > - iret >=20 > +; >=20 > +; Required for the AMD SEV helper functions >=20 > +; >=20 > +%include "AmdSev.nasm" >=20 >=20 >=20 > -SwitchToRealProcEnd: >=20 > +RendezvousFunnelProcEnd: >=20 >=20 >=20 > ;-----------------------------------------------------------------------= -------------- >=20 > ; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOf= ApStack, CountTofinish, Pm16CodeSegment, > SevEsAPJumpTable, WakeupBuffer); >=20 > -- > 2.32.0.windows.1 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#89578): https://edk2.groups.io/g/devel/message/89578 > Mute This Topic: https://groups.io/mt/90954628/1712937 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >=20