From nobody Thu Dec 26 00:31:50 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1505973678659111.99471107705244; Wed, 20 Sep 2017 23:01:18 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 206C721E9461E; Wed, 20 Sep 2017 22:58:11 -0700 (PDT) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 42C702095BB65 for ; Wed, 20 Sep 2017 22:58:09 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Sep 2017 23:01:15 -0700 Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.121]) by fmsmga005.fm.intel.com with ESMTP; 20 Sep 2017 23:01:13 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,423,1500966000"; d="scan'208";a="153811433" From: Yonghong Zhu To: edk2-devel@lists.01.org Date: Thu, 21 Sep 2017 14:01:11 +0800 Message-Id: <1505973671-21388-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [edk2] [Patch] BaseTools: extend FFS alignment to 16M X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current FFS only supports 64KiB alignment for data, Per PI 1.6 requirement, we extend FFS alignment to 16M. Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yonghong Zhu Reviewed-by: Liming Gao --- BaseTools/Source/C/GenFfs/GenFfs.c | 19 +++++-- BaseTools/Source/C/GenFv/GenFvInternalLib.c | 60 ++++++++++++++++++= ---- BaseTools/Source/C/GenSec/GenSec.c | 5 +- BaseTools/Source/C/Include/Common/PiFirmwareFile.h | 3 +- BaseTools/Source/Python/Common/FdfParserLite.py | 20 +++++--- BaseTools/Source/Python/GenFds/DataSection.py | 6 ++- BaseTools/Source/Python/GenFds/EfiSection.py | 6 ++- BaseTools/Source/Python/GenFds/FdfParser.py | 24 ++++++--- BaseTools/Source/Python/GenFds/FfsInfStatement.py | 10 ++-- BaseTools/Source/Python/GenFds/Fv.py | 9 ++-- BaseTools/Source/Python/GenFds/FvImageSection.py | 20 +++++--- .../Source/Python/GenFds/GenFdsGlobalVariable.py | 8 +-- 12 files changed, 137 insertions(+), 53 deletions(-) diff --git a/BaseTools/Source/C/GenFfs/GenFfs.c b/BaseTools/Source/C/GenFfs= /GenFfs.c index eaef8a2..4ecfe99 100644 --- a/BaseTools/Source/C/GenFfs/GenFfs.c +++ b/BaseTools/Source/C/GenFfs/GenFfs.c @@ -48,18 +48,21 @@ STATIC CHAR8 *mFfsFileType[] =3D { "EFI_FV_FILETYPE_MM_CORE_STANDALONE" // 0x0F }; =20 STATIC CHAR8 *mAlignName[] =3D { "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", - "1K", "2K", "4K", "8K", "16K", "32K", "64K" + "1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", + "512K", "1M", "2M", "4M", "8M", "16M" }; =20 STATIC CHAR8 *mFfsValidAlignName[] =3D { - "8", "16", "128", "512", "1K", "4K", "32K", "64K" + "8", "16", "128", "512", "1K", "4K", "32K", "64K", "128K","256K", + "512K", "1M", "2M", "4M", "8M", "16M" }; =20 -STATIC UINT32 mFfsValidAlign[] =3D {0, 8, 16, 128, 512, 1024, 4096, 32768,= 65536}; +STATIC UINT32 mFfsValidAlign[] =3D {0, 8, 16, 128, 512, 1024, 4096, 32768,= 65536, 131072, 262144, + 524288, 1048576, 2097152, 4194304, 83886= 08, 16777216}; =20 STATIC EFI_GUID mZeroGuid =3D {0}; =20 STATIC EFI_GUID mEfiFfsSectionAlignmentPaddingGuid =3D EFI_FFS_SECTION_ALI= GNMENT_PADDING_GUID; =20 @@ -142,11 +145,12 @@ Returns: fprintf (stdout, " -x, --fixed Indicates that the file may no= t be moved\n\ from its present location.\n"); fprintf (stdout, " -s, --checksum Indicates to calculate file ch= ecksum.\n"); fprintf (stdout, " -a FileAlign, --align FileAlign\n\ FileAlign points to file alignment, which only sup= port\n\ - the following align: 1,2,4,8,16,128,512,1K,4K,32K,= 64K\n"); + the following align: 1,2,4,8,16,128,512,1K,4K,32K,= 64K\n\ + 128K,256K,512K,1M,2M,4M,8M,16M"); fprintf (stdout, " -i SectionFile, --sectionfile SectionFile\n\ Section file will be contained in this FFS file.\n= "); fprintf (stdout, " -n SectionAlign, --sectionalign SectionAlign\n\ SectionAlign points to section alignment, which su= pport\n\ the alignment scope 1~64K. It is specified togethe= r\n\ @@ -891,11 +895,16 @@ Returns: FfsFileHeader.Size[1] =3D (UINT8) ((FileSize & 0xFF00) >> 8); FfsFileHeader.Size[2] =3D (UINT8) ((FileSize & 0xFF0000) >> 16); } VerboseMsg ("the size of the generated FFS file is %u bytes", (unsigned)= FileSize); =20 - FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (Ffs= Align << 3)); + //FfsAlign larger than 7, set FFS_ATTRIB_DATA_ALIGNMENT2 + if (FfsAlign < 8) { + FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (F= fsAlign << 3)); + } else { + FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | ((= FfsAlign & 0x7) << 3) | FFS_ATTRIB_DATA_ALIGNMENT2); + } =20 // // Fill in checksums and state, these must be zero for checksumming // // FileHeader.IntegrityCheck.Checksum.Header =3D 0; diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source= /C/GenFv/GenFvInternalLib.c index 8072c01..01c862e 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c @@ -1,9 +1,9 @@ /** @file This file contains the internal functions required to generate a Firmware = Volume. =20 -Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.
Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
Portions Copyright (c) 2016 HP Development Company, L.P.
This program and the accompanying materials =20 are licensed and made available under the terms and conditions of the BSD = License =20 which accompanies this distribution. The full text of the license may be = found at =20 @@ -462,61 +462,101 @@ Returns: switch ((FfsFile->Attributes >> 3) & 0x07) { =20 case 0: // // 1 byte alignment + //if bit 1 have set, 128K byte alignmnet // - *Alignment =3D 0; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 17; + } else { + *Alignment =3D 0; + } break; =20 case 1: // // 16 byte alignment + //if bit 1 have set, 256K byte alignment // - *Alignment =3D 4; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 18; + } else { + *Alignment =3D 4; + } break; =20 case 2: // // 128 byte alignment + //if bit 1 have set, 512K byte alignment // - *Alignment =3D 7; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 19; + } else { + *Alignment =3D 7; + } break; =20 case 3: // // 512 byte alignment + //if bit 1 have set, 1M byte alignment // - *Alignment =3D 9; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 20; + } else { + *Alignment =3D 9; + } break; =20 case 4: // // 1K byte alignment + //if bit 1 have set, 2M byte alignment // - *Alignment =3D 10; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 21; + } else { + *Alignment =3D 10; + } break; =20 case 5: // // 4K byte alignment + //if bit 1 have set, 4M byte alignment // - *Alignment =3D 12; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 22; + } else { + *Alignment =3D 12; + } break; =20 case 6: // // 32K byte alignment + //if bit 1 have set , 8M byte alignment // - *Alignment =3D 15; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 23; + } else { + *Alignment =3D 15; + } break; =20 case 7: // // 64K byte alignment + //if bit 1 have set, 16M alignment // - *Alignment =3D 16; + if (FfsFile->Attributes & FFS_ATTRIB_DATA_ALIGNMENT2) { + *Alignment =3D 24; + } else { + *Alignment =3D 16; + } break; =20 default: break; } @@ -1058,11 +1098,11 @@ Returns: =20 // // Clear the alignment bits: these have become meaningless now that we h= ave // adjusted the padding section. // - FfsFile->Attributes &=3D ~FFS_ATTRIB_DATA_ALIGNMENT; + FfsFile->Attributes &=3D ~(FFS_ATTRIB_DATA_ALIGNMENT | FFS_ATTRIB_DATA_A= LIGNMENT2); =20 // // Recalculate the FFS header checksum. Instead of setting Header and St= ate // both to zero, set Header to (UINT8)(-State) so State preserves its or= iginal // value diff --git a/BaseTools/Source/C/GenSec/GenSec.c b/BaseTools/Source/C/GenSec= /GenSec.c index c0e4de2..6169ae2 100644 --- a/BaseTools/Source/C/GenSec/GenSec.c +++ b/BaseTools/Source/C/GenSec/GenSec.c @@ -72,11 +72,12 @@ STATIC CHAR8 *mCompressionTypeName[] =3D { "PI_= NONE", "PI_STD" }; #define EFI_GUIDED_SECTION_NONE 0x80 STATIC CHAR8 *mGUIDedSectionAttribue[] =3D { "NONE", "PROCESSING_REQ= UIRED", "AUTH_STATUS_VALID"}; =20 STATIC CHAR8 *mAlignName[] =3D { "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", - "1K", "2K", "4K", "8K", "16K", "32K", "64K" + "1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", + "512K", "1M", "2M", "4M", "8M", "16M" }; =20 // // Crc32 GUID section related definitions. // @@ -182,11 +183,11 @@ Returns: fprintf (stdout, " -j Number, --buildnumber Number\n\ Number is an integer value between 0 and 65535\n\ used in Ver section.\n"); fprintf (stdout, " --sectionalign SectionAlign\n\ SectionAlign points to section alignment, which su= pport\n\ - the alignment scope 1~64K. It is specified in same= \n\ + the alignment scope 1~16M. It is specified in same= \n\ order that the section file is input.\n"); fprintf (stdout, " -v, --verbose Turn on verbose output with in= formational messages.\n"); fprintf (stdout, " -q, --quiet Disable all messages except ke= y message and fatal error\n"); fprintf (stdout, " -d, --debug level Enable debug messages, at inpu= t debug level.\n"); fprintf (stdout, " --version Show program's version number = and exit.\n"); diff --git a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h b/BaseTools= /Source/C/Include/Common/PiFirmwareFile.h index 8c54021..133c88c 100644 --- a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h +++ b/BaseTools/Source/C/Include/Common/PiFirmwareFile.h @@ -2,11 +2,11 @@ The firmware file related definitions in PI. =20 @par Revision Reference: Version 1.4. =20 - Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
=20 This program and the accompanying materials are licensed and made availa= ble under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php @@ -63,10 +63,11 @@ typedef UINT8 EFI_FFS_FILE_STATE; #define EFI_FV_FILETYPE_FFS_PAD 0xf0 //=20 // FFS File Attributes. //=20 #define FFS_ATTRIB_LARGE_FILE 0x01 +#define FFS_ATTRIB_DATA_ALIGNMENT2 0x02 #define FFS_ATTRIB_FIXED 0x04 #define FFS_ATTRIB_DATA_ALIGNMENT 0x38 #define FFS_ATTRIB_CHECKSUM 0x40 // // FFS_FIXED_CHECKSUM is the checksum value used when the diff --git a/BaseTools/Source/Python/Common/FdfParserLite.py b/BaseTools/So= urce/Python/Common/FdfParserLite.py index 8e68a67..7d129bf 100644 --- a/BaseTools/Source/Python/Common/FdfParserLite.py +++ b/BaseTools/Source/Python/Common/FdfParserLite.py @@ -1,9 +1,9 @@ ## @file # parse FDF file # -# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -2338,11 +2338,12 @@ class FdfParser(object): else: return False =20 AlignValue =3D None if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) AlignValue =3D self.__Token =20 BuildNum =3D None if self.__IsKeyword( "BUILD_NUM"): @@ -2606,11 +2607,12 @@ class FdfParser(object): else: return False =20 AlignValue =3D None if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "= 1K", "4K", "32K" ,"64K"): + if self.__Token not in ("8", "16", "32", "64", "128", "512", "= 1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) AlignValue =3D self.__Token =20 if not self.__GetCglSection(FfsFileObj, AlignValue): self.SetFileBufferPos(OldPos) @@ -2922,11 +2924,12 @@ class FdfParser(object): if self.__IsKeyword("CheckSum", True): CheckSum =3D True =20 AlignValue =3D "" if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment At Line ", self.FileNam= e, self.CurrentLineNumber) AlignValue =3D self.__Token =20 if self.__IsToken("{"): # Complex file rule expected @@ -2986,11 +2989,12 @@ class FdfParser(object): =20 if self.__IsKeyword("CheckSum", True): CheckSum =3D True =20 if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", = "8M", "16M"): raise Warning("Incorrect alignment At Line ", self.Fil= eName, self.CurrentLineNumber) if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D = 'PE32') and (not SectionName =3D=3D 'TE'): raise Warning("Auto alignment can only be used in PE32= or TE section ", self.FileName, self.CurrentLineNumber) AlignValue =3D self.__Token =20 @@ -3060,11 +3064,12 @@ class FdfParser(object): if not self.__IsKeyword("FV"): raise Warning("expected 'FV' At Line ", self.FileName,= self.CurrentLineNumber) FvImageSectionObj.FvFileType =3D self.__Token =20 if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4= M", "8M", "16M"): raise Warning("Incorrect alignment At Line ", self= .FileName, self.CurrentLineNumber) FvImageSectionObj.Alignment =3D self.__Token =20 if self.__IsToken('|'): FvImageSectionObj.FvFileExtension =3D self.__GetFileEx= tension() @@ -3127,11 +3132,12 @@ class FdfParser(object): if not self.__GetNextToken(): raise Warning("expected Build number At Line ", self.F= ileName, self.CurrentLineNumber) EfiSectionObj.BuildNum =3D self.__Token =20 if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D 'PE3= 2') and (not SectionName =3D=3D 'TE'): raise Warning("Auto alignment can only be used in PE32 or = TE section ", self.FileName, self.CurrentLineNumber) EfiSectionObj.Alignment =3D self.__Token =20 diff --git a/BaseTools/Source/Python/GenFds/DataSection.py b/BaseTools/Sour= ce/Python/GenFds/DataSection.py index ba3677e..78c0af4 100644 --- a/BaseTools/Source/Python/GenFds/DataSection.py +++ b/BaseTools/Source/Python/GenFds/DataSection.py @@ -1,9 +1,9 @@ ## @file # process data section generation # -# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -77,12 +77,14 @@ class DataSection (DataSectionClassObject): #Get PE Section alignment when align is set to AUTO if self.Alignment =3D=3D 'Auto' and self.SecType in ('TE', 'PE32'): ImageObj =3D PeImageClass (Filename) if ImageObj.SectionAlignment < 0x400: self.Alignment =3D str (ImageObj.SectionAlignment) - else: + elif ImageObj.SectionAlignment < 0x100000: self.Alignment =3D str (ImageObj.SectionAlignment / 0x400)= + 'K' + else: + self.Alignment =3D str (ImageObj.SectionAlignment / 0x1000= 00) + 'M' =20 NoStrip =3D True if self.SecType in ('TE', 'PE32'): if self.KeepReloc !=3D None: NoStrip =3D self.KeepReloc diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Sourc= e/Python/GenFds/EfiSection.py index 09fb28f..7da3c1e 100644 --- a/BaseTools/Source/Python/GenFds/EfiSection.py +++ b/BaseTools/Source/Python/GenFds/EfiSection.py @@ -1,9 +1,9 @@ ## @file # process rule section generation # -# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -229,12 +229,14 @@ class EfiSection (EfiSectionClassObject): #Get PE Section alignment when align is set to AUTO if self.Alignment =3D=3D 'Auto' and (SectionType =3D= =3D 'PE32' or SectionType =3D=3D 'TE'): ImageObj =3D PeImageClass (File) if ImageObj.SectionAlignment < 0x400: Align =3D str (ImageObj.SectionAlignment) - else: + elif ImageObj.SectionAlignment < 0x100000: Align =3D str (ImageObj.SectionAlignment / 0x4= 00) + 'K' + else: + Align =3D str (ImageObj.SectionAlignment / 0x1= 00000) + 'M' =20 if File[(len(File)-4):] =3D=3D '.efi': MapFile =3D File.replace('.efi', '.map') if os.path.exists(MapFile): CopyMapFile =3D os.path.join(OutputPath, Modul= eName + '.map') diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source= /Python/GenFds/FdfParser.py index 8f49f9f..499d0a6 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -2765,11 +2765,12 @@ class FdfParser: FfsFileObj.FileName =3D [] FfsFileObj.SubAlignment =3D [] while True: AlignValue =3D None if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", = "8M", "16M"): raise Warning("Incorrect alignment '%s'" % self.__Toke= n, self.FileName, self.CurrentLineNumber) #For FFS, Auto is default option same to "" if not self.__Token =3D=3D "Auto": AlignValue =3D self.__Token if not self.__GetNextToken(): @@ -2824,11 +2825,12 @@ class FdfParser: =20 if self.__IsKeyword( "CHECKSUM", True): FfsFileObj.CheckSum =3D True =20 if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) #For FFS, Auto is default option same to "" if not self.__Token =3D=3D "Auto": FfsFileObj.Alignment =3D self.__Token =20 @@ -2895,11 +2897,12 @@ class FdfParser: else: return False =20 AlignValue =3D None if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) AlignValue =3D self.__Token =20 BuildNum =3D None if self.__IsKeyword( "BUILD_NUM"): @@ -3184,11 +3187,12 @@ class FdfParser: else: return False =20 AlignValue =3D None if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "= 1K", "4K", "32K" ,"64K"): + if self.__Token not in ("8", "16", "32", "64", "128", "512", "= 1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) AlignValue =3D self.__Token =20 if not self.__GetCglSection(FfsFileObj, AlignValue): self.SetFileBufferPos(OldPos) @@ -3775,11 +3779,12 @@ class FdfParser: if self.__IsKeyword("CheckSum", True): CheckSum =3D True =20 AlignValue =3D "" if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) #For FFS, Auto is default option same to "" if not self.__Token =3D=3D "Auto": AlignValue =3D self.__Token =20 @@ -3824,11 +3829,12 @@ class FdfParser: if self.__IsKeyword("CheckSum", True): CheckSum =3D True =20 SectAlignment =3D "" if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "12= 8", "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", = "8M", "16M"): raise Warning("Incorrect alignment '%s'" % self.__Toke= n, self.FileName, self.CurrentLineNumber) if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D = 'PE32') and (not SectionName =3D=3D 'TE'): raise Warning("Auto alignment can only be used in PE32= or TE section ", self.FileName, self.CurrentLineNumber) SectAlignment =3D self.__Token =20 @@ -3903,11 +3909,12 @@ class FdfParser: if not self.__IsKeyword("FV"): raise Warning("expected 'FV'", self.FileName, self.Cur= rentLineNumber) FvImageSectionObj.FvFileType =3D self.__Token =20 if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4= M", "8M", "16M"): raise Warning("Incorrect alignment '%s'" % self.__= Token, self.FileName, self.CurrentLineNumber) FvImageSectionObj.Alignment =3D self.__Token =20 if self.__IsToken('|'): FvImageSectionObj.FvFileExtension =3D self.__GetFileEx= tension() @@ -3970,11 +3977,12 @@ class FdfParser: if not self.__GetNextToken(): raise Warning("expected Build number", self.FileName, = self.CurrentLineNumber) EfiSectionObj.BuildNum =3D self.__Token =20 if self.__GetAlignment(): - if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", = "512", "1K", "4K", "32K" ,"64K", "128K", + "256K", "512K", "1M", "2M", "4M", "8M"= , "16M"): raise Warning("Incorrect alignment '%s'" % self.__Token, s= elf.FileName, self.CurrentLineNumber) if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D 'PE3= 2') and (not SectionName =3D=3D 'TE'): raise Warning("Auto alignment can only be used in PE32 or = TE section ", self.FileName, self.CurrentLineNumber) EfiSectionObj.Alignment =3D self.__Token =20 diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/= Source/Python/GenFds/FfsInfStatement.py index c61c227..958cecf 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -1,9 +1,9 @@ ## @file # process FFS generation from INF statement # -# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# Copyright (c) 2014-2016 Hewlett-Packard Development Company, L.P.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at @@ -729,12 +729,14 @@ class FfsInfStatement(FfsInfStatementClassObject): #Get PE Section alignment when align is set to AUTO if self.Alignment =3D=3D 'Auto' and (SectionType =3D=3D 'P= E32' or SectionType =3D=3D 'TE'): ImageObj =3D PeImageClass (File) if ImageObj.SectionAlignment < 0x400: self.Alignment =3D str (ImageObj.SectionAlignment) - else: + elif ImageObj.SectionAlignment < 0x100000: self.Alignment =3D str (ImageObj.SectionAlignment = / 0x400) + 'K' + else: + self.Alignment =3D str (ImageObj.SectionAlignment = / 0x100000) + 'M' =20 if not NoStrip: FileBeforeStrip =3D os.path.join(self.OutputPath, Modu= leName + '.reloc') if not os.path.exists(FileBeforeStrip) or \ (os.path.getmtime(File) > os.path.getmtime(File= BeforeStrip)): @@ -768,12 +770,14 @@ class FfsInfStatement(FfsInfStatementClassObject): #Get PE Section alignment when align is set to AUTO if self.Alignment =3D=3D 'Auto' and (SectionType =3D=3D 'PE32'= or SectionType =3D=3D 'TE'): ImageObj =3D PeImageClass (GenSecInputFile) if ImageObj.SectionAlignment < 0x400: self.Alignment =3D str (ImageObj.SectionAlignment) - else: + elif ImageObj.SectionAlignment < 0x100000: self.Alignment =3D str (ImageObj.SectionAlignment / 0x= 400) + 'K' + else: + self.Alignment =3D str (ImageObj.SectionAlignment / 0x= 100000) + 'M' =20 if not NoStrip: FileBeforeStrip =3D os.path.join(self.OutputPath, ModuleNa= me + '.reloc') if not os.path.exists(FileBeforeStrip) or \ (os.path.getmtime(GenSecInputFile) > os.path.getmti= me(FileBeforeStrip)): diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python= /GenFds/Fv.py index f6ccb59..4b03adc 100644 --- a/BaseTools/Source/Python/GenFds/Fv.py +++ b/BaseTools/Source/Python/GenFds/Fv.py @@ -194,13 +194,16 @@ class FV (FvClassObject): FvHeaderBuffer =3D FvFileObj.read(0x48) # FV alignment position. FvAlignmentValue =3D 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F) # FvAlignmentValue is larger than or equal to 1K if FvAlignmentValue >=3D 0x400: - if FvAlignmentValue >=3D 0x10000: - #The max alignment supported by FFS is 64K. - self.FvAlignment =3D "64K" + if FvAlignmentValue >=3D 0x100000: + #The max alignment supported by FFS is 16M. + if FvAlignmentValue >=3D 0x1000000: + self.FvAlignment =3D "16M" + else: + self.FvAlignment =3D str(FvAlignmentValue / 0x1000= 00) + "M" else: self.FvAlignment =3D str (FvAlignmentValue / 0x400) + = "K" else: # FvAlignmentValue is less than 1K self.FvAlignment =3D str (FvAlignmentValue) diff --git a/BaseTools/Source/Python/GenFds/FvImageSection.py b/BaseTools/S= ource/Python/GenFds/FvImageSection.py index 5989978..68f17c3 100644 --- a/BaseTools/Source/Python/GenFds/FvImageSection.py +++ b/BaseTools/Source/Python/GenFds/FvImageSection.py @@ -1,9 +1,9 @@ ## @file # process FV image section generation # -# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -78,13 +78,16 @@ class FvImageSection(FvImageSectionClassObject): GenFdsGlobalVariable.GenerateSection(OutputFile, [FvFileNa= me], 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE') OutputFileList.append(OutputFile) =20 # MaxFvAlignment is larger than or equal to 1K if MaxFvAlignment >=3D 0x400: - if MaxFvAlignment >=3D 0x10000: - #The max alignment supported by FFS is 64K. - self.Alignment =3D "64K" + if MaxFvAlignment >=3D 0x100000: + #The max alignment supported by FFS is 16M. + if MaxFvAlignment >=3D1000000: + self.Alignment =3D "16M" + else: + self.Alignment =3D str(MaxFvAlignment / 0x100000) = + "M" else: self.Alignment =3D str (MaxFvAlignment / 0x400) + "K" else: # MaxFvAlignment is less than 1K self.Alignment =3D str (MaxFvAlignment) @@ -115,13 +118,16 @@ class FvImageSection(FvImageSectionClassObject): FvHeaderBuffer =3D FvFileObj.read(0x48) # FV alignment position. FvAlignmentValue =3D 1 << (ord (FvHeaderBuffer[0x2= E]) & 0x1F) # FvAlignmentValue is larger than or equal to 1K if FvAlignmentValue >=3D 0x400: - if FvAlignmentValue >=3D 0x10000: - #The max alignment supported by FFS is 64K. - self.Alignment =3D "64K" + if FvAlignmentValue >=3D 0x100000: + #The max alignment supported by FFS is 16M. + if FvAlignmentValue >=3D 0x1000000: + self.Alignment =3D "16M" + else: + self.Alignment =3D str(FvAlignmentValu= e / 0x100000) + "M" else: self.Alignment =3D str (FvAlignmentValue /= 0x400) + "K" else: # FvAlignmentValue is less than 1K self.Alignment =3D str (FvAlignmentValue) diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseT= ools/Source/Python/GenFds/GenFdsGlobalVariable.py index d02befe..83996be 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -1,9 +1,9 @@ ## @file # Global variables for GenFds # -# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -418,20 +418,22 @@ class GenFdsGlobalVariable: =20 @staticmethod def GetAlignment (AlignString): if AlignString =3D=3D None: return 0 - if AlignString in ("1K", "2K", "4K", "8K", "16K", "32K", "64K"): + if AlignString in ("1K", "2K", "4K", "8K", "16K", "32K", "64K", "1= 28K", "256K", "512K"): return int (AlignString.rstrip('K')) * 1024 + elif AlignString in ("1M", "2M", "4M", "8M", "16M"): + return int (AlignString.rstrip('M')) * 1024 * 1024 else: return int (AlignString) =20 @staticmethod def GenerateFfs(Output, Input, Type, Guid, Fixed=3DFalse, CheckSum=3DF= alse, Align=3DNone, SectionAlign=3DNone): Cmd =3D ["GenFfs", "-t", Type, "-g", Guid] - mFfsValidAlign =3D ["0", "8", "16", "128", "512", "1K", "4K", "32K= ", "64K"] + mFfsValidAlign =3D ["0", "8", "16", "128", "512", "1K", "4K", "32K= ", "64K", "128K", "256K", "512K", "1M", "2M", "4M", "8M", "16M"] if Fixed =3D=3D True: Cmd +=3D ["-x"] if CheckSum: Cmd +=3D ["-s"] if Align not in [None, '']: --=20 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel