if self.ConditionalPcds:\r
self.GenerateReportDetail(File, ModulePcdSet, 1)\r
if self.UnusedPcds:\r
- self.GenerateReportDetail(File, ModulePcdSet, 2)\r
+ IsEmpty = True\r
+ for Token in self.UnusedPcds:\r
+ TokenDict = self.UnusedPcds[Token]\r
+ for Type in TokenDict:\r
+ if TokenDict[Type]:\r
+ IsEmpty = False\r
+ break\r
+ if not IsEmpty:\r
+ break\r
+ if not IsEmpty:\r
+ self.GenerateReportDetail(File, ModulePcdSet, 2)\r
self.GenerateReportDetail(File, ModulePcdSet)\r
\r
##\r
PcdValue = DecDefaultValue\r
if DscDefaultValue:\r
PcdValue = DscDefaultValue\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
if ModulePcdSet is not None:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
continue\r
InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
if InfDefaultValue:\r
try:\r
InfDefaultValue = ValueExpressionEx(InfDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
if pcd[2]:\r
continue\r
PcdValue = pcd[3]\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
BuildOptionMatch = True\r
break\r
\r
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
\r
IsStructure = False\r
- if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
+ if self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
IsStructure = True\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
SkuInfoList = Pcd.SkuInfoList\r
Pcd.DatumType = Pcd.StructName\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
Pcd.SkuInfoList = SkuInfoList\r
- if Pcd.PcdFieldValueFromComm:\r
+ if Pcd.PcdValueFromComm or Pcd.PcdFieldValueFromComm:\r
BuildOptionMatch = True\r
DecMatch = False\r
+ elif Pcd.PcdValueFromFdf or Pcd.PcdFieldValueFromFdf:\r
+ DscDefaultValue = True\r
+ DscMatch = True\r
+ DecMatch = False\r
elif Pcd.SkuOverrideValues:\r
DscOverride = False\r
- if not Pcd.SkuInfoList:\r
- OverrideValues = Pcd.SkuOverrideValues\r
- if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- Data = OverrideValues[Keys[0]]\r
- Struct = Data.values()[0]\r
- DscOverride = self.ParseStruct(Struct)\r
+ if Pcd.DefaultFromDSC:\r
+ DscOverride = True\r
else:\r
- SkuList = sorted(Pcd.SkuInfoList.keys())\r
- for Sku in SkuList:\r
- SkuInfo = Pcd.SkuInfoList[Sku]\r
- if TypeName in ('DYNHII', 'DEXHII'):\r
- if SkuInfo.DefaultStoreDict:\r
- DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
- for DefaultStore in DefaultStoreList:\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
- DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
- if DscOverride:\r
+ DictLen = 0\r
+ for item in Pcd.SkuOverrideValues:\r
+ DictLen += len(Pcd.SkuOverrideValues[item])\r
+ if not DictLen:\r
+ DscOverride = False\r
+ else:\r
+ if not Pcd.SkuInfoList:\r
+ OverrideValues = Pcd.SkuOverrideValues\r
+ if OverrideValues:\r
+ for Data in OverrideValues.values():\r
+ Struct = list(Data.values())\r
+ if Struct:\r
+ DscOverride = self.ParseStruct(Struct[0])\r
break\r
else:\r
- OverrideValues = Pcd.SkuOverrideValues[Sku]\r
- if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
- DscOverride = self.ParseStruct(OverrideFieldStruct)\r
- if DscOverride:\r
- break\r
+ SkuList = sorted(Pcd.SkuInfoList.keys())\r
+ for Sku in SkuList:\r
+ SkuInfo = Pcd.SkuInfoList[Sku]\r
+ if TypeName in ('DYNHII', 'DEXHII'):\r
+ if SkuInfo.DefaultStoreDict:\r
+ DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+ for DefaultStore in DefaultStoreList:\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
+ if DscOverride:\r
+ break\r
+ else:\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+ if OverrideValues:\r
+ Keys = list(OverrideValues.keys())\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
+ DscOverride = self.ParseStruct(OverrideFieldStruct)\r
+ if DscOverride:\r
+ break\r
if DscOverride:\r
DscDefaultValue = True\r
DscMatch = True\r
DecMatch = False\r
+ else:\r
+ DecMatch = True\r
else:\r
DscDefaultValue = True\r
DscMatch = True\r
Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
if IsStructure:\r
+ FiledOverrideFlag = False\r
OverrideValues = Pcd.SkuOverrideValues\r
if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- Data = OverrideValues[Keys[0]]\r
- Struct = Data.values()[0]\r
- OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)\r
+ for Data in OverrideValues.values():\r
+ Struct = list(Data.values())\r
+ if Struct:\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct[0])\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ FiledOverrideFlag = True\r
+ break\r
+ if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
self.PrintStructureInfo(File, OverrideFieldStruct)\r
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
else:\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
if IsStructure:\r
+ FiledOverrideFlag = False\r
OverrideValues = Pcd.SkuOverrideValues[Sku]\r
if OverrideValues:\r
Keys = OverrideValues.keys()\r
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
self.PrintStructureInfo(File, OverrideFieldStruct)\r
+ FiledOverrideFlag = True\r
+ if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
\r
def OverrideFieldValue(self, Pcd, OverrideStruct):\r
else:\r
return value\r
\r
+ def IsStructurePcd(self, PcdToken, PcdTokenSpaceGuid):\r
+ if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((PcdToken, PcdTokenSpaceGuid) in GlobalData.gStructurePcd[self.Arch]):\r
+ return True\r
+ else:\r
+ return False\r
+\r
##\r
# Reports platform and module Prediction information\r
#\r
TempFile.close()\r
\r
try:\r
- from Eot.Eot import Eot\r
+ from Eot.EotMain import Eot\r
\r
#\r
# Invoke EOT tool and echo its runtime performance\r