Skip to content

Commit

Permalink
IntelFsp2Pkg/SplitFspBin.py: Support rebasing 1.x binary.
Browse files Browse the repository at this point in the history
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1308

Support rebasing FSP 1.x binary.
FSP 1.x has single component in binary so not supported
by split command and rebase can be done with the same
command for rebasing FSP-T component in FSP 2.x image.

Test: both FSP 2.x (Kabylake) and FSP 1.x (BroadwellDE) binary
      can be rebased successfully.

Cc: Maurice Ma <[email protected]>
Cc: Nate DeSimone <[email protected]>
Cc: Star Zeng <[email protected]>
Signed-off-by: Chasel Chiu <[email protected]>
Reviewed-by: Star Zeng <[email protected]>
Reviewed-by: Nate DeSimone <[email protected]>
  • Loading branch information
ChaselChiu committed Jun 11, 2019
1 parent 4266624 commit 8349b86
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 30 deletions.
21 changes: 13 additions & 8 deletions IntelFsp2Pkg/Tools/SplitFspBin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## @ FspTool.py
#
# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
Expand All @@ -14,12 +14,12 @@
from ctypes import *

"""
This utility supports some operations for Intel FSP 2.0 image.
This utility supports some operations for Intel FSP 1.x/2.x image.
It supports:
- Display FSP 2.0 information header
- Split FSP 2.0 image into individual FSP-T/M/S/O component
- Rebase FSP 2.0 components to a different base address
- Generate FSP mapping C header file
- Display FSP 1.x/2.x information header
- Split FSP 2.x image into individual FSP-T/M/S/O component
- Rebase FSP 1.x/2.x components to a different base address
- Generate FSP 1.x/2.x mapping C header file
"""

CopyRightHeaderFile = """/*
Expand Down Expand Up @@ -500,8 +500,6 @@ def CheckFsp (self):

fih = None
for fsp in self.FspList:
if fsp.Fih.HeaderRevision < 3:
raise Exception("ERROR: FSP 1.x is not supported by this tool !")
if not fih:
fih = fsp.Fih
else:
Expand Down Expand Up @@ -713,6 +711,8 @@ def SplitFspBin (fspfile, outdir, nametemplate):
fd.ParseFsp ()

for fsp in fd.FspList:
if fsp.Fih.HeaderRevision < 3:
raise Exception("ERROR: FSP 1.x is not supported by the split command !")
ftype = fsp.Type
if not nametemplate:
nametemplate = fspfile
Expand Down Expand Up @@ -742,6 +742,11 @@ def RebaseFspBin (FspBinary, FspComponent, FspBase, OutputDir, OutputFile):

found = False
for fsp in fd.FspList:
# Is this FSP 1.x single binary?
if fsp.Fih.HeaderRevision < 3:
found = True
ftype = 'X'
break
ftype = fsp.Type.lower()
if ftype == fspcomp:
found = True
Expand Down
47 changes: 25 additions & 22 deletions IntelFsp2Pkg/Tools/UserManuals/SplitFspBinUserManual.md
Original file line number Diff line number Diff line change
@@ -1,68 +1,71 @@
# SplitFspBin.py is a python script to support some operations on Intel FSP 2.0 image.
# SplitFspBin.py is a python script to support some operations on Intel FSP 1.x/2.x image.

It supports:

- Split Intel FSP 2.0 image into individual FSP-T/M/S/O component
- Split Intel FSP 2.x image into individual FSP-T/M/S/O component

- Rebase Intel FSP 2.0 components to different base addresses
- Rebase Intel FSP 1.x/2.x components to different base addresses

- Generate Intel FSP 2.0 C header file
- Generate Intel FSP 1.x/2.x C header file

- Display Intel FSP 2.0 information header for each FSP component
- Display Intel FSP 1.x/2.x information header for each FSP component

## Split Intel FSP 2.0 image
## Split Intel FSP 2.x image

To split individual FSP component in Intel FSP 2.0 image, the following
FSP 1.x image is not supported by split command.
To split individual FSP component in Intel FSP 2.x image, the following
command can be used:

**python SplitFspBin.py split [-h] -f FSPBINARY [-o OUTPUTDIR] [-n NAMETEMPLATE]**

For example:
For example:

`python SplitFspBin.py split -f FSP.bin`

It will create FSP_T.bin, FSP_M.bin and FSP_S.bin in current directory.

## Rebase Intel FSP 2.0 components
## Rebase Intel FSP 1.x/2.x components

To rebase one or multiple FSP components in Intel FSP 2.0 image, the following
To rebase one or multiple FSP components in Intel FSP 1.x/2.x image, the following
command can be used:

**python SplitFspBin.py rebase [-h] -f FSPBINARY -c {t,m,s,o} [{t,m,s,o} ...] -b FSPBASE [FSPBASE ...] [-o OUTPUTDIR] [-n OUTPUTFILE]**

For example:
For example:

`python SplitFspBin.py rebase -f FSP.bin c t b 0xFFF00000 n FSP_new.bin`
`python SplitFspBin.py rebase -f FSP.bin -c t -b 0xFFF00000 -n FSP_new.bin`

It will rebase FSP-T component inside FSP.bin to new base 0xFFF00000 and save the
rebased Intel FSP 2.0 image into file FSP_new.bin.
rebased Intel FSP 2.x image into file FSP_new.bin.
For FSP 1.x image there is only one component in binary so above command also
works for FSP 1.x image.

`python SplitFspBin.py rebase -f FSP.bin c t m b 0xFFF00000 0xFEF80000 n FSP_new.bin`
`python SplitFspBin.py rebase -f FSP.bin -c t m -b 0xFFF00000 0xFEF80000 -n FSP_new.bin`

It will rebase FSP-T and FSP-M components inside FSP.bin to new base 0xFFF00000
and 0xFEF80000 respectively, and save the rebased Intel FSP 2.0 image into file
and 0xFEF80000 respectively, and save the rebased Intel FSP 2.x image into file
FSP_new.bin file.

## Generate Intel FSP 2.0 C header file
## Generate Intel FSP 1.x/2.x C header file

To generate Intel FSP 2.0 C header file, the following command can be used:
To generate Intel FSP 1.x/2.x C header file, the following command can be used:

**Python SplitFspBin.py genhdr [-h] -f FSPBINARY [-o OUTPUTDIR] [-n HFILENAME]**

For example:
For example:

`python SplitFspBin.py genhdr -f FSP.bin n FSP.h`
`python SplitFspBin.py genhdr -f FSP.bin -n FSP.h`

It will create the C header file FSP.h containing the image ID, revision, offset
and size for each individual FSP component.

## Display Intel FSP 2.0 information header
## Display Intel FSP 1.x/2.x information header

To display Intel FSP 2.0 information headers, the following command can be used:
To display Intel FSP 1.x/2.x information headers, the following command can be used:

**Python SplitFspBin.py info [-h] -f FSPBINARY**

For example:
For example:

`python SplitFspBin.py info -f FSP.bin`

Expand Down

0 comments on commit 8349b86

Please sign in to comment.