summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/build/buildpnor/buildpnor.pl26
-rw-r--r--src/include/usr/isteps/istep21list.H1
-rw-r--r--src/include/usr/pnor/pnor_const.H2
-rw-r--r--src/usr/isteps/istep20/call_host_load_payload.C27
-rw-r--r--src/usr/pnor/common/ffs_hb.H6
-rw-r--r--src/usr/pnor/pnor_utils.C3
-rw-r--r--src/usr/pnor/pnor_utils.H2
-rw-r--r--src/usr/pnor/pnorrp.C4
-rw-r--r--src/usr/pnor/runtime/rt_pnor.C5
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");
OpenPOWER on IntegriCloud