]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Fix PcdNvStoreDefaultValueBuffer Value.
authorFeng, Bob C <bob.c.feng@intel.com>
Sun, 9 Dec 2018 13:44:47 +0000 (21:44 +0800)
committerBobCF <bob.c.feng@intel.com>
Sat, 15 Dec 2018 07:45:07 +0000 (15:45 +0800)
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 <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/Common/VpdInfoFile.py

index 12e53010a559920fec0e6bd4c2a5a2bf1a3a4f3f..d646cd50ce8e8101538b0eaf098de4c1e07b01e3 100644 (file)
@@ -1570,6 +1570,12 @@ class PlatformAutoGen(AutoGen):
                 self.FixVpdOffset(VpdFile)\r
 \r
                 self.FixVpdOffset(self.UpdateNVStoreMaxSize(VpdFile))\r
+                PcdNvStoreDfBuffer = [item for item in self._DynamicPcdList if item.TokenCName == "PcdNvStoreDefaultValueBuffer" and item.TokenSpaceGuidCName == "gEfiMdeModulePkgTokenSpaceGuid"]\r
+                if PcdNvStoreDfBuffer:\r
+                    PcdName,PcdGuid = PcdNvStoreDfBuffer[0].TokenCName, PcdNvStoreDfBuffer[0].TokenSpaceGuidCName\r
+                    if (PcdName,PcdGuid) in VpdSkuMap:\r
+                        DefaultSku = PcdNvStoreDfBuffer[0].SkuInfoList.get(TAB_DEFAULT)\r
+                        VpdSkuMap[(PcdName,PcdGuid)] = {DefaultSku.DefaultValue:[DefaultSku]}\r
 \r
                 # Process VPD map file generated by third party BPDG tool\r
                 if NeedProcessVpdMapFile:\r
@@ -1887,15 +1893,17 @@ class PlatformAutoGen(AutoGen):
         return {(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):Pcd for Pcd in self.NonDynamicPcdList}\r
 \r
     ## Get list of non-dynamic PCDs\r
-    @cached_property\r
+    @property\r
     def NonDynamicPcdList(self):\r
-        self.CollectPlatformDynamicPcds()\r
+        if not self._NonDynamicPcdList:\r
+            self.CollectPlatformDynamicPcds()\r
         return self._NonDynamicPcdList\r
 \r
     ## Get list of dynamic PCDs\r
-    @cached_property\r
+    @property\r
     def DynamicPcdList(self):\r
-        self.CollectPlatformDynamicPcds()\r
+        if not self._DynamicPcdList:\r
+            self.CollectPlatformDynamicPcds()\r
         return self._DynamicPcdList\r
 \r
     ## Generate Token Number for all PCD\r
index 3be0670e36fb292981084da7a8165e15943d455d..cebc1f718786b62c68d9a959e59bb57ab0b5f29b 100644 (file)
@@ -177,8 +177,8 @@ class VpdInfoFile:
             Found = False\r
 \r
             if (TokenSpaceName, PcdTokenName) not in self._VpdInfo:\r
-                self._VpdInfo[(TokenSpaceName, PcdTokenName)] = []\r
-            self._VpdInfo[(TokenSpaceName, PcdTokenName)].append((SkuId, Offset, Value))\r
+                self._VpdInfo[(TokenSpaceName, PcdTokenName)] = {}\r
+            self._VpdInfo[(TokenSpaceName, PcdTokenName)][(SkuId, Offset)] = Value\r
             for VpdObject in self._VpdArray:\r
                 VpdObjectTokenCName = VpdObject.TokenCName\r
                 for PcdItem in GlobalData.MixedPcd:\r
@@ -219,7 +219,7 @@ class VpdInfoFile:
         return self._VpdArray[vpd]\r
     def GetVpdInfo(self, arg):\r
         (PcdTokenName, TokenSpaceName) = arg\r
-        return self._VpdInfo.get((TokenSpaceName, PcdTokenName))\r
+        return [(sku,offset,value) for (sku,offset),value in self._VpdInfo.get((TokenSpaceName, PcdTokenName)).items()]\r
 \r
 ## Call external BPDG tool to process VPD file\r
 #\r