From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web08.19355.1661904713389636230 for ; Tue, 30 Aug 2022 17:11:53 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=KSYOdFn9; spf=permerror, err=too many SPF records (domain: intel.com, ip: 192.55.52.151, mailfrom: nathaniel.l.desimone@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661904713; x=1693440713; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=FVWr9FrPTBYoPaHcRYwmVmL3w1wHpdH+jv1dD/m9BlI=; b=KSYOdFn9iMZMgAyJkskfdNqjKbcggxBZENnW0440b4kUp/SBvAJjtS+a OPrl8vNNVxwltc2DEVVl8XSnULdP5AKlaPoazya7ENYUw5K/uY6ftX1uX v+YpIindN7gt4oP8uh7ao2FzOjSelHNVt+75jOJAXcZeB3+0qU4/Nodnu wODQt1jrdz+RI1nTg2C7F1S28kytrgFdik1Hg4IVtQqIwz1I4mEonzffz vk4OJJAZjefmCHaWtkPZiwvUyVoXJ773ERWSksZmeB14B5U6MXDtCRv/b FXD6RC+k2Q2N+zCP/hhocrkpesuxUs/vpLwBMU1XvdqMSJBH+qeNfxCnR w==; X-IronPort-AV: E=McAfee;i="6500,9779,10455"; a="275737640" X-IronPort-AV: E=Sophos;i="5.93,276,1654585200"; d="scan'208";a="275737640" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Aug 2022 17:11:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,276,1654585200"; d="scan'208";a="641625997" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga008.jf.intel.com with ESMTP; 30 Aug 2022 17:11:52 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) 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.2375.31; Tue, 30 Aug 2022 17:11:50 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 30 Aug 2022 17:11:50 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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.2375.31 via Frontend Transport; Tue, 30 Aug 2022 17:11:50 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.105) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Tue, 30 Aug 2022 17:11:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ji/b5agWgc9oavqahveXvYMt1OI7tAOkV4xtedNdThqd9xyeYx2muNHcVzQdY5zclyQBL7O4GshVJMwzdZAqiVJQvr7LgdKaHt0o4jeO3jBbtYpY4FdblHDwUtJ99nBGp+sehvN26bAQaTD+C6Y2RBBGt+g2L6WOV0bVWe4MTBLVDBW86HDhtGjcsJDRWFcHgl0GMTTZXr4mrxL0wByd+ugMsSUrHAA+IelDXSDzC+38UxpdxClRMYb2Bn0568Q7Qy9mpSnM4cXIidJF04hyb2roQIKI1gYXCbpL6y3tCGbKfzJXCHsFTiK9jcCCKoyZvQWdcag4xSEJ5rar2TdlkQ== 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=btyPi3nuUlVdKE6Xrfzyqp0ywGWxqdEt0JfJwQrjnbQ=; b=GZiHFoqWuXkIqCk94QVLr2YPz9cq3pBYcsYeXkW5ZwwLpi0+GZaoz2WqMjoKqaAI21dksLpgboes6kflvIC0/h2P8HTyij3Kw0bbydzd7FGZPOcNgrHik0n4eUhGg3Zy1lvXx3VqFienvjampG+IISg8WNrkxv0xa0PfeiTSGJWMDYKA2mNSp2X6wedJlvdHNY1atRVufrRtD4/JvB6oBkXKASeHBgtTN511FBiZwWoyYQ22MptYyuHipADudnrHkUusbvXpEPcBS3pstNGF9AVhROacKurxiB+Wg2s4R5F1RXbVW+lkgOpvqyUBSJBxp5N9wS/osDtBu9MCzTImrA== 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 PH0PR11MB5832.namprd11.prod.outlook.com (2603:10b6:510:141::7) by CY5PR11MB6305.namprd11.prod.outlook.com (2603:10b6:930:23::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Wed, 31 Aug 2022 00:11:48 +0000 Received: from PH0PR11MB5832.namprd11.prod.outlook.com ([fe80::4d72:c4bd:d0b1:9a4e]) by PH0PR11MB5832.namprd11.prod.outlook.com ([fe80::4d72:c4bd:d0b1:9a4e%6]) with mapi id 15.20.5566.021; Wed, 31 Aug 2022 00:11:48 +0000 From: "Nate DeSimone" To: "Chiu, Chasel" , "devel@edk2.groups.io" CC: "Zeng, Star" Subject: Re: [PATCH v2 2/4] IntelFsp2WrapperPkg: Add FSP 2.4 MultiPhase interface. Thread-Topic: [PATCH v2 2/4] IntelFsp2WrapperPkg: Add FSP 2.4 MultiPhase interface. Thread-Index: AQHYrFLtHugCPVfUDkG+WvGvyWXLQK3IQ8dg Date: Wed, 31 Aug 2022 00:11:48 +0000 Message-ID: References: <20220810004822.1499-1-chasel.chiu@intel.com> <20220810004822.1499-3-chasel.chiu@intel.com> In-Reply-To: <20220810004822.1499-3-chasel.chiu@intel.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-office365-filtering-correlation-id: f0e26d79-d72e-4c3d-9475-08da8ae565af x-ms-traffictypediagnostic: CY5PR11MB6305:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: s2K1SQv/fE8h/h8/OCPJw7jbhSQd4lo9eECCzCJFIxTiwImS/LXvsynUQZ+s0n1eQAcnU3pP8E6bNNFI8LIcs7BcfICNSeTxTlZUIrc0geed/D57JKN8OoUbnd56YFD32Ul7gcRwKEsPaLbzSRC27ns/OE/pUd2BFTHQ7soF0uu9GvcZnlQZLbu4HAS9pmaah8Xz/ZpUCcDHbmfpAS3G6bIJwP95lJEZWt+4zDkOMjniVk+S21a2VLUBvRh/3S6PPT6urH4+/sYVxKY6ElSncEkydN4fGviAuW1wxm8HJuHeTnZj+hhaaqO0sPlMuNy0j1rpISfZHw9n0MkZD+03vzPYAs2sVvm4QS+ZDH0wkF249zHT7GbAGEJqm2LfvMRtnyilvME8bXG5SgealwF+9kQ5iM18ts7kgCG3gm2cbI/5LYOhOD/EMRH+ODa/+lswn1aQ0ZmP6++dehStQi8k3aLyHulSwngGa9iheEo3JybTFR1XcbcJ3dVNiAqhZkq0+DgzDm5bw8dB4aftsxiW6jWhT52ESVWpRZQEfxiKvPqTQo21FatkJhvUGssTmOGQFzhxIP3i6+h/xkR+c5b7IRMVGVPVc2DxxSG/6ACfuWQDIiNiyYWPNOlHDYUpiA7q0/QNguyTbDYZKzGmTfAfD+GKj4SiWkjJAW9XZMAXEAehkNvf2IXzxvKo0P1QwoQS/S9KJY9Zt63YZ9C/QrgMOnUrFGLD0hr7jRWYPa1RR1h/V2FCVGbQChou43qsUdFQmFWPNfv5aj9Xuyt9QEQQonb7mAH3VSmi7k075CWuYoqPzn3gGJOtFVB0VxFITlhC x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5832.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(366004)(346002)(39860400002)(376002)(136003)(71200400001)(76116006)(55016003)(86362001)(4326008)(66946007)(66476007)(66556008)(8676002)(66446008)(64756008)(38070700005)(110136005)(82960400001)(316002)(19627235002)(186003)(83380400001)(41300700001)(107886003)(478600001)(122000001)(38100700002)(966005)(26005)(9686003)(53546011)(6506007)(5660300002)(7696005)(30864003)(33656002)(52536014)(8936002)(2906002)(559001)(579004)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?EXg5dZaUxbCQo+RelXrWh5N5VSDe1Y4WF9wJ4N9gLmDJJMmgfxnQoGRufqK6?= =?us-ascii?Q?EiT/wgaTAJnqfED9R3YKTWOZE4xRMv3vzFnwH6fp+7XL9ZytO2Ld2Z/j5s81?= =?us-ascii?Q?2MHYvx+JeqNw0GwkPlV/ufmOud2O5qhhlDNp0VL6Ioesj3rDg6s9GEPZiYnK?= =?us-ascii?Q?AvnMcuDnO6T9w+EUPpLVcBHnHEetANVRxYNLDR6ioFwQAe/Iwd7ymUeRcUL+?= =?us-ascii?Q?QggXAfH1dF7GzQlMaZfzWSk43z/ZRYWrnd90/QfjTxCnFpHizfYlb/UCaLi7?= =?us-ascii?Q?NPq8eRzo2WxT5zbavfIPmC8409jKTIb78oCr93YukJxPV7AR2RxclT+lgTH6?= =?us-ascii?Q?Sf/ZSJaw10Y9HVsgom7CQJAzVQ+vXMhdUQc2IbV+kXJQqfIP4TRwClXDxq2f?= =?us-ascii?Q?a3+zYCYpn8yYq2j2gfVQ9cSeJVojGMKIjuvS3OIFIKull8dJtM4opj/mYHYT?= =?us-ascii?Q?+sDG93ku4zou/7zc/aPnd5wNJInWbjggAOJQbZGUQQZdACceH9czCPamdaOT?= =?us-ascii?Q?CZj/IYSQ8U37zbbft2IAyB5qu7FJnAN90oQwsM7cMbwp/sHpFGSGxy8D8iFA?= =?us-ascii?Q?dY/ksgaUQyZHwbicP10HYW7t/IKTi7uvE2R+NUy6/NKsXT3+2S5lbUlCptS5?= =?us-ascii?Q?nuZMbTgIdvl0vyTecX4saY/yPXLcN2LfdmHv6/Rn+7pWurPg8AW3v+RaWiu9?= =?us-ascii?Q?IGo3d/gwh4Y5zIQBoVvMBAAv1sjTK7Hyv5gynavgHg0fT95RZ/qm5zTrAtzr?= =?us-ascii?Q?yxAC7rENsKpeUoao7NBxg0C4hMN2B3Azo9cuzPwNQs60JnXpL0MQVfUG6D9n?= =?us-ascii?Q?uokKHfL1Q+1PnWf6GQLfDPPrb9vNbKExTWXjcdQ4VCoCIDC/6swNUcSr5K+1?= =?us-ascii?Q?fyZXiAbF/XKSD4Xg8ycsSz6qPPvxNCyB5VCuTozuhidrcQReTAnlJYopMFuT?= =?us-ascii?Q?vojecPjNfH36Dr5JpDE2BPpvcQF8n30AqHLDjUUZ00TYnz89EcdFhMDvbyGh?= =?us-ascii?Q?stAMzYx1Y98atoWBZBjnRcocL6k74q39AyhGEtidomSTeakmKRoXXwSIuxv/?= =?us-ascii?Q?7g2S7+cjogE6w39/9N88HhN30QRAtYDWDkIYquqDle2C3fHdSKAd7eWKcdKu?= =?us-ascii?Q?jO2xUQY2gTL/pi93RZCox4iZdZi0CaPc60vnDpIjm6doZEiTKc7Hjw6Nj1Zz?= =?us-ascii?Q?HQJlNKcubGnf+e+wyEHUp7zvegpaq5+hH1EmZF4ZU2boETW0P8FuujcW2CRa?= =?us-ascii?Q?E0vH0217vuedT9iLl8oWhJovaH+Td59yapaaMOUN4z/HyrCT4XyUvclvH4O2?= =?us-ascii?Q?bHFTyidqpJNvffc9snsP8/iiL3zlU+nElyRR0Kfd7D2pzjixE0wB0rdBmJbG?= =?us-ascii?Q?wNhOUh7GhktX8iEo8xw8mf844qHvgtQCuKQoT1aGwQEK8a65u7bNwXbQMb38?= =?us-ascii?Q?6SNwg83QWDdsse4+XgWj9ANql2dKjwlh4sDJlBC3RNrI1xYeGX6zgJ+nIYvK?= =?us-ascii?Q?k8nXcsppOvVKw9MP0gLmAYUQNCHAbMmNFTsr3c+I/G5KTm16SYeXq5vLwg1Q?= =?us-ascii?Q?yzd28iHA+c0EVwMIliig/XlXbn5ddG/ERDXUHnTKqTNYKND9qaxQ5f7Y87yM?= =?us-ascii?Q?/Q=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5832.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0e26d79-d72e-4c3d-9475-08da8ae565af X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Aug 2022 00:11:48.3602 (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: mrzBFnAVJO32+d4ixrHHwUnhj1K7SPt5/DbtQ5d3RslIyLMK+d2heZNFLVZDmU6CNDh2ARX4qQ8g5r1QP2u32sRxj1bJOGKh73sjczVMZZM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR11MB6305 Return-Path: nathaniel.l.desimone@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Nate DeSimone > -----Original Message----- > From: Chiu, Chasel > Sent: Tuesday, August 9, 2022 5:48 PM > To: devel@edk2.groups.io > Cc: Chiu, Chasel ; Desimone, Nathaniel L > ; Zeng, Star > Subject: [PATCH v2 2/4] IntelFsp2WrapperPkg: Add FSP 2.4 MultiPhase > interface. >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3916 >=20 > Provide FSP 2.4 MultiPhase wrapper support library. >=20 > Cc: Nate DeSimone > Cc: Star Zeng > Signed-off-by: Chasel Chiu > --- >=20 > IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSampl > e/FspWrapperPlatformMultiPhaseLibSample.c | 49 > +++++++++++++++++++++++++++++++++++++++++++++++++ >=20 > IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspWra > pperMultiPhaseProcessLib.c | 355 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++++ > IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h > | 62 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++ > IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > | 10 +++++++++- > IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc > | 6 +++++- >=20 > IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSampl > e/BaseFspWrapperPlatformMultiPhaseLibSample.inf | 37 > +++++++++++++++++++++++++++++++++++++ >=20 > IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrappe > rMultiPhaseProcessLib.inf | 48 > ++++++++++++++++++++++++++++++++++++++++++++++++ > 7 files changed, 565 insertions(+), 2 deletions(-) >=20 > diff --git > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/FspWrapperPlatformMultiPhaseLibSample.c > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/FspWrapperPlatformMultiPhaseLibSample.c > new file mode 100644 > index 0000000000..ef8819203d > --- /dev/null > +++ > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/FspWrapperPlatformMultiPhaseLibSample.c > @@ -0,0 +1,49 @@ > +/** @file >=20 > + Support FSP MultiPhase process. >=20 > + >=20 > + Copyright (c) 2022, Intel Corporation. All rights reserved.
>=20 > + SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > + >=20 > +**/ >=20 > + >=20 > +#include >=20 > +#include >=20 > +#include >=20 > + >=20 > +/** >=20 > + FSP Wrapper Platform MultiPhase Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + @param[in] PhaseIndex - Indicates current execution phase of= FSP > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_STATUS Always return EFI_SUCCESS >=20 > + >=20 > +**/ >=20 > +VOID >=20 > +EFIAPI >=20 > +FspWrapperPlatformMultiPhaseHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex, >=20 > + IN UINT32 PhaseIndex >=20 > + ) >=20 > +{ >=20 > + /* Example platform actions as below >=20 > + switch (ComponentIndex) { >=20 > + case FspMultiPhaseMemInitApiIndex: >=20 > + switch (PhaseIndex) { >=20 > + case 1: >=20 > + PlatformAction1 (); >=20 > + break; >=20 > + } >=20 > + break; >=20 > + case FspMultiPhaseSiInitApiIndex: >=20 > + switch (PhaseIndex) { >=20 > + case 1: >=20 > + PlatformAction2 (); >=20 > + break; >=20 > + } >=20 > + break; >=20 > + } >=20 > + */ >=20 > +} >=20 > diff --git > a/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspWr > apperMultiPhaseProcessLib.c > b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspW > rapperMultiPhaseProcessLib.c > new file mode 100644 > index 0000000000..c29a8277df > --- /dev/null > +++ > b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/PeiFspW > rapperMultiPhaseProcessLib.c > @@ -0,0 +1,355 @@ > +/** @file >=20 > + Support FSP MultiPhase process. >=20 > + >=20 > + Copyright (c) 2022, Intel Corporation. All rights reserved.
>=20 > + SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > + >=20 > +**/ >=20 > + >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > +#include >=20 > + >=20 > +/** >=20 > + Execute 32-bit FSP API entry code. >=20 > + >=20 > + @param[in] Function The 32bit code entry to be executed. >=20 > + @param[in] Param1 The first parameter to pass to 32bit code. >=20 > + @param[in] Param2 The second parameter to pass to 32bit code. >=20 > + >=20 > + @return EFI_STATUS. >=20 > +**/ >=20 > +EFI_STATUS >=20 > +Execute32BitCode ( >=20 > + IN UINT64 Function, >=20 > + IN UINT64 Param1, >=20 > + IN UINT64 Param2 >=20 > + ); >=20 > + >=20 > +/** >=20 > + Execute 64-bit FSP API entry code. >=20 > + >=20 > + @param[in] Function The 64bit code entry to be executed. >=20 > + @param[in] Param1 The first parameter to pass to 64bit code. >=20 > + @param[in] Param2 The second parameter to pass to 64bit code. >=20 > + >=20 > + @return EFI_STATUS. >=20 > +**/ >=20 > +EFI_STATUS >=20 > +Execute64BitCode ( >=20 > + IN UINT64 Function, >=20 > + IN UINT64 Param1, >=20 > + IN UINT64 Param2 >=20 > + ); >=20 > + >=20 > +/** >=20 > + Call FspsMultiPhase API. >=20 > + >=20 > + @param[in] FspsMultiPhaseParams - Parameters for MultiPhase API. >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + >=20 > + @return EFI_UNSUPPORTED - the requested FspsMultiPhase API is not > supported. >=20 > + @return EFI_DEVICE_ERROR - the FSP header was not found. >=20 > + @return EFI status returned by FspsMultiPhase API. >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +CallFspMultiPhaseEntry ( >=20 > + IN VOID *FspMultiPhaseParams, >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex >=20 > + ) >=20 > +{ >=20 > + FSP_INFO_HEADER *FspHeader; >=20 > + // >=20 > + // FSP_MULTI_PHASE_INIT and FSP_MULTI_PHASE_SI_INIT API functions > having same prototype. >=20 > + // >=20 > + UINTN FspMultiPhaseApiEntry; >=20 > + UINTN FspMultiPhaseApiOffset; >=20 > + EFI_STATUS Status; >=20 > + BOOLEAN InterruptState; >=20 > + >=20 > + if (ComponentIndex =3D=3D FspMultiPhaseMemInitApiIndex) { >=20 > + FspHeader =3D (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspmBaseAddress)); >=20 > + if (FspHeader =3D=3D NULL) { >=20 > + return EFI_DEVICE_ERROR; >=20 > + } >=20 > + >=20 > + FspMultiPhaseApiOffset =3D FspHeader- > >FspMultiPhaseMemInitEntryOffset; >=20 > + } else if (ComponentIndex =3D=3D FspMultiPhaseSiInitApiIndex) { >=20 > + FspHeader =3D (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 > (PcdFspsBaseAddress)); >=20 > + if (FspHeader =3D=3D NULL) { >=20 > + return EFI_DEVICE_ERROR; >=20 > + } >=20 > + >=20 > + FspMultiPhaseApiOffset =3D FspHeader->FspMultiPhaseSiInitEntryOffset= ; >=20 > + } >=20 > + >=20 > + if (FspMultiPhaseApiOffset =3D=3D 0) { >=20 > + return EFI_UNSUPPORTED; >=20 > + } >=20 > + >=20 > + FspMultiPhaseApiEntry =3D FspHeader->ImageBase + > FspMultiPhaseApiOffset; >=20 > + InterruptState =3D SaveAndDisableInterrupts (); >=20 > + if ((FspHeader->ImageAttribute & BIT2) =3D=3D 0) { >=20 > + // BIT2: IMAGE_ATTRIBUTE_64BIT_MODE_SUPPORT >=20 > + Status =3D Execute32BitCode ((UINTN)FspMultiPhaseApiEntry, > (UINTN)FspMultiPhaseParams, (UINTN)NULL); >=20 > + } else { >=20 > + Status =3D Execute64BitCode ((UINTN)FspMultiPhaseApiEntry, > (UINTN)FspMultiPhaseParams, (UINTN)NULL); >=20 > + } >=20 > + >=20 > + SetInterruptState (InterruptState); >=20 > + >=20 > + DEBUG ((DEBUG_ERROR, "CallFspMultiPhaseEntry return Status %r \n", > Status)); >=20 > + >=20 > + return Status; >=20 > +} >=20 > + >=20 > +/** >=20 > + FSP Wrapper Variable Request Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific > variable request >=20 > + @retval EFI_STATUS Return FSP returned status >=20 > + >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +FspWrapperVariableRequestHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex >=20 > + ) >=20 > +{ >=20 > + EFI_STATUS Status; >=20 > + FSP_MULTI_PHASE_PARAMS FspMultiPhaseParams; >=20 > + FSP_MULTI_PHASE_VARIABLE_REQUEST_INFO_PARAMS > *FspVariableRequestParams; >=20 > + EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariablePpi= ; >=20 > + EDKII_PEI_VARIABLE_PPI *VariablePpi; >=20 > + BOOLEAN WriteVariableSupport= ; >=20 > + FSP_MULTI_PHASE_COMPLETE_VARIABLE_REQUEST_PARAMS > CompleteVariableRequestParams; >=20 > + >=20 > + WriteVariableSupport =3D TRUE; >=20 > + Status =3D PeiServicesLocatePpi ( >=20 > + &gEdkiiPeiVariablePpiGuid, >=20 > + 0, >=20 > + NULL, >=20 > + (VOID **)&VariablePpi >=20 > + ); >=20 > + if (EFI_ERROR (Status)) { >=20 > + WriteVariableSupport =3D FALSE; >=20 > + Status =3D PeiServicesLocatePpi ( >=20 > + &gEfiPeiReadOnlyVariable2PpiGuid, >=20 > + 0, >=20 > + NULL, >=20 > + (VOID **)&ReadOnlyVariablePpi >=20 > + ); >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + if (EFI_ERROR (Status)) { >=20 > + return EFI_UNSUPPORTED; >=20 > + } >=20 > + } >=20 > + >=20 > + Status =3D FSP_STATUS_VARIABLE_REQUEST; >=20 > + while (Status =3D=3D FSP_STATUS_VARIABLE_REQUEST) { >=20 > + // >=20 > + // Get the variable request information from FSP. >=20 > + // >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseGetVariableRequestInfo; >=20 > + FspMultiPhaseParams.PhaseIndex =3D 0; >=20 > + Status =3D CallFspMultiPhaseEntry (&Fs= pMultiPhaseParams, > FspHobListPtr, ComponentIndex); >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + // >=20 > + // FSP should output this pointer for variable request information. >=20 > + // >=20 > + FspVariableRequestParams =3D > (FSP_MULTI_PHASE_VARIABLE_REQUEST_INFO_PARAMS > *)FspMultiPhaseParams.MultiPhaseParamPtr; >=20 > + switch (FspVariableRequestParams->VariableRequest) { >=20 > + case EnumFspVariableRequestGetVariable: >=20 > + if (WriteVariableSupport) { >=20 > + Status =3D VariablePpi->GetVariable ( >=20 > + VariablePpi, >=20 > + FspVariableRequestParams->VariableName= , >=20 > + FspVariableRequestParams->VariableGuid= , >=20 > + FspVariableRequestParams->Attributes, >=20 > + (UINTN *)FspVariableRequestParams->Dat= aSize, >=20 > + FspVariableRequestParams->Data >=20 > + ); >=20 > + } else { >=20 > + Status =3D ReadOnlyVariablePpi->GetVariable ( >=20 > + ReadOnlyVariablePpi, >=20 > + FspVariableRequestParams->Vari= ableName, >=20 > + FspVariableRequestParams->Vari= ableGuid, >=20 > + FspVariableRequestParams->Attr= ibutes, >=20 > + (UINTN *)FspVariableRequestPar= ams->DataSize, >=20 > + FspVariableRequestParams->Data >=20 > + ); >=20 > + } >=20 > + >=20 > + CompleteVariableRequestParams.VariableRequestStatus =3D Status; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID > *)&CompleteVariableRequestParams; >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseCompleteVariableRequest; >=20 > + Status =3D CallFspM= ultiPhaseEntry > (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); >=20 > + break; >=20 > + >=20 > + case EnumFspVariableRequestSetVariable: >=20 > + if (WriteVariableSupport) { >=20 > + Status =3D VariablePpi->SetVariable ( >=20 > + VariablePpi, >=20 > + FspVariableRequestParams->VariableName= , >=20 > + FspVariableRequestParams->VariableGuid= , >=20 > + *FspVariableRequestParams->Attributes, >=20 > + (UINTN)*FspVariableRequestParams->Data= Size, >=20 > + FspVariableRequestParams->Data >=20 > + ); >=20 > + } else { >=20 > + Status =3D EFI_UNSUPPORTED; >=20 > + } >=20 > + >=20 > + CompleteVariableRequestParams.VariableRequestStatus =3D Status; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID > *)&CompleteVariableRequestParams; >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseCompleteVariableRequest; >=20 > + Status =3D CallFspM= ultiPhaseEntry > (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); >=20 > + break; >=20 > + >=20 > + case EnumFspVariableRequestGetNextVariableName: >=20 > + if (WriteVariableSupport) { >=20 > + Status =3D VariablePpi->GetNextVariableName ( >=20 > + VariablePpi, >=20 > + (UINTN *)FspVariableRequestParams->Var= iableNameSize, >=20 > + FspVariableRequestParams->VariableName= , >=20 > + FspVariableRequestParams->VariableGuid >=20 > + ); >=20 > + } else { >=20 > + Status =3D ReadOnlyVariablePpi->NextVariableName ( >=20 > + ReadOnlyVariablePpi, >=20 > + (UINTN *)FspVariableRequestPar= ams- > >VariableNameSize, >=20 > + FspVariableRequestParams->Vari= ableName, >=20 > + FspVariableRequestParams->Vari= ableGuid >=20 > + ); >=20 > + } >=20 > + >=20 > + CompleteVariableRequestParams.VariableRequestStatus =3D Status; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID > *)&CompleteVariableRequestParams; >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseCompleteVariableRequest; >=20 > + Status =3D CallFspM= ultiPhaseEntry > (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); >=20 > + break; >=20 > + >=20 > + case EnumFspVariableRequestQueryVariableInfo: >=20 > + if (WriteVariableSupport) { >=20 > + Status =3D VariablePpi->QueryVariableInfo ( >=20 > + VariablePpi, >=20 > + *FspVariableRequestParams->Attributes, >=20 > + FspVariableRequestParams- > >MaximumVariableStorageSize, >=20 > + FspVariableRequestParams- > >RemainingVariableStorageSize, >=20 > + FspVariableRequestParams->MaximumVaria= bleSize >=20 > + ); >=20 > + } else { >=20 > + Status =3D EFI_UNSUPPORTED; >=20 > + } >=20 > + >=20 > + CompleteVariableRequestParams.VariableRequestStatus =3D Status; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID > *)&CompleteVariableRequestParams; >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseCompleteVariableRequest; >=20 > + Status =3D CallFspM= ultiPhaseEntry > (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex); >=20 > + break; >=20 > + >=20 > + default: >=20 > + DEBUG ((DEBUG_ERROR, "Unknown VariableRequest type!\n")); >=20 > + Status =3D EFI_UNSUPPORTED; >=20 > + break; >=20 > + } >=20 > + } >=20 > + >=20 > + // >=20 > + // Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED > status >=20 > + // >=20 > + if ((Status >=3D FSP_STATUS_RESET_REQUIRED_COLD) && (Status <=3D > FSP_STATUS_RESET_REQUIRED_8)) { >=20 > + DEBUG ((DEBUG_INFO, "FspMultiPhaseApi-0x%x requested reset %r\n", > ComponentIndex, Status)); >=20 > + CallFspWrapperResetSystem ((UINTN)Status); >=20 > + } >=20 > + >=20 > + return Status; >=20 > +} >=20 > + >=20 > +/** >=20 > + FSP Wrapper MultiPhase Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_STATUS Always return EFI_SUCCESS >=20 > + >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +FspWrapperMultiPhaseHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex >=20 > + ) >=20 > +{ >=20 > + EFI_STATUS Status; >=20 > + FSP_MULTI_PHASE_PARAMS FspMultiPhaseParams; >=20 > + FSP_MULTI_PHASE_GET_NUMBER_OF_PHASES_PARAMS > FspMultiPhaseGetNumber; >=20 > + UINT32 Index; >=20 > + UINT32 NumOfPhases; >=20 > + >=20 > + // >=20 > + // Query FSP for the number of phases supported. >=20 > + // >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseGetNumberOfPhases; >=20 > + FspMultiPhaseParams.PhaseIndex =3D 0; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D (VOID > *)&FspMultiPhaseGetNumber; >=20 > + Status =3D CallFspMultiPhaseEntry (&Fs= pMultiPhaseParams, > FspHobListPtr, ComponentIndex); >=20 > + if (Status =3D=3D EFI_UNSUPPORTED) { >=20 > + // >=20 > + // MultiPhase API was not supported >=20 > + // >=20 > + return Status; >=20 > + } else { >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + } >=20 > + >=20 > + NumOfPhases =3D FspMultiPhaseGetNumber.NumberOfPhases; >=20 > + >=20 > + for (Index =3D 1; Index <=3D NumOfPhases; Index++) { >=20 > + DEBUG ((DEBUG_ERROR, "MultiPhase Index/NumOfPhases =3D %d of > %d\n", Index, NumOfPhases)); >=20 > + // >=20 > + // Platform actions can be added in below function for each componen= t > and phase before returning control back to FSP. >=20 > + // >=20 > + FspWrapperPlatformMultiPhaseHandler (FspHobListPtr, > ComponentIndex, Index); >=20 > + >=20 > + FspMultiPhaseParams.MultiPhaseAction =3D > EnumMultiPhaseExecutePhase; >=20 > + FspMultiPhaseParams.PhaseIndex =3D Index; >=20 > + FspMultiPhaseParams.MultiPhaseParamPtr =3D NULL; >=20 > + Status =3D CallFspMultiPhaseEntry (&= FspMultiPhaseParams, > FspHobListPtr, ComponentIndex); >=20 > + >=20 > + if (Status =3D=3D FSP_STATUS_VARIABLE_REQUEST) { >=20 > + // >=20 > + // call to Variable request handler >=20 > + // >=20 > + FspWrapperVariableRequestHandler (FspHobListPtr, ComponentIndex); >=20 > + } >=20 > + >=20 > + // >=20 > + // Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED > status >=20 > + // >=20 > + if ((Status >=3D FSP_STATUS_RESET_REQUIRED_COLD) && (Status <=3D > FSP_STATUS_RESET_REQUIRED_8)) { >=20 > + DEBUG ((DEBUG_INFO, "FspMultiPhaseApi-0x%x requested reset > %r\n", ComponentIndex, Status)); >=20 > + CallFspWrapperResetSystem ((UINTN)Status); >=20 > + } >=20 > + >=20 > + ASSERT_EFI_ERROR (Status); >=20 > + } >=20 > + >=20 > + return EFI_SUCCESS; >=20 > +} >=20 > diff --git > a/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h > b/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h > new file mode 100644 > index 0000000000..65a5db233f > --- /dev/null > +++ > b/IntelFsp2WrapperPkg/Include/Library/FspWrapperMultiPhaseProcessLib.h > @@ -0,0 +1,62 @@ > +/** @file >=20 > + Provide FSP wrapper MultiPhase handling functions. >=20 > + >=20 > + Copyright (c) 2022, Intel Corporation. All rights reserved.
>=20 > + SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > + >=20 > +**/ >=20 > + >=20 > +#ifndef __FSP_WRAPPER_MULTI_PHASE_PROCESS_LIB_H__ >=20 > +#define __FSP_WRAPPER_MULTI_PHASE_PROCESS_LIB_H__ >=20 > + >=20 > +/** >=20 > + FSP Wrapper Platform MultiPhase Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + @param[in] PhaseIndex - Indicates current execution phase of= FSP > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_STATUS Always return EFI_SUCCESS >=20 > + >=20 > +**/ >=20 > +VOID >=20 > +EFIAPI >=20 > +FspWrapperPlatformMultiPhaseHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex, >=20 > + IN UINT32 PhaseIndex >=20 > + ); >=20 > + >=20 > +/** >=20 > + FSP Wrapper Variable Request Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_UNSUPPORTED FSP Wrapper cannot support the specific > variable request >=20 > + @retval EFI_STATUS Return FSP returned status >=20 > + >=20 > +**/EFI_STATUS >=20 > +EFIAPI >=20 > +FspWrapperVariableRequestHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex >=20 > + ); >=20 > + >=20 > +/** >=20 > + FSP Wrapper MultiPhase Handler >=20 > + >=20 > + @param[in] FspHobListPtr - Pointer to FSP HobList (valid after = FSP-M > completed) >=20 > + @param[in] ComponentIndex - FSP Component which executing > MultiPhase initialization. >=20 > + >=20 > + @retval EFI_STATUS Always return EFI_SUCCESS >=20 > + >=20 > +**/ >=20 > +EFI_STATUS >=20 > +EFIAPI >=20 > +FspWrapperMultiPhaseHandler ( >=20 > + IN OUT VOID **FspHobListPtr, >=20 > + IN UINT8 ComponentIndex >=20 > + ); >=20 > + >=20 > +#endif >=20 > diff --git a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > index c43b0c2267..d96037b63b 100644 > --- a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > +++ b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec > @@ -1,7 +1,7 @@ > ## @file >=20 > # Provides drivers and definitions to support fsp in EDKII bios. >=20 > # >=20 > -# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
>=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > ## >=20 > @@ -28,6 +28,14 @@ >=20 >=20 > ## @libraryclass Provide FSP TPM measurement related function. >=20 > FspMeasurementLib|Include/Library/FspMeasurementLib.h >=20 > + >=20 > + ## @libraryclass Provide MultiPhase handling related functions. >=20 > + > FspWrapperMultiPhaseProcessLib|Include/Library/FspWrapperMultiPhasePr > ocessLib.h >=20 > + >=20 > + ## @libraryclass Provide MultiPhase platform actions related functio= ns. >=20 > + > FspWrapperPlatformMultiPhaseLib|Include/Library/FspWrapperMultiPhase > ProcessLib.h >=20 > + >=20 > + >=20 > [Guids] >=20 > # >=20 > # GUID defined in package >=20 > diff --git a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc > b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc > index 21e089000e..79a5c7f13d 100644 > --- a/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc > +++ b/IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dsc > @@ -1,7 +1,7 @@ > ## @file >=20 > # Provides drivers and definitions to support fsp in EDKII bios. >=20 > # >=20 > -# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
>=20 > +# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
>=20 > # SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > # >=20 > ## >=20 > @@ -48,6 +48,8 @@ >=20 > FspWrapperApiLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/Ba > seFspWrapperApiLib.inf >=20 >=20 > FspWrapperApiTestLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperApiTe > stLibNull/BaseFspWrapperApiTestLibNull.inf >=20 >=20 > FspMeasurementLib|IntelFsp2WrapperPkg/Library/BaseFspMeasurementLi > b/BaseFspMeasurementLib.inf >=20 > + > FspWrapperPlatformMultiPhaseLib|IntelFsp2WrapperPkg/Library/BaseFspW > rapperPlatformMultiPhaseLibSample/BaseFspWrapperPlatformMultiPhaseLi > bSample.inf >=20 > + > FspWrapperMultiPhaseProcessLib|IntelFsp2WrapperPkg/Library/FspWrappe > rMultiPhaseProcessLib/FspWrapperMultiPhaseProcessLib.inf >=20 >=20 >=20 > # FSP platform sample >=20 >=20 > FspWrapperPlatformLib|IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatf > ormLibSample/BaseFspWrapperPlatformLibSample.inf >=20 > @@ -91,6 +93,8 @@ >=20 > IntelFsp2WrapperPkg/Library/BaseFspWrapperApiLib/BaseFspWrapperApiLi > b.inf >=20 >=20 > IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformLibSample/BaseFsp > WrapperPlatformLibSample.inf >=20 > IntelFsp2WrapperPkg/FspWrapperNotifyDxe/FspWrapperNotifyDxe.inf >=20 > + > IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSampl > e/BaseFspWrapperPlatformMultiPhaseLibSample.inf >=20 > + > IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrappe > rMultiPhaseProcessLib.inf >=20 >=20 >=20 > [PcdsFixedAtBuild.common] >=20 > gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x1f >=20 > diff --git > a/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/BaseFspWrapperPlatformMultiPhaseLibSample.inf > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/BaseFspWrapperPlatformMultiPhaseLibSample.inf > new file mode 100644 > index 0000000000..607ad41a23 > --- /dev/null > +++ > b/IntelFsp2WrapperPkg/Library/BaseFspWrapperPlatformMultiPhaseLibSam > ple/BaseFspWrapperPlatformMultiPhaseLibSample.inf > @@ -0,0 +1,37 @@ > +## @file >=20 > +# FSP Wrapper to handle platform specific actions for >=20 > +# FSP MultiPhase (SeparatePhase) Initialization. >=20 > +# >=20 > +# Copyright (c) 2022, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + INF_VERSION =3D 0x00010005 >=20 > + BASE_NAME =3D BaseFspWrapperPlatformMultiPhaseLib= Sample >=20 > + FILE_GUID =3D DB63E5AA-21C6-40BB-879A-CD1762C8427= B >=20 > + MODULE_TYPE =3D BASE >=20 > + VERSION_STRING =3D 1.0 >=20 > + LIBRARY_CLASS =3D FspWrapperPlatformMultiPhaseLib >=20 > + >=20 > +# >=20 > +# The following information is for reference only and not required by th= e > build tools. >=20 > +# >=20 > +# VALID_ARCHITECTURES =3D IA32 X64 >=20 > +# >=20 > + >=20 > +[Sources] >=20 > + FspWrapperPlatformMultiPhaseLibSample.c >=20 > + >=20 > +[Packages] >=20 > + MdePkg/MdePkg.dec >=20 > + IntelFsp2Pkg/IntelFsp2Pkg.dec >=20 > + IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec >=20 > + >=20 > +[LibraryClasses] >=20 > + DebugLib >=20 > + BaseLib >=20 > + PcdLib >=20 > + PeiServicesLib >=20 > diff --git > a/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrap > perMultiPhaseProcessLib.inf > b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrap > perMultiPhaseProcessLib.inf > new file mode 100644 > index 0000000000..e76a7465f2 > --- /dev/null > +++ > b/IntelFsp2WrapperPkg/Library/FspWrapperMultiPhaseProcessLib/FspWrap > perMultiPhaseProcessLib.inf > @@ -0,0 +1,48 @@ > +## @file >=20 > +# FSP wrapper to handle FSP MultiPhase (SeparatePhase) Initialization. >=20 > +# >=20 > +# Copyright (c) 2022, Intel Corporation. All rights reserved.
>=20 > +# >=20 > +# SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > +# >=20 > +## >=20 > + >=20 > +[Defines] >=20 > + INF_VERSION =3D 0x00010005 >=20 > + BASE_NAME =3D FspWrapperMultiPhaseProcessLib >=20 > + FILE_GUID =3D 11E657B7-C3D8-405B-94C5-516840E67B7= 5 >=20 > + MODULE_TYPE =3D PEIM >=20 > + VERSION_STRING =3D 1.0 >=20 > + LIBRARY_CLASS =3D FspWrapperMultiPhaseProcessLib >=20 > + >=20 > +# >=20 > +# The following information is for reference only and not required by th= e > build tools. >=20 > +# >=20 > +# VALID_ARCHITECTURES =3D IA32 >=20 > +# >=20 > + >=20 > +[Sources] >=20 > + PeiFspWrapperMultiPhaseProcessLib.c >=20 > + >=20 > +[Packages] >=20 > + MdePkg/MdePkg.dec >=20 > + IntelFsp2Pkg/IntelFsp2Pkg.dec >=20 > + IntelFsp2WrapperPkg/IntelFsp2WrapperPkg.dec >=20 > + MdeModulePkg/MdeModulePkg.dec >=20 > + >=20 > +[LibraryClasses] >=20 > + BaseMemoryLib >=20 > + DebugLib >=20 > + BaseLib >=20 > + PcdLib >=20 > + FspWrapperPlatformLib >=20 > + PeiServicesLib >=20 > + FspWrapperPlatformMultiPhaseLib >=20 > + >=20 > +[Ppis] >=20 > + gEfiPeiReadOnlyVariable2PpiGuid >=20 > + gEdkiiPeiVariablePpiGuid >=20 > + >=20 > +[Pcd] >=20 > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress ## > CONSUMES >=20 > + gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress ## > CONSUMES >=20 > -- > 2.35.0.windows.1