Cover the case that .fv file in the [Binaries] section.

Cc: Liming Gao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <[email protected]>
---
 BaseTools/Source/Python/GenFds/FvImageSection.py | 27 +++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/BaseTools/Source/Python/GenFds/FvImageSection.py 
b/BaseTools/Source/Python/GenFds/FvImageSection.py
index b577de2..748d02f 100644
--- a/BaseTools/Source/Python/GenFds/FvImageSection.py
+++ b/BaseTools/Source/Python/GenFds/FvImageSection.py
@@ -58,14 +58,39 @@ class FvImageSection(FvImageSectionClassObject):
             if IsSect :
                 return FileList, self.Alignment
 
             Num = SecNum
 
-            for FileName in FileList:
+            MaxFvAlignment = 0
+            for FvFileName in FileList:
+                FvAlignmentValue = 0
+                if os.path.isfile(FvFileName):
+                    FvFileObj = open (FvFileName,'r+b')
+                    FvFileObj.seek(0)
+                    # PI FvHeader is 0x48 byte
+                    FvHeaderBuffer = FvFileObj.read(0x48)
+                    # FV alignment position.
+                    FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
+                    FvFileObj.close()
+                if FvAlignmentValue > MaxFvAlignment:
+                    MaxFvAlignment = FvAlignmentValue
+
                 OutputFile = os.path.join(OutputPath, ModuleName + 'SEC' + Num 
+ Ffs.SectionSuffix.get("FV_IMAGE"))
                 GenFdsGlobalVariable.GenerateSection(OutputFile, [FvFileName], 
'EFI_SECTION_FIRMWARE_VOLUME_IMAGE')
                 OutputFileList.append(OutputFile)
+
+            # MaxFvAlignment is larger than or equal to 1K
+            if MaxFvAlignment >= 0x400:
+                if MaxFvAlignment >= 0x10000:
+                    #The max alignment supported by FFS is 64K.
+                    self.Alignment = "64K"
+                else:
+                    self.Alignment = str (MaxFvAlignment / 0x400) + "K"
+            else:
+                # MaxFvAlignment is less than 1K
+                self.Alignment = str (MaxFvAlignment)
+
             return OutputFileList, self.Alignment
         #
         # Generate Fv
         #
         if self.FvName != None:
-- 
2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to