From: "Gao, Liming" <liming.gao@intel.com>
To: "Zhu, Yonghong" <yonghong.zhu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch] BaseTools: Fix VPD PCD Sub-section display bug
Date: Thu, 25 Oct 2018 07:29:08 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E35D0A7@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <1540292979-13700-1-git-send-email-yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Yonghong Zhu
> Sent: Tuesday, October 23, 2018 7:10 PM
> To: edk2-devel@lists.01.org
> Subject: [edk2] [Patch] 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>
> ---
> BaseTools/Source/Python/build/BuildReport.py | 46 ++++++++++------------------
> 1 file changed, 17 insertions(+), 29 deletions(-)
>
> diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
> index de8f0fb..ea98ef7 100644
> --- a/BaseTools/Source/Python/build/BuildReport.py
> +++ b/BaseTools/Source/Python/build/BuildReport.py
> @@ -124,10 +124,13 @@ 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.
> #
> # This function writes a string to the file object and a new line is appended
> # afterwards. It may optionally wraps the string for better readability.
> @@ -1399,10 +1402,13 @@ class PcdReport(object):
> FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType +
> ')', Value))
> else:
> 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]
> if OverrideValues:
> Keys = OverrideValues.keys()
> @@ -2015,39 +2021,18 @@ class FdReport(object):
> self.FdName = Fd.FdUiName
> self.BaseAddress = Fd.BaseAddress
> 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.
> #
> # This function generates report for the firmware device.
> #
> @@ -2063,27 +2048,30 @@ class FdReport(object):
> if len(self.FdRegionList) > 0:
> FileWrite(File, gSectionSep)
> 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)
>
>
>
> --
> 2.6.1.windows.1
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
prev parent reply other threads:[~2018-10-25 7:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-23 11:09 [Patch] BaseTools: Fix VPD PCD Sub-section display bug Yonghong Zhu
2018-10-25 7:29 ` Gao, Liming [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14E35D0A7@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox