From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web11.33626.1658181746439344554 for ; Mon, 18 Jul 2022 15:02:26 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=CBfkGfNl; spf=pass (domain: intel.com, ip: 134.134.136.65, 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=1658181746; x=1689717746; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=D12pDmDb7IDfSD7lWoAU4xw/xN1zuiWzLqxx9IWodHo=; b=CBfkGfNljRXHr8rYsGRIn48HtG4OWPN/A2zGs+FA0P1aBiGRdOs9wJeB CO0Bk1naF0AhMuz8agZe6SACGX0EM0j99wKJ/OzLJYyDlK9ftvUwy13zb DotENf9wxHHdHL8q6xZ9rT4hGLI23DltQ5tQPTWPghbitYHVhSNWgxmoD lFb87ObCYFbfjGrsgzlDb6bfvDuhJIvRyc7buStMVEDcf4c00koCdrV7R 6RJVxdrcbFTwToB/evDRtRdO8RO+u1UoVK49zDt41QIIyH+d0noVDT4e1 jVvWXuYbJh38GpWHxSnM82qfqKdXuzS654g+4xV00/vtqgTtJmPeUOiYx g==; X-IronPort-AV: E=McAfee;i="6400,9594,10412"; a="287479793" X-IronPort-AV: E=Sophos;i="5.92,282,1650956400"; d="scan'208";a="287479793" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jul 2022 15:02:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,282,1650956400"; d="scan'208";a="630081459" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga001.jf.intel.com with ESMTP; 18 Jul 2022 15:02:25 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) 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.2375.28; Mon, 18 Jul 2022 15:02:25 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx608.amr.corp.intel.com (10.22.229.21) 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, 18 Jul 2022 15:02:25 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.171) 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.27; Mon, 18 Jul 2022 15:02:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BYtJnydBwbAwo0uGhIIVcD5mGmZoOKu5kpEiofiXE5iPkSKYLF92GDVk2LaX6zzuRncsH3za9Y5gjgQUfkDhWcr+sB6MpbHe2dJctGAOWm/r/J5UqdMKtPgV95tDRAMZNYCdCXcuWX3DtgH/Uc+2wG7Zk2WQ29SwG2tPh7k64sybYNyN2n5FU9D0BDDxnccrv0wWWCGnj5opQkJ0ioBRODM7qK60pZgsK8bJ7E1/QmNdjqkoWwACxmH+cpGk6YgfXKl5HR76hH1hEU6TLHrUHea0EkdNoPUjj7XwXdE4VQjcgyCiMczEvMJYcvZN1GtLRQbrWSl8Jqqsh4Lek9Uytw== 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=IItgwTHAijrnc1gKsrAZXwOODIPC2DNyb8f9bOO7NFs=; b=YkRQYSy0+8zDk7CWKCXUnCiwHOun/4GIBgFlpsnsNzQ4pVB84qXOKgLY95Eo9lMp3iFXXAKBl0ty2IwGiU5DukQUswieKvavuPjV2bEsnaXsP4t6N287EenKqPMTLR54GgGjrXDoWcxn+KjpWwzjjmZ4sGn0zClQ4rs38pUVDWDaVWSgR22wTuZIm/sp4vtmr8UGtPUaP4PGQbvX1Ijg3Ipwm31uZdX4x/GFex6aNqD0uG/TQvQDeUctXqxJdN6tEgxJ8+uvkKzsxQB3xEBD98a5Jn5ndWgKbWoD8A3lddqELuFRcAO+TxrYvzJBA6NyIj0G4YWWr7JxWc2RRQpwTw== 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 BN6PR11MB1315.namprd11.prod.outlook.com (2603:10b6:404:49::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.12; Mon, 18 Jul 2022 22:02:20 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::a113:c892:d94:dd10]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::a113:c892:d94:dd10%8]) with mapi id 15.20.5438.023; Mon, 18 Jul 2022 22:02:20 +0000 From: "Chiu, Chasel" To: "Desimone, Nathaniel L" , "devel@edk2.groups.io" CC: "Zhang, Hongbin1" , "Zeng, Star" Subject: Re: [PATCH] IntelFsp2Pkg/FspSecCore: Add FSP-I API for SMM support. Thread-Topic: [PATCH] IntelFsp2Pkg/FspSecCore: Add FSP-I API for SMM support. Thread-Index: AQHYl7z7qT3e13orOkGOu2p6OHMEYq2ErpQAgAAAtcA= Date: Mon, 18 Jul 2022 22:02:20 +0000 Message-ID: References: <20220714200428.1989-1-chasel.chiu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 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: 37d8ea4b-7f7f-4376-3245-08da69092fa2 x-ms-traffictypediagnostic: BN6PR11MB1315:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zSfMbvkICk5G+KtDA/y3H4MY1++kxHccrh5NGWAJKiUl+SanX3L+sHj3KhQrB368UJXRrzRE5rFpaWNwKwDtFySTvM5YP+V60fV2nTTVjIxNUx3USWiEGp4DFnHf8zjx4Dk1r15socCca5vncpMGri6Mao+zYL5/fOLyEUJtuneqMZ8MxVzSzv12mu/N/AYBBoX52FSNy5WfPNKNrHI3CuYGD/LLtF1Nbs2l2iYVWYc0qtzjFqE6K5/xWB2eUKJ2ai8jnvXFdJkPzYY/2Q/tncaGOqyZnrRM90DF5L2Yrn2ayzRdasCNmAJ7ietMnZBsQ2nNUNMt0Y1R1aQRN6hPkjKu1dH21sz2rDbv33ObA2DyCsBWBxb8Pmfb5pcAsh/IVkLdXzJRTVVM8XGTAFrXAYkhOhRFnYXTDjHGvshTcmgT9dwy9WJhSZDk0qarOWvBsumb/RJFkmnxLKM9xKwNCmqrF2s5pPfDEhmoAThaYFJdnPgHzfR0kqIw1LQk9GWBQF/MGW5cLgK+MULMuf9Jwqi4CIOLxHNGXxHdfGoTGyzZQL18ZB0LO1n5Jm2gKoIl3s0DFwoVAINMig83ohG0AlbnzUU9LypTSyuf6JHb6gRn7zAcTarlg4CiScKWL7BPBWQL6DoDknWwIMWbuJLdOhSZcbWoMPMncNlU4HGiy3jezEJHDt8tkEVLgjvH0neUFCb37Mvuk0gUK8Me65iD+/r1OiUzB1VZfIohMLhblE5I6F5BSs5R06T09ZV/3R/dkwm+6JTIPXjkEzD9hFcmB+AF7lzczwzF6zXGlwIaueJ+7HTg8P2hd0LLgbEOXVyQ48lBIh9iLPuB0ETS2zinhH0NxpCnMApJ67BpovbAYFYkSZyKLdtQoULB7ySc4y1S 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:(13230016)(366004)(396003)(346002)(39860400002)(376002)(136003)(41300700001)(26005)(122000001)(82960400001)(9686003)(38100700002)(6506007)(5660300002)(7696005)(2906002)(55016003)(186003)(83380400001)(107886003)(53546011)(33656002)(19627235002)(54906003)(64756008)(316002)(66556008)(8936002)(110136005)(478600001)(52536014)(4326008)(86362001)(71200400001)(8676002)(76116006)(66946007)(66446008)(66476007)(966005)(30864003)(38070700005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?RjO5u5CxRru3I0V/EVq2BArs9g9GAsIXMJXPLN+RJZQ+lfY9ZSriSDCu5E9g?= =?us-ascii?Q?F1qzhNfchBBlp4pU7WoKAHC57Rtvuy2g1wGRHFmnLcTADHsBqHD1NNX7JNoV?= =?us-ascii?Q?RHm00tyAEXShdMUx2wPj2faWWlkqg/tEXwS5FJN6FFxyBdxCjbLNJ4MnT1Tp?= =?us-ascii?Q?T+NvF7f0yCW9n+mB+rjX33bbVTgp5y8BGUFHN5aNVh1BThct2/X/MfaikyUv?= =?us-ascii?Q?RZ2utMNCQndNBvMmo8sPIc/wsTv5KwYETTP9efQycxEJ/VjwEQ2M17qHH6oX?= =?us-ascii?Q?tPbqvPE4DD5JuMwp58TAKrSsjHFP4cJDwKxbBBfmlx4FWwgANtJxN8R9yOmE?= =?us-ascii?Q?uEg3zb1tLdL7UV+c7izkmA8789DHsKXqeyc+PKJw13dtoomdLsF4ZP0PAdUV?= =?us-ascii?Q?XPRzl1MJmAkMjY/LcttpNG5MiSaWkZ8sccXq2dx86inlY7LrIo+Hk7xAFIOa?= =?us-ascii?Q?NVBzfSVqFkj3846LtU/+Wy+ZJjIPVdtP91OixNvDBH79yS8sNGzeTvM2PQVU?= =?us-ascii?Q?P588ialyTpoJfjaLy58jg+ddmwobJZCBwzUtEM2q6m8gJjkY99/yHw5d4v7T?= =?us-ascii?Q?0KzpbvzBNLHgQu+JX7o7WEk20GDJ6VIbsNVRc+dMAPPH5GRSpuoHY8A7R2Cu?= =?us-ascii?Q?vMWW+IfpbgZOt+kn5U58z5ydmCJAM+T5rqdm3SDg0Ru01A2eoQFr9eZEZoBA?= =?us-ascii?Q?d3XdY8DPZ6IyvWNkLZBmtlp+6eem/j9HJyn0pMVNP+1DiB33pgUWMhRTrypE?= =?us-ascii?Q?V2E1CxIzANAu4U4ry0j5+4ltS8wKpoaXC0F+BzcyUuNBwPf4noVbfKvhwXf1?= =?us-ascii?Q?+ZMhADKaUknPXhQbWdg1myvoeSSfI+k4LqY/XhELOeMYsbKbtla9GTx2pwvk?= =?us-ascii?Q?7HWdltbmfUTkVBowaafz83JUIKbs5YFn7/Wng+zY5qChafXmF+6iA7HxQVUq?= =?us-ascii?Q?bwS+QHwme98SRysYU6UzhaEpnpSF2Cji5l16ne/M3dDcL/5YZVlMxkS8dp7G?= =?us-ascii?Q?KuIcld5RP8mmFaIL5eJOEVR0kDwCUAHhXMdtMFHnzGleeu373XVOcHToe2tI?= =?us-ascii?Q?KSLzSXaBOh72MJgFII8RthCNzc76W7Fvizjc8QrYOjOD/Hlj2qfeCwLVRgJK?= =?us-ascii?Q?XIbZ3scHanNFI0dsEwHgE14zs7J5QfgACkhURPzot0WC8yNNcKQexSUXjxIh?= =?us-ascii?Q?I4CTMxl/ydo4nU53TxriAylsCKEiCvMr3DdNhEiInKadJBNiZkjQGAQoXjAc?= =?us-ascii?Q?8bV11LzNPOY9xCavx2BVWMVY2emps1YGYLEsvbJivT2jqYNQmp8gQ7xrWuWt?= =?us-ascii?Q?sTtMaidh1XXlBr3jjuzGeaN++0j6VHBeXNq42/nZ34pqd3xwvj72TzoXi+s/?= =?us-ascii?Q?wtYlkdGmngJEJV2mBf6i4xTH7l/pyR3ifBNsvgf0MkKfQRKNQEdthcphJFQq?= =?us-ascii?Q?BfY3R+JL5SNUfl9YRN73jcmZmmDinzHnrlEiSrPuRjcEwVKvDgwXhIE4QMB/?= =?us-ascii?Q?Wmpi2+ysZE5iwwz8SUAkWtQozRi3+N9suE4u/AlINcZgm4vPS2d8Qd8zCNPW?= =?us-ascii?Q?nDyNSqi4zPnyE0tfZHHCecJN0hNrtQFQIe6sZKP8?= 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: 37d8ea4b-7f7f-4376-3245-08da69092fa2 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jul 2022 22:02:20.0502 (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: RT+/abHfASmlIaP3PG5UsGGuI/b/XXsSTPXnE9PVaGahVRVP86eZFHE7lS6F6E7DoOg9mvbWRsvJouATPpJ62Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB1315 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 Hi Nate, Those whitespace and indents are for passing Uncrustify check. I notice Uncrustify was enabled in Edk2 merging check and one of my previou= s patch was failed due to spaces/indents were not agreed by Uncrustify, tha= t's why this time I run the Uncrustify offline before submitting the patch = for reviewing. Wiki link: https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Cod= e-Formatting#recommended-usage-visual-studio-vs-code-plugin I will fix ApiIdx issue and resend patch again. Thanks, Chasel > -----Original Message----- > From: Desimone, Nathaniel L > Sent: Monday, July 18, 2022 2:41 PM > To: Chiu, Chasel ; devel@edk2.groups.io > Cc: Zhang, Hongbin1 ; Zeng, Star > > Subject: RE: [PATCH] IntelFsp2Pkg/FspSecCore: Add FSP-I API for SMM suppo= rt. >=20 > Hi Chasel, >=20 > Please see comments inline. Here is a summary of my feedback: >=20 > #1) IntelFsp2Pkg/FspSecCore/X64/FspApiEntryI.nasm - line 34 - Bug: eax sh= ould > be rax > #2) IntelFsp2Pkg/Include/FspEas/FspApi.h - Various unnecessary whitespace > changes that make the file look worse than before. > #3) IntelFsp2Pkg/Include/Guid/FspHeaderFile.h - Why indent the #pragma li= nes? >=20 > Thanks, > Nate >=20 > > -----Original Message----- > > From: Chiu, Chasel > > Sent: Thursday, July 14, 2022 1:04 PM > > To: devel@edk2.groups.io > > Cc: Zhang, Hongbin1 ; Desimone, Nathaniel L > > ; Zeng, Star ; > > Chiu, Chasel > > Subject: [PATCH] IntelFsp2Pkg/FspSecCore: Add FSP-I API for SMM support= . > > > > From: Hongbin1 Zhang > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3993 > > Add FSP-I API entry point for SMM support. > > > > Cc: Nate DeSimone > > Cc: Star Zeng > > Signed-off-by: Chasel Chiu > > Signed-off-by: Hongbin1 Zhang > > --- > > IntelFsp2Pkg/FspSecCore/SecFspApiChk.c | 13 +++++++++++++ > > IntelFsp2Pkg/FspSecCore/FspSecCoreI.inf | 54 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > IntelFsp2Pkg/FspSecCore/Ia32/FspApiEntryI.nasm | 44 > > ++++++++++++++++++++++++++++++++++++++++++++ > > IntelFsp2Pkg/FspSecCore/X64/FspApiEntryI.nasm | 44 > ++++++++++++++++++++++++++++++++++++++++++++ > > IntelFsp2Pkg/Include/FspEas/FspApi.h | 57 > ++++++++++++++++++++++++++++++++++++++------------------- > > IntelFsp2Pkg/Include/FspGlobalData.h | 53 > ++++++++++++++++++++++++++++------------------------- > > IntelFsp2Pkg/Include/Guid/FspHeaderFile.h | 22 +++++++++++++++---= ---- > > IntelFsp2Pkg/IntelFsp2Pkg.dsc | 1 + > > IntelFsp2Pkg/Tools/GenCfgOpt.py | 26 ++++++++++++++++--= -------- > > IntelFsp2Pkg/Tools/SplitFspBin.py | 6 +++--- > > 10 files changed, 256 insertions(+), 64 deletions(-) > > > > diff --git a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > > b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > > index e22a88cc84..35d223a404 100644 > > --- a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > > +++ b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c > > @@ -71,6 +71,19 @@ FspApiCallingCheck ( > > Status =3D EFI_INVALID_PARAMETER; > > } > > } > > + } else if (ApiIdx =3D=3D FspSmmInitApiIndex) { > > + // > > + // FspSmmInitApiIndex check > > + // > > + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS) |= | > ((UINTN)FspData =3D=3D MAX_UINT32)) { > > + Status =3D EFI_UNSUPPORTED; > > + } else { > > + if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { > > + Status =3D EFI_UNSUPPORTED; > > + } else if (EFI_ERROR (FspUpdSignatureCheck (FspSmmInitApiIndex, > ApiParam))) { > > + Status =3D EFI_INVALID_PARAMETER; > > + } > > + } > > } else { > > Status =3D EFI_UNSUPPORTED; > > } > > diff --git a/IntelFsp2Pkg/FspSecCore/FspSecCoreI.inf > > b/IntelFsp2Pkg/FspSecCore/FspSecCoreI.inf > > new file mode 100644 > > index 0000000000..d31576c00b > > --- /dev/null > > +++ b/IntelFsp2Pkg/FspSecCore/FspSecCoreI.inf > > @@ -0,0 +1,54 @@ > > +## @file > > +# Sec Core for FSP > > +# > > +# Copyright (c) 2022, Intel Corporation. All rights reserved.
# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent # ## > > + > > +[Defines] > > + INF_VERSION =3D 0x00010005 > > + BASE_NAME =3D FspSecCoreI > > + FILE_GUID =3D 558782b5-782d-415e-ab9e-0ceb79dc3= 425 > > + MODULE_TYPE =3D SEC > > + VERSION_STRING =3D 1.0 > > + > > +# > > +# The following information is for reference only and not required by = the > build tools. > > +# > > +# VALID_ARCHITECTURES =3D IA32 X64 > > +# > > + > > +[Sources] > > + SecFspApiChk.c > > + SecFsp.h > > + > > +[Sources.X64] > > + X64/FspApiEntryI.nasm > > + X64/FspApiEntryCommon.nasm > > + X64/FspHelper.nasm > > + > > +[Sources.IA32] > > + Ia32/FspApiEntryI.nasm > > + Ia32/FspApiEntryCommon.nasm > > + Ia32/FspHelper.nasm > > + > > +[Binaries.Ia32] > > + RAW|Vtf0/Bin/ResetVec.ia32.raw |GCC > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + IntelFsp2Pkg/IntelFsp2Pkg.dec > > + > > +[LibraryClasses] > > + BaseMemoryLib > > + DebugLib > > + BaseLib > > + PciCf8Lib > > + SerialPortLib > > + FspSwitchStackLib > > + FspCommonLib > > + FspSecPlatformLib > > + > > + > > diff --git a/IntelFsp2Pkg/FspSecCore/Ia32/FspApiEntryI.nasm > > b/IntelFsp2Pkg/FspSecCore/Ia32/FspApiEntryI.nasm > > new file mode 100644 > > index 0000000000..e9365d6832 > > --- /dev/null > > +++ b/IntelFsp2Pkg/FspSecCore/Ia32/FspApiEntryI.nasm > > @@ -0,0 +1,44 @@ > > +;; @file > > +; Provide FSP API entry points. > > +; > > +; Copyright (c) 2022, Intel Corporation. All rights reserved.
; > > +SPDX-License-Identifier: BSD-2-Clause-Patent ;; > > + > > + SECTION .text > > + > > +; > > +; Following functions will be provided in C ; extern > > +ASM_PFX(FspApiCommon) > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; FspApiCommonContinue API > > +; > > +; This is the FSP API common entry point to resume the FSP execution > > +; > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(FspApiCommonContinue) > > +ASM_PFX(FspApiCommonContinue): > > + jmp $ > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; FspSmmInit API > > +; > > +; This FSP API will notify the FSP about the different phases in the > > +boot ; process ; > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(FspSmmInitApi) > > +ASM_PFX(FspSmmInitApi): > > + mov eax, 7 ; FSP_API_INDEX.FspSmmInitApiIndex > > + jmp ASM_PFX(FspApiCommon) > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; Module Entrypoint API > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(_ModuleEntryPoint) > > +ASM_PFX(_ModuleEntryPoint): > > + jmp $ > > + ; Add reference to APIs so that it will not be optimized by > > +compiler > > + jmp ASM_PFX(FspSmmInitApi) > > diff --git a/IntelFsp2Pkg/FspSecCore/X64/FspApiEntryI.nasm > > b/IntelFsp2Pkg/FspSecCore/X64/FspApiEntryI.nasm > > new file mode 100644 > > index 0000000000..e9365d6832 > > --- /dev/null > > +++ b/IntelFsp2Pkg/FspSecCore/X64/FspApiEntryI.nasm > > @@ -0,0 +1,44 @@ > > +;; @file > > +; Provide FSP API entry points. > > +; > > +; Copyright (c) 2022, Intel Corporation. All rights reserved.
; > > +SPDX-License-Identifier: BSD-2-Clause-Patent ;; > > + > > + SECTION .text > > + > > +; > > +; Following functions will be provided in C ; extern > > +ASM_PFX(FspApiCommon) > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; FspApiCommonContinue API > > +; > > +; This is the FSP API common entry point to resume the FSP execution > > +; > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(FspApiCommonContinue) > > +ASM_PFX(FspApiCommonContinue): > > + jmp $ > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; FspSmmInit API > > +; > > +; This FSP API will notify the FSP about the different phases in the > > +boot ; process ; > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(FspSmmInitApi) > > +ASM_PFX(FspSmmInitApi): > > + mov eax, 7 ; FSP_API_INDEX.FspSmmInitApiIndex >=20 > This is a bug. It should be: >=20 > mov rax, 7 ; FSP_API_INDEX.FspSmmInitApiIndex >=20 > Note that IntelFsp2Pkg/FspSecCore/X64/FspApiEntryCommon.nasm compares > ApiIndex numbers using rax, so it is important to make sure that the uppe= r 32- > bits are zero: >=20 > https://github.com/tianocore/edk2/blob/c966204049f3d5dae6d5e587ddc298c6 > 84142c5c/IntelFsp2Pkg/FspSecCore/X64/FspApiEntryCommon.nasm#L65 >=20 > > + jmp ASM_PFX(FspApiCommon) > > + > > +;-------------------------------------------------------------------- > > +-------- > > +; Module Entrypoint API > > +;-------------------------------------------------------------------- > > +-------- > > +global ASM_PFX(_ModuleEntryPoint) > > +ASM_PFX(_ModuleEntryPoint): > > + jmp $ > > + ; Add reference to APIs so that it will not be optimized by > > +compiler > > + jmp ASM_PFX(FspSmmInitApi) > > diff --git a/IntelFsp2Pkg/Include/FspEas/FspApi.h > > b/IntelFsp2Pkg/Include/FspEas/FspApi.h > > index b36bc2b9ae..1d6c2fb63d 100644 > > --- a/IntelFsp2Pkg/Include/FspEas/FspApi.h > > +++ b/IntelFsp2Pkg/Include/FspEas/FspApi.h > > @@ -135,18 +135,18 @@ typedef struct { > > /// > > /// Revision of the structure is 2 for this version of the specifica= tion. > > /// > > - UINT8 Revision; > > - UINT8 Reserved[3]; > > + UINT8 Revision; > > + UINT8 Reserved[3]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > /// > > /// Length of the structure in bytes. The current value for this fie= ld is 32. > > /// > > - UINT32 Length; > > + UINT32 Length; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// FspDebugHandler Optional debug handler for the bootloader to rec= eive > debug messages > > /// occurring during FSP execution. > > /// > > - EFI_PHYSICAL_ADDRESS FspDebugHandler; > > - UINT8 Reserved1[16]; > > + EFI_PHYSICAL_ADDRESS FspDebugHandler; > > + UINT8 Reserved1[16]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > } FSPT_ARCH2_UPD; > > > > /// > > @@ -197,37 +197,37 @@ typedef struct { > > /// > > /// Revision of the structure is 3 for this version of the specifica= tion. > > /// > > - UINT8 Revision; > > - UINT8 Reserved[3]; > > + UINT8 Revision; > > + UINT8 Reserved[3]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > /// > > /// Length of the structure in bytes. The current value for this fie= ld is 64. > > /// > > - UINT32 Length; > > + UINT32 Length; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// Pointer to the temporary stack base address to be > > /// consumed inside FspMemoryInit() API. > > /// > > - EFI_PHYSICAL_ADDRESS StackBase; > > + EFI_PHYSICAL_ADDRESS StackBase; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// Temporary stack size to be consumed inside > > /// FspMemoryInit() API. > > /// > > - UINT64 StackSize; > > + UINT64 StackSize; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// Size of memory to be reserved by FSP below "top > > /// of low usable memory" for bootloader usage. > > /// > > - UINT32 BootLoaderTolumSize; > > + UINT32 BootLoaderTolumSize; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// Current boot mode. > > /// > > - UINT32 BootMode; > > + UINT32 BootMode; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// Optional event handler for the bootloader to be informed of even= ts > occurring during FSP execution. > > /// This value is only valid if Revision is >=3D 2. > > /// > > - EFI_PHYSICAL_ADDRESS FspEventHandler; > > - UINT8 Reserved1[24]; > > + EFI_PHYSICAL_ADDRESS FspEventHandler; > > + UINT8 Reserved1[24]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > } FSPM_ARCH2_UPD; > > > > /// > > @@ -266,18 +266,18 @@ typedef struct { > > /// > > /// Revision of the structure is 2 for this version of the specifica= tion. > > /// > > - UINT8 Revision; > > - UINT8 Reserved[3]; > > + UINT8 Revision; > > + UINT8 Reserved[3]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > /// > > /// Length of the structure in bytes. The current value for this fie= ld is 32. > > /// > > - UINT32 Length; > > + UINT32 Length; >=20 > Any reason for this whitespace change? It looks worse than before. >=20 > > /// > > /// FspEventHandler Optional event handler for the bootloader to be > informed of events > > /// occurring during FSP execution. > > /// > > - EFI_PHYSICAL_ADDRESS FspEventHandler; > > - UINT8 Reserved1[16]; > > + EFI_PHYSICAL_ADDRESS FspEventHandler; > > + UINT8 Reserved1[16]; >=20 > Any reason for these whitespace changes? It looks worse than before. >=20 > > } FSPS_ARCH2_UPD; > > > > /// > > @@ -609,4 +609,23 @@ EFI_STATUS > > IN FSP_MULTI_PHASE_PARAMS *MultiPhaseSiInitParamPtr > > ); > > > > +/** > > + This FSP API initializes SMM and provide any OS runtime silicon > > +services, > > + including Reliability, Availability, and Serviceability (RAS) featur= es > implemented by the CPU. > > + > > + @param[in] FspiUpdDataPtr Pointer to the FSPI_UPD data structure= . > > + If NULL, FSP will use the default para= meters. > > + > > + @retval EFI_SUCCESS FSP execution environment was in= itialized > successfully. > > + @retval EFI_INVALID_PARAMETER Input parameters are invalid. > > + @retval EFI_UNSUPPORTED The FSP calling conditions were = not met. > > + @retval EFI_DEVICE_ERROR FSP initialization failed. > > + @retval FSP_STATUS_RESET_REQUIREDx A reset is required. These statu= s > codes will not be returned during S3. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *FSP_SMM_INIT)( > > + IN VOID *FspiUpdDataPtr > > + ); > > + > > #endif > > diff --git a/IntelFsp2Pkg/Include/FspGlobalData.h > > b/IntelFsp2Pkg/Include/FspGlobalData.h > > index 445540abfa..697b20ed4c 100644 > > --- a/IntelFsp2Pkg/Include/FspGlobalData.h > > +++ b/IntelFsp2Pkg/Include/FspGlobalData.h > > @@ -10,9 +10,9 @@ > > > > #include > > > > -#define FSP_IN_API_MODE 0 > > -#define FSP_IN_DISPATCH_MODE 1 > > -#define FSP_GLOBAL_DATA_VERSION 1 > > +#define FSP_IN_API_MODE 0 > > +#define FSP_IN_DISPATCH_MODE 1 > > +#define FSP_GLOBAL_DATA_VERSION 1 > > > > #pragma pack(1) > > > > @@ -24,16 +24,17 @@ typedef enum { > > TempRamExitApiIndex, > > FspSiliconInitApiIndex, > > FspMultiPhaseSiInitApiIndex, > > + FspSmmInitApiIndex, > > FspApiIndexMax > > } FSP_API_INDEX; > > > > typedef struct { > > - VOID *DataPtr; > > - UINTN MicrocodeRegionBase; > > - UINTN MicrocodeRegionSize; > > - UINTN CodeRegionBase; > > - UINTN CodeRegionSize; > > - UINTN Reserved; > > + VOID *DataPtr; > > + UINTN MicrocodeRegionBase; > > + UINTN MicrocodeRegionSize; > > + UINTN CodeRegionBase; > > + UINTN CodeRegionSize; > > + UINTN Reserved; > > } FSP_PLAT_DATA; > > > > #define FSP_GLOBAL_DATA_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', = 'D') > > @@ -41,28 +42,28 @@ typedef struct { > > #define FSP_PERFORMANCE_DATA_TIMER_MASK 0xFFFFFFFFFFFFFF > > > > typedef struct { > > - UINT32 Signature; > > - UINT8 Version; > > - UINT8 Reserved1[3]; > > + UINT32 Signature; > > + UINT8 Version; > > + UINT8 Reserved1[3]; > > /// > > /// Offset 0x08 > > /// > > - UINTN CoreStack; > > - UINTN Reserved2; > > + UINTN CoreStack; > > + UINTN Reserved2; > > /// > > /// IA32: Offset 0x10; X64: Offset 0x18 > > /// > > - UINT32 StatusCode; > > - UINT8 ApiIdx; > > + UINT32 StatusCode; > > + UINT8 ApiIdx; > > /// > > /// 0: FSP in API mode; 1: FSP in DISPATCH mode > > /// > > - UINT8 FspMode; > > - UINT8 OnSeparateStack; > > - UINT8 Reserved3; > > - UINT32 NumberOfPhases; > > - UINT32 PhasesExecuted; > > - UINT32 Reserved4[8]; > > + UINT8 FspMode; > > + UINT8 OnSeparateStack; > > + UINT8 Reserved3; > > + UINT32 NumberOfPhases; > > + UINT32 PhasesExecuted; > > + UINT32 Reserved4[8]; > > /// > > /// IA32: Offset 0x40; X64: Offset 0x48 > > /// Start of UINTN and pointer section @@ -75,21 +76,23 @@ typedef > > struct { > > VOID *TempRamInitUpdPtr; > > VOID *MemoryInitUpdPtr; > > VOID *SiliconInitUpdPtr; > > + VOID *SmmInitUpdPtr; > > /// > > - /// IA32: Offset 0x64; X64: Offset 0x90 > > + /// IA32: Offset 0x68; X64: Offset 0x98 > > /// To store function parameters pointer > > /// so it can be retrieved after stack switched. > > /// > > VOID *FunctionParameterPtr; > > FSP_INFO_HEADER *FspInfoHeader; > > VOID *UpdDataPtr; > > + UINTN Reserved5; > > /// > > /// End of UINTN and pointer section > > /// > > - UINT8 Reserved5[16]; > > + UINT8 Reserved6[16]; > > UINT32 PerfSig; > > UINT16 PerfLen; > > - UINT16 Reserved6; > > + UINT16 Reserved7; > > UINT32 PerfIdx; > > UINT64 PerfData[32]; > > } FSP_GLOBAL_DATA; > > diff --git a/IntelFsp2Pkg/Include/Guid/FspHeaderFile.h > > b/IntelFsp2Pkg/Include/Guid/FspHeaderFile.h > > index c660defac3..c7fb63168f 100644 > > --- a/IntelFsp2Pkg/Include/Guid/FspHeaderFile.h > > +++ b/IntelFsp2Pkg/Include/Guid/FspHeaderFile.h > > @@ -26,13 +26,13 @@ > > > > #define FSP_INFO_HEADER_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'H') > > > > -#define IMAGE_ATTRIBUTE_GRAPHICS_SUPPORT BIT0 > > -#define IMAGE_ATTRIBUTE_DISPATCH_MODE_SUPPORT BIT1 > > -#define IMAGE_ATTRIBUTE_64BIT_MODE_SUPPORT BIT2 > > -#define FSP_IA32 0 > > -#define FSP_X64 1 > > +#define IMAGE_ATTRIBUTE_GRAPHICS_SUPPORT BIT0 > > +#define IMAGE_ATTRIBUTE_DISPATCH_MODE_SUPPORT BIT1 > > +#define IMAGE_ATTRIBUTE_64BIT_MODE_SUPPORT BIT2 > > +#define FSP_IA32 0 > > +#define FSP_X64 1 > > > > -#pragma pack(1) > > + #pragma pack(1) >=20 > Why add an indent to the #pragma line? I'm pretty sure that edk2 coding s= tyle > guidelines don't require that and it certainly looks worse than before. >=20 > > > > /// > > /// FSP Information Header as described in FSP v2.0 Spec section 5.1.1= . > > @@ -159,6 +159,14 @@ typedef struct { > > /// Byte 0x4E: Reserved4. > > /// > > UINT16 Reserved4; > > + /// > > + /// Byte 0x50: Offset for the API for the Multi-Phase memory initial= ization. > > + /// > > + UINT32 FspMultiPhaseMemInitEntryOffset; > > + /// > > + /// Byte 0x54: Offset for the API to initialize SMM. > > + /// > > + UINT32 FspSmmInitEntryOffset; > > } FSP_INFO_HEADER; > > > > /// > > @@ -240,7 +248,7 @@ typedef struct { > > // UINT32 PatchData[]; > > } FSP_PATCH_TABLE; > > > > -#pragma pack() > > + #pragma pack() >=20 > Why add an indent to the #pragma line? I'm pretty sure that edk2 coding s= tyle > guidelines don't require that and it certainly looks worse than before. >=20 > > > > extern EFI_GUID gFspHeaderFileGuid; > > > > diff --git a/IntelFsp2Pkg/IntelFsp2Pkg.dsc > > b/IntelFsp2Pkg/IntelFsp2Pkg.dsc index 7cf7e88245..b2d7867880 100644 > > --- a/IntelFsp2Pkg/IntelFsp2Pkg.dsc > > +++ b/IntelFsp2Pkg/IntelFsp2Pkg.dsc > > @@ -68,6 +68,7 @@ > > IntelFsp2Pkg/FspSecCore/FspSecCoreT.inf > > IntelFsp2Pkg/FspSecCore/FspSecCoreM.inf > > IntelFsp2Pkg/FspSecCore/FspSecCoreS.inf > > + IntelFsp2Pkg/FspSecCore/FspSecCoreI.inf > > IntelFsp2Pkg/FspSecCore/Fsp22SecCoreS.inf > > IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf > > > > diff --git a/IntelFsp2Pkg/Tools/GenCfgOpt.py > > b/IntelFsp2Pkg/Tools/GenCfgOpt.py index c4fb1f1bb2..128b896592 100644 > > --- a/IntelFsp2Pkg/Tools/GenCfgOpt.py > > +++ b/IntelFsp2Pkg/Tools/GenCfgOpt.py > > @@ -953,8 +953,8 @@ EndList > > return NoFileChange > > > > def CreateSplitUpdTxt (self, UpdTxtFile): > > - GuidList =3D > ['FSP_T_UPD_TOOL_GUID','FSP_M_UPD_TOOL_GUID','FSP_S_UPD_TOOL_GUID > '] > > - SignatureList =3D ['0x545F', '0x4D5F','0x535F'] # _T, = _M, and _S > signature for FSPT, FSPM, FSPS > > + GuidList =3D > ['FSP_T_UPD_TOOL_GUID','FSP_M_UPD_TOOL_GUID','FSP_S_UPD_TOOL_GUID > ','FSP_I_UPD_TOOL_GUID'] > > + SignatureList =3D ['0x545F', '0x4D5F','0x535F','0x495F'] = # _T, _M, _S > and _I signature for FSPT, FSPM, FSPS, FSPI > > for Index in range(len(GuidList)): > > UpdTxtFile =3D '' > > FvDir =3D self._FvDir > > @@ -1288,19 +1288,21 @@ EndList > > Chars.append(chr(Value & 0xFF)) > > Value =3D Value >> 8 > > SignatureStr =3D ''.join(Chars) > > - # Signature will be _T / _M / _S for FSPT / FSPM / FSPS= accordingly > > + # Signature will be _T / _M / _S / _I for FSPT / FSPM > > + / FSPS /FSPI accordingly > > if '_T' in SignatureStr[6:6+2]: > > TxtBody.append("#define FSPT_UPD_SIGNATURE = %s /* > '%s' */\n\n" % (Item['value'], SignatureStr)) > > elif '_M' in SignatureStr[6:6+2]: > > TxtBody.append("#define FSPM_UPD_SIGNATURE = %s /* > '%s' */\n\n" % (Item['value'], SignatureStr)) > > elif '_S' in SignatureStr[6:6+2]: > > TxtBody.append("#define FSPS_UPD_SIGNATURE = %s /* > '%s' */\n\n" % (Item['value'], SignatureStr)) > > + elif '_I' in SignatureStr[6:6+2]: > > + TxtBody.append("#define FSPI_UPD_SIGNATURE = %s /* > '%s' */\n\n" % (Item['value'], SignatureStr)) > > TxtBody.append("\n") > > > > for Region in ['UPD']: > > UpdOffsetTable =3D [] > > - UpdSignature =3D ['0x545F', '0x4D5F', '0x535F'] #['_T', = '_M', '_S'] > signature for FSPT, FSPM, FSPS > > - UpdStructure =3D ['FSPT_UPD', 'FSPM_UPD', 'FSPS_UPD'] > > + UpdSignature =3D ['0x545F', '0x4D5F', '0x535F', '0x495F'] = #['_T', '_M', > '_S', '_I'] signature for FSPT, FSPM, FSPS, FSPI > > + UpdStructure =3D ['FSPT_UPD', 'FSPM_UPD', 'FSPS_UPD', > > + 'FSPI_UPD'] > > for Item in self._CfgItemList: > > if Item["cname"] =3D=3D 'Signature' and Item["value"][= 0:6] in > UpdSignature: > > Item["offset"] =3D 0 # re-initialize offset to 0 > > when new UPD structure starting @@ -1393,11 +1395,12 @@ EndList > > HeaderTFileName =3D 'FsptUpd.h' > > HeaderMFileName =3D 'FspmUpd.h' > > HeaderSFileName =3D 'FspsUpd.h' > > + HeaderIFileName =3D 'FspiUpd.h' > > > > - UpdRegionCheck =3D ['FSPT', 'FSPM', 'FSPS'] # FSPX_UPD_REG= ION > > - UpdConfigCheck =3D ['FSP_T', 'FSP_M', 'FSP_S'] # FSP_X_CONFIG= , > FSP_X_TEST_CONFIG, FSP_X_RESTRICTED_CONFIG > > - UpdSignatureCheck =3D ['FSPT_UPD_SIGNATURE', 'FSPM_UPD_SIGNATU= RE', > 'FSPS_UPD_SIGNATURE'] > > - ExcludedSpecificUpd =3D ['FSPT_ARCH_UPD', 'FSPM_ARCH_UPD', > 'FSPS_ARCH_UPD'] > > + UpdRegionCheck =3D ['FSPT', 'FSPM', 'FSPS', 'FSPI'] # FSPX= _UPD_REGION > > + UpdConfigCheck =3D ['FSP_T', 'FSP_M', 'FSP_S', 'FSP_I'] # FSP= _X_CONFIG, > FSP_X_TEST_CONFIG, FSP_X_RESTRICTED_CONFIG > > + UpdSignatureCheck =3D ['FSPT_UPD_SIGNATURE', > 'FSPM_UPD_SIGNATURE', 'FSPS_UPD_SIGNATURE', 'FSPI_UPD_SIGNATURE'] > > + ExcludedSpecificUpd =3D ['FSPT_ARCH_UPD', 'FSPM_ARCH_UPD', > > + 'FSPS_ARCH_UPD', 'FSPI_ARCH_UPD'] > > ExcludedSpecificUpd1 =3D ['FSPT_ARCH2_UPD', 'FSPM_ARCH2_UPD', > > 'FSPS_ARCH2_UPD'] > > > > IncLines =3D [] > > @@ -1420,6 +1423,9 @@ EndList > > elif UpdRegionCheck[item] =3D=3D 'FSPS': > > HeaderFd =3D open(os.path.join(FvDir, HeaderSFileName)= , "w") > > FileBase =3D os.path.basename(os.path.join(FvDir, > > HeaderSFileName)) > > + elif UpdRegionCheck[item] =3D=3D 'FSPI': > > + HeaderFd =3D open(os.path.join(FvDir, HeaderIFileName)= , "w") > > + FileBase =3D os.path.basename(os.path.join(FvDir, > > + HeaderIFileName)) > > FileName =3D FileBase.replace(".", "_").upper() > > HeaderFd.write("%s\n" % (__copyright_h__ % date.today().= year)) > > HeaderFd.write("#ifndef __%s__\n" % FileName) > > @@ -1696,7 +1702,7 @@ EndList > > > > > > def Usage(): > > - print ("GenCfgOpt Version 0.57") > > + print ("GenCfgOpt Version 0.58") > > print ("Usage:") > > print (" GenCfgOpt UPDTXT PlatformDscFile BuildFvDir = [-D > Macros]") > > print (" GenCfgOpt HEADER PlatformDscFile BuildFvDir InputHF= ile [-D > Macros]") > > diff --git a/IntelFsp2Pkg/Tools/SplitFspBin.py > > b/IntelFsp2Pkg/Tools/SplitFspBin.py > > index f9151b5afd..317d9c1fa0 100644 > > --- a/IntelFsp2Pkg/Tools/SplitFspBin.py > > +++ b/IntelFsp2Pkg/Tools/SplitFspBin.py > > @@ -1,6 +1,6 @@ > > ## @ SplitFspBin.py > > # > > -# Copyright (c) 2015 - 2021, Intel Corporation. All rights > > reserved.
> > +# Copyright (c) 2015 - 2022, Intel Corporation. All rights > > +reserved.
> > # SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -492,7 > > +492,7 @@ class FspImage: > > self.FihOffset =3D fihoff > > self.Offset =3D offset > > self.FvIdxList =3D [] > > - self.Type =3D "XTMSXXXXOXXXXXXX"[(fih.ComponentAttribute = >> 12) & > 0x0F] > > + self.Type =3D "XTMSIXXXXOXXXXXXX"[(fih.ComponentAttribute= >> 12) & > 0x0F] > > self.PatchList =3D patch > > self.PatchList.append(fihoff + 0x1C) > > > > @@ -869,7 +869,7 @@ def main (): > > parser_rebase =3D subparsers.add_parser('rebase', help=3D'rebase= a FSP into a > new base address') > > parser_rebase.set_defaults(which=3D'rebase') > > parser_rebase.add_argument('-f', '--fspbin' , dest=3D'FspBinary',= type=3Dstr, > help=3D'FSP binary file path', required =3D True) > > - parser_rebase.add_argument('-c', '--fspcomp', choices=3D['t','m',= 's','o'], > nargs=3D'+', dest=3D'FspComponent', type=3Dstr, help=3D'FSP component to = rebase', > default =3D "['t']", required =3D True) > > + parser_rebase.add_argument('-c', '--fspcomp', > > + choices=3D['t','m','s','o','i'], nargs=3D'+', dest=3D'FspComponent', > > + type=3Dstr, help=3D'FSP component to rebase', default =3D "['t']", > > + required =3D True) > > parser_rebase.add_argument('-b', '--newbase', dest=3D'FspBase', n= args=3D'+', > type=3Dstr, help=3D'Rebased FSP binary file name', default =3D '', requir= ed =3D True) > > parser_rebase.add_argument('-o', '--outdir' , dest=3D'OutputDir',= type=3Dstr, > help=3D'Output directory path', default =3D '.') > > parser_rebase.add_argument('-n', '--outfile', dest=3D'OutputFile'= , > > type=3Dstr, help=3D'Rebased FSP binary file name', default =3D '') > > -- > > 2.35.0.windows.1