From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web10.49482.1680249557039556985 for ; Fri, 31 Mar 2023 00:59:17 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=L4LPEWbY; spf=pass (domain: intel.com, ip: 134.134.136.24, 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=1680249557; x=1711785557; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ml7A/wZhtO0ZO09evgnBb3DJ0I43WxYYLSugG+tURcg=; b=L4LPEWbYjnsjNFjpr6jJEgwuRWA+RZX8CjlHAQXtxCIyPndRROK3IKGZ maROPbVlfWxl3OFczr7P1OY3SP5KvPi4iqJb3EFqEd2X+TSUy5U6wobvE E8WPAjgrxWyl2JuiAJFU/tdNT5rfAcuYrfueGkMpdm7d/ZkBoTOKvPfcY YdDkN8vhExE/gFoY5y81EyK9hZPzbm6a0nOsDDcF9/ffBr1SoQcpb575D Cmi9ACms9vZHCh/kLC38ePeVULS6fzzkgRTAe5jSW0nP4oOHnBpEMl9Z1 cJAmf3ndovLSOU3hZwKetz+CizU7sBNzII3CE1DCB3hI6e52r4TPUZcTg A==; X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="343046339" X-IronPort-AV: E=Sophos;i="5.98,307,1673942400"; d="scan'208";a="343046339" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2023 00:59:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="662338914" X-IronPort-AV: E=Sophos;i="5.98,307,1673942400"; d="scan'208";a="662338914" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga006.jf.intel.com with ESMTP; 31 Mar 2023 00:59:10 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Fri, 31 Mar 2023 00:59:10 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21 via Frontend Transport; Fri, 31 Mar 2023 00:59:10 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.171) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.21; Fri, 31 Mar 2023 00:59:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FvHys4v5jXYHwHkzFs6st/NhlRWAA7DyLn9Z1FKMoOVODGphQQG/qdM1+U7v9ag/GMhA7kPDizcFg0h0DqevJ1TLOY4WEdv7DpU1AlspRFieaYzGFN3zqFhzIqFQYvdW9ATjSVgLjZcG/iabEB0PGsswwNW5AqdWO0bKC1Z3jP/1Z/bJfrjbc5HOkl99h2PKXcMjt7+p/Ht0z9t49ZSkn+4ZhnFBsXpbJcQm+CIry/lTT03hudBFObd6zYPo6nyFLeJxQBcDp9olur69btHDW/6bbxzkxlzISlmrJ9Po7hwgDfMZXAqSugzJnusD1uP38CMJi1kj7eo6gHaf6vKx8g== 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=u4r18jMmRBcgh78uOmB78lQScsasB2iA9aEJFWjxS/w=; b=DnYVL40VuyWDMzs1fc/MLRCod7V3Rft2GykJertCHfhL56dOaJtXHbErk6TOllJzqMrGdrSOAdho7xgDiSJVhL5x0VVp0X5f645WdniUYsqFhwEJg8mrHXgKULOdEeI5/7/VhrKjFqcHGW1/2ukmOBmmuSgAr+HnhajY0KLR5XG+M52LJGDZJv3iEd2p89y4xiHU6dE9XokgCLSUrM5xKJpIWmISQ+D0614d1qC0iBY9CT9U1vHDNk6Nl4PJwtEQ4aD6UvSmaN13Yi30auOaa985eflkZTNeN2yMqgDJWNO4hZkAWTj6M0q06bXbp12e/GzTZCJzdcCuqjuv5KU8Aw== 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 MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by PH7PR11MB5957.namprd11.prod.outlook.com (2603:10b6:510:1e0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.35; Fri, 31 Mar 2023 07:59:08 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::ae07:e96a:4a24:8a69]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::ae07:e96a:4a24:8a69%8]) with mapi id 15.20.6222.035; Fri, 31 Mar 2023 07:59:07 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" , "abdattar@amd.com" CC: Abdul Lateef Attar , Paul Grimes , Garrett Kirkendall , Abner Chang , "Dong, Eric" , "Kumar, Rahul R" Subject: Re: [edk2-devel] [PATCH v6 6/6] UefiCpuPkg: Implements SmmCpuFeaturesLib for AMD Family Thread-Topic: [edk2-devel] [PATCH v6 6/6] UefiCpuPkg: Implements SmmCpuFeaturesLib for AMD Family Thread-Index: AQHZXtw0A2UzF4bXuki62CPWS22Oua8UjwwA Date: Fri, 31 Mar 2023 07:59:07 +0000 Message-ID: References: <19f2778bccfc88ef2f47960a4ae8c7184df3a303.1679722393.git.abdattar@amd.com> In-Reply-To: <19f2778bccfc88ef2f47960a4ae8c7184df3a303.1679722393.git.abdattar@amd.com> 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-traffictypediagnostic: MN6PR11MB8244:EE_|PH7PR11MB5957:EE_ x-ms-office365-filtering-correlation-id: e26e5cd2-cccc-4d73-acb2-08db31bdcdf4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cgQKpldkSN9FCqxJJ0IMYzQls6KnuxeJtgAC585tNLSR90lCsk5xM96DN4sHUW1kk3mRUqqQVQT+sQ0uOMJu79pd+h7m9rh+Bkg6Ei6z7dR/vc+1vSXubJDQHcilfKNqn1p25RoOl8dc3UVmaJlxuvs6x/GQ037kOrflz46MDd71ivENJ0aCuP2MA0O5NuJgdnjcyFHkrsLADCU0fuqaa16d8w+zYGk0eiSy3c0bB4JIjVd7laSEJLHemXMQiqh06uklODlTG6A6Z/vibQtR/jKhCE7bOTCYWNuhLu8eyKyYbSjO/VTZL1XheYBYAV4h5GZWmej9ccFmazUjdbP0bO82gK8T0NPHfR9xBnYJK7PWngTXYmUoN/NgOntIqeEww1qwsmUnaZTzvJ0QBtTDt08ct+y5hyvUxMfLEKIK8y5+ipEO1ZBtcxK7zrMmXaGJugF/5rVw4WPRc78JA/ybu7/1XWO3Oa833hufAV/Y9SHzLUhbspvkWj70vLcq+fTOnxu9J4H01qxaRM6roBDrCGltJcQmM+HiMQQcmTKiPAfsVLvKVf0WQ35Mv1fJwdNcgJOCfyQT0NMxiOBxVboh4ZWBcG98y7OTYDiX4KgUXeCZhUlmzGnjbAH6Ur3pwhcZsVfPuZ1p23B9Uc7xNglfbA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(366004)(346002)(136003)(396003)(39860400002)(451199021)(478600001)(54906003)(107886003)(86362001)(38070700005)(110136005)(26005)(7696005)(6506007)(316002)(53546011)(9686003)(38100700002)(66899021)(966005)(71200400001)(64756008)(66946007)(76116006)(66556008)(82960400001)(66446008)(186003)(66476007)(4326008)(122000001)(33656002)(83380400001)(41300700001)(8676002)(55016003)(52536014)(5660300002)(8936002)(2906002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?m11wPdgL08W3oJ7ZyTKvRh5ac6OIz9Pi0IxBRL16Mjes+dSlZO7KjoQ2a4cv?= =?us-ascii?Q?kOY8ga+xErhhiD+6c1gmqoCGD3MJbYjM8tBfpt2uG2xdlB8QipgAG6ZzZiO0?= =?us-ascii?Q?9oAdTEs17modXJkWia+n46c92zdzeN7+mQKdRnftd5HDu5gpiFD1oXdy245z?= =?us-ascii?Q?1ir8KKYpN2RIoVxzIFF2nlOcFMh3x+75VxhS3xQDto39SSz3s+AOVZKzwrFh?= =?us-ascii?Q?Ff2qltlFIuz7WA+fBECTiHxCWLLuFZgCPJ5qD4ru/9xepJE1u0V1S8oEzcGJ?= =?us-ascii?Q?ozZwi8p42qSNJTY6sTuUP4CABCINr0CMRA69gRkr92ufN0iyecPcCujcX9IJ?= =?us-ascii?Q?fe7vdoBlpHY3BZzJDMV6fPi9fiGvKasEFaHZs+eWIjTUCpIpBZipcKmPMUke?= =?us-ascii?Q?aU3Bbj9llF5JACt5eweFGEjD1KxNUMBSOYDcKZ0P4OkZZYyMj8MXV4GdnP6F?= =?us-ascii?Q?T3uCWzRHnQLTIVtdyEwzK4yDGGk4vCLJr86CeoVli5yhClfmUu6F+Ct18z60?= =?us-ascii?Q?WKxPcDeUawF0RrXXEcxmysG4XtaODRFKozyhabbAdbLwCptYQLar237n9czv?= =?us-ascii?Q?0sAiXC/+99TJoMko67aE7i/91UGyXw2C5oaPxKc7e/P3GCGvra0gSRWaxh6K?= =?us-ascii?Q?8xLK0AKW2NeXaTcP7xkhsxO9YSN/LOBufIOl93POSQJEmn5HLl6i/8SZNff/?= =?us-ascii?Q?GNOr94w8Ki7wOLJpaLMlMh64GpekoWcszUYm470svVxv20973pLp0xlfUxRY?= =?us-ascii?Q?7Meh5x6EsdCqLeS7cY1d92xLnMaaRHBJwu87VjxFFuGtJKvG1go8+mA8VQ4T?= =?us-ascii?Q?zSblFyCH5FCGFUDxiW49X/7FEnSRs09igeauJlGlvFtI3UA9ZyF0BXIVdLwo?= =?us-ascii?Q?sfVpXoXTildUVcoeO0DKrZHjgNmCVh41jjrMX8yY8y1haupbty5H/mtEoIQG?= =?us-ascii?Q?Hv5wifui1k5k4fnqeOoIX0n+KL7fzLZU0WnyoHAbRJYk+gfBqMvbda/9xuMz?= =?us-ascii?Q?yQnmvg6OcvhVAJHFy0GXv1whIGk+L1uSBspAupOIWZUaIRu+EAVPbrkO4H5F?= =?us-ascii?Q?5w9dE1lc93IKLT5as7pDWO/7R38QZicZ9xTsUZ5Y87q+ZVZgDCESyaxRjQV/?= =?us-ascii?Q?vrTFwVfvdoR76G1kbKLe+pPqbCCFJ+7rdUL4Udex5GhGuQS35BJ3GZmM0V1J?= =?us-ascii?Q?7i5b79j704GN6xHPx4zMLljxjkgb083Wx3IzY0A2qU9ptHZzYmws8csFydbr?= =?us-ascii?Q?jYyhGaik3QbqVv9rvyWwuoOcwZcQYxnXymdMhij5ioBx1JPQmurtZU1DaNcr?= =?us-ascii?Q?BGW0ZC8TC0fN1OSY9Z6wf2xZNvOEMRdtcwgP3HV36F5ZbgEuyhnKpNGXOB4Q?= =?us-ascii?Q?Wo//p9l1wTnmMA3boXv1KbPZSMcQDtE+z1stEP3zsbIXH6138lMgZ92YAkQs?= =?us-ascii?Q?1X/LfafC4XqBC8obghsy13JM4aidsHnpxS6x+5E2dgPDPFOYmYkjXG3/QIww?= =?us-ascii?Q?7BxQ/AR/3RzKH9BB9icuYd6JKfHMITvp0XI6UQjsVjJbsghdgRuQqN5uIClV?= =?us-ascii?Q?sf2N8tC+Q5STUFx/2EU=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e26e5cd2-cccc-4d73-acb2-08db31bdcdf4 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2023 07:59:07.6449 (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: 5Y7FHRlqKw/0JwWehXzGHbfwGdToe9JJ6u7RYMn9+OTDxfgvYkVwLPbwkl9tX3U9bybDAUiEvX516fjWS3yaaA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB5957 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 It's a bit wired that AMD version of SmmCpuFeaturesLib calls AMD version of= SmmSmramSaveStateLib. The question naturally becomes: why not integrate the two lib implementatio= ns together to avoid creating the SmmSmramSaveStateLib library class? Because I cannot imagine A= mdSmmCpuFeaturesLib calls to IntelSmmSmramSaveStateLib. But I like the idea of separating the SMM save state access logic out of th= e SmmCpuFeaturesLib. Do you think CpuSmm driver calling the SmmSmramSaveStateLib is better? > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Abdul > Lateef Attar via groups.io > Sent: Saturday, March 25, 2023 1:39 PM > To: devel@edk2.groups.io > Cc: Abdul Lateef Attar ; Paul Grimes > ; Garrett Kirkendall ; > Abner Chang ; Dong, Eric ; > Ni, Ray ; Kumar, Rahul R ; > Abdul Lateef Attar > Subject: [edk2-devel] [PATCH v6 6/6] UefiCpuPkg: Implements > SmmCpuFeaturesLib for AMD Family >=20 > From: Abdul Lateef Attar >=20 > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4182 >=20 > Implements interfaces to read and write save state > registers of AMD's processor family. > Initializes processor SMMADDR and MASK depends > on PcdSmrrEnable flag. > Program or corrects the IP once control returns from SMM. >=20 > Cc: Paul Grimes > Cc: Garrett Kirkendall > Cc: Abner Chang > Cc: Eric Dong > Cc: Ray Ni > Cc: Rahul Kumar > Signed-off-by: Abdul Lateef Attar > Reviewed-by: Abner Chang > --- > .../AmdSmmCpuFeaturesLib.inf | 6 + > .../SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.c | 106 > +++++++++++++++++- > 2 files changed, 109 insertions(+), 3 deletions(-) >=20 > diff --git > a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf > b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf > index 4c77efc64462..9d5b8c2e972d 100644 > --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf > +++ > b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf > @@ -31,3 +31,9 @@ [LibraryClasses] > PcdLib > MemoryAllocationLib > DebugLib > + SmmSmramSaveStateLib > + > +[FeaturePcd] > + gUefiCpuPkgTokenSpaceGuid.PcdSmrrEnable ## CONSUMES > + gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable ## > CONSUMES > + > diff --git > a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.c > b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.c > index c74e1a0c0c5b..af45be3e265a 100644 > --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.c > +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.c > @@ -11,6 +11,21 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > #include > #include > +#include > +#include > +#include > +#include > + > +// EFER register LMA bit > +#define LMA BIT10 > + > +// Machine Specific Registers (MSRs) > +#define SMMADDR_ADDRESS 0xC0010112ul > +#define SMMMASK_ADDRESS 0xC0010113ul > +#define EFER_ADDRESS 0XC0000080ul > + > +// The mode of the CPU at the time an SMI occurs > +STATIC UINT8 mSmmSaveStateRegisterLma; >=20 > /** > Read an SMM Save State register on the target processor. If this func= tion > @@ -39,7 +54,7 @@ SmmCpuFeaturesReadSaveStateRegister ( > OUT VOID *Buffer > ) > { > - return EFI_SUCCESS; > + return SmramSaveStateReadRegister (CpuIndex, Register, Width, Buffer); > } >=20 > /** > @@ -67,7 +82,7 @@ SmmCpuFeaturesWriteSaveStateRegister ( > IN CONST VOID *Buffer > ) > { > - return EFI_SUCCESS; > + return SmramSaveStateWriteRegister (CpuIndex, Register, Width, Buffer)= ; > } >=20 > /** > @@ -82,6 +97,13 @@ CpuFeaturesLibInitialization ( > VOID > ) > { > + UINT32 LMAValue; > + > + LMAValue =3D (UINT32)AsmReadMsr64 (EFER_ADDRESS) & LMA= ; > + mSmmSaveStateRegisterLma =3D > EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT; > + if (LMAValue) { > + mSmmSaveStateRegisterLma =3D > EFI_SMM_SAVE_STATE_REGISTER_LMA_64BIT; > + } > } >=20 > /** > @@ -117,6 +139,52 @@ SmmCpuFeaturesInitializeProcessor ( > IN CPU_HOT_PLUG_DATA *CpuHotPlugData > ) > { > + AMD_SMRAM_SAVE_STATE_MAP *CpuState; > + UINT32 LMAValue; > + > + // > + // Configure SMBASE. > + // > + CpuState =3D (AMD_SMRAM_SAVE_STATE_MAP > *)(UINTN)(SMM_DEFAULT_SMBASE + SMRAM_SAVE_STATE_MAP_OFFSET); > + CpuState->x64.SMBASE =3D (UINT32)CpuHotPlugData->SmBase[CpuIndex]; > + > + // Re-initialize the value of mSmmSaveStateRegisterLma flag which migh= t > have been changed in PiCpuSmmDxeSmm Driver > + // Entry point, to make sure correct value on AMD platform is assigned= to > be used by SmmCpuFeaturesLib. > + LMAValue =3D (UINT32)AsmReadMsr64 (EFER_ADDRESS) & LMA= ; > + mSmmSaveStateRegisterLma =3D > EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT; > + if (LMAValue) { > + mSmmSaveStateRegisterLma =3D > EFI_SMM_SAVE_STATE_REGISTER_LMA_64BIT; > + } > + > + // > + // If SMRR is supported, then program SMRR base/mask MSRs. > + // The EFI_MSR_SMRR_PHYS_MASK_VALID bit is not set until the first > normal SMI. > + // The code that initializes SMM environment is running in normal mode > + // from SMRAM region. If SMRR is enabled here, then the SMRAM region > + // is protected and the normal mode code execution will fail. > + // > + if (FeaturePcdGet (PcdSmrrEnable)) { > + // > + // SMRR size cannot be less than 4-KBytes > + // SMRR size must be of length 2^n > + // SMRR base alignment cannot be less than SMRR length > + // > + if ((CpuHotPlugData->SmrrSize < SIZE_4KB) || > + (CpuHotPlugData->SmrrSize !=3D GetPowerOfTwo32 (CpuHotPlugData- > >SmrrSize)) || > + ((CpuHotPlugData->SmrrBase & ~(CpuHotPlugData->SmrrSize - 1)) != =3D > CpuHotPlugData->SmrrBase)) > + { > + // > + // Print message and halt if CPU is Monarch > + // > + if (IsMonarch) { > + DEBUG ((DEBUG_ERROR, "SMM Base/Size does not meet > alignment/size requirement!\n")); > + CpuDeadLoop (); > + } > + } else { > + AsmWriteMsr64 (SMMADDR_ADDRESS, CpuHotPlugData->SmrrBase); > + AsmWriteMsr64 (SMMMASK_ADDRESS, ((~(UINT64)(CpuHotPlugData- > >SmrrSize - 1)) | 0x6600)); > + } > + } > } >=20 > /** > @@ -159,7 +227,39 @@ SmmCpuFeaturesHookReturnFromSmm ( > IN UINT64 NewInstructionPointer > ) > { > - return 0; > + UINT64 OriginalInstructionPointer; > + AMD_SMRAM_SAVE_STATE_MAP *AmdCpuState; > + > + AmdCpuState =3D (AMD_SMRAM_SAVE_STATE_MAP *)CpuState; > + > + if (mSmmSaveStateRegisterLma =3D=3D > EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT) { > + OriginalInstructionPointer =3D (UINT64)AmdCpuState->x86._EIP; > + AmdCpuState->x86._EIP =3D (UINT32)NewInstructionPointer; > + // > + // Clear the auto HALT restart flag so the RSM instruction returns > + // program control to the instruction following the HLT instruction. > + // > + if ((AmdCpuState->x86.AutoHALTRestart & BIT0) !=3D 0) { > + AmdCpuState->x86.AutoHALTRestart &=3D ~BIT0; > + } > + } else { > + OriginalInstructionPointer =3D AmdCpuState->x64._RIP; > + if ((AmdCpuState->x64.EFER & LMA) =3D=3D 0) { > + AmdCpuState->x64._RIP =3D (UINT32)NewInstructionPointer32; > + } else { > + AmdCpuState->x64._RIP =3D (UINT32)NewInstructionPointer; > + } > + > + // > + // Clear the auto HALT restart flag so the RSM instruction returns > + // program control to the instruction following the HLT instruction. > + // > + if ((AmdCpuState->x64.AutoHALTRestart & BIT0) !=3D 0) { > + AmdCpuState->x64.AutoHALTRestart &=3D ~BIT0; > + } > + } > + > + return OriginalInstructionPointer; > } >=20 > /** > -- > 2.25.1 >=20 >=20 >=20 >=20 >=20