From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web12.8826.1645503418286159100 for ; Mon, 21 Feb 2022 20:16:58 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Gz483Z58; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: chasel.chiu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645503418; x=1677039418; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Cn3XDejrQvmSiHGEU1KSYvn34ejFwubSTKni4YfyXTs=; b=Gz483Z58mhMD3KPp+PRJD4N032h+8RLFk5YpIoCAXW4M2yFNgAtIm34N qA6WSrvwJXasMSgd8CNCxoLW5e2m6f+pg16iocWmNqhNG1DFagu/g0zOz bcwFuzcR5Ux+MZpI7A91v8y96OpeDG0ASY0pgO+hhRDx6MJofeE6/Y+Z8 eZz484+OO+IYfg1kD7lgi/IFh5APfoI2WKYU5unzKIiHnQGJHCSFH3YW/ CTWk5JTqqH827tmeLnWapxV+DfTp8+q2FpUmA2yvN8u3jhkutVBXxOkYN udSDqV4+36OB3pxfr9bEAVAE8KBmKkk1kgmQ9okZdc7nrUSYHlLs8B3CT A==; X-IronPort-AV: E=McAfee;i="6200,9189,10265"; a="314871497" X-IronPort-AV: E=Sophos;i="5.88,387,1635231600"; d="scan'208";a="314871497" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Feb 2022 20:16:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,387,1635231600"; d="scan'208";a="776171542" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga006.fm.intel.com with ESMTP; 21 Feb 2022 20:16:57 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 21 Feb 2022 20:16:57 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Mon, 21 Feb 2022 20:16:57 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.100) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Mon, 21 Feb 2022 20:16:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K63a4H4FkS6l7K50DWNa5Z1HNfsW7A8PT/i4SE/F8Ae0pC4JScKwa20QogyzsiTqvU6mmVQIG1jtY2/XkogQ62WhuJ0PhurarsTB9m0rcQx2k0KTDZ/XAIdm0YdFnftQxNkSNVzbMIjY0mSqhoHSuLPka3Je9YV7AgHXLOYS5cMjM78z0UvgDvb17Pww1B6tFVAxdXNwfuvRiG4f0EbHr4Bzf2xVGr1IqtPgGEqiyK7rRHTmgDurFhF3J5Md+x/tORJYpI7opxcjK86JTM6U69s9BRkHeJaSa0iPaNXu1STmbucSShJVOaOHFxyOG4UFcA/1kXfD+pX/krq0xM1Rbw== 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=Ft/CnqrUvReL6/PmJP5OdHK2w83fiTdC4UBjEeUSdjE=; b=SR6zGGhAiZ4EGuQVtI+jI65l/CD9ZsIGdOQ1eJo1yICTCABWgWSAg8F8AvFWTeuADZX8Y1SOXjPA4QKZbUNmBW553AgQhmwt1AR2k0gF/FDjyOlKDbf9o0GTDnAgZ3ZBIymdaFnBvebukYA5sTe9vBOM8o8dYTVLIqdJ/s2ZZGSDK/Jt/dKDwCLyWFFjbI8ruSq3zI1xIP+mlmt/wsL8H1urvM8o2ezIKSQc1WpPdZ1kJEml69BwurKm1exquMdIO9l2u8pkzT990Dz+/oZg4OqxIF6zs6tOSoNIfV/zBcw9Gj3zkeMc1eKchYESGBxGYiIW7vIO+vs3R0NtBmRjvA== 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 BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by MN2PR11MB4143.namprd11.prod.outlook.com (2603:10b6:208:137::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.16; Tue, 22 Feb 2022 04:16:54 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::8c4b:e24c:c69f:7809]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::8c4b:e24c:c69f:7809%5]) with mapi id 15.20.4995.027; Tue, 22 Feb 2022 04:16:54 +0000 From: "Chiu, Chasel" To: "Ni, Ray" , "S, Ashraf Ali" , "Desimone, Nathaniel L" , "Ma, Maurice" CC: "Zeng, Star" , "Kuo, Ted" , "Duggapu, Chinni B" , "Chaganty, Rangasai V" , "Solanki, Digant H" , "V, Sangeetha" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Topic: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Index: AQHYIPM7coi02JitB0qjiNaoR+x42qySunqAgAxE7JA= Date: Tue, 22 Feb 2022 04:16:54 +0000 Message-ID: References: <1854878485cb78c405c11f72e6ca7363587cac73.1644768023.git.ashraf.ali.s@intel.com> In-Reply-To: Accept-Language: en-US X-Mentions: ashraf.ali.s@intel.com,nathaniel.l.desimone@intel.com,maurice.ma@intel.com X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 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: f50b799c-5dff-4406-7a31-08d9f5ba28dd x-ms-traffictypediagnostic: MN2PR11MB4143:EE_ 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: 1lpEazApggj0z5TgFLjbkdRPkemuo2qIPj6Kamhd3GxWEfZ0SrU5PvpnT3G1sJ9DLGOzj5hMFkcp0/MemKJpVYqeMyXiOFzPmzDy0jRLdsp2RqXXqEGIVkF09j4Nci2DqCfrFLmZAqPv211Y2+dI4m04JBm2Ynn86dhgLhlKsjD8SrefR9NamfA5uw4vLwOuE+036izL+g5dCPD/OhGD/Ns23J1gU4JERBgpE1eOjRxhSE9tJWP9FNmcq7QK2eo6wzCyrGNWaEjPl9+QyvkYoEvDSGAc6wGruJzIdb8d5u9OnZlrPHeQHJYXgVItrMtcxyhnl6mtUhEU14Yy8K/7nOgRrVmfwjrFwU29wRS2f3elr+kVysjgl1qos4mATLAHtle8gvSJtxaro6nyF++pldvf82o/GoLWPtK/zxb6L8XbQhXEVtnulbsgKM403wvjtkqRcK2YciDB2mLfkPwYznRar9AYIB3HbZZPJMnYWiyJQDoqeCSo0/oFMIrpipSbJRyng0tZLH0QTbHZnWy/3fHhYhXFL5sOamBgtER24fXQQVS8xXRsB80/QrzCmnDtuRpdFNYLh4HPSvBA12TK+rutbBtd7RlgwZ3FT/ApKJVpqaJZKNxeEEO1E2VlVxXotrJhriUbIXSnYcAWqBTbUS+IWuRLaBelXQGNi4S8wuoVCvVkvKCs8HR7gKFIj2edO4i0l8/rBHVZ248Vl6OsInCr/k59Rncyn/xxTAheXcT7XMcZZfvl2oX4elqUKQXRKnHSZqJgVAJPLXCH3cYgo1wsU++aOPCJUyLy1aPsfcNG1GMfEQkJLdBIyOuB8SZ5r22gcFzHaQG6+xGvXDncp958CuZizrviNacTgGBiqOyKGFdXr7m1hZft9/UuXy4m x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR11MB5483.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(7696005)(86362001)(6506007)(186003)(26005)(2906002)(53546011)(71200400001)(122000001)(82960400001)(38070700005)(38100700002)(66476007)(8676002)(66556008)(76116006)(110136005)(316002)(508600001)(54906003)(6636002)(83380400001)(66446008)(4326008)(66946007)(966005)(64756008)(9686003)(8936002)(5660300002)(33656002)(55016003)(19627235002)(52536014)(11716005)(213903007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?u+OnxZ64UDgX+FlNHlqbXiX+10kQMNqmEC2DM9F1Yb2ZPn4EpB4aRyK80P3a?= =?us-ascii?Q?wbiz7+RFyXHITmeM0Vc0C678gOXZfeRAyFpOyNi6gen6DGfL2jhjei3s5QKM?= =?us-ascii?Q?G5gqVAkr8jCl3rXnNFiDWlNJzr9TG1dJrSltDMcc72BPlavjKINN5OuBb7d2?= =?us-ascii?Q?hkvWPlEMmeILIWt7MeuS28I3/RLdO6dfzUWqfy2dvmuN4cCgo+cMfeMVSSfU?= =?us-ascii?Q?chrjyP0seoPExDvGZc38zwVTCYbfkcWbkK7Tc8Yq4crUSZiMcCcw5BG7o5v2?= =?us-ascii?Q?RdWD/ZRxS3guI9AAAzEErUUABl0iNBN2VGu5+eJ4iMH1buZ4Rc6KCb6TlRG8?= =?us-ascii?Q?teHeG6FkvaZaw3/7pTsOa+ilDI8piNzD5woAlBdy8Wlht6ZOoU4PxzBEIe+O?= =?us-ascii?Q?dyRUeGtMfXCPUM4QKYcPuZwQ1/zeP+l2rJBlzckOdLS3lu8ajFEFgLtfa4RD?= =?us-ascii?Q?BrHtkJcHlJDFj8jS7F44vMZxn5+goiDrLmsJ+LTEjZ+UilJ+IXo3SqoyqD5z?= =?us-ascii?Q?cWhZcfA/MvlSFPKi/7WdSPeoyNUY7XpYh16JiK5sJKTJ7ooXkqfkST5yOz/6?= =?us-ascii?Q?5ZAno8FsPqjF4Ui845dXsDA+0mW4/m2/Z+cJrjTs2bZcta65Uc1gFCXu5E1g?= =?us-ascii?Q?Cp7RjhopnVvhSXkdBWXRy6s/PxjwTxtbfEdXakuFq2FgKnKG6qtXAixi56Pd?= =?us-ascii?Q?R+5HzOPHCMvRgYAWNEFbPXAp+burtBIPFrjyoxD8ZagVkD0K/0wTJyY+DefH?= =?us-ascii?Q?e3UogPNz6NJfRzEVpDAxZMPC39kcDJl92A4bqmCiexn7z0OzSZ57MqCk8xoJ?= =?us-ascii?Q?b0Qc3OD68/oPlWb0mPqhTP+rDf+STKeH4N0z9Klhv7yQQtm7maeF08Ie9Fsu?= =?us-ascii?Q?liYAPxouWo/XabLnwMn+Nbl6xHpNQyPDxapFGzBy+H7GbJvNyviA3GJFPdcL?= =?us-ascii?Q?thS5CmkbFZsIVzQReo22XBHG6rq9AXENbx4Ui9a/ZeAwXCrYljeVk9BNsttA?= =?us-ascii?Q?Ah0oM1CvMEH/Fy1EWlMvtztCHdWQOzkD+9CWyWWayM3AQMNJnbPQS6qmxzuX?= =?us-ascii?Q?YIE9THlsc5DskoAvAxYQwcnwxlbQCJg743qLe85rMgitbdRd1ffENGL0a3XF?= =?us-ascii?Q?XNmqXy6KX7/yWMorvScZOOToHsX/dUfsxCeEGCWMuSkYAXGvTx0deYt4yBMs?= =?us-ascii?Q?g3+5wa6r+gRhDisa+aLRLbV8MP7y2dngBt4U5xo+V7eqrSLnYSBoyNWZ41hV?= =?us-ascii?Q?LpmgmRaUnZAcHtr58kXSYjc3vv4HTbBQmkhtG1YLUpYY5yEuu4/MwN6F3VGB?= =?us-ascii?Q?4VYL8TySF05oS818fqViuKXJkeTx5Jr3r1pT+scqp6YojmejXk0rWVlKEkib?= =?us-ascii?Q?FLu3mYJSgq5pWR3dKriApgfdvXuF6d4Op7sRMo9hU8OQn+VbyZZOcOWI/jxi?= =?us-ascii?Q?XxFf+mVa4PNWkTXm6ugtp6PFYljYRL7SWWokf/tEM2DaLpE4V0QRBpMA60SQ?= =?us-ascii?Q?j8g0bAcaXJ/GyeEb90AZIzWP//tMV8ixaUfirlRJrLcWZ+LxjRNNKcmCSQ24?= =?us-ascii?Q?D0j7xUqXhE/i5CFIfTl9LGnI6egzFhlBSptofINhs/FXn+F+1HW38ro/fgjG?= =?us-ascii?Q?KA=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f50b799c-5dff-4406-7a31-08d9f5ba28dd X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2022 04:16:54.6554 (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: 01p+Ji21+E9/ZqKxQ0tWkAyp7OhMvSq0S9ziO4LrDYaMZe0hRvsRoiUbVtrtWb2DeNqgYlkuiJ3WMsP3xUeX9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4143 Return-Path: chasel.chiu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks for good catch, Ray! @Desimone, Nathaniel L and @Ma, Maurice, please also share your comments fo= r this change. I think we could directly change CoreStack size and implementation to suppo= rt 64bits build because both FspGlobalData and SwapStack() are FSP private/= internal usage. @S, Ashraf Ali, I also add some more feedbacks in below patch inline, pleas= e help to check and verify. Thanks, Chasel IntelFsp2Pkg\Include\FspGlobalData.h: typedef struct { UINT32 Signature; UINT8 Version; UINT8 Reserved1[3]; UINT32 CoreStack; =3D> change to "UINT64 CoreStack;" ca= n be used by 32bit build too. UINT32 StatusCode; UINT32 Reserved2[8]; IntelFsp2Pkg\Library\BaseFspSwitchStackLib\FspSwitchStackLib.c: UINT32 =3D> UINTN SwapStack ( IN UINT32 NewStack =3D> UINTN ) { FSP_GLOBAL_DATA *FspData; UINT32 OldStack; =3D> UINTN FspData =3D GetFspGlobalDataPointer (); OldStack =3D FspData->CoreStack; FspData->CoreStack =3D NewStack; return OldStack; } > -----Original Message----- > From: Ni, Ray > Sent: Monday, February 14, 2022 4:38 PM > To: devel@edk2.groups.io; S, Ashraf Ali > Cc: Chiu, Chasel ; Desimone, Nathaniel L > ; Zeng, Star ; Kuo, = Ted > ; Duggapu, Chinni B ; > Chaganty, Rangasai V ; Solanki, Digant H > ; V, Sangeetha > Subject: RE: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Sup= port > for X64 Build >=20 > The patch itself looks good to me. > But when I read the code further, the SwapStack() is implemented as below= . > I think you need to enhance it to support the case when RSP is above 4GB. > 1. Change UINT32 NewStack to UINTN > 2. Change CoreStack from UINT32 to UINTN. >=20 > UINT32 > SwapStack ( > IN UINT32 NewStack > ) > { > FSP_GLOBAL_DATA *FspData; > UINT32 OldStack; >=20 > FspData =3D GetFspGlobalDataPointer (); > OldStack =3D FspData->CoreStack; > FspData->CoreStack =3D NewStack; > return OldStack; > } >=20 > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Ashraf Ali= S > Sent: Monday, February 14, 2022 12:02 AM > To: devel@edk2.groups.io > Cc: S, Ashraf Ali ; Chiu, Chasel ; > Desimone, Nathaniel L ; Zeng, Star > ; Kuo, Ted ; Duggapu, Chinni B > ; Chaganty, Rangasai V > ; Solanki, Digant H > ; V, Sangeetha > Subject: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support= for > X64 Build >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3832 >=20 > BaseFspSwitchStackLib Currently Support for IA32 build only, adding suppo= rt for > X64 build, fix typecasting issues for X64 build. > 0xFFFF_FFFF will be replaced by MAX_ADDRESS which is set based on the typ= e of > Library which is it building. > if it's a IA32 MAX_ADDRESS =3D 0xFFFF_FFFF > for X64 MAX_ADDRESS =3D 0xFFFF_FFFF_FFFF_FFFFULL >=20 > Cc: Chasel Chiu > Cc: Nate DeSimone > Cc: Star Zeng > Cc: Kuo Ted > Cc: Duggapu Chinni B > Cc: Rangasai V Chaganty > Cc: Digant H Solanki > Cc: Sangeetha V >=20 > Signed-off-by: Ashraf Ali S > --- > IntelFsp2Pkg/FspSecCore/SecFsp.h | 3 +- > IntelFsp2Pkg/FspSecCore/SecFspApiChk.c | 10 +- > .../BaseFspSwitchStackLib.inf | 7 +- > .../BaseFspSwitchStackLib/X64/Stack.nasm | 124 ++++++++++++++++++ > 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 > IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm >=20 > diff --git a/IntelFsp2Pkg/FspSecCore/SecFsp.h > b/IntelFsp2Pkg/FspSecCore/SecFsp.h > index aacd32f7f7..9a6fc14d23 100644 > --- a/IntelFsp2Pkg/FspSecCore/SecFsp.h > +++ b/IntelFsp2Pkg/FspSecCore/SecFsp.h > @@ -1,6 +1,6 @@ > /** @file >=20 > - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
> + Copyright (c) 2014 - 2022, Intel Corporation. All rights > + reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > **/ > @@ -10,6 +10,7 @@ >=20 > #include > #include > +#include > #include > #include > #include > diff --git a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > index 7d6ef11fe7..b70d3ffcf1 100644 > --- a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > +++ b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > @@ -1,6 +1,6 @@ > /** @file >=20 > - Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
> + Copyright (c) 2016 - 2022, Intel Corporation. All rights > + reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > **/ > @@ -31,7 +31,7 @@ FspApiCallingCheck ( > // > // NotifyPhase check > // > - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { > + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { > Status =3D EFI_UNSUPPORTED; > } else { > if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { @@ -42,7 = +42,7 > @@ FspApiCallingCheck ( > // > // FspMemoryInit check > // > - if ((UINT32)FspData !=3D 0xFFFFFFFF) { > + if ((UINTN)FspData !=3D MAX_ADDRESS) { > Status =3D EFI_UNSUPPORTED; > } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) { > Status =3D EFI_INVALID_PARAMETER; > @@ -51,7 +51,7 @@ FspApiCallingCheck ( > // > // TempRamExit check > // > - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { > + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { > Status =3D EFI_UNSUPPORTED; > } else { > if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { @@ -62,7 = +62,7 > @@ FspApiCallingCheck ( > // > // FspSiliconInit check > // > - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { > + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { > Status =3D EFI_UNSUPPORTED; > } else { > if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { diff --gi= t > a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf > b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf > index 3dcf3b9598..cd7d89e43a 100644 > --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.in= f > +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.i > +++ nf > @@ -1,7 +1,7 @@ > ## @file > # Instance of BaseFspSwitchStackLib > # > -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved. > +# Copyright (c) 2014 - 2022, Intel Corporation. All rights > +reserved.
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -15,12 +15,15 @@ > VERSION_STRING =3D 1.0 > LIBRARY_CLASS =3D FspSwitchStackLib >=20 > -[Sources.IA32] > +[Sources] > FspSwitchStackLib.c >=20 > [Sources.IA32] > Ia32/Stack.nasm >=20 > +[Sources.X64] > + X64/Stack.nasm > + > [Packages] > MdePkg/MdePkg.dec > IntelFsp2Pkg/IntelFsp2Pkg.dec > diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm > b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm > new file mode 100644 > index 0000000000..f94f39fc13 > --- /dev/null > +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm > @@ -0,0 +1,124 @@ > +;---------------------------------------------------------------------- > +-------- > +; > +; Copyright (c) 2022, Intel Corporation. All rights reserved.
; > +SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Abstract: > +; > +; Switch the stack from temporary memory to permanent memory. > +; > +;---------------------------------------------------------------------- > +-------- > + > + SECTION .text > + > +extern ASM_PFX(SwapStack) > + > +;-----------------------------------------------------------------------= ------ > +; Macro: PUSHA_64 > +; > +; Description: Saves all registers on stack ; > +; Input: None > +; > +; Output: None > +;---------------------------------------------------------------------- > +------- > +%macro PUSHA_64 0 > + push rsp > + push rbp > + push rax > + push rbx > + push rcx > + push rdx > + push rsi > + push rdi > + push r8 > + push r9 > + push r10 > + push r11 > + push r12 > + push r13 > + push r14 > + push r15 > +%endmacro > + > +;-----------------------------------------------------------------------= ------ > +; Macro: POPA_64 > +; > +; Description: Restores all registers from stack ; > +; Input: None > +; > +; Output: None > +;---------------------------------------------------------------------- > +------- > +%macro POPA_64 0 > + pop r15 > + pop r14 > + pop r13 > + pop r12 > + pop r11 > + pop r10 > + pop r9 > + pop r8 > + pop rdi > + pop rsi > + pop rdx > + pop rcx > + pop rbx > + pop rax > + pop rbp > + pop rsp > +%endmacro > + > +;---------------------------------------------------------------------- > +-------- > +; UINT32 > +; EFIAPI > +; Pei2LoaderSwitchStack ( > +; VOID > +; ) > +;---------------------------------------------------------------------- > +-------- > +global ASM_PFX(Pei2LoaderSwitchStack) > +ASM_PFX(Pei2LoaderSwitchStack): > + xor rax, rax > + jmp ASM_PFX(FspSwitchStack) > + > +;---------------------------------------------------------------------- > +-------- > +; UINT32 > +; EFIAPI > +; Loader2PeiSwitchStack ( > +; VOID > +; ) > +;---------------------------------------------------------------------- > +-------- > +global ASM_PFX(Loader2PeiSwitchStack) > +ASM_PFX(Loader2PeiSwitchStack): > + jmp ASM_PFX(FspSwitchStack) > + > +;---------------------------------------------------------------------- > +-------- > +; UINT32 > +; EFIAPI > +; FspSwitchStack ( > +; VOID > +; ) > +;---------------------------------------------------------------------- > +-------- > +global ASM_PFX(FspSwitchStack) > +ASM_PFX(FspSwitchStack): I think in this function we should change all esp to rsp. > + ; Save current contexts > + push rax > + pushfq > + cli > + PUSHA_64 > + sub esp, 8 > + sidt [esp] > + > + ; Load new stack > + mov rcx, rsp > + call ASM_PFX(SwapStack) > + mov rsp, rax > + > + ; Restore previous contexts > + lidt [esp] > + add esp, 8 > + POPA_64 > + popfq > + add esp, 4 I believe here you should add 8 > + ret > + > -- > 2.30.2.windows.1 >=20 >=20 >=20 >=20 >=20