Reviewed-by: Nate DeSimone <nathaniel.l.desim...@intel.com> -----Original Message----- From: Chiu, Chasel Sent: Monday, July 29, 2019 4:07 AM To: devel@edk2.groups.io Cc: Kubacki, Michael A <michael.a.kuba...@intel.com>; Desimone, Nathaniel L <nathaniel.l.desim...@intel.com>; Gao, Liming <liming....@intel.com> Subject: [PATCH 1/4] MinPlatformPkg: Auto configure Fsp*BaseAddress PCD
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1863 Add python script which will rebase FSP binary without patching platform DSC for Fsp*BaseAddress PCDs. Those base address PCD will be updated in FDF basing on flash map. Cc: Michael Kubacki <michael.a.kuba...@intel.com> Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> Cc: Liming Gao <liming....@intel.com> Signed-off-by: Chasel Chiu <chasel.c...@intel.com> --- Platform/Intel/MinPlatformPkg/Tools/Fsp/RebaseFspBinBaseAddress.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/Platform/Intel/MinPlatformPkg/Tools/Fsp/RebaseFspBinBaseAddress.py b/Platform/Intel/MinPlatformPkg/Tools/Fsp/RebaseFspBinBaseAddress.py new file mode 100644 index 0000000000..a8165b08e6 --- /dev/null +++ b/Platform/Intel/MinPlatformPkg/Tools/Fsp/RebaseFspBinBaseAddress.py @@ -0,0 +1,96 @@ +## @ RebaseFspBinBaseAddress.py +# +# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> # +SPDX-License-Identifier: BSD-2-Clause-Patent # + +import os +import sys +import re +import subprocess + +if len(sys.argv) not in [5,6]: + print ("RebaseFspBinBaseAddress.py - Error in number of arguments +received") + print ("Usage - RebaseFspBinBaseAddress.py <FlashMap file path> +<FspBinPkg Folder> <Fsp.fd file name>\ + <pad_offset for Fsp-S Base Address> <OPTIONAL SplitFspBin.py tool +path>") + exit(1) + +flashMapName = sys.argv[1] +fspBinPath = sys.argv[2] +fspBinFile = sys.argv[3] +fvOffset = int(sys.argv[4], 16) +fspBinFileRebased = "Fsp_Rebased.fd" +splitFspBinPath = os.path.join("edk2","IntelFsp2Pkg","Tools","SplitFspBin.py") + +if len(sys.argv) == 6: + splitFspBinPath = sys.argv[5] + +# +# Make sure argument passed or valid +# +if not os.path.exists(flashMapName): + print ("WARNING! " + str(flashMapName) + " is not found.") + exit(1) +fspBinFilePath = fspBinPath + os.sep + fspBinFile if not +os.path.exists(fspBinFilePath): + print ("WARNING! " + str(fspBinFilePath) + " is not found.") + exit(1) +if not os.path.exists(splitFspBinPath): + print ("WARNING! " + str(splitFspBinPath) + " is not found.") + exit(1) + +# +# Get the FSP-S / FSP-M-T FV Base Address from Flash Map # file = open +(flashMapName, "r") data = file.read () + +# Get the Flash Base Address +flashBase = int(data.split("FLASH_BASE")[1].split("=")[1].split()[0], +16) + +# Based on Build Target, select the section in the FlashMap file +flashmap = data + +# Get FSP-S & FSP-M & FSP-T offset & calculate the base for line in +flashmap.split("\n"): + if "PcdFlashFvFspSOffset" in line: + fspSBaseOffset = int(line.split("=")[1].split()[0], 16) + if "PcdFlashFvFspMOffset" in line: + fspMBaseOffset = int(line.split("=")[1].split()[0], 16) + if "PcdFlashFvFspTOffset" in line: + fspTBaseOffset = int(line.split("=")[1].split()[0], 16) +file.close() + +# +# Get FSP-M Size, in order to calculate the FSP-T Base. Used +SplitFspBin.py script # to dump the header, and get the ImageSize in +FSP-M section # pythontool = 'python' +if 'PYTHON_HOME' in os.environ: + pythontool = os.environ['PYTHON_HOME'] + os.sep + 'python' +Process = subprocess.Popen([pythontool, splitFspBinPath, +"info","-f",fspBinFilePath], stdout=subprocess.PIPE) Output = +Process.communicate()[0] FsptInfo = Output.rsplit(b"FSP_M", 1); for +line in FsptInfo[1].split(b"\n"): + if b"ImageSize" in line: + fspMSize = int(line.split(b"=")[1], 16) + break + +# Calculate FSP-S/M/T base address, to which re-base has to be done +fspSBaseAddress = flashBase + fspSBaseOffset + fvOffset fspMBaseAddress += flashBase + fspMBaseOffset fspTBaseAddress = flashBase + +fspTBaseOffset + +# +# Re-base FSP bin file to new address and save it as fspBinFileRebased +using SplitFspBin.py # rebaseArguments = fspBinFilePath + " -c s m t -b +" + str(hex(fspSBaseAddress).rstrip("L")) + " " + +str(hex(fspMBaseAddress).rstrip("L")) + " " + +str(hex(fspTBaseAddress).rstrip("L")) + " -o" + fspBinPath + " -n " + +fspBinFileRebased os.system(pythontool + " " + splitFspBinPath + " +rebase -f" + rebaseArguments) + +# +# Split FSP bin to FSP-S/M/T segments +# +splitArguments = fspBinPath + os.sep + fspBinFileRebased + " -o " + fspBinPath + " -n Fsp_Rebased.fd" +os.system(pythontool + " " + splitFspBinPath + " split -f" + +splitArguments) + +exit(0) -- 2.13.3.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#44641): https://edk2.groups.io/g/devel/message/44641 Mute This Topic: https://groups.io/mt/32640906/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-