diff options
| author | Stephen Cprek <smcprek@us.ibm.com> | 2013-10-23 09:41:49 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-25 13:26:55 -0500 |
| commit | 9cd34b6ba83aad88ba54aad529f1a46aa8f20189 (patch) | |
| tree | 724cafa90db89a42e36410336d2fe1e6dce3fe1c /src | |
| parent | 5d810f0d2954e068f8bf1dddb6741a843230cda3 (diff) | |
| download | blackbird-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>
Diffstat (limited to 'src')
| -rwxr-xr-x | src/build/buildpnor/buildpnor.pl | 27 | ||||
| -rw-r--r-- | src/build/buildpnor/defaultPnorLayout.xml | 3 | ||||
| -rwxr-xr-x | src/build/mkrules/hbfw/img/makefile | 16 | ||||
| -rw-r--r-- | src/usr/pnor/pnorrp.C | 17 |
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", |

