diff options
-rwxr-xr-x | src/build/buildpnor/buildpnor.pl | 26 | ||||
-rw-r--r-- | src/include/usr/isteps/istep21list.H | 1 | ||||
-rw-r--r-- | src/include/usr/pnor/pnor_const.H | 2 | ||||
-rw-r--r-- | src/usr/isteps/istep20/call_host_load_payload.C | 27 | ||||
-rw-r--r-- | src/usr/pnor/common/ffs_hb.H | 6 | ||||
-rw-r--r-- | src/usr/pnor/pnor_utils.C | 3 | ||||
-rw-r--r-- | src/usr/pnor/pnor_utils.H | 2 | ||||
-rw-r--r-- | src/usr/pnor/pnorrp.C | 4 | ||||
-rw-r--r-- | src/usr/pnor/runtime/rt_pnor.C | 5 |
9 files changed, 24 insertions, 52 deletions
diff --git a/src/build/buildpnor/buildpnor.pl b/src/build/buildpnor/buildpnor.pl index 7284c22e5..07803cc49 100755 --- a/src/build/buildpnor/buildpnor.pl +++ b/src/build/buildpnor/buildpnor.pl @@ -216,14 +216,6 @@ sub loadPnorLayout my $sha512perEC = (exists $sectionEl->{sha512perEC} ? "yes" : "no"); my $preserved = (exists $sectionEl->{preserved} ? "yes" : "no"); my $readOnly = (exists $sectionEl->{readOnly} ? "yes" : "no"); - my $xz = ""; - my $xzSize = 0; - if ((exists $sectionEl->{compressed}) && - ($sectionEl->{compressed}[0]->{algorithm}[0] eq "xz")) - { - $xz = "xz"; - $xzSize = $sectionEl->{compressed}[0]->{uncompressedSize}[0]; - } if (($testRun == 0) && ($sectionEl->{testonly}[0] eq "yes")) { next; @@ -244,8 +236,6 @@ sub loadPnorLayout $$i_pnorLayoutRef{sections}{$physicalOffset}{sha512perEC} = $sha512perEC; $$i_pnorLayoutRef{sections}{$physicalOffset}{preserved} = $preserved; $$i_pnorLayoutRef{sections}{$physicalOffset}{readOnly} = $readOnly; - $$i_pnorLayoutRef{sections}{$physicalOffset}{compressed}{algorithm} = $xz; - $$i_pnorLayoutRef{sections}{$physicalOffset}{compressed}{uncompressedSize} = $xzSize; #store the physical offsets of each section in a hash, so, it is easy #to search physicalOffsets based on the name of the section (eyecatch) @@ -380,7 +370,6 @@ sub addUserData # User data Flags based on FFS entry user data (ffs_hb_user_t) my $chip = 0; my $compressType = 0; - my $compressSize = 0; my $dataInteg = 0; my $verCheck = 0; my $miscFlags = 0; @@ -401,13 +390,6 @@ sub addUserData $verCheck = 0x40; } - # Compression Flag - if( ($i_sectionHash{$i_key}{compressed}{algorithm} eq "xz") ) - { - $compressType = 0x80; - $compressSize = $i_sectionHash{$i_key}{compressed}{uncompressedSize}; - } - # Misc Flags if( ($i_sectionHash{$i_key}{preserved} eq "yes") ) { @@ -429,10 +411,6 @@ sub addUserData my $userflags1 = ($verCheck << 24) | ($miscFlags << 16); - #Third User Data Word - #[1,2:compressSize] - my $userflags2 = hex($compressSize); - trace(2, "$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 0 --name $eyeCatch --value userflags0=$userflags0"); system("$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 0 --name $eyeCatch --value $userflags0"); die "ERROR: $this_func: Call to add userdata to $eyeCatch failed. Aborting!" if($?); @@ -440,10 +418,6 @@ sub addUserData trace(2, "$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 1 --name $eyeCatch --value userflags1=$userflags1"); system("$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 1 --name $eyeCatch --value $userflags1"); die "ERROR: $this_func: Call to add userdata to $eyeCatch failed. Aborting!" if($?); - - trace(2, "$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 2 --name $eyeCatch --value userflags2=$userflags2"); - system("$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --user 2 --name $eyeCatch --value $userflags2"); - die "ERROR: $this_func: Call to add userdata to $eyeCatch failed. Aborting!" if($?); } ################################################################################ diff --git a/src/include/usr/isteps/istep21list.H b/src/include/usr/isteps/istep21list.H index c977b951e..b5aa22fb8 100644 --- a/src/include/usr/isteps/istep21list.H +++ b/src/include/usr/isteps/istep21list.H @@ -122,7 +122,6 @@ const DepModInfo g_istep21Dependancies = { DEP_LIB(libistep21.so), DEP_LIB(libdevtree.so), DEP_LIB(libruntime.so), - DEP_LIB(libxz.so), NULL } }; diff --git a/src/include/usr/pnor/pnor_const.H b/src/include/usr/pnor/pnor_const.H index 88f0b8ab4..1dd598085 100644 --- a/src/include/usr/pnor/pnor_const.H +++ b/src/include/usr/pnor/pnor_const.H @@ -85,8 +85,6 @@ struct SectionInfo_t bool sha512Version; /**< Version Checking */ bool sha512perEC; /**< Version Checking perEC */ bool readOnly; /**< Section is read only */ - bool xzCompressed; /**< Section is XZ compressed */ - uint32_t xzSize; /**< Size of uncompressed partition in bytes */ }; /** diff --git a/src/usr/isteps/istep20/call_host_load_payload.C b/src/usr/isteps/istep20/call_host_load_payload.C index acea38385..83254264b 100644 --- a/src/usr/isteps/istep20/call_host_load_payload.C +++ b/src/usr/isteps/istep20/call_host_load_payload.C @@ -152,8 +152,25 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section, return err; } - uint32_t uncompressedPayloadSize = pnorSectionInfo.xzCompressed ? - pnorSectionInfo.xzSize : pnorSectionInfo.size; + // XZ repository: http:git.tukaani.org/xz.git + // Header specifics can be found in xz/doc/xz-file-format.txt + const uint8_t HEADER_MAGIC[]= { 0xFD, '7', 'z', 'X', 'Z', 0x00 }; + uint8_t* l_pnor_header = reinterpret_cast<uint8_t *>(pnorSectionInfo.vaddr); + + bool l_pnor_is_XZ_compressed = (0 == memcmp(l_pnor_header, + HEADER_MAGIC, sizeof(HEADER_MAGIC))); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "load_pnor_section: is XZ_compressed: %d", + l_pnor_is_XZ_compressed); + + // This assumes that the maximum decompression ratio will always be less + // than 1:16 (compressed:uncompressed). This works because XZ compression + // is usually 14.1%, the decompressor does not need the exact size, and + // we have all of mainstore memory at this point. + uint32_t uncompressedPayloadSize = l_pnor_is_XZ_compressed ? + (pnorSectionInfo.size * 16) : pnorSectionInfo.size; + const uint32_t originalPayloadSize = pnorSectionInfo.size; @@ -169,7 +186,7 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section, if ( Util::isSimicsRunning() ) { //TODO RTC 143500 - if(pnorSectionInfo.xzCompressed) + if(l_pnor_is_XZ_compressed) { TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "If you are running simics, and have xz compressed ", @@ -197,7 +214,7 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section, printk( "\r" ); #endif - if(!pnorSectionInfo.xzCompressed) + if(!l_pnor_is_XZ_compressed) { // Load the data block by block and update the progress bar. const uint32_t BLOCK_SIZE = 4096; @@ -221,7 +238,7 @@ static errlHndl_t load_pnor_section(PNOR::SectionId i_section, } } - if(pnorSectionInfo.xzCompressed) + if(l_pnor_is_XZ_compressed) { struct xz_buf b; struct xz_dec *s; diff --git a/src/usr/pnor/common/ffs_hb.H b/src/usr/pnor/common/ffs_hb.H index a7f579129..62e2ad785 100644 --- a/src/usr/pnor/common/ffs_hb.H +++ b/src/usr/pnor/common/ffs_hb.H @@ -52,8 +52,7 @@ enum FFS_CHIPSEL_UNUSED = 0xFF, /**< Chip select not used */ /* Compression : 1 byte */ - FFS_COMPRESS_XZ = 0x80, /**< Section is XZ compressed */ - FFS_COMPRESS_UNUSED = 0x7F, /**< Compression not used */ + FFS_COMPRESS_UNUSED = 0xFF, /**< Compression not used */ /* Data Integrity : 2 bytes */ FFS_INTEG_ECC_PROTECT = 0x8000, /**< Data Integrity: ECC protected */ @@ -83,8 +82,7 @@ struct ffs_hb_user_t{ uint8_t verCheck; /**< Indicates Version check type */ uint8_t miscFlags; /**< Misc Partition related Flags */ uint8_t freeMisc[2]; /**< Unused Miscellaneious Info */ - uint32_t decompressSize; /**< Size after data is uncompressed in bytes */ - uint32_t freeUser[12]; /**< Unused User Data */ + uint32_t freeUser[13]; /**< Unused User Data */ } PACKED; diff --git a/src/usr/pnor/pnor_utils.C b/src/usr/pnor/pnor_utils.C index 96ab528ee..1171c53fc 100644 --- a/src/usr/pnor/pnor_utils.C +++ b/src/usr/pnor/pnor_utils.C @@ -314,9 +314,6 @@ void PNOR::parseEntries (ffs_hdr* i_ffs_hdr, io_TOC[secId].integrity = ffsUserData->dataInteg; io_TOC[secId].version = ffsUserData->verCheck; io_TOC[secId].misc = ffsUserData->miscFlags; - io_TOC[secId].compress = ffsUserData->compressType; - io_TOC[secId].xzDecompressSize = - (ffsUserData->decompressSize); if((io_TOC[secId].flashAddr + io_TOC[secId].size) > (i_ffs_hdr->block_count*PAGESIZE)) { diff --git a/src/usr/pnor/pnor_utils.H b/src/usr/pnor/pnor_utils.H index daff13c3b..94109044d 100644 --- a/src/usr/pnor/pnor_utils.H +++ b/src/usr/pnor/pnor_utils.H @@ -116,8 +116,6 @@ struct SectionData_t { uint8_t version; /**< Version Checking */ uint16_t integrity; /**< Data Integrity */ uint8_t misc; /**< Misc Flags */ - uint8_t compress; /**< Compression Flags */ - uint32_t xzDecompressSize; /**< Size of uncompressed image */ } PACKED; /** diff --git a/src/usr/pnor/pnorrp.C b/src/usr/pnor/pnorrp.C index 8a7b5457b..c6a4880c1 100644 --- a/src/usr/pnor/pnorrp.C +++ b/src/usr/pnor/pnorrp.C @@ -464,10 +464,6 @@ errlHndl_t PnorRP::getSectionInfo( PNOR::SectionId i_section, != 0) ? true : false; o_info.readOnly = ((iv_TOC[id].misc & FFS_MISC_READ_ONLY) != 0) ? true : false; - o_info.xzCompressed = ((iv_TOC[id].compress & FFS_COMPRESS_XZ) - != 0) ? true : false; - o_info.xzSize = ((iv_TOC[id].compress & FFS_COMPRESS_XZ) != 0) ? - iv_TOC[id].xzDecompressSize : 0; } return l_errhdl; diff --git a/src/usr/pnor/runtime/rt_pnor.C b/src/usr/pnor/runtime/rt_pnor.C index 776fb1167..33c1a2439 100644 --- a/src/usr/pnor/runtime/rt_pnor.C +++ b/src/usr/pnor/runtime/rt_pnor.C @@ -195,11 +195,6 @@ errlHndl_t RtPnor::getSectionInfo(PNOR::SectionId i_section, (iv_TOC[i_section].version & FFS_VERS_SHA512) ? true : false; o_info.sha512perEC = (iv_TOC[i_section].version & FFS_VERS_SHA512_PER_EC) ? true : false; - o_info.xzCompressed = - ((iv_TOC[i_section].compress & FFS_COMPRESS_XZ) != 0) ? true : false; - o_info.xzSize = - ((iv_TOC[i_section].compress & FFS_COMPRESS_XZ) != 0) ? - iv_TOC[i_section].xzDecompressSize : 0; } while (0); TRACFCOMP(g_trac_pnor, EXIT_MRK"RtPnor::getSectionInfo"); |