public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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


      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