summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYonghong Zhu <yonghong.zhu@intel.com>2018-10-23 16:14:28 +0800
committerYonghong Zhu <yonghong.zhu@intel.com>2018-10-25 16:40:18 +0800
commitebed920ffddf1a7de779be3f956415f4160de60d (patch)
treed095571ae855eddf76fedb53e675120423dbba1b
parent5d54ab94db0308e90a86aee543cb3a07a9c4d2bc (diff)
downloadedk2-ebed920ffddf1a7de779be3f956415f4160de60d.tar.gz
edk2-ebed920ffddf1a7de779be3f956415f4160de60d.tar.bz2
edk2-ebed920ffddf1a7de779be3f956415f4160de60d.zip
BaseTools: Fix VPD PCD Sub-section display bug
original we get the VPD PCD items from the VPDGuid.map file in the FV output folder. but this logic doesn't work when 1) there only have single non Default SKU, 2) there have multiple SKU with same value. Now we change it to get the really VPD Pcd items that already display in the PCD section of the report. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
-rw-r--r--BaseTools/Source/Python/build/BuildReport.py46
1 files changed, 17 insertions, 29 deletions
diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index de8f0fb087..ea98ef7ed5 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -126,6 +126,9 @@ gDriverTypeMap = {
## The look up table of the supported opcode in the dependency expression binaries
gOpCodeList = ["BEFORE", "AFTER", "PUSH", "AND", "OR", "NOT", "TRUE", "FALSE", "END", "SOR"]
+## Save VPD Pcd
+VPDPcdList = []
+
##
# Writes a string to the file object.
#
@@ -1401,6 +1404,9 @@ class PcdReport(object):
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))
if TypeName in ('DYNVPD', 'DEXVPD'):
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))
+ VPDPcdItem = (Pcd.TokenSpaceGuidCName + '.' + PcdTokenCName, SkuIdName, SkuInfo.VpdOffset, Pcd.MaxDatumSize, SkuInfo.DefaultValue)
+ if VPDPcdItem not in VPDPcdList:
+ VPDPcdList.append(VPDPcdItem)
if IsStructure:
FiledOverrideFlag = False
OverrideValues = Pcd.SkuOverrideValues[Sku]
@@ -2017,35 +2023,14 @@ class FdReport(object):
self.Size = Fd.Size
self.FdRegionList = [FdRegionReport(FdRegion, Wa) for FdRegion in Fd.RegionList]
self.FvPath = os.path.join(Wa.BuildDir, TAB_FV_DIRECTORY)
- self.VpdFilePath = os.path.join(self.FvPath, "%s.map" % Wa.Platform.VpdToolGuid)
self.VPDBaseAddress = 0
self.VPDSize = 0
- self.VPDInfoList = []
for index, FdRegion in enumerate(Fd.RegionList):
if str(FdRegion.RegionType) is 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):
self.VPDBaseAddress = self.FdRegionList[index].BaseAddress
self.VPDSize = self.FdRegionList[index].Size
break
- if os.path.isfile(self.VpdFilePath):
- fd = open(self.VpdFilePath, "r")
- Lines = fd.readlines()
- for Line in Lines:
- Line = Line.strip()
- if len(Line) == 0 or Line.startswith("#"):
- continue
- try:
- PcdName, SkuId, Offset, Size, Value = Line.split("#")[0].split("|")
- PcdName, SkuId, Offset, Size, Value = PcdName.strip(), SkuId.strip(), Offset.strip(), Size.strip(), Value.strip()
- if Offset.lower().startswith('0x'):
- Offset = '0x%08X' % (int(Offset, 16) + self.VPDBaseAddress)
- else:
- Offset = '0x%08X' % (int(Offset, 10) + self.VPDBaseAddress)
- self.VPDInfoList.append("%s | %s | %s | %s | %s" % (PcdName, SkuId, Offset, Size, Value))
- except:
- EdkLogger.error("BuildReport", CODE_ERROR, "Fail to parse VPD information file %s" % self.VpdFilePath)
- fd.close()
-
##
# Generate report for the firmware device.
#
@@ -2065,23 +2050,26 @@ class FdReport(object):
for FdRegionItem in self.FdRegionList:
FdRegionItem.GenerateReport(File)
- if len(self.VPDInfoList) > 0:
+ if VPDPcdList:
+ VPDPcdList.sort(key=lambda x: int(x[2], 0))
FileWrite(File, gSubSectionStart)
FileWrite(File, "FD VPD Region")
FileWrite(File, "Base Address: 0x%X" % self.VPDBaseAddress)
FileWrite(File, "Size: 0x%X (%.0fK)" % (self.VPDSize, self.VPDSize / 1024.0))
FileWrite(File, gSubSectionSep)
- for item in self.VPDInfoList:
- ValueList = item.split('|')
- Value = ValueList[-1].strip()
- IsByteArray, ArrayList = ByteArrayForamt(Value)
+ for item in VPDPcdList:
+ # Add BaseAddress for offset
+ Offset = '0x%08X' % (int(item[2], 16) + self.VPDBaseAddress)
+ IsByteArray, ArrayList = ByteArrayForamt(item[-1])
+ Skuinfo = item[1]
+ if len(GlobalData.gSkuids) == 1 :
+ Skuinfo = GlobalData.gSkuids[0]
if IsByteArray:
- ValueList[-1] = ' {'
- FileWrite(File, '|'.join(ValueList))
+ FileWrite(File, "%s | %s | %s | %s | %s" % (item[0], Skuinfo, Offset, item[3], '{'))
for Array in ArrayList:
FileWrite(File, Array)
else:
- FileWrite(File, item)
+ FileWrite(File, "%s | %s | %s | %s | %s" % (item[0], Skuinfo, Offset, item[3], item[-1]))
FileWrite(File, gSubSectionEnd)
FileWrite(File, gSectionEnd)