From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 4382621E1B763 for ; Thu, 21 Sep 2017 01:02:33 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Sep 2017 01:05:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,424,1500966000"; d="scan'208";a="1016891124" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga003.jf.intel.com with ESMTP; 21 Sep 2017 01:05:38 -0700 Received: from fmsmsx126.amr.corp.intel.com (10.18.125.43) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 21 Sep 2017 01:05:38 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX126.amr.corp.intel.com (10.18.125.43) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 21 Sep 2017 01:05:37 -0700 Received: from shsmsx152.ccr.corp.intel.com ([169.254.6.93]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.152]) with mapi id 14.03.0319.002; Thu, 21 Sep 2017 16:05:35 +0800 From: "Gao, Liming" To: "Zhu, Yonghong" , "edk2-devel@lists.01.org" Thread-Topic: [Patch] BaseTools: extend FFS alignment to 16M Thread-Index: AQHTMp8QXYkLLXPy/EWKtUeMASbmuaK++4uw Date: Thu, 21 Sep 2017 08:05:34 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E15BA95@SHSMSX152.ccr.corp.intel.com> References: <1505973671-21388-1-git-send-email-yonghong.zhu@intel.com> In-Reply-To: <1505973671-21388-1-git-send-email-yonghong.zhu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [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: , X-List-Received-Date: Thu, 21 Sep 2017 08:02:33 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao >-----Original Message----- >From: Zhu, Yonghong >Sent: Thursday, September 21, 2017 2:01 PM >To: edk2-devel@lists.01.org >Cc: Gao, Liming >Subject: [Patch] BaseTools: extend FFS alignment to 16M > >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 >--- > 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 > }; > > 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" > }; > > 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" > }; > >-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, 8388= 608, 16777216}; > > STATIC EFI_GUID mZeroGuid =3D {0}; > > STATIC EFI_GUID mEfiFfsSectionAlignmentPaddingGuid =3D >EFI_FFS_SECTION_ALIGNMENT_PADDING_GUID; > >@@ -142,11 +145,12 @@ Returns: > fprintf (stdout, " -x, --fixed Indicates that the file may n= ot be moved\n\ > from its present location.\n"); > fprintf (stdout, " -s, --checksum Indicates to calculate file c= hecksum.\n"); > fprintf (stdout, " -a FileAlign, --align FileAlign\n\ > FileAlign points to file alignment, which only su= pport\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 s= upport\n\ > the alignment scope 1~64K. It is specified togeth= er\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); > >- FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (Ff= sAlign ><< 3)); >+ //FfsAlign larger than 7, set FFS_ATTRIB_DATA_ALIGNMENT2 >+ if (FfsAlign < 8) { >+ FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | >(FfsAlign << 3)); >+ } else { >+ FfsFileHeader.Attributes =3D (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | >((FfsAlign & 0x7) << 3) | FFS_ATTRIB_DATA_ALIGNMENT2); >+ } > > // > // 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. > >-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 > are licensed and made available under the terms and conditions of the BSD >License > which accompanies this distribution. The full text of the license may be= found >at >@@ -462,61 +462,101 @@ Returns: > switch ((FfsFile->Attributes >> 3) & 0x07) { > > 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; > > 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; > > 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; > > 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; > > 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; > > 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; > > 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; > > 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; > > default: > break; > } >@@ -1058,11 +1098,11 @@ Returns: > > // > // Clear the alignment bits: these have become meaningless now that we >have > // adjusted the padding section. > // >- FfsFile->Attributes &=3D ~FFS_ATTRIB_DATA_ALIGNMENT; >+ FfsFile->Attributes &=3D ~(FFS_ATTRIB_DATA_ALIGNMENT | >FFS_ATTRIB_DATA_ALIGNMENT2); > > // > // Recalculate the FFS header checksum. Instead of setting Header and S= tate > // both to zero, set Header to (UINT8)(-State) so State preserves its o= riginal > // 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_REQUIRED", "AUTH_STATUS_VALID"}; > > 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" > }; > > // > // 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 s= upport\n\ >- the alignment scope 1~64K. It is specified in sam= e\n\ >+ the alignment scope 1~16M. It is specified in sam= e\n\ > order that the section file is input.\n"); > fprintf (stdout, " -v, --verbose Turn on verbose output with >informational messages.\n"); > fprintf (stdout, " -q, --quiet Disable all messages except k= ey message >and fatal error\n"); > fprintf (stdout, " -d, --debug level Enable debug messages, at inp= ut 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. > > @par Revision Reference: > Version 1.4. > >- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
>+ Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
> > This program and the accompanying materials are licensed and made >available > under the terms and conditions of the BSD License which accompanies thi= s > 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 > // > // FFS File Attributes. > // > #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/Source/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 = BSD >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 > > 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, >self.FileName, self.CurrentLineNumber) > AlignValue =3D self.__Token > > BuildNum =3D None > if self.__IsKeyword( "BUILD_NUM"): >@@ -2606,11 +2607,12 @@ class FdfParser(object): > else: > return False > > 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, >self.FileName, self.CurrentLineNumber) > AlignValue =3D self.__Token > > if not self.__GetCglSection(FfsFileObj, AlignValue): > self.SetFileBufferPos(OldPos) >@@ -2922,11 +2924,12 @@ class FdfParser(object): > if self.__IsKeyword("CheckSum", True): > CheckSum =3D True > > 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.FileNa= me, >self.CurrentLineNumber) > AlignValue =3D self.__Token > > if self.__IsToken("{"): > # Complex file rule expected >@@ -2986,11 +2989,12 @@ class FdfParser(object): > > if self.__IsKeyword("CheckSum", True): > CheckSum =3D True > > if self.__GetAlignment(): >- if self.__Token not in ("Auto", "8", "16", "32", "64", "1= 28", "512", "1K", >"4K", "32K" ,"64K"): >+ if self.__Token not in ("Auto", "8", "16", "32", "64", "1= 28", "512", "1K", >"4K", "32K" ,"64K", "128K", >+ "256K", "512K", "1M", "2M", "4M",= "8M", "16M"): > raise Warning("Incorrect alignment At Line ", self.Fi= leName, >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 PE3= 2 or TE >section ", self.FileName, self.CurrentLineNumber) > AlignValue =3D self.__Token > >@@ -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 > > 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 At Line ", sel= f.FileName, >self.CurrentLineNumber) > FvImageSectionObj.Alignment =3D self.__Token > > if self.__IsToken('|'): > FvImageSectionObj.FvFileExtension =3D self.__GetFileE= xtension() >@@ -3127,11 +3132,12 @@ class FdfParser(object): > if not self.__GetNextToken(): > raise Warning("expected Build number At Line ", self.= FileName, >self.CurrentLineNumber) > EfiSectionObj.BuildNum =3D self.__Token > > 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, >self.FileName, self.CurrentLineNumber) > if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D 'PE= 32') 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 > >diff --git a/BaseTools/Source/Python/GenFds/DataSection.py >b/BaseTools/Source/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 = BSD >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 / 0x100= 000) + 'M' > > 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/Source/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 = BSD >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 / 0x= 400) + 'K' >+ else: >+ Align =3D str (ImageObj.SectionAlignment / 0x= 100000) + 'M' > > 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, Modu= leName + '.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", "1= 28", "512", "1K", >"4K", "32K" ,"64K"): >+ if self.__Token not in ("Auto", "8", "16", "32", "64", "1= 28", "512", "1K", >"4K", "32K" ,"64K", "128K", >+ "256K", "512K", "1M", "2M", "4M",= "8M", "16M"): > raise Warning("Incorrect alignment '%s'" % self.__Tok= en, >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: > > if self.__IsKeyword( "CHECKSUM", True): > FfsFileObj.CheckSum =3D True > > 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, >self.FileName, self.CurrentLineNumber) > #For FFS, Auto is default option same to "" > if not self.__Token =3D=3D "Auto": > FfsFileObj.Alignment =3D self.__Token > >@@ -2895,11 +2897,12 @@ class FdfParser: > else: > return False > > 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, >self.FileName, self.CurrentLineNumber) > AlignValue =3D self.__Token > > BuildNum =3D None > if self.__IsKeyword( "BUILD_NUM"): >@@ -3184,11 +3187,12 @@ class FdfParser: > else: > return False > > 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, >self.FileName, self.CurrentLineNumber) > AlignValue =3D self.__Token > > if not self.__GetCglSection(FfsFileObj, AlignValue): > self.SetFileBufferPos(OldPos) >@@ -3775,11 +3779,12 @@ class FdfParser: > if self.__IsKeyword("CheckSum", True): > CheckSum =3D True > > 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, >self.FileName, self.CurrentLineNumber) > #For FFS, Auto is default option same to "" > if not self.__Token =3D=3D "Auto": > AlignValue =3D self.__Token > >@@ -3824,11 +3829,12 @@ class FdfParser: > if self.__IsKeyword("CheckSum", True): > CheckSum =3D True > > SectAlignment =3D "" > if self.__GetAlignment(): >- if self.__Token not in ("Auto", "8", "16", "32", "64", "1= 28", "512", "1K", >"4K", "32K" ,"64K"): >+ if self.__Token not in ("Auto", "8", "16", "32", "64", "1= 28", "512", "1K", >"4K", "32K" ,"64K", "128K", >+ "256K", "512K", "1M", "2M", "4M",= "8M", "16M"): > raise Warning("Incorrect alignment '%s'" % self.__Tok= en, >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 PE3= 2 or TE >section ", self.FileName, self.CurrentLineNumber) > SectAlignment =3D self.__Token > >@@ -3903,11 +3909,12 @@ class FdfParser: > if not self.__IsKeyword("FV"): > raise Warning("expected 'FV'", self.FileName, >self.CurrentLineNumber) > FvImageSectionObj.FvFileType =3D self.__Token > > 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, >self.FileName, self.CurrentLineNumber) > FvImageSectionObj.Alignment =3D self.__Token > > if self.__IsToken('|'): > FvImageSectionObj.FvFileExtension =3D self.__GetFileE= xtension() >@@ -3970,11 +3977,12 @@ class FdfParser: > if not self.__GetNextToken(): > raise Warning("expected Build number", self.FileName, >self.CurrentLineNumber) > EfiSectionObj.BuildNum =3D self.__Token > > 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, >self.FileName, self.CurrentLineNumber) > if self.__Token =3D=3D 'Auto' and (not SectionName =3D=3D 'PE= 32') 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 > >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 = BSD >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 '= PE32' 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' > > if not NoStrip: > FileBeforeStrip =3D os.path.join(self.OutputPath, Mod= uleName + >'.reloc') > if not os.path.exists(FileBeforeStrip) or \ > (os.path.getmtime(File) > os.path.getmtime(Fil= eBeforeStrip)): >@@ -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 / 0= x400) + 'K' >+ else: >+ self.Alignment =3D str (ImageObj.SectionAlignment / 0= x100000) + 'M' > > if not NoStrip: > FileBeforeStrip =3D os.path.join(self.OutputPath, ModuleN= ame + >'.reloc') > if not os.path.exists(FileBeforeStrip) or \ > (os.path.getmtime(GenSecInputFile) > >os.path.getmtime(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 / 0x100= 000) + "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/Source/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 = BSD >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, [FvFileN= ame], >'EFI_SECTION_FIRMWARE_VOLUME_IMAGE') > OutputFileList.append(OutputFile) > > # 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[0x= 2E]) & 0x1F) > # FvAlignmentValue is larger than or equal to 1K > if FvAlignmentValue >=3D 0x400: >- if FvAlignmentValue >=3D 0x10000: >- #The max alignment supported by FFS is 64= K. >- self.Alignment =3D "64K" >+ if FvAlignmentValue >=3D 0x100000: >+ #The max alignment supported by FFS is 16= M. >+ if FvAlignmentValue >=3D 0x1000000: >+ self.Alignment =3D "16M" >+ else: >+ self.Alignment =3D str(FvAlignmentVal= ue / 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/BaseTools/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 = BSD >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: > > @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", "= 128K", >"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) > > @staticmethod > def GenerateFfs(Output, Input, Type, Guid, Fixed=3DFalse, CheckSum=3D= False, >Align=3DNone, > SectionAlign=3DNone): > Cmd =3D ["GenFfs", "-t", Type, "-g", Guid] >- mFfsValidAlign =3D ["0", "8", "16", "128", "512", "1K", "4K", "32= K", "64K"] >+ mFfsValidAlign =3D ["0", "8", "16", "128", "512", "1K", "4K", "32= K", "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, '']: >-- >2.6.1.windows.1