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.web11.118276.1683573325092444927 for ; Mon, 08 May 2023 12:15:25 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=C2rh/asx; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: isaac.w.oram@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683573325; x=1715109325; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=o4MaSs84PTUphRI/1Uf6EhTP5uTXpnCfK2TgyYJf1G4=; b=C2rh/asx/PSBDCf3lDsLJDSpoFNqtpH9qCCqN9OQqwTFFT+GqpxCxaiC NvBg1ue38mcB/ztNOdb/F+GLbzrSqVEzoZyHvsh6UwryAMsKJgvOVal+C zDtry1UoBslAj6IrQosRHRB/J27sI9Y2RDn01bQQ1TSBQzyi31joZizOv MIQ5w1VTYLf32DYgfWmkWciVHQClp+ou+F50StwDl7/CkCWcq76LUogov 9AHR/2PnBtb51b0k6gYOL3WsGaH+nM9WPVut4dNbPJwuHCMviL0dB48sg B3SujtnKXj+zHSkU4OuLnCVuI//f3O7Hc4wpYUG1yC+vD+vaAx5t6XzkV Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="330096361" X-IronPort-AV: E=Sophos;i="5.99,259,1677571200"; d="scan'208";a="330096361" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 12:15:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="872899101" X-IronPort-AV: E=Sophos;i="5.99,259,1677571200"; d="scan'208";a="872899101" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga005.jf.intel.com with ESMTP; 08 May 2023 12:15:24 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Mon, 8 May 2023 12:15:23 -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.23 via Frontend Transport; Mon, 8 May 2023 12:15:23 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.40) 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.23; Mon, 8 May 2023 12:15:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RzHpkqVV/6m9visV10BSs+X/O9CaxLG297ehx7wtaoDq2fblR3M8DteJJr2XOvcqsIbwymZNH0gAEWEOFhqjgUdcZ942Dg5DXD3mTHRRAtPWH+NM66uFiB1ujdDak061kq6tK/+rYPg+7fE7GDLOyFWtYHqY7dw+E5zNaBkY+ClTtHL0sVQ/oYXuP56mLr06I+b2ym1FpjEZD+Fdj48pVIgNp223k9y76lbTQvvQpGP6ImhHVl+7NTAkCREjIkxpazozBwH5PxwRAkDKkSDXcjsL77Z6x6Hfa/o71Ioo1M8jMn/YLeFuszX+Nu7WO7i6GEa5SW4glDG33cCVgNNhQg== 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=T4WC8t77QTjJFdw6/F2Qz1dK0M+TwPLNdfacYYxsBOo=; b=DJfHf/5iILjQP9UQQ8r+Cl8o7jdBuersjdxMuvi4Gc/IvGLoKQ9bwulY7o9NRKOpkd8svGSpwr6tzbS4toJPltVkfofaeF6+qTR5TDbuytb8K4dgsXX37gAtnLzaRtcig+SKZebrum7h3NcVUVya1d5dS3jfLJZxypvTH2pxioFRw22nYWiBHp/1/L/wbqjVUx7YYJrDu16biAVFOjbpOXocJvl8Wwoh3NjPnQBa9ojuVLNuXyHE56PVY42yFaN+qCZVlYrm+6nMYdb/hHNZ1KGxsKNHajIr4C5iK9bqp9TtxWW7YBZEpU8hIq26gTyzzZmlHBIyHaoDYgKR5TnoMw== 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 SA1PR11MB5801.namprd11.prod.outlook.com (2603:10b6:806:23d::13) by SA1PR11MB6566.namprd11.prod.outlook.com (2603:10b6:806:251::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.32; Mon, 8 May 2023 19:15:22 +0000 Received: from SA1PR11MB5801.namprd11.prod.outlook.com ([fe80::6979:a90f:e224:41c5]) by SA1PR11MB5801.namprd11.prod.outlook.com ([fe80::6979:a90f:e224:41c5%4]) with mapi id 15.20.6363.032; Mon, 8 May 2023 19:15:21 +0000 From: "Isaac Oram" To: "Gudla, Raghava" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Kubacki, Michael" , "Chaganty, Rangasai V" Subject: Re: [edk2-platforms:PATCH V1] MinPlatformPkg/SaveMemoryConfig: Support NVS Data compression. Thread-Topic: [edk2-platforms:PATCH V1] MinPlatformPkg/SaveMemoryConfig: Support NVS Data compression. Thread-Index: AQHZf64xaTFh7RClUkuIludDNrUiLa9QutYg Date: Mon, 8 May 2023 19:15:21 +0000 Message-ID: References: <20230506000300.389-1-raghava.gudla@intel.com> In-Reply-To: <20230506000300.389-1-raghava.gudla@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-traffictypediagnostic: SA1PR11MB5801:EE_|SA1PR11MB6566:EE_ x-ms-office365-filtering-correlation-id: fecd2076-4380-4fcf-5b60-08db4ff891b2 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bd105s6wVChNGuumEhQWxUfgQyVJDsKr7P73p1ZjIFoo6ZJVyPE4ZqOakalYctnwnwAS21pBDxmphIhQIfgknayU7QhWsPHnvQQzq8V0dhor/1vdDrC8IyvJPcl7jBwT92KJgt52FmiZVruFZhh2NFkEkdkLOn5WKrl50xCk9TOJhlJJWWoq/onaND5v74+J3tAmbOJtTuUd0DLlRHNnu6zsWV0VQeq37rij6Zkg+FTCgCV3PHvlg7wD37t8YJONyx09khKyk9WYZhRGMg7Y9u5cQJDuUXqcSk0mCqwh+QpYs+GeNfMK0FrNMpmmks9xYfrUh+LF7b/T5y1vepZ5JFmsfCxPBiQ51v9VoY6pWb7tKDZosoSCgFIV3S5r0O/NjLQXgw0f1q5dzIB/0urqV4RmD+PSY5RwBi1zrc1kaeJDmmn2OQNtzP7dzSoF2cDG0zUnBfbhF866RieeKIDSrI745dMJ8erMFBIqhF8+fBPSGJ3v7AhRTb4NA9PwrtovsvpW6g8ns4Zj0GnyfVP4cNfeHIF5A84/b3LLaCTmoWOcuy1TiqTyZmdHa3FSw1YfwhSVfmkGSveVnGbaaVH75EEJge4MU6pJ7AGa2beSq7L/DOT2VDQq3/jwiC6tg27P x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA1PR11MB5801.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(136003)(39860400002)(396003)(346002)(366004)(451199021)(478600001)(2906002)(54906003)(8936002)(8676002)(316002)(4326008)(66476007)(66446008)(5660300002)(66556008)(64756008)(110136005)(19627235002)(71200400001)(41300700001)(66946007)(52536014)(76116006)(7696005)(6506007)(26005)(9686003)(53546011)(107886003)(186003)(82960400001)(83380400001)(55016003)(38070700005)(33656002)(86362001)(122000001)(38100700002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?TfIFTppA7H42cqFpVaFMQaE4I9quyfOScB6YG3LfkZdlDho83dPmd8zHl/FE?= =?us-ascii?Q?KC8HdbRbwf1FbiepyC5BK3tyeqsqnOPIO6hIzCYxqa1vL1lR9ObPmXH0/yqN?= =?us-ascii?Q?DXmvuiWogHB7hBnDn+WLGAKwnCccIHvLqL798Sm4X9eKqVDUYiYD1CmjLquc?= =?us-ascii?Q?vYD6f9Jkc/lF4ZqtGcDz4X8rFNrKVoy7xSD3M2QIu13KUhwqx7tQVtgwDE9L?= =?us-ascii?Q?mNloUZVC6t+gJg1NMeUJz3TrvS60HQpyIbBBVt+Fi5PkKnqiXiGIRTJsNDZM?= =?us-ascii?Q?z2WnfozIcJe3ybs2IuYBk1pRi1v8RXtKUVaX0AJtcv9NafYzdJy0Xv6ttLot?= =?us-ascii?Q?HTG00q9wtnOnFoOkFcjtcXksASPePEAazFLiucGoZiPwLxkuoPTd8OvZgeqm?= =?us-ascii?Q?CUQc0D3RFvKfM7i1yIxLrh2K2bSJtTI91vngNX8GFWGtXkOzNC+NA0DIHLiW?= =?us-ascii?Q?S8r7Z+fX3I4M1ehijoovJrUxhrDdyzpf9eUeRuIHkqhuOYgiN9vh4lvNHotc?= =?us-ascii?Q?fFwGGIkW728XxAwnQVqimyG2IzMzZqCAvgp2TiEcK78uYz9ebHLUuZlXWuFB?= =?us-ascii?Q?ay/DNN6yeB+qgE6EKEX5GktRdLnQVASBUJqqY2tEmwnf4An2Bm7CAS6GdTye?= =?us-ascii?Q?+YgGz9mpWr8P4pV8H2xHjKhgkv7aTeOGSo7BuhK6md0qeC6zRhs2i6oo/OGf?= =?us-ascii?Q?IBzmmontwev23wN7g8Q7hlE/GaopUW1B7MWKWjAXVj59104nl8Ld6FmQnAAn?= =?us-ascii?Q?FpchyyDC4Rytk5yNuxYaJbLQVjaReTA3aUo9j+UNf09vnPa/+N2N7+V5Ovgm?= =?us-ascii?Q?BRr30j6sWbbi5ks7dtgtDdDw7hwvsGTaahWOVjTmrLclklZCIUBKPZRO2Hiw?= =?us-ascii?Q?Jo5PY+vfDcFO/vnMJ4n6YY+HMKgbP5orklylCuDgI7nhdkaRa9D48MLqPNG7?= =?us-ascii?Q?VEP4VZvIxRCDMIKauE87ZZgWNG0yNb2TFLPVFCwfZAsv9IhTJ/R9g/+pajgP?= =?us-ascii?Q?yDkJhLrZj1FUUm5hagVGCOgj/0AXCYjMA0gwFD4s3VT9wOZZTonl/KRxXLgv?= =?us-ascii?Q?9fOSziXjQ6wkRIp2phZK0mm6a5GOZoXhVrTm/4g35tP4ZVrdqNr60YIBUaHD?= =?us-ascii?Q?h0llX/jJVxMq8ysUFxppLq87TsIIzrM37k2F7X7dzydSdgYcBK1yAMatTBTW?= =?us-ascii?Q?c8uaozP1drt1ebXKmXEwyJ1ZOlgAgRMO0vaFGHyqtdp6v9W7Q1wuAQ22JZV3?= =?us-ascii?Q?Y/gXZ9ldgwh+DNkulHm/bPpX3xq10X9am65wu0/tH5QTMjX4QkCBgRNqkOEi?= =?us-ascii?Q?iNuPyZ85KosFkl51RItFRciXc8ikCv20JHp7VPW8nFhD4HAVD+oU18aaAp7F?= =?us-ascii?Q?5j1jQNRYskAAhPiq5S6hoMjfThTR7hOZpMEZ9sCCwWYfqx480isvCC/Ew3AO?= =?us-ascii?Q?3OatZd5xSCDcmOpNCusq2r/ShMhqtck+8OOG7SSyVUg/KsWIkm1SfXjOlRVQ?= =?us-ascii?Q?84hcB+TAQuu3h3Fe1BLJjdFw2NSjUZo8SvtoRCicCtA0UoqSlTMfPjNlNHX/?= =?us-ascii?Q?QkC4GGJqT5q6yJocbAJwq+pPQSMk+HhdsMLzonC7?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR11MB5801.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fecd2076-4380-4fcf-5b60-08db4ff891b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 May 2023 19:15:21.7583 (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: 31ctpWM9kxfZ2vQ5zusAvBKnebbrp0o81Lb1J5CKdkj7XT355Dlx4q+A6fMeoH6Mzdohp17LK+++jDO/dxUPTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB6566 Return-Path: isaac.w.oram@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable The proposed implementation is fine and I will reviewed-by and push if that= is the desired direction. My question is if we generally like the design of doing compression in comm= on MinPlatform code, decompression in board specific FSP wrapper code. The= alternative design is to do compression and decompression inside the FSP. = This seems like a slightly simpler separation of responsibilities. The board code is responsible for save/restore, the FSP code is responsible= for data blob creation and use. Data integrity, authentication, compressi= on, etc all can be done based on more detailed knowledge of the silicon imp= lementation requirements. I can see another argument though that doing it inside FSP effectively forc= es both bootloader and FSP to carry compression/decompression. The compres= sion/decompression aren't likely to need to be silicon specific. And bootl= oader may have more requirements to balance than just the silicon requireme= nts. Can I get some votes on preferred answer for compressing/decompressing FSP = non-volatile data in bootloader or FSP? Thanks, Isaac -----Original Message----- From: Gudla, Raghava =20 Sent: Friday, May 5, 2023 5:03 PM To: devel@edk2.groups.io Cc: Gudla, Raghava ; Chiu, Chasel ; Desimone, Nathaniel L ; Oram, Isaa= c W Subject: [edk2-platforms:PATCH V1] MinPlatformPkg/SaveMemoryConfig: Support= NVS Data compression. Around 50KB "FspNonVolatileStorageHob" data can be compressed to approximat= ely 3 KB which can save NVRAM space and enhance life of the SPI part by dec= reasing the number of reclaim cycles needed. This patch added support to compress "FspNonVolatileStorageHob" data before= saving to NVRAM. A PcdEnableCompressFspNvsHob is introduced to enable/disable this feature p= er platform usage. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Isaac Oram Signed-off-by: Raghava Gudla --- .../SaveMemoryConfig/SaveMemoryConfig.c | 34 +++++++++++++++++++ .../SaveMemoryConfig/SaveMemoryConfig.inf | 6 +++- .../Include/Dsc/CoreCommonLib.dsc | 1 + .../Intel/MinPlatformPkg/MinPlatformPkg.dec | 5 +++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/Save= MemoryConfig.c b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/= SaveMemoryConfig.c index 0215e8eed..8aa935b54 100644 --- a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryC= onfig.c +++ b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo +++ ryConfig.c @@ -21,6 +21,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include +#include /** This is the standard EFI driver= point that detects whether there is a@@ -45,6 +47,9 @@ SaveMemoryConfigEnt= ryPoint ( UINTN DataSize; UINTN BufferSize; BOOLEAN = DataIsIdentical;+ VOID *CompressedData;+ UINT64 = CompressedSize;+ UINTN CompressedAllocationPages; Da= taSize =3D 0; BufferSize =3D 0;@@ -73,6 +78,35 @@ SaveMemoryC= onfigEntryPoint ( } } + if (PcdGetBool (PcdEnableCompressFspNvsHob) =3D=3D 1) {+ C= ompressedData =3D NULL;+ CompressedSize =3D 0;+ = CompressedAllocationPages =3D 0;++ DEBUG ((DEBUG_INFO, "compressing mem= config nvs variable\n"));+ if (DataSize > 0) {+ CompressedAllocati= onPages =3D EFI_SIZE_TO_PAGES (DataSize);+ CompressedData =3D Allocate= Pages (CompressedAllocationPages);+ if (CompressedData =3D=3D NULL) {+= DEBUG ((DEBUG_ERROR, "[%a] - Failed to allocate compressed data buf= fer.\n", __func__));+ ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES);+ = return EFI_OUT_OF_RESOURCES;+ }++ CompressedSize =3D EFI_PAGES= _TO_SIZE (CompressedAllocationPages);+ Status =3D Compress (HobData, D= ataSize, CompressedData, &CompressedSize);+ if (EFI_ERROR (Status)) {+= DEBUG ((DEBUG_ERROR, "[%a] - failed to compress data. Status =3D %r= \n", __func__, Status));+ ASSERT_EFI_ERROR (Status);+ FreePoo= l(CompressedData);+ return Status;+ } else {+ HobData = =3D CompressedData;+ DataSize =3D (UINTN) CompressedSize;+ }+ = }+ }+ if (HobData !=3D NULL) { DEBUG ((DEBUG_INFO, "FspNvsHob.NvsD= ataLength:%d\n", DataSize)); DEBUG ((DEBUG_INFO, "FspNvsHob.NvsDataPtr = : 0x%x\n", HobData));diff --git a/Platform/Intel/MinPlatformPkg/FspWrappe= r/SaveMemoryConfig/SaveMemoryConfig.inf b/Platform/Intel/MinPlatformPkg/Fsp= Wrapper/SaveMemoryConfig/SaveMemoryConfig.inf index 61e85a658..77920d031 100644 --- a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryC= onfig.inf +++ b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo +++ ryConfig.inf @@ -26,6 +26,7 @@ LargeVariableReadLib LargeVariableWriteLib BaseLib+ CompressLib [P= ackages] MdePkg/MdePkg.dec@@ -45,6 +46,9 @@ gFspNonVolatileStorageHob2Guid ## CONSUMES gFspNvsBuffe= rVariableGuid ## PRODUCES +[Pcd]+ gMinPlatformPkgToken= SpaceGuid.PcdEnableCompressFspNvsHob+ [Depex] gEfiVariableArchProtocolGui= d AND- gEfiVariableWriteArchProtocolGuid \ No newline at end of file + gEfiVariableWriteArchProtocolGuiddiff --git=20 + a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc=20 + b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc index 5ce21cf31..dfe7d836d 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc @@ -147,6 +147,7 @@ BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.i= nf LargeVariableReadLib|MinPlatformPkg/Library/BaseLargeVariableLib/BaseL= argeVariableReadLib.inf LargeVariableWriteLib|MinPlatformPkg/Library/Base= LargeVariableLib/BaseLargeVariableWriteLib.inf+ CompressLib|MinPlatformPkg= /Library/CompressLib/CompressLib.inf # # CryptLibdiff --git a/Platform= /Intel/MinPlatformPkg/MinPlatformPkg.dec b/Platform/Intel/MinPlatformPkg/Mi= nPlatformPkg.dec index 784abb828..e21d55fb3 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec @@ -348,6 +348,11 @@ gMinPlatformPkgTokenSpaceGuid.PcdFadtFlags|0x000086A5|UINT32|0x90000027 = gMinPlatformPkgTokenSpaceGuid.PcdFadtMajorVersion|0x06|UINT8|0x90000030 = gMinPlatformPkgTokenSpaceGuid.PcdFadtMinorVersion|0x03|UINT8|0x90000031+##= Controls whether the Memory Config UEFI Variable is saved as compressed da= ta.+# Data compression can significantly reduce variable storage usage for = FSP NVS buffer data.+# Platforms that choose to compress the data will need= to decompress the variable data upon+# extraction.+ gMinPlatformPkgTokenS= paceGuid.PcdEnableCompressFspNvsHob|FALSE|BOOLEAN|0x90000032 [PcdsFixedAtB= uild] --=20 2.19.1.windows.1