diff options
author | William Hoffa <wihoffa@gmail.com> | 2018-11-12 16:14:48 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-12 16:14:48 -0600 |
commit | bc3b80258c3ae936246c5cc04923665e820fb05e (patch) | |
tree | f7d3074b684e457a98023f16c5bd6d6c9657a39a | |
parent | 943edddbcee702b097ef8b799115814b89797d57 (diff) | |
parent | 87994057fb10284334d1b8943ae14abff7918d3b (diff) | |
download | pnor-bc3b80258c3ae936246c5cc04923665e820fb05e.tar.gz pnor-bc3b80258c3ae936246c5cc04923665e820fb05e.zip |
Merge pull request #108 from mabaiocchi/master
Support Optional Attribute/Targeting Read-Write PNOR Partition
-rwxr-xr-x | create_pnor_image.pl | 55 | ||||
-rwxr-xr-x | p8Layouts/defaultPnorLayoutSingleSide.xml | 13 | ||||
-rwxr-xr-x | p8Layouts/defaultPnorLayoutWithGoldenSide.xml | 26 | ||||
-rwxr-xr-x | p8Layouts/defaultPnorLayoutWithoutGoldenSide.xml | 26 | ||||
-rwxr-xr-x | update_image.pl | 45 |
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"); |