summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Cprek <smcprek@us.ibm.com>2013-10-23 09:41:49 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-25 13:26:55 -0500
commit9cd34b6ba83aad88ba54aad529f1a46aa8f20189 (patch)
tree724cafa90db89a42e36410336d2fe1e6dce3fe1c
parent5d810f0d2954e068f8bf1dddb6741a843230cda3 (diff)
downloadblackbird-hostboot-9cd34b6ba83aad88ba54aad529f1a46aa8f20189.tar.gz
blackbird-hostboot-9cd34b6ba83aad88ba54aad529f1a46aa8f20189.zip
Add version header to extended image
Change-Id: Iac1cbae0d9c7ecf74cc1d5f4b28cf5a56f24b5f2 RTC: 80985 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6858 Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rwxr-xr-xsrc/build/buildpnor/buildpnor.pl27
-rw-r--r--src/build/buildpnor/defaultPnorLayout.xml3
-rwxr-xr-xsrc/build/mkrules/hbfw/img/makefile16
-rw-r--r--src/usr/pnor/pnorrp.C17
4 files changed, 55 insertions, 8 deletions
diff --git a/src/build/buildpnor/buildpnor.pl b/src/build/buildpnor/buildpnor.pl
index d0da7ad0d..4d0ee0465 100755
--- a/src/build/buildpnor/buildpnor.pl
+++ b/src/build/buildpnor/buildpnor.pl
@@ -215,6 +215,7 @@ sub loadPnorLayout
my $side = $sectionEl->{side}[0];
my $testonly = $sectionEl->{testonly}[0];
my $ecc = (exists $sectionEl->{ecc} ? "yes" : "no");
+ my $sha512Version = (exists $sectionEl->{sha512Version} ? "yes" : "no");
if (($emitTestSections == 0) && ($sectionEl->{testonly}[0] eq "yes"))
{
@@ -234,6 +235,7 @@ sub loadPnorLayout
$$i_pnorLayoutRef{sections}{$physicalOffset}{physicalRegionSize} = $physicalRegionSize;
$$i_pnorLayoutRef{sections}{$physicalOffset}{side} = $side;
$$i_pnorLayoutRef{sections}{$physicalOffset}{ecc} = $ecc;
+ $$i_pnorLayoutRef{sections}{$physicalOffset}{sha512Version} = $sha512Version;
}
@@ -334,22 +336,38 @@ sub createPnorImage
last;
}
- #ECC flag
+ # User data Flags
my $chip = 0;
my $compress = 0;
my $ecc = 0;
+ my $sha512Version = 0;
+
if( ($sectionHash{$key}{ecc} eq "yes") )
{
$ecc = 0x8000;
- };
+ }
+ if( ($sectionHash{$key}{sha512Version} eq "yes") )
+ {
+ $sha512Version = 0x80;
+ }
+
+ #First User Data Word
#[1:chip][1:compression][2:ecc]
- my $userflags0 = ($chip << 16)
- | ($compress << 8)
+ my $userflags0 = ($chip << 24)
+ | ($compress << 16)
| $ecc;
+
+ #Second User Data Word
+ #[1:sha512Version]
+ my $userflags1 = ($sha512Version << 24);
+
trace(1,"userflags0 = $userflags0");
+ trace(1,"userflags1 = $userflags1");
if ($g_ffsCmd eq "") {
trace(1, "$g_fpartCmd --target $i_pnorBinName --partition-offset $sideAOffset --user 0 --name $eyeCatch --value $userflags0");
my $Out = `$g_fpartCmd --target $i_pnorBinName --partition-offset $sideAOffset --user 0 --name $eyeCatch --value $userflags0`;
+ trace(1, "$g_fpartCmd --target $i_pnorBinName --partition-offset $sideAOffset --user 1 --name $eyeCatch --value $userflags1");
+ my $Out = `$g_fpartCmd --target $i_pnorBinName --partition-offset $sideAOffset --user 1 --name $eyeCatch --value $userflags1`;
}
$rc = $?;
if($rc)
@@ -358,7 +376,6 @@ sub createPnorImage
last;
}
-
#Trunc Partition
#f{fs,part} --target tuleta.pnor --partition-offset 0 --name HBI --trunc
if ($g_ffsCmd eq "") {
diff --git a/src/build/buildpnor/defaultPnorLayout.xml b/src/build/buildpnor/defaultPnorLayout.xml
index 58eafe112..f63d214bd 100644
--- a/src/build/buildpnor/defaultPnorLayout.xml
+++ b/src/build/buildpnor/defaultPnorLayout.xml
@@ -40,7 +40,7 @@ Layout Description
added to the partition table at <sideAOffset>
or <sideBOffset>
<testonly/> Indicates partition is used for internal
- testing only. Partition should be skipped
+ testing only. Partition should be skipped
in production environments.
<ecc/> Indicates Partition should be ECC protected
<sha512Version/> Indicates Partition uses SHA512 for
@@ -64,6 +64,7 @@ Layout Description
<eyeCatch>HBI</eyeCatch>
<physicalOffset>0x10000</physicalOffset>
<physicalRegionSize>0x500000</physicalRegionSize>
+ <sha512Version/>
<side>A</side> <!-- Choices: A, B -->
</section>
<section>
diff --git a/src/build/mkrules/hbfw/img/makefile b/src/build/mkrules/hbfw/img/makefile
index dcaf0ea25..94647f827 100755
--- a/src/build/mkrules/hbfw/img/makefile
+++ b/src/build/mkrules/hbfw/img/makefile
@@ -54,6 +54,9 @@ BASE_W_HEADER_ECC_IMAGE = hostboot.header.bin.ecc
BASE_ECC_IMAGE = hostboot.bin.ecc
EXT_PAD_IMAGE = hostboot_extended.bin.pad
EXT_ECC_IMAGE = hostboot_extended.bin.ecc
+EXT_ECC_HEADER_IMAGE = hostboot_extended.header.ecc.bin
+EXT_SHA_IMAGE = hostboot_extended.sha.bin
+EXT_HEADER_IMAGE = hostboot_extended.header.bin
TESTDATA = hbtestdata.bin
TESTDATA_ECC = hbtestdata.bin.ecc
ALL_HB_IMAGES = ${BASE_IMAGES} \
@@ -61,6 +64,8 @@ ALL_HB_IMAGES = ${BASE_IMAGES} \
${BASE_ECC_IMAGE} ${EXT_ECC_IMAGE} \
${BASE_W_HEADER_ECC_IMAGE} \
${EXT_PAD_IMAGE} \
+ ${EXT_SHA_IMAGE} ${EXT_HEADER_IMAGE} \
+ ${EXT_ECC_HEADER_IMAGE} \
${TESTDATA} ${TESTDATA_ECC}
cp_hbfiles: .SPECTARG
@@ -76,6 +81,13 @@ cp_hbfiles: .SPECTARG
# dd command will pad image up to the next 4K page
dd if=${EXT_IMAGE} of=${EXT_PAD_IMAGE} ibs=4k count=1280 conv=sync
ecc --inject ${EXT_PAD_IMAGE} --output ${EXT_ECC_IMAGE} --p8
+ # add version header w/ sha hash
+ echo -en VERSION\\0 > ${EXT_SHA_IMAGE}
+ sha512sum ${EXT_IMAGE} | awk '{print $$1}' | xxd -pr -r >> ${EXT_SHA_IMAGE}
+ dd if=${EXT_SHA_IMAGE} of=${EXT_HEADER_IMAGE} ibs=4k conv=sync
+ dd if=${EXT_SHA_IMAGE} of=${EXT_ECC_HEADER_IMAGE} ibs=4k conv=sync
+ cat ${EXT_IMAGE} >> ${EXT_HEADER_IMAGE}
+ cat ${EXT_ECC_IMAGE} >> ${EXT_ECC_HEADER_IMAGE}
# create data for a test partition in pnor
dd if=/dev/urandom of=${TESTDATA} bs=1 count=28K
ecc --inject ${TESTDATA} --output ${TESTDATA_ECC} --p8
@@ -105,8 +117,8 @@ PNOR_BUILD_SCRIPT = ${buildpnor.pl:P}
.tryinclude <${.PATH:Ffips_pnor.mk}>
#uncomment the below line to enable ECC in the extended image
-#HOSTBOOT_DEFAULT_SECTIONS = HBB=${BASE_W_HEADER_ECC_IMAGE},HBI=${EXT_ECC_IMAGE},HBRT=${HBRT_IMAGE},TEST=${TESTDATA_ECC}
-HOSTBOOT_DEFAULT_SECTIONS = HBB=${BASE_W_HEADER_ECC_IMAGE},HBI=${EXT_IMAGE},HBRT=${HBRT_IMAGE},TEST=${TESTDATA_ECC}
+#HOSTBOOT_DEFAULT_SECTIONS = HBB=${BASE_W_HEADER_ECC_IMAGE},HBI=${EXT_ECC_HEADER_IMAGE},HBRT=${HBRT_IMAGE},TEST=${TESTDATA_ECC}
+HOSTBOOT_DEFAULT_SECTIONS = HBB=${BASE_W_HEADER_ECC_IMAGE},HBI=${EXT_HEADER_IMAGE},HBRT=${HBRT_IMAGE},TEST=${TESTDATA_ECC}
HBFW_OBJPATH = ${.PATH:M*obj*}
diff --git a/src/usr/pnor/pnorrp.C b/src/usr/pnor/pnorrp.C
index dd782058f..3d859c48b 100644
--- a/src/usr/pnor/pnorrp.C
+++ b/src/usr/pnor/pnorrp.C
@@ -440,6 +440,7 @@ errlHndl_t PnorRP::readTOC()
//Walk through all the entries in the table and parse the data.
ffs_entry* cur_entry = (l_ffs_hdr->entries);
+
for(uint32_t i=0; i<l_ffs_hdr->entry_count; i++)
{
TRACUCOMP(g_trac_pnor, "PnorRp::readTOC: Entry %d, name=%s, pointer=0x%X", i, cur_entry->name, (uint64_t)cur_entry);
@@ -489,6 +490,22 @@ errlHndl_t PnorRP::readTOC()
iv_TOC[cur_side][secId].version = ffsUserData->verCheck;
iv_TOC[cur_side][secId].misc = ffsUserData->miscFlags;
+ TRACFCOMP(g_trac_pnor, "PnorRp::readTOC: User Data %s", cur_entry->name);
+ TRACFBIN(g_trac_pnor, "PnorRp::readTOC: Bin Dump",ffsUserData, sizeof(ffs_hb_user_t) );
+
+ if (iv_TOC[cur_side][secId].version == FFS_VERS_SHA512)
+ {
+ TRACFCOMP(g_trac_pnor, "PnorRp::readTOC: Incrementing Flash Address for SHA Header");
+ if (iv_TOC[cur_side][secId].integrity == FFS_INTEG_ECC_PROTECT)
+ {
+ iv_TOC[cur_side][secId].flashAddr += (PAGESIZE*9)/8;
+ }
+ else
+ {
+ iv_TOC[cur_side][secId].flashAddr += PAGESIZE;
+ }
+ }
+
if((iv_TOC[cur_side][secId].flashAddr + iv_TOC[cur_side][secId].size) > (l_ffs_hdr->block_count*PAGESIZE))
{
TRACFCOMP(g_trac_pnor, "E>PnorRp::readTOC: Partition(%s) at base address (0x%.8x) extends past end of flash device",
OpenPOWER on IntegriCloud