From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=bob.c.feng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5085E211982C0 for ; Tue, 11 Dec 2018 01:04:05 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Dec 2018 01:04:05 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,341,1539673200"; d="scan'208";a="282638360" Received: from shwdepsi1121.ccr.corp.intel.com ([10.239.158.47]) by orsmga005.jf.intel.com with ESMTP; 11 Dec 2018 01:04:03 -0800 From: BobCF To: edk2-devel@lists.01.org Cc: "Feng, Bob C" , Liming Gao , Leif Lindholm Date: Tue, 11 Dec 2018 17:04:02 +0800 Message-Id: <20181211090402.1000-1-bob.c.feng@intel.com> X-Mailer: git-send-email 2.19.1.windows.1 MIME-Version: 1.0 Subject: [Patch V3] BaseTools: Fix PcdNvStoreDefaultValueBuffer Value. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Dec 2018 09:04:05 -0000 Content-Transfer-Encoding: 8bit From: "Feng, Bob C" https://bugzilla.tianocore.org/show_bug.cgi?id=1385 This patch is going to fix the regression issue that is introduced by commit e6eae3b4c7b9b756263ecec79694de5f1e85b73a and commit 0b6c5954e1d9a17e01eee7d5ef840a5b4790e2e8. PcdNvStoreDefaultValueBuffer value is update to Vpd Info File, but it is not update into a internal cache. This patch will fix this incorrect value in that internal cache. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Bob Feng Cc: Liming Gao Cc: Leif Lindholm --- BaseTools/Source/Python/AutoGen/AutoGen.py | 16 ++++++++++++---- BaseTools/Source/Python/Common/VpdInfoFile.py | 6 +++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 12e53010a5..d646cd50ce 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -1568,10 +1568,16 @@ class PlatformAutoGen(AutoGen): if VpdFile.GetCount() != 0: self.FixVpdOffset(VpdFile) self.FixVpdOffset(self.UpdateNVStoreMaxSize(VpdFile)) + PcdNvStoreDfBuffer = [item for item in self._DynamicPcdList if item.TokenCName == "PcdNvStoreDefaultValueBuffer" and item.TokenSpaceGuidCName == "gEfiMdeModulePkgTokenSpaceGuid"] + if PcdNvStoreDfBuffer: + PcdName,PcdGuid = PcdNvStoreDfBuffer[0].TokenCName, PcdNvStoreDfBuffer[0].TokenSpaceGuidCName + if (PcdName,PcdGuid) in VpdSkuMap: + DefaultSku = PcdNvStoreDfBuffer[0].SkuInfoList.get(TAB_DEFAULT) + VpdSkuMap[(PcdName,PcdGuid)] = {DefaultSku.DefaultValue:[DefaultSku]} # Process VPD map file generated by third party BPDG tool if NeedProcessVpdMapFile: VpdMapFilePath = os.path.join(self.BuildDir, TAB_FV_DIRECTORY, "%s.map" % self.Platform.VpdToolGuid) if os.path.exists(VpdMapFilePath): @@ -1885,19 +1891,21 @@ class PlatformAutoGen(AutoGen): @cached_property def NonDynamicPcdDict(self): return {(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):Pcd for Pcd in self.NonDynamicPcdList} ## Get list of non-dynamic PCDs - @cached_property + @property def NonDynamicPcdList(self): - self.CollectPlatformDynamicPcds() + if not self._NonDynamicPcdList: + self.CollectPlatformDynamicPcds() return self._NonDynamicPcdList ## Get list of dynamic PCDs - @cached_property + @property def DynamicPcdList(self): - self.CollectPlatformDynamicPcds() + if not self._DynamicPcdList: + self.CollectPlatformDynamicPcds() return self._DynamicPcdList ## Generate Token Number for all PCD @cached_property def PcdTokenNumber(self): diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py index 3be0670e36..cebc1f7187 100644 --- a/BaseTools/Source/Python/Common/VpdInfoFile.py +++ b/BaseTools/Source/Python/Common/VpdInfoFile.py @@ -175,12 +175,12 @@ class VpdInfoFile: EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Fail to parse VPD information file %s" % FilePath) Found = False if (TokenSpaceName, PcdTokenName) not in self._VpdInfo: - self._VpdInfo[(TokenSpaceName, PcdTokenName)] = [] - self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId, Offset, Value)) + self._VpdInfo[(TokenSpaceName, PcdTokenName)] = {} + self._VpdInfo[(TokenSpaceName, PcdTokenName)][(SkuId, Offset)] = Value for VpdObject in self._VpdArray: VpdObjectTokenCName = VpdObject.TokenCName for PcdItem in GlobalData.MixedPcd: if (VpdObject.TokenCName, VpdObject.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]: VpdObjectTokenCName = PcdItem[0] @@ -217,11 +217,11 @@ class VpdInfoFile: return None return self._VpdArray[vpd] def GetVpdInfo(self, arg): (PcdTokenName, TokenSpaceName) = arg - return self._VpdInfo.get((TokenSpaceName, PcdTokenName)) + return [(sku,offset,value) for (sku,offset),value in self._VpdInfo.get((TokenSpaceName, PcdTokenName)).items()] ## Call external BPDG tool to process VPD file # # @param ToolPath The string path name for BPDG tool # @param VpdFileName The string path name for VPD information guid.txt -- 2.19.1.windows.1