summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Hoffa <wihoffa@gmail.com>2018-11-12 16:14:48 -0600
committerGitHub <noreply@github.com>2018-11-12 16:14:48 -0600
commitbc3b80258c3ae936246c5cc04923665e820fb05e (patch)
treef7d3074b684e457a98023f16c5bd6d6c9657a39a
parent943edddbcee702b097ef8b799115814b89797d57 (diff)
parent87994057fb10284334d1b8943ae14abff7918d3b (diff)
downloadpnor-bc3b80258c3ae936246c5cc04923665e820fb05e.tar.gz
pnor-bc3b80258c3ae936246c5cc04923665e820fb05e.zip
Merge pull request #108 from mabaiocchi/master
Support Optional Attribute/Targeting Read-Write PNOR Partition
-rwxr-xr-xcreate_pnor_image.pl55
-rwxr-xr-xp8Layouts/defaultPnorLayoutSingleSide.xml13
-rwxr-xr-xp8Layouts/defaultPnorLayoutWithGoldenSide.xml26
-rwxr-xr-xp8Layouts/defaultPnorLayoutWithoutGoldenSide.xml26
-rwxr-xr-xupdate_image.pl45
5 files changed, 151 insertions, 14 deletions
diff --git a/create_pnor_image.pl b/create_pnor_image.pl
index 14f71ab..51ea988 100755
--- a/create_pnor_image.pl
+++ b/create_pnor_image.pl
@@ -2,6 +2,7 @@
use strict;
use File::Basename;
+use XML::Simple;
my $program_name = File::Basename::basename $0;
my $release = "";
@@ -14,6 +15,8 @@ my $bootkernel = "";
my $hb_image_dir = "";
my $xml_layout_file = "";
my $targeting_binary_filename = "";
+my $targeting_RO_binary_filename = "";
+my $targeting_RW_binary_filename = "";
my $sbec_binary_filename = "";
my $sbe_binary_filename = "";
my $wink_binary_filename = "";
@@ -72,6 +75,14 @@ while (@ARGV > 0){
$targeting_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a targeting binary filename.\n";
shift;
}
+ elsif (/^-targeting_RO_binary_filename/i){
+ $targeting_RO_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a targeting RW binary filename.\n";
+ shift;
+ }
+ elsif (/^-targeting_RW_binary_filename/i){
+ $targeting_RW_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a targeting RW binary filename.\n";
+ shift;
+ }
elsif (/^-sbe_binary_filename/i){
$sbe_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting an sbe binary filename.\n";
shift;
@@ -125,7 +136,19 @@ print "pnor_data_dir = $pnor_data_dir\n";
my $build_pnor_command = "$hb_image_dir/buildpnor.pl";
$build_pnor_command .= " --pnorOutBin $pnor_filename --pnorLayout $xml_layout_file";
-$build_pnor_command .= " --binFile_HBD $scratch_dir/$targeting_binary_filename";
+
+# Process HBD section and possibly HBD_RW section
+my $does_HBD_RW_exist = checkFor_HBD_RW();
+if ($does_HBD_RW_exist eq 0)
+{
+ $build_pnor_command .= " --binFile_HBD $scratch_dir/$targeting_binary_filename";
+}
+else
+{
+ $build_pnor_command .= " --binFile_HBD $scratch_dir/$targeting_RO_binary_filename";
+ $build_pnor_command .= " --binFile_HBD_RW $scratch_dir/$targeting_RW_binary_filename";
+}
+
$build_pnor_command .= " --binFile_SBE $scratch_dir/$sbe_binary_filename";
$build_pnor_command .= " --binFile_HBB $scratch_dir/hostboot.header.bin.ecc";
$build_pnor_command .= " --binFile_HBI $scratch_dir/hostboot_extended.header.bin.ecc";
@@ -204,3 +227,33 @@ sub run_command {
}
return $rc;
}
+
+# Checks to see if HBD_RW section is in PNOR Layout File
+sub checkFor_HBD_RW {
+ # default the return as 0 (aka 'false') - HBD_RW does NOT exist
+ my $does_HBD_RW_exist = 0;
+
+ if ( ! -e "$xml_layout_file")
+ {
+ die "$xml_layout_file does not exist\n";
+ }
+
+ #parse the input XML file
+ my $xs = new XML::Simple(keyattr=>[], forcearray => 1);
+ my $xml = $xs->XMLin($xml_layout_file);
+
+ #Iterate over the <section> elements.
+ foreach my $sectionEl (@{$xml->{section}})
+ {
+ my $eyeCatch = $sectionEl->{eyeCatch}[0];
+
+ if($eyeCatch eq "HBD_RW")
+ {
+ $does_HBD_RW_exist = 1;
+ last;
+ }
+ }
+
+ return $does_HBD_RW_exist;
+}
+
diff --git a/p8Layouts/defaultPnorLayoutSingleSide.xml b/p8Layouts/defaultPnorLayoutSingleSide.xml
index aeb0291..7c9c7d1 100755
--- a/p8Layouts/defaultPnorLayoutSingleSide.xml
+++ b/p8Layouts/defaultPnorLayoutSingleSide.xml
@@ -109,10 +109,19 @@ Layout Description
<reprovision/>
</section>
<section>
- <description>Hostboot Data (0.375M)</description>
+ <description>Hostboot Data (320K)</description>
<eyeCatch>HBD</eyeCatch>
<physicalOffset>0x6D0000</physicalOffset>
- <physicalRegionSize>0x60000</physicalRegionSize>
+ <physicalRegionSize>0x50000</physicalRegionSize>
+ <side>A</side>
+ <ecc/>
+ <readOnly/>
+ </section>
+ <section>
+ <description>Hostboot Data : Read-Write (64K)</description>
+ <eyeCatch>HBD_RW</eyeCatch>
+ <physicalOffset>0x720000</physicalOffset>
+ <physicalRegionSize>0x10000</physicalRegionSize>
<side>A</side>
<ecc/>
</section>
diff --git a/p8Layouts/defaultPnorLayoutWithGoldenSide.xml b/p8Layouts/defaultPnorLayoutWithGoldenSide.xml
index b1e4970..8982677 100755
--- a/p8Layouts/defaultPnorLayoutWithGoldenSide.xml
+++ b/p8Layouts/defaultPnorLayoutWithGoldenSide.xml
@@ -97,10 +97,19 @@ Layout Description
<reprovision/>
</section>
<section>
- <description>Hostboot Data (.375M)</description>
+ <description>Hostboot Data (320K)</description>
<eyeCatch>HBD</eyeCatch>
<physicalOffset>0x31000</physicalOffset>
- <physicalRegionSize>0x60000</physicalRegionSize>
+ <physicalRegionSize>0x50000</physicalRegionSize>
+ <side>A</side>
+ <ecc/>
+ <readOnly/>
+ </section>
+ <section>
+ <description>Hostboot Data : Read-Write (64K)</description>
+ <eyeCatch>HBD_RW</eyeCatch>
+ <physicalOffset>0x81000</physicalOffset>
+ <physicalRegionSize>0x10000</physicalRegionSize>
<side>A</side>
<ecc/>
</section>
@@ -312,10 +321,19 @@ Layout Description
</section>
<!-- Golden Side (Side B) -->
<section>
- <description>Hostboot Data (0.375M)</description>
+ <description>Hostboot Data (320K)</description>
<eyeCatch>HBD</eyeCatch>
<physicalOffset>0x2008000</physicalOffset>
- <physicalRegionSize>0x60000</physicalRegionSize>
+ <physicalRegionSize>0x50000</physicalRegionSize>
+ <side>B</side>
+ <readOnly/>
+ <ecc/>
+ </section>
+ <section>
+ <description>Hostboot Data : Read-Write (64K)</description>
+ <eyeCatch>HBD_RW</eyeCatch>
+ <physicalOffset>0x2058000</physicalOffset>
+ <physicalRegionSize>0x10000</physicalRegionSize>
<side>B</side>
<readOnly/>
<ecc/>
diff --git a/p8Layouts/defaultPnorLayoutWithoutGoldenSide.xml b/p8Layouts/defaultPnorLayoutWithoutGoldenSide.xml
index 18c4350..925f9fd 100755
--- a/p8Layouts/defaultPnorLayoutWithoutGoldenSide.xml
+++ b/p8Layouts/defaultPnorLayoutWithoutGoldenSide.xml
@@ -96,10 +96,19 @@ Layout Description
<reprovision/>
</section>
<section>
- <description>Hostboot Data (.375M)</description>
+ <description>Hostboot Data (320K)</description>
<eyeCatch>HBD</eyeCatch>
<physicalOffset>0x31000</physicalOffset>
- <physicalRegionSize>0x60000</physicalRegionSize>
+ <physicalRegionSize>0x50000</physicalRegionSize>
+ <side>A</side>
+ <ecc/>
+ <readOnly/>
+ </section>
+ <section>
+ <description>Hostboot Data : Read-Write (64K)</description>
+ <eyeCatch>HBD_RW</eyeCatch>
+ <physicalOffset>0x81000</physicalOffset>
+ <physicalRegionSize>0x10000</physicalRegionSize>
<side>A</side>
<ecc/>
</section>
@@ -311,10 +320,19 @@ Layout Description
</section>
<!-- Golden Side (Side B) -->
<section>
- <description>Hostboot Data (0.375M)</description>
+ <description>Hostboot Data (320K)</description>
<eyeCatch>HBD</eyeCatch>
<physicalOffset>0x2008000</physicalOffset>
- <physicalRegionSize>0x60000</physicalRegionSize>
+ <physicalRegionSize>0x50000</physicalRegionSize>
+ <side>B</side>
+ <ecc/>
+ <readOnly>
+ </section>
+ <section>
+ <description>Hostboot Data : Read-Write (64K)</description>
+ <eyeCatch>HBD_RW</eyeCatch>
+ <physicalOffset>0x2058000</physicalOffset>
+ <physicalRegionSize>0x10000</physicalRegionSize>
<side>B</side>
<ecc/>
</section>
diff --git a/update_image.pl b/update_image.pl
index 3867300..2efcb50 100755
--- a/update_image.pl
+++ b/update_image.pl
@@ -14,6 +14,10 @@ my $hcode_dir = "";
my $sbe_binary_dir = "";
my $targeting_binary_filename = "";
my $targeting_binary_source = "";
+my $targeting_RO_binary_filename = "";
+my $targeting_RO_binary_source = "";
+my $targeting_RW_binary_filename = "";
+my $targeting_RW_binary_source = "";
my $sbe_binary_filename = "";
my $sbec_binary_filename = "";
my $wink_binary_filename = "";
@@ -79,6 +83,22 @@ while (@ARGV > 0){
$targeting_binary_source = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
shift;
}
+ elsif (/^-targeting_RO_binary_filename/i){
+ $targeting_RO_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
+ shift;
+ }
+ elsif (/^-targeting_RO_binary_source/i){
+ $targeting_RO_binary_source = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
+ shift;
+ }
+ elsif (/^-targeting_RW_binary_filename/i){
+ $targeting_RW_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
+ shift;
+ }
+ elsif (/^-targeting_RW_binary_source/i){
+ $targeting_RW_binary_source = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
+ shift;
+ }
elsif (/^-sbe_binary_filename/i){
$sbe_binary_filename = $ARGV[1] or die "Bad command line arg given: expecting a config type.\n";
shift;
@@ -414,9 +434,28 @@ if ($release ne "p8") {
}
else
{
- # Inject ECC into HBD (hostboot targeting) output binary
- run_command("dd if=$op_target_dir/$targeting_binary_source of=$scratch_dir/$targeting_binary_source ibs=4k conv=sync");
- run_command("ecc --inject $scratch_dir/$targeting_binary_source --output $scratch_dir/$targeting_binary_filename --p8");
+ # Inject ECC into any of the HBD (hostboot targeting) output binaries
+ if (-e "$op_target_dir/$targeting_binary_source")
+ {
+ print "Processing targeting_binary_source: $op_target_dir/$targeting_binary_source\n";
+ run_command("dd if=$op_target_dir/$targeting_binary_source of=$scratch_dir/$targeting_binary_source ibs=4k conv=sync");
+ run_command("ecc --inject $scratch_dir/$targeting_binary_source --output $scratch_dir/$targeting_binary_filename --p8");
+ }
+
+ if(-e "$op_target_dir/$targeting_RO_binary_source")
+ {
+ print "Processing targeting_RO_binary_source: $op_target_dir/$targeting_RO_binary_source\n";
+ run_command("dd if=$op_target_dir/$targeting_RO_binary_source of=$scratch_dir/$targeting_RO_binary_source ibs=4k conv=sync");
+ run_command("ecc --inject $scratch_dir/$targeting_RO_binary_source --output $scratch_dir/$targeting_RO_binary_filename --p8");
+
+ }
+
+ if(-e "$op_target_dir/$targeting_RW_binary_source")
+ {
+ print "Processing targeting_RW_binary_source: $op_target_dir/$targeting_RW_binary_source\n";
+ run_command("dd if=$op_target_dir/$targeting_RW_binary_source of=$scratch_dir/$targeting_RW_binary_source ibs=4k conv=sync");
+ run_command("ecc --inject $scratch_dir/$targeting_RW_binary_source --output $scratch_dir/$targeting_RW_binary_filename --p8");
+ }
# Add SBE/normal headers and inject ECC into HBB (hostboot base) partition binary
run_command("echo \"00000000001800000000000008000000000000000007EF80\" | xxd -r -ps - $scratch_dir/sbe.header");
OpenPOWER on IntegriCloud