Update hostboot to 07bb80
diff --git a/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch b/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch
deleted file mode 100644
index 9d7a6c0..0000000
--- a/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch
+++ /dev/null
@@ -1,456 +0,0 @@
-From 8f139eab659dc681e24a8c414dac00607a090fa0 Mon Sep 17 00:00:00 2001
-From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Mon, 16 Feb 2015 13:15:43 -0600
-Subject: [PATCH] New Serverwiz2 patches
-
-Change-Id: I4ba05d89e9ca0ef3298c0f9d503f349782632d89
----
- src/build/mkrules/dist.targets.mk      |   3 +-
- src/usr/targeting/common/Targets.pm    |  24 ++---
- src/usr/targeting/common/processMrw.pl | 171 ++++++++++++++-------------------
- 3 files changed, 88 insertions(+), 110 deletions(-)
- mode change 100644 => 100755 src/usr/targeting/common/Targets.pm
- mode change 100644 => 100755 src/usr/targeting/common/processMrw.pl
-
-diff --git a/src/build/mkrules/dist.targets.mk b/src/build/mkrules/dist.targets.mk
-index ca28150..4b541ce 100644
---- a/src/build/mkrules/dist.targets.mk
-+++ b/src/build/mkrules/dist.targets.mk
-@@ -74,7 +74,8 @@ COPY_FILES = \
-     src/usr/hwpf/hwp/initfiles/sample.initfile:tools \
-     src/build/buildpnor/buildSbePart.pl:openpower \
-     src/build/buildpnor/buildpnor.pl:openpower \
--    src/usr/targeting/common/genHwsvMrwXml.pl:openpower \
-+    src/usr/targeting/common/processMrw.pl:openpower \
-+    src/usr/targeting/common/Targets.pm:openpower \
-     src/usr/targeting/common/xmltohb/mergexml.sh:openpower \
-     src/usr/targeting/common/xmltohb/attribute_types.xml:openpower \
-     src/usr/targeting/common/xmltohb/attribute_types_hb.xml:openpower \
-diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
-old mode 100644
-new mode 100755
-index d4c2bfa..53568cf
---- a/src/usr/targeting/common/Targets.pm
-+++ b/src/usr/targeting/common/Targets.pm
-@@ -194,6 +194,7 @@ sub printAttribute
-     $filter{MBA_NUM}                        = 1;
-     $filter{IPMI_INSTANCE}                  = 1;
-     $filter{INSTANCE_ID}                    = 1;
-+    $filter{ADC_CHANNEL_SENSOR_NUMBERS}     = 1;
- 
-     if ($filter{$attribute} == 1)
-     {
-@@ -286,7 +287,7 @@ sub buildHierarchy
-     $self->{data}->{INSTANCE_PATH} = $old_path . "/" . $target;
- 
-     ## copy attributes
--
-+    
-     foreach my $attribute (keys %{ $target_xml->{attribute} })
-     {
-         my $value = $target_xml->{attribute}->{$attribute}->{default};
-@@ -317,7 +318,7 @@ sub buildHierarchy
-             $self->setAttribute($key, $attribute, $value);
-         }
-     }
--    ## global attributes overwrite local
-+    ## global attributes overwrite local   
-     foreach my $prop (keys %{$self->{xml}->{globalSetting}->{$key}->{property}})
-     {
-         my $val=$self->{xml}->{globalSetting}->{$key}->{property}->
-@@ -400,7 +401,7 @@ sub buildAffinity
-         {
-             $proc = -1;
-             $node = -1;
--
-+            
-             $self->{targeting}{SYS}[0]{KEY} = $target;
-             $self->setAttribute($target, "AFFINITY_PATH", "affinity:sys-0");
-             $self->setAttribute($target, "PHYS_PATH",     "physical:sys-0");
-@@ -443,7 +444,7 @@ sub buildAffinity
-             $self->{NUM_PROCS_PER_NODE} = $proc + 1;
-             $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY} =
-               $target;
--
-+            
-             $self->setHuid($target, 0, $node);
-             my $socket = $self->getTargetParent(
-                          $self->getTargetParent($target));
-@@ -475,7 +476,7 @@ sub buildAffinity
-                 ## don't want non-hostboot targets
-                 if ($unit_type_id > 0)
-                 {
--
-+                    
-                     push(@{$self->{targeting}
-                             ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{$unit_type}},
-                             { 'KEY' => $unit });
-@@ -490,7 +491,7 @@ sub buildAffinity
-                     $self->setHuid($unit, 0, $node);
-                     if ($unit_type eq "OCC")
-                     {
--                        $self->setAttribute($unit, "ENTITY_INSTANCE",$proc);
-+                        $self->setAttribute($unit, "ENTITY_INSTANCE",$proc);                        
-                     }
-                     ## export core
-                     if ($unit_type eq "EX")
-@@ -610,9 +611,9 @@ sub processMcs
-         $self->{targeting}
-           ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs] {MEMBUFS}[0]{KEY} =
-           $membuf;
--
-+          
-         $self->setAttribute($membuf, "ENTITY_INSTANCE",
--               $self->{membuf_inst_num});
-+               $self->{membuf_inst_num});   
-         $self->{membuf_inst_num}++;
-         ## get the mbas
-         foreach my $child (@{ $self->{data}->{TARGETS}{$membuf}{CHILDREN} })
-@@ -629,7 +630,7 @@ sub processMcs
-                     $node_phys . "/membuf-$membufnum/l4-0");
-                 $self->setHuid($child, 0, $node);
-             }
--
-+            
-             if ($self->getType($child) eq "MBA")
-             {
-                 my $mba = $self->getAttribute($child,"MBA_NUM");
-@@ -671,10 +672,9 @@ sub processMcs
-                         $self->setHuid($dimm, 0, $node);
-                         $self->{targeting}
-                           ->{SYS}[0]{NODES}[$node]{PROCS}[$proc] {MCSS}[$mcs]
--                          {MEMBUFS}[0]{MBAS}[$mba]{DIMMS}[$affinitypos]{KEY}
--                                = $dimm;
-+                          {MEMBUFS}[0]{MBAS}[$mba] {DIMMS}[$affinitypos]{KEY} = $dimm;
-                         $self->setAttribute($dimm, "ENTITY_INSTANCE",
--                             $self->{dimm_tpos});
-+                             $self->{dimm_tpos});  
-                         $self->{dimm_tpos}++;
-                         $affinitypos++;
-                     }
-diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
-old mode 100644
-new mode 100755
-index 18107df..1fb292f
---- a/src/usr/targeting/common/processMrw.pl
-+++ b/src/usr/targeting/common/processMrw.pl
-@@ -84,7 +84,7 @@ foreach my $target (sort keys %{ $targetObj->getAllTargets() })
-     if ($type eq "SYS")
-     {
-         processSystem($targetObj, $target);
--    }
-+    } 
-     elsif ($type eq "PROC")
-     {
-         processProcessor($targetObj, $target);
-@@ -141,7 +141,7 @@ if ($report)
- {
-     my $report_file = $xmldir . "/" . $targetObj->getSystemName() . ".rpt";
-     open(SUM,">$report_file") || die "Unable to create: $report_file\n";
--    my $ref = $targetObj->{targeting}->{SYS}[0]{NODES}[0]{PROCS};
-+    my $ref = $targetObj->{targeting}->{SYS}[0]{NODES}[0]{PROCS};       
-     foreach my $proc (@{$ref})
-     {
-         foreach my $mcs (@{$proc->{MCSS}})
-@@ -149,7 +149,7 @@ if ($report)
-             my $mcs_target = $mcs->{KEY};
-             my $membuf=$mcs->{MEMBUFS}[0];
-             my $membuf_target = $membuf->{KEY};
--
-+          
-             my $sch = $targetObj->getAttribute($mcs_target,
-                       "SCHEMATIC_INTERFACE");
-             my $aff = $targetObj->getAttribute($mcs_target,"AFFINITY_PATH");
-@@ -158,7 +158,7 @@ if ($report)
-             if ($membuf_target ne "") {
-                 foreach my $mba (@{$membuf->{MBAS}}) {
-                     my $mba_target = $mba->{KEY};
--
-+               
-                     $huid = $targetObj->getAttribute($mba_target,"HUID");
-                     $aff = $targetObj->getAttribute($mcs_target,
-                                    "AFFINITY_PATH");
-@@ -177,7 +177,7 @@ if ($report)
-                         my $sens = $targetObj->getAttribute($dimm_target,
-                                   "IPMI_SENSORS");
-                         my @s = split(/\,/,$sens);
--
-+                        
-                         print SUM "\t\t$huid | $dimm_target".
-                                   " | $aff | $p | $d | $i2c | ".
-                                   "$s[0],$s[1] | $s[2],$s[3]\n";
-@@ -194,82 +194,6 @@ if ($report)
- ## Processing subroutines
- 
- #--------------------------------------------------
--## SDRs
--##
--
--sub processSdr
--{
--    my $targetObj = shift;
--    my $target = shift;
--    my $sdrObj = shift;
--
--    my @ipmi_sensors;
--    my %id_lu;
--
--    if ($targetObj->isBadAttribute($target,"ENTITY_ID_LOOKUP")==1)
--    {
--        return;
--    }
--    my $entity_id_lookup = $targetObj->getAttribute($target,"ENTITY_ID_LOOKUP");
--    if ($entity_id_lookup ne "") {
--        my $pos=0;
--        if ($targetObj->isBadAttribute($target,"IPMI_INSTANCE")==1)
--        {
--            $pos = $targetObj->getAttribute($target,"ENTITY_INSTANCE");
--        }
--        else
--        {
--            $pos = $targetObj->getAttribute($target,"IPMI_INSTANCE");
--        }
--        print  "$entity_id_lookup,$pos\n";
--        my @ids = split(/,/,$entity_id_lookup);
--        foreach my $i (@ids)
--        {
--            my $i_int = oct($i);
--            if ($i_int>0)
--            {
--                $id_lu{$i_int}=1;
--            }
--        }
--        foreach my $s (@{$sdrObj->{data}})
--        {
--            my $sdr_entity_id = oct($s->{entity_id});
--            if ($s->{name}=~/Core/) {
--                $sdr_entity_id=208;
--            }
--            if ($id_lu{$sdr_entity_id}>0)
--            {
--                my $sensor_id=$s->{sensor_id};
--                my $instance_id=oct($s->{entity_instance});
--                my $sensor_type=oct($s->{sensor_type});
--                if ($instance_id==$pos)
--                {
--                    print "IMPORTING: $target; pos=$pos; entity_id=".
--                           "$sdr_entity_id; ".
--                           "sensor_id=$sensor_id; sensor_type=$sensor_type\n";
--                    my $eid=sprintf("0x%02x%02x",$sensor_type,$sdr_entity_id);
--                    my $sid=sprintf("0x%02x",$s->{sensor_id});
--                    push(@ipmi_sensors,$eid.",".$sid);
--                    $id_lu{$sdr_entity_id}++;
--                }
--            }
--        }
--        foreach my $k (keys(%id_lu)) {
--            if ($id_lu{$k}==1)
--            {
--                print "WARNING: $target; pos=$pos; entity_id=$k; ".
--                      "not imported\n";
--                #$targetObj->myExit(3);
--            }
--        }
--        for (my $i=@ipmi_sensors;$i<16;$i++)
--        {
--            push(@ipmi_sensors,"0xFFFF,0xFF");
--        }
--        my $ipmi = join(',',@ipmi_sensors);
--        $targetObj->setAttribute($target,"IPMI_SENSORS",$ipmi);
--    }
--}
- 
- #--------------------------------------------------
- ## System
-@@ -347,7 +271,7 @@ sub processProcessor
-        $targetObj->getTargetParent($targetObj->getTargetParent($target));
-     $targetObj->copyAttribute($socket_target,$target,"LOCATION_CODE");
-     $targetObj->copyAttribute($socket_target,$target,"FRU_ID");
--
-+    
- 
-     foreach my $attr (sort (keys
-            %{ $targetObj->getTarget($socket_target)->{TARGET}->{attribute} }))
-@@ -529,7 +453,7 @@ sub setupBars
-                 my $b=sprintf("0x%016X",
-          $i_base+$i_node_offset*$node+$i_proc_offset*$proc+$i_offset*$i);
-                 my $sep=",";
--                if ($i==$num-1)
-+                if ($i==$num-1) 
-                 {
-                     $sep="";
-                 }
-@@ -560,7 +484,7 @@ sub processMcs
-     my $i_offset = Math::BigInt->new($offset);
- 
-     my $mcs = $targetObj->getAttribute($target, "MCS_NUM");
--    my $mcsStr=sprintf("0x%016X",
-+    my $mcsStr=sprintf("0x%016X",   
-          $i_base+$i_node_offset*$node+$i_proc_offset*$proc+$i_offset*$mcs);
-     $targetObj->setAttribute($target, "IBSCOM_MCS_BASE_ADDR", $mcsStr);
- }
-@@ -577,7 +501,7 @@ sub processXbus
-     my $target    = shift;
- 
-     # $targetObj->setAttribute($target, "PEER_TARGET","");
--
-+  
- }
- 
- #--------------------------------------------------
-@@ -595,7 +519,7 @@ sub processAbus
-    $targetObj->setAttribute($target, "EI_BUS_TX_LANE_INVERT","0");
-    $targetObj->setAttribute($target, "EI_BUS_TX_MSBSWAP","0");
-    # $targetObj->setAttribute($target, "PEER_TARGET","");
--
-+            
-     my $abus_child_conn = $targetObj->getFirstConnectionDestination($target);
-     if ($abus_child_conn ne "")
-     {
-@@ -785,14 +709,12 @@ sub processPcie
-                 {
-                     for (my $lane=0;$lane<16;$lane++)
-                     {
--                        $equalization[$phb_num][$lane]=$eqs[$e+1].",".
--                              $eqs[$e+2];
--                    }
-+                        $equalization[$phb_num][$lane]=$eqs[$e+1].",".$eqs[$e+2];
-+                    }                    
-                 }
-                 else
-                 {
--                    $equalization[$phb_num][$eqs[$e]] = $eqs[$e+1].",".
--                              $eqs[$e+2];
-+                    $equalization[$phb_num][$eqs[$e]] = $eqs[$e+1].",".$eqs[$e+2];
-                 }
-             }
-             substr($phb_config, $phb_num, 1, "1");
-@@ -886,7 +808,7 @@ sub processMembufVpdAssociation
- {
-     my $targetObj = shift;
-     my $target    = shift;
--
-+    
-     my $vpds=$targetObj->findConnections($target,"I2C","VPD");
-     if ($vpds ne "" ) {
-         my $vpd = $vpds->{CONN}->[0];
-@@ -899,7 +821,7 @@ sub processMembufVpdAssociation
-                 setEepromAttributes($targetObj,
-                        "EEPROM_VPD_PRIMARY_INFO",$membuf_target,$vpd);
-                 setEepromAttributes($targetObj,
--                       "EEPROM_VPD_FRU_INFO",$membuf_target,$vpd,"0++");
-+                       "EEPROM_VPD_FRU_INFO",$membuf_target,$vpd,"0++");       
-                 my $index = $targetObj->getBusAttribute($membuf_assoc->{SOURCE},
-                                 $membuf_assoc->{BUS_NUM}, "ISDIMM_MBVPD_INDEX");
-                 $targetObj->setAttribute(
-@@ -920,8 +842,8 @@ sub processMembuf
- {
-     my $targetObj = shift;
-     my $target    = shift;
--    if ($targetObj->isBadAttribute($target, "PHYS_PATH", ""))
--    {
-+    if ($targetObj->isBadAttribute($target, "PHYS_PATH", "")) 
-+    { 
-         ##dmi is probably not connected.  will get caught in error checking
-         return;
-     }
-@@ -949,7 +871,33 @@ sub processMembuf
-             }
-         }
-     }
-+    ## find port mapping
-+    my %dimm_portmap;
-+    foreach my $child (@{$targetObj->getTargetChildren($target)})
-+    {
-+         if ($targetObj->getType($child) eq "MBA")
-+         {
-+             my $mba_num = $targetObj->getAttribute($child,"MBA_NUM");
-+             my $dimms=$targetObj->findConnections($child,"DDR3","");
-+             if ($dimms ne "")
-+             {
-+                 foreach my $dimm (@{$dimms->{CONN}})
-+                 {
-+                       my $port_num = $targetObj->getAttribute(
-+                                     $dimm->{SOURCE},"MBA_PORT");
-+                       my $dimm_num = $targetObj->getAttribute(
-+                                     $dimm->{SOURCE},"MBA_DIMM");
-+                       
-+                       my $map = oct("0b".$mba_num.$port_num.$dimm_num);
-+                       $dimm_portmap{$dimm->{DEST_PARENT}} = $map;
-+                 }
-+             }
-+         }
-+    }
-+    
-+    
-     ## Process MEMBUF to DIMM I2C connections
-+    my @addr_map=('0','0','0','0','0','0','0','0');
-     my $dimms=$targetObj->findConnections($target,"I2C","SPD");
-     if ($dimms ne "") {
-         foreach my $dimm (@{$dimms->{CONN}}) {
-@@ -960,8 +908,19 @@ sub processMembuf
-             setEepromAttributes($targetObj,
-                        "EEPROM_VPD_FRU_INFO",$dimm_target,
-                        $dimm,"0++");
-+
-+            my $field=getI2cMapField($targetObj,$dimm_target,$dimm);
-+            my $map = $dimm_portmap{$dimm_target};
-+            if ($map eq "") { 
-+                print "ERROR: $dimm_target doesn't map to a dimm/port\n";
-+                $targetObj->myExit(3);
-+            }
-+            $addr_map[$map] = $field;
-         }
-     }
-+    $targetObj->setAttribute($targetObj->{targeting}->{SYS}[0]->{KEY},
-+            "MRW_MEM_SENSOR_CACHE_ADDR_MAP","0x".join("",@addr_map));
-+
-     ## Update bus speeds
-     processI2cSpeeds($targetObj,$target);
- 
-@@ -973,7 +932,7 @@ sub processMembuf
-         foreach my $ddr (@{$ddrs->{CONN}}) {
-             my $mba=$ddr->{SOURCE};
-             my $dimm=$ddr->{DEST_PARENT};
--            my ($dimmnum,$port)=split(//,sprintf("%02b\n",$portmap{$mba}));
-+            my ($dimmnum,$port)=split(//,sprintf("%02b\n",$portmap{$mba}));        
-             $targetObj->setAttribute($dimm, "MBA_DIMM",$dimmnum);
-             $targetObj->setAttribute($dimm, "MBA_PORT",$port);
-             $portmap{$mba}++;
-@@ -984,6 +943,24 @@ sub processMembuf
-     }
- }
- 
-+sub getI2cMapField
-+{
-+    my $targetObj = shift;
-+    my $target = shift;
-+    my $conn_target = shift;
-+
-+
-+    my $port = $targetObj->getAttribute($conn_target->{SOURCE}, "I2C_PORT");
-+    my $engine = $targetObj->getAttribute($conn_target->{SOURCE}, "I2C_ENGINE");
-+    my $addr = $targetObj->getBusAttribute($conn_target->{SOURCE},
-+            $conn_target->{BUS_NUM}, "I2C_ADDRESS");
-+    
-+    my $bits=sprintf("%08b",hex($addr));
-+    my $field=sprintf("%d%3s",oct($port),substr($bits,4,3));
-+    my $hexfield = sprintf("%X",oct("0b$field"));
-+    return $hexfield;
-+}
-+
- 
- sub setEepromAttributes
- {
-@@ -1036,7 +1013,7 @@ sub setGpioAttributes
-     my $engine = $targetObj->getAttribute($conn_target->{SOURCE}, "I2C_ENGINE");
-     my $addr = $targetObj->getBusAttribute($conn_target->{SOURCE},
-             $conn_target->{BUS_NUM}, "I2C_ADDRESS");
--    my $path = $targetObj->getAttribute($conn_target->{SOURCE_PARENT},
-+    my $path = $targetObj->getAttribute($conn_target->{SOURCE_PARENT}, 
-                "PHYS_PATH");
- 
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0006-revert-OCC-v3.patch b/openpower/package/hostboot/hostboot-0006-revert-OCC-v3.patch
new file mode 100644
index 0000000..5999ffc
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0006-revert-OCC-v3.patch
@@ -0,0 +1,205 @@
+From 4619901bd09eccbe26d430195c4e8019f6993b0b Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Mon, 23 Feb 2015 17:09:14 -0600
+Subject: [PATCH] Revert "Set FIR master in HOMER config data"
+
+This reverts commit 84023756531d9c48d2e4939326f4048f2dadbe28.
+---
+ src/include/usr/hwpf/hwp/occ/occ_common.H | 27 ++----------------
+ src/usr/diag/HBconfig                     |  6 ----
+ src/usr/hwpf/hwp/occ/occ.C                |  2 +-
+ src/usr/hwpf/hwp/occ/occ_common.C         | 46 +++++++++++++++++++------------
+ src/usr/hwpf/hwp/occ/runtime/rt_occ.C     |  2 +-
+ 5 files changed, 33 insertions(+), 50 deletions(-)
+
+diff --git a/src/include/usr/hwpf/hwp/occ/occ_common.H b/src/include/usr/hwpf/hwp/occ/occ_common.H
+index 8245539..1886e51 100644
+--- a/src/include/usr/hwpf/hwp/occ/occ_common.H
++++ b/src/include/usr/hwpf/hwp/occ/occ_common.H
+@@ -36,38 +36,19 @@ namespace HBOCC
+     struct occHostConfigDataArea_t
+     {
+         uint32_t version;
+-
+-        //For computation of timebase frequency
+         uint32_t nestFrequency;
+-
+-        // For determining the interrupt type to Host
+-        //  0x00000000 = Use FSI2HOST Mailbox
+-        //  0x00000001 = Use OCC interrupt line through PSIHB complex
+         uint32_t interruptType;
+-
+-        // For informing OCC if it is the FIR master:
+-        //  0x00000000 = Default
+-        //  0x00000001 = FIR Master
+-        uint32_t firMaster;
+-
+-        // FIR collection configuration data needed by FIR Master
+-        //  OCC in the event of a checkstop
+-        uint8_t firdataConfig[3072];
+     };
+ 
+     enum
+     {
+-        OccHostDataVersion = 3,
++        OccHostDataVersion = 2,
+         OCC_LIDID = 0x81e00430,
+         OCC_IBSCOM_RANGE_IN_MB = MEGABYTE,
+ 
+         // Interrupt Types
+         USE_FSI2HOST_MAILBOX = 0x00000000,
+-        USE_PSIHB_COMPLEX    = 0x00000001,
+-
+-        // FIR Master
+-        NOT_FIR_MASTER = 0x00000000,
+-        IS_FIR_MASTER  = 0x00000001
++        USE_PSIHB_COMPLEX    = 0x00000001
+     };
+ 
+     enum occAction_t
+@@ -78,15 +59,13 @@ namespace HBOCC
+     /**
+      * @brief Sets up OCC Host data
+      *
+-     * @param[in] i_proc:         target processor to load
+      * @param[in] i_occHostDataVirtAddr Virtual
+      *                       address of current
+      *                       proc's Host data area.
+      *
+      * @return errlHndl_t  Error log Host data setup failed
+      */
+-    errlHndl_t loadHostDataToHomer(TARGETING::Target* i_proc,
+-                                   void* i_occHostDataVirtAddr);
++    errlHndl_t loadHostDataToHomer(void* i_occHostDataVirtAddr);
+ 
+     /**
+      * @brief Execute procedures and steps required to load
+diff --git a/src/usr/diag/HBconfig b/src/usr/diag/HBconfig
+index 973cecd..a516133 100644
+--- a/src/usr/diag/HBconfig
++++ b/src/usr/diag/HBconfig
+@@ -2,9 +2,3 @@ config HBRT_PRD
+     default n
+     help
+         Enable HBRT PRD.
+-
+-config ENABLE_CHECKSTOP_ANALYSIS
+-    default n
+-    help
+-        Enable collection of FIR data by OCC for checkstops and
+-        post-checkstop analysis by PRD on system reboot
+diff --git a/src/usr/hwpf/hwp/occ/occ.C b/src/usr/hwpf/hwp/occ/occ.C
+index ac2f4b1..f56c909 100644
+--- a/src/usr/hwpf/hwp/occ/occ.C
++++ b/src/usr/hwpf/hwp/occ/occ.C
+@@ -133,7 +133,7 @@ namespace HBOCC
+                                            (i_homerVirtAddrBase) +
+                                 tmpOffset + HOMER_OFFSET_TO_OCC_HOST_DATA;
+             void* occHostVirt = reinterpret_cast<void*>(i_homerHostVirtAddr);
+-            l_errl = HBOCC::loadHostDataToHomer(i_target,occHostVirt);
++            l_errl = HBOCC::loadHostDataToHomer(occHostVirt);
+             if( l_errl != NULL )
+             {
+                 TRACFCOMP( g_fapiImpTd, ERR_MRK"loading Host Data Area failed!" );
+diff --git a/src/usr/hwpf/hwp/occ/occ_common.C b/src/usr/hwpf/hwp/occ/occ_common.C
+index e444b26..97d36f4 100644
+--- a/src/usr/hwpf/hwp/occ/occ_common.C
++++ b/src/usr/hwpf/hwp/occ/occ_common.C
+@@ -119,9 +119,14 @@ namespace HBOCC
+ 
+     /**
+      * @brief Sets up OCC Host data
++     *
++     * @param[in] i_occHostDataVirtAddr Virtual
++     *                       address of current
++     *                       proc's Host data area.
++     *
++     * @return errlHndl_t  Error log Host data setup failed
+      */
+-    errlHndl_t loadHostDataToHomer( TARGETING::Target* i_proc,
+-                                    void* i_occHostDataVirtAddr)
++    errlHndl_t loadHostDataToHomer(void* i_occHostDataVirtAddr)
+     {
+         TRACUCOMP( g_fapiTd,
+                    ENTER_MRK"loadHostDataToHomer(%p)",
+@@ -156,22 +161,6 @@ namespace HBOCC
+             config_data->interruptType = USE_PSIHB_COMPLEX;
+         }
+ 
+-#ifdef CONFIG_ENABLE_CHECKSTOP_ANALYSIS
+-        // Figure out the FIR master
+-        TARGETING::Target* masterproc = NULL;
+-        tS.masterProcChipTargetHandle( masterproc );
+-        if( masterproc == i_proc )
+-        {
+-            config_data->firMaster = IS_FIR_MASTER;
+-        }
+-        else
+-        {
+-            config_data->firMaster = NOT_FIR_MASTER;
+-        }
+-#else
+-        config_data->firMaster = 0;
+-#endif
+-
+         TRACUCOMP( g_fapiTd,
+                    EXIT_MRK"loadHostDataToHomer");
+ 
+@@ -181,6 +170,16 @@ namespace HBOCC
+     /**
+      * @brief Execute procedures and steps necessary
+      *        to load OCC data in specified processor
++     *
++     * @param[in] i_target   Target proc to load
++     * @param[in] i_homerVirtAddrBase Virtual
++     *                       address of current
++     *                       proc's HOMER
++     * @param[in] i_homerPhysAddrBase Physical
++     *                       address of current
++     *                       proc's HOMER
++     *
++     * @return errlHndl_t  Error log image load failed
+      */
+      errlHndl_t loadOCC(TARGETING::Target* i_target,
+                     uint64_t i_homerPhysAddr,
+@@ -300,6 +299,12 @@ namespace HBOCC
+      * @brief Start OCC for specified DCM pair of processors.
+      *        If 2nd input is NULL, OCC will be setup on just
+      *        one target.
++     *
++     * @param[in] i_target0:    target of first processor in DCM pair
++     * @param[in] i_target1:    target of second processor in DCM pair
++     * @param[out] o_failedTarget failed target in case of an error
++     *
++     * @return errlHndl_t  Error log of startOCC failed
+      */
+     errlHndl_t startOCC (Target* i_target0,
+                          Target* i_target1,
+@@ -418,6 +423,11 @@ namespace HBOCC
+      * @brief Stop OCC for specified DCM pair of processors.
+      *        If 2nd input is NULL, OCC will be setup on just
+      *        one target.
++     *
++     * @param[in] i_target0:    target of first processor in DCM pair
++     * @param[in] i_target1:    target of second processor in DCM pair
++     *
++     * @return errlHndl_t  Error log of stopOCC failed
+      */
+     errlHndl_t stopOCC(TARGETING::Target * i_target0,
+                        TARGETING::Target * i_target1)
+diff --git a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
+index 1bc02a8..8583801 100644
+--- a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
++++ b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
+@@ -179,7 +179,7 @@ namespace RT_OCC
+ 
+             void* occHostVirt = reinterpret_cast <void *> (i_homer_addr_va +
+                                 HOMER_OFFSET_TO_OCC_HOST_DATA);
+-            err = HBOCC::loadHostDataToHomer(proc_target,occHostVirt);
++            err = HBOCC::loadHostDataToHomer(occHostVirt);
+             if( err != NULL )
+             {
+                 TRACFCOMP( g_fapiImpTd, ERR_MRK"loading Host Data Area failed!" );
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch b/openpower/package/hostboot/hostboot-0007-Revert-PNOR-goldenside.patch
similarity index 66%
rename from openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch
rename to openpower/package/hostboot/hostboot-0007-Revert-PNOR-goldenside.patch
index 054840e..038fd09 100644
--- a/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch
+++ b/openpower/package/hostboot/hostboot-0007-Revert-PNOR-goldenside.patch
@@ -1,7 +1,470 @@
-From 1e017616432b8eb72f9b48080aab0b88d7f2241e Mon Sep 17 00:00:00 2001
+From f4ca5fb46a11c947cc1a334a6e846a9f8a8852cd Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:02:13 -0600
-Subject: [PATCH 1/6] Revert "Skipping over readTOC if hostInterface for
+Date: Fri, 20 Feb 2015 10:59:29 -0600
+Subject: [PATCH 01/10] Revert "Support for PNOR version string sections in
+ openPOWER"
+
+This reverts commit 3a15c8bd258a5cb61821b9325f214a47b8faffbf.
+---
+ src/include/usr/pnor/pnorif.H | 1 -
+ src/usr/pnor/pnor_common.C    | 3 +--
+ 2 files changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/include/usr/pnor/pnorif.H b/src/include/usr/pnor/pnorif.H
+index 7229466..00f80f4 100644
+--- a/src/include/usr/pnor/pnorif.H
++++ b/src/include/usr/pnor/pnorif.H
+@@ -61,7 +61,6 @@ enum SectionId
+     ATTR_TMP,       /**< Temporary Attribute Override */
+     ATTR_PERM,      /**< Permanent Attribute Override */
+     CAPP,           /**< CAPP lid */
+-    VERSION,        /**< PNOR version string section */
+     TEST,           /**< Scratch space for PNOR test cases */
+     TESTRO,         /**< Scratch space for PNOR ReadOnly test cases */
+ 
+diff --git a/src/usr/pnor/pnor_common.C b/src/usr/pnor/pnor_common.C
+index c8c1e14..00931ec 100644
+--- a/src/usr/pnor/pnor_common.C
++++ b/src/usr/pnor/pnor_common.C
+@@ -66,8 +66,7 @@ const char* cv_EYECATCHER[] = {
+     "FIRDATA",   /**< PNOR::FIRDATA        : FIRDATA */
+     "ATTR_TMP",  /**< PNOR::ATTR_TMP       : Temporary Attribute Overrides */
+     "ATTR_PERM", /**< PNOR::ATTR_PERM      : Permanent Attribute Overrides */
+-    "CAPP",      /**< PNOR::CAPP           : CAPP LID */
+-    "VERSION",   /**< PNOR::VERSION        : PNOR Version string */
++    "CAPP",      /**< PNOR::CAPP            : CAPP LID */
+     "TEST",      /**< PNOR::TEST           : Test space for PNOR*/
+     "TESTRO",    /**< PNOR::TESTRO         : ReadOnly Test space for PNOR */
+     //Not currently used
+-- 
+1.8.2.2
+
+
+From a67aea13a1a3227e47a782bb7a5b965f22c9524b Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Fri, 20 Feb 2015 10:59:41 -0600
+Subject: [PATCH 02/10] Revert "Increasing size of HBRT to 3MB+ECC in
+ defaultPnorLayout"
+
+This reverts commit 110da83dad46fd3ac100bf60375ff1b7716114c9.
+---
+ src/build/buildpnor/defaultPnorLayout.xml | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/build/buildpnor/defaultPnorLayout.xml b/src/build/buildpnor/defaultPnorLayout.xml
+index adb04fd..18c309d 100644
+--- a/src/build/buildpnor/defaultPnorLayout.xml
++++ b/src/build/buildpnor/defaultPnorLayout.xml
+@@ -165,10 +165,10 @@ Layout Description
+         <ecc/>
+     </section>
+     <section>
+-        <description>Hostboot Runtime Services for Sapphire (3.375MB)</description>
++        <description>Hostboot Runtime Services for Sapphire (2.25MB)</description>
+         <eyeCatch>HBRT</eyeCatch>
+         <physicalOffset>0xA35000</physicalOffset>
+-        <physicalRegionSize>0x360000</physicalRegionSize>
++        <physicalRegionSize>0x240000</physicalRegionSize>
+         <sha512Version/>
+         <side>sideless</side>
+         <ecc/>
+@@ -176,7 +176,7 @@ Layout Description
+     <section>
+         <description>Payload (22.5MB)</description>
+         <eyeCatch>PAYLOAD</eyeCatch>
+-        <physicalOffset>0xD95000</physicalOffset>
++        <physicalOffset>0xC75000</physicalOffset>
+         <physicalRegionSize>0x1680000</physicalRegionSize>
+         <side>sideless</side>
+         <ecc/>
+@@ -184,7 +184,7 @@ Layout Description
+     <section>
+         <description>Special PNOR Test Space (36K)</description>
+         <eyeCatch>TEST</eyeCatch>
+-        <physicalOffset>0x2415000</physicalOffset>
++        <physicalOffset>0x3590000</physicalOffset>
+         <physicalRegionSize>0x9000</physicalRegionSize>
+         <testonly/>
+         <side>sideless</side>
+@@ -193,7 +193,7 @@ Layout Description
+     <section>
+         <description>Special PNOR Test Space (36K)</description>
+         <eyeCatch>TESTRO</eyeCatch>
+-        <physicalOffset>0x241E000</physicalOffset>
++        <physicalOffset>0x3599000</physicalOffset>
+         <physicalRegionSize>0x9000</physicalRegionSize>
+         <side>sideless</side>
+         <testonly/>
+-- 
+1.8.2.2
+
+
+From 2a5e7bdd359976c1c87096fd78b21fa235a067f1 Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Fri, 20 Feb 2015 10:59:51 -0600
+Subject: [PATCH 03/10] Revert "New interfaces to get FSI and PNOR info for
+ Xstop code"
+
+This reverts commit 79ea7abf6d31c146c680d39b9f3ae007e434a573.
+---
+ src/include/usr/fsi/fsiif.H   |  7 +---
+ src/include/usr/pnor/pnorif.H | 16 --------
+ src/usr/fsi/fsidd.C           | 31 ++++++---------
+ src/usr/fsi/test/fsiddtest.H  | 92 +------------------------------------------
+ src/usr/pnor/pnordd.C         | 33 ----------------
+ src/usr/pnor/pnordd.H         | 16 +-------
+ src/usr/pnor/sfcdd.H          | 11 +-----
+ 7 files changed, 16 insertions(+), 190 deletions(-)
+
+diff --git a/src/include/usr/fsi/fsiif.H b/src/include/usr/fsi/fsiif.H
+index 5ab2e44..756dbb7 100644
+--- a/src/include/usr/fsi/fsiif.H
++++ b/src/include/usr/fsi/fsiif.H
+@@ -5,9 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2011,2015                        */
+-/* [+] International Business Machines Corp.                              */
+-/*                                                                        */
++/* COPYRIGHT International Business Machines Corp. 2011,2014              */
+ /*                                                                        */
+ /* Licensed under the Apache License, Version 2.0 (the "License");        */
+ /* you may not use this file except in compliance with the License.       */
+@@ -111,11 +109,10 @@ struct FsiLinkInfo_t
+     uint8_t link; ///< Which link is this chip hanging off of
+     uint8_t cascade; ///< Slave cascade position
+     uint8_t mPort; ///< FSI Master port (0=A,1=B)
+-    uint32_t baseAddr; ///< Base FSI Address for this chip
+ 
+     FsiLinkInfo_t() :
+       master(NULL), type(TARGETING::FSI_MASTER_TYPE_NO_MASTER),
+-    link(0xFF), cascade(0), mPort(0), baseAddr(UINT32_MAX)
++    link(0xFF), cascade(0), mPort(0)
+     {};
+ };
+ 
+diff --git a/src/include/usr/pnor/pnorif.H b/src/include/usr/pnor/pnorif.H
+index 00f80f4..2689077 100644
+--- a/src/include/usr/pnor/pnorif.H
++++ b/src/include/usr/pnor/pnorif.H
+@@ -183,22 +183,6 @@ enum sbeSeepromSide_t
+ errlHndl_t getSbeBootSeeprom(TARGETING::Target* i_target,
+                              sbeSeepromSide_t& o_bootSide);
+ 
+-
+-/** Information about PNOR Layout */
+-struct PnorInfo_t
+-{
+-    uint32_t mmioOffset; //< Address of MMIO access
+-    uint32_t norWorkarounds; //< NOR flash workarounds
+-    uint32_t flashSize; //< Size of PNOR in bytes
+-};
+-
+-/**
+- * @brief Retrieve some information about the PNOR/SFC hardware
+- *
+- * @param[out] o_pnorInfo Information about PNOR
+- */
+-void getPnorInfo( PnorInfo_t& o_pnorInfo );
+-
+ }
+ 
+ #endif
+diff --git a/src/usr/fsi/fsidd.C b/src/usr/fsi/fsidd.C
+index 6e7ae8a..7f313aa 100644
+--- a/src/usr/fsi/fsidd.C
++++ b/src/usr/fsi/fsidd.C
+@@ -1806,15 +1806,15 @@ errlHndl_t FsiDD::genFullFsiAddr(FsiAddrInfo_t& io_addrInfo)
+     //start off with the addresses being the same
+     io_addrInfo.absAddr = io_addrInfo.relAddr;
+ 
+-    //pull the FSI info out for this target
+-    io_addrInfo.accessInfo = getFsiInfo( io_addrInfo.fsiTarg );
+-
+     //target matches master so the address is correct as-is
+     if( io_addrInfo.fsiTarg == iv_master )
+     {
+         return NULL;
+     }
+ 
++    //pull the FSI info out for this target
++    io_addrInfo.accessInfo = getFsiInfo( io_addrInfo.fsiTarg );
++
+     TRACU1COMP( g_trac_fsi, "target=%.8X : Link Id=%.8X", TARGETING::get_huid(io_addrInfo.fsiTarg), io_addrInfo.accessInfo.linkid.id );
+ 
+     //FSI master is the master proc, find the port
+@@ -3011,26 +3011,17 @@ FsiDD::FsiChipInfo_t FsiDD::getFsiInfo( TARGETING::Target* i_target )
+ void FsiDD::getFsiLinkInfo( TARGETING::Target* i_slave,
+                             FSI::FsiLinkInfo_t& o_info )
+ {
+-    FsiAddrInfo_t addr_info( i_slave, 0x0 );
+-    errlHndl_t tmp_err = genFullFsiAddr( addr_info );
+-    if( tmp_err )
+-    {
+-        TRACFCOMP( g_trac_fsi, "Error getting FsiLinkInfo for %.8X", TARGETING::get_huid(i_slave) );
+-        delete tmp_err;
+-        return;
+-    }
+-
+-    o_info.master = addr_info.accessInfo.master;
+-    o_info.type = addr_info.accessInfo.type;
+-    o_info.link = addr_info.accessInfo.port;
+-    o_info.cascade = addr_info.accessInfo.cascade;
++    FsiChipInfo_t info = getFsiInfo( i_slave );
++    o_info.master = info.master;
++    o_info.type = info.type;
++    o_info.link = info.port;
++    o_info.cascade = info.cascade;
+     o_info.mPort = 0;
+-    if( addr_info.accessInfo.master
+-        && (addr_info.accessInfo.master != iv_master )
+-        && (getFsiInfo(addr_info.accessInfo.master).flagbits.flipPort) )
++    if( info.master
++        && (info.master != iv_master )
++        && (getFsiInfo(info.master).flagbits.flipPort) )
+     {
+         o_info.mPort = 1;
+     }
+-    o_info.baseAddr = addr_info.absAddr;
+ }
+ 
+diff --git a/src/usr/fsi/test/fsiddtest.H b/src/usr/fsi/test/fsiddtest.H
+index ab409bc..5d6eaaa 100644
+--- a/src/usr/fsi/test/fsiddtest.H
++++ b/src/usr/fsi/test/fsiddtest.H
+@@ -5,9 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2011,2015                        */
+-/* [+] International Business Machines Corp.                              */
+-/*                                                                        */
++/* COPYRIGHT International Business Machines Corp. 2011,2014              */
+ /*                                                                        */
+ /* Licensed under the Apache License, Version 2.0 (the "License");        */
+ /* you may not use this file except in compliance with the License.       */
+@@ -447,94 +445,6 @@ class FsiDDTest : public CxxTest::TestSuite
+ 
+         TRACFCOMP( g_trac_fsi, "FsiDDTest::test_FFDC> Finish" );
+     };
+-
+-    /**
+-     * @brief FSI DD test - FSI Link Info
+-     *        Spot check getFsiLinkInfo results
+-     */
+-    void test_getFsiLinkInfo(void)
+-    {
+-        TRACFCOMP( g_trac_fsi, "FsiDDTest::test_getFsiLinkInfo> Start" );
+-
+-        enum {
+-            PROC0,
+-            CENTAUR4,
+-            NUM_TARGETS
+-        };
+-        TARGETING::Target* fsi_targets[NUM_TARGETS];
+-        for( size_t x = 0; x < NUM_TARGETS; x++ )
+-        {
+-            fsi_targets[x] = NULL;
+-        }
+-
+-        TARGETING::Target* fsi_target = NULL;
+-
+-        // master processor target
+-        TARGETING::EntityPath epath(TARGETING::EntityPath::PATH_PHYSICAL);
+-        epath.addLast(TARGETING::TYPE_SYS,0);
+-        epath.addLast(TARGETING::TYPE_NODE,0);
+-        epath.addLast(TARGETING::TYPE_PROC,0);
+-        fsi_target = TARGETING::targetService().toTarget(epath);
+-        fsi_targets[PROC0] = fsi_target;
+-
+-        // local centaur target (physical:sys-0/node-0/membuf-4)
+-        epath.removeLast();
+-        epath.addLast(TARGETING::TYPE_MEMBUF,4);
+-        fsi_target = TARGETING::targetService().toTarget(epath);
+-        fsi_targets[CENTAUR4] = fsi_target;
+-
+-
+-
+-        // loop through all of the targets we defined to
+-        //  check the data
+-        for( size_t x = 0; x < NUM_TARGETS; x++ )
+-        {
+-            if( fsi_targets[x] == NULL )
+-            {
+-                continue;
+-            }
+-
+-            // Get the FSI port info for this target
+-            TARGETING::FSI_MASTER_TYPE type =
+-              fsi_targets[x]->getAttr<TARGETING::ATTR_FSI_MASTER_TYPE>();
+-            uint8_t slave_port =
+-              fsi_targets[x]->getAttr<TARGETING::ATTR_FSI_MASTER_PORT>();
+-            TARGETING::EntityPath masterpath =
+-              fsi_targets[x]->getAttr<TARGETING::ATTR_FSI_MASTER_CHIP>();
+-            TARGETING::Target* master =
+-              TARGETING::targetService().toTarget(masterpath);
+-            uint8_t master_port = 0;
+-            if( type != TARGETING::FSI_MASTER_TYPE_NO_MASTER )
+-            {
+-                master_port =
+-                  master->getAttr<TARGETING::ATTR_FSI_MASTER_PORT>()+1;
+-            }
+-
+-            TRACFCOMP( g_trac_fsi, "sport=%d, mport=%d, master=%.8X, type=%d",slave_port,master_port, TARGETING::get_huid(master), master_port);
+-            // Compute the offset
+-            //   CMFSI ports start at 0x040000 and increment by 0x008000
+-            //   MFSI ports start at 0x080000 and increment by 0x080000
+-            //    (local CMFSI ports have no MFSI offset)
+-            uint32_t offset = (master_port * 0x080000);
+-            if( type == TARGETING::FSI_MASTER_TYPE_CMFSI )
+-            {
+-                offset += ((slave_port * 0x008000) + 0x040000);
+-            }
+-
+-            // Now call the interface we want to test
+-            FSI::FsiLinkInfo_t linkinfo;
+-            FSI::getFsiLinkInfo( fsi_targets[x], linkinfo );
+-
+-            // Compare the results
+-            TRACFCOMP( g_trac_fsi, "FsiDDTest::test_getFsiLinkInfo> Data for %.8X: exp=%.6X, act=%.6X", TARGETING::get_huid(fsi_targets[x]), offset, linkinfo.baseAddr );
+-            if( linkinfo.baseAddr != offset )
+-            {
+-                TS_FAIL( "FsiDDTest::test_getFsiLinkInfo> Mismatch for %.8X: exp=%.6X, act=%.6X", TARGETING::get_huid(fsi_targets[x]), offset, linkinfo.baseAddr );
+-            }
+-        }
+-
+-        TRACFCOMP( g_trac_fsi, "FsiDDTest::test_getFsiLinkInfo> End" );
+-    }
+ };     
+ 
+ 
+diff --git a/src/usr/pnor/pnordd.C b/src/usr/pnor/pnordd.C
+index 13667ce..0d47898 100644
+--- a/src/usr/pnor/pnordd.C
++++ b/src/usr/pnor/pnordd.C
+@@ -191,19 +191,6 @@ bool usingL3Cache()
+     return Singleton<PnorDD>::instance().usingL3Cache();
+ }
+ 
+-/**
+- * @brief Retrieve some information about the PNOR/SFC hardware
+- */
+-void getPnorInfo( PnorInfo_t& o_pnorInfo )
+-{
+-    o_pnorInfo.mmioOffset = 0; //LPC_SFC_MMIO_OFFSET;//@fixme-need Prachi's code for this
+-    o_pnorInfo.norWorkarounds =
+-      Singleton<PnorDD>::instance().getNorWorkarounds();
+-    o_pnorInfo.flashSize =
+-      Singleton<PnorDD>::instance().getNorSize();
+-}
+-
+-
+ 
+ // Register PNORDD access functions to DD framework
+ DEVICE_REGISTER_ROUTE(DeviceFW::READ,
+@@ -878,23 +865,3 @@ errlHndl_t PnorDD::_eraseFlash( uint32_t i_addr )
+ 
+     return l_err;
+ }
+-
+-/**
+- * @brief Retrieve bitstring of NOR workarounds
+- */
+-uint32_t PnorDD::getNorWorkarounds( void )
+-{
+-    return iv_sfc->getNorWorkarounds();
+-}
+-
+-/**
+- * @brief Retrieve size of NOR flash
+- */
+-uint32_t PnorDD::getNorSize( void )
+-{
+-#ifdef CONFIG_PNOR_IS_32MB
+-    return (32*MEGABYTE);
+-#else //default to 64MB
+-    return (64*MEGABYTE);
+-#endif
+-}
+diff --git a/src/usr/pnor/pnordd.H b/src/usr/pnor/pnordd.H
+index 94c393b..589f60e 100644
+--- a/src/usr/pnor/pnordd.H
++++ b/src/usr/pnor/pnordd.H
+@@ -5,7 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2011,2015                        */
++/* Contributors Listed Below - COPYRIGHT 2011,2014                        */
+ /* [+] Google Inc.                                                        */
+ /* [+] International Business Machines Corp.                              */
+ /*                                                                        */
+@@ -82,19 +82,6 @@ class PnorDD
+     bool usingL3Cache( );
+ 
+ 
+-    /**
+-     * @brief Retrieve bitstring of NOR workarounds
+-     * @return NOR workarounds (see VendorWorkarounds in norflash.H)
+-     */
+-    uint32_t getNorWorkarounds( void );
+-
+-    /**
+-     * @brief Retrieve size of NOR flash
+-     * @return Size of PNOR in bytes
+-     */
+-    uint32_t getNorSize( void );
+-
+-
+     // Enumeration values must match those in debug framework.
+     enum PnorMode_t {
+         MODEL_UNKNOWN,   /**< Invalid */
+@@ -353,7 +340,6 @@ class PnorDD
+      */
+     errlHndl_t _eraseFlash( uint32_t i_address );
+ 
+-
+   private: // Variables
+ 
+    /**
+diff --git a/src/usr/pnor/sfcdd.H b/src/usr/pnor/sfcdd.H
+index 72285f5..7c27a1e 100644
+--- a/src/usr/pnor/sfcdd.H
++++ b/src/usr/pnor/sfcdd.H
+@@ -5,7 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2014,2015                        */
++/* Contributors Listed Below - COPYRIGHT 2014                             */
+ /* [+] Google Inc.                                                        */
+ /* [+] International Business Machines Corp.                              */
+ /*                                                                        */
+@@ -149,15 +149,6 @@ class SfcDD
+     };
+ 
+     /**
+-     * @brief Retrieve bitstring of NOR workarounds
+-     * @return NOR workarounds (see VendorWorkarounds in norflash.H)
+-     */
+-    uint32_t getNorWorkarounds( void )
+-    {
+-        return iv_flashWorkarounds;
+-    };
+-
+-    /**
+      * @brief Destructor
+      */
+     virtual ~SfcDD();
+-- 
+1.8.2.2
+
+
+From d54db81391beca781b7a5e4f233dea8971ced5c7 Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Fri, 20 Feb 2015 11:00:00 -0600
+Subject: [PATCH 04/10] Revert "Skipping over readTOC if hostInterface for
  pnor_read/write doesn't exist"
 
 This reverts commit 7c5d303237f2bec25b7072ec3119d6d4fef875fc.
@@ -104,10 +567,1588 @@
 1.8.2.2
 
 
-From 2eaec22c342cf6dc93c6ae4e90bf4c0dfb5607c8 Mon Sep 17 00:00:00 2001
+From 6ee93d64558e1d536cc10cd47fef5ce33416a288 Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:02:24 -0600
-Subject: [PATCH 2/6] Revert "Targeting: Generate VERSION page for binaries."
+Date: Fri, 20 Feb 2015 11:04:00 -0600
+Subject: [PATCH 05/10] Revert "Support BIOS framework"
+
+This reverts commit b24f1ca24db62f833c7f46e4244dbe8f00ee8a4c.
+---
+ src/build/mkrules/dist.targets.mk                  |    2 -
+ src/usr/targeting/common/xmltohb/bios.xsd          |  302 ------
+ .../common/xmltohb/bios_metadata_petitboot.xslt    |   93 --
+ src/usr/targeting/common/xmltohb/xmltohb.pl        | 1030 +-------------------
+ 4 files changed, 3 insertions(+), 1424 deletions(-)
+ delete mode 100644 src/usr/targeting/common/xmltohb/bios.xsd
+ delete mode 100644 src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt
+
+diff --git a/src/build/mkrules/dist.targets.mk b/src/build/mkrules/dist.targets.mk
+index 42a1525..ca28150 100644
+--- a/src/build/mkrules/dist.targets.mk
++++ b/src/build/mkrules/dist.targets.mk
+@@ -81,8 +81,6 @@ COPY_FILES = \
+     src/usr/targeting/common/xmltohb/target_types_hb.xml:openpower \
+     src/usr/targeting/common/xmltohb/xmltohb.pl:openpower \
+     src/include/usr/vmmconst.h:openpower \
+-    src/usr/targeting/common/xmltohb/bios.xsd:openpower \
+-    src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt:openpower \
+     $(foreach file, $(call ROOTPATH_WILDCARD,releaseNotes.html), $(file):fsp)\
+ 
+ #
+diff --git a/src/usr/targeting/common/xmltohb/bios.xsd b/src/usr/targeting/common/xmltohb/bios.xsd
+deleted file mode 100644
+index 6cd7ff4..0000000
+--- a/src/usr/targeting/common/xmltohb/bios.xsd
++++ /dev/null
+@@ -1,302 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<!-- IBM_PROLOG_BEGIN_TAG                                                   -->
+-<!-- This is an automatically generated prolog.                             -->
+-<!--                                                                        -->
+-<!-- $Source: src/usr/targeting/common/xmltohb/bios.xsd $                   -->
+-<!--                                                                        -->
+-<!-- OpenPOWER HostBoot Project                                             -->
+-<!--                                                                        -->
+-<!-- Contributors Listed Below - COPYRIGHT 2015                             -->
+-<!-- [+] International Business Machines Corp.                              -->
+-<!--                                                                        -->
+-<!--                                                                        -->
+-<!-- Licensed under the Apache License, Version 2.0 (the "License");        -->
+-<!-- you may not use this file except in compliance with the License.       -->
+-<!-- You may obtain a copy of the License at                                -->
+-<!--                                                                        -->
+-<!--     http://www.apache.org/licenses/LICENSE-2.0                         -->
+-<!--                                                                        -->
+-<!-- Unless required by applicable law or agreed to in writing, software    -->
+-<!-- distributed under the License is distributed on an "AS IS" BASIS,      -->
+-<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        -->
+-<!-- implied. See the License for the specific language governing           -->
+-<!-- permissions and limitations under the License.                         -->
+-<!--                                                                        -->
+-<!-- IBM_PROLOG_END_TAG                                                     -->
+-
+-<xs:schema
+-    xmlns:xs="http://www.w3.org/2001/XMLSchema" >
+-
+-  <xs:element name="firmware-overrides">
+-    <xs:annotation>
+-      <xs:documentation>The firmware-overrides element is the root element.  An
+-        empty firmware-overrides element implies there are no firmware overrides
+-        for a given platform.  The firmware-overrides element can have any
+-        number of attribute or group elements.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:sequence>
+-        <xs:choice minOccurs="0" maxOccurs="unbounded">
+-          <xs:element ref="group"/>
+-          <xs:element ref="attribute"/>
+-        </xs:choice>
+-      </xs:sequence>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="group">
+-    <xs:annotation>
+-      <xs:documentation>A group element defines a logical collection of
+-        firmware-overrides, and sub-groups of the same.  A group element
+-        contains a name element and any number of attribute + group elements,
+-        but it must have at least one element other than the name element.
+-  </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:sequence>
+-        <xs:element ref="name"/>
+-        <xs:sequence>
+-          <xs:choice maxOccurs="unbounded">
+-            <xs:element ref="group"/>
+-            <xs:element ref="attribute"/>
+-          </xs:choice>
+-        </xs:sequence>
+-      </xs:sequence>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="attribute">
+-    <xs:annotation>
+-      <xs:documentation>An attribute element must have an id element, and up to
+-        one each of a description element, display-name element,
+-        targetRestriction element.  It may also have either a numericOverride
+-        element (if signed/unsigned number) or enumerationOverride element (if
+-        enumeration), in that order.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:sequence>
+-        <xs:element ref="id"/>
+-        <xs:element ref="description" minOccurs="0"/>
+-        <xs:element ref="display-name" minOccurs="0"/>
+-        <xs:element ref="targetRestriction" minOccurs="0"/>
+-        <xs:choice minOccurs="0">
+-          <xs:element ref="enumerationOverride" minOccurs="0"/>
+-          <xs:element ref="numericOverride" minOccurs="0"/>
+-        </xs:choice>
+-      </xs:sequence>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="numericOverride">
+-    <xs:annotation>
+-      <xs:documentation>A numeric override limits the set of values an
+-        attribute can be set to.  A numericOverride element must have a start
+-        and end element in any order.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:choice>
+-        <xs:sequence>
+-          <xs:element ref="start" minOccurs="1" maxOccurs="1"/>
+-          <xs:element ref="end" minOccurs="0" maxOccurs="1"/>
+-        </xs:sequence>
+-        <xs:sequence>
+-          <xs:element ref="end" minOccurs="1" maxOccurs="1"/>
+-          <xs:element ref="start" minOccurs="0" maxOccurs="1"/>
+-        </xs:sequence>
+-      </xs:choice>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="targetRestriction">
+-    <xs:annotation>
+-      <xs:documentation>A target restriction restricts the attribute to apply
+-         only to the target indicated by the sub-restrictions.  A
+-         targetRestriction element may have up to one each of
+-         a type, node, position, and unit element, in any order, provided at
+-         least one of those appears.  This schema cannot easily restrict the
+-         latter condition, so the code must ensure at least one child element is
+-         present.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-       <xs:all minOccurs="0" maxOccurs="1">
+-         <xs:element ref="type"     minOccurs="0"/>
+-         <xs:element ref="node"     minOccurs="0"/>
+-         <xs:element ref="position" minOccurs="0"/>
+-         <xs:element ref="unit"     minOccurs="0"/>
+-       </xs:all>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="enumerationOverride">
+-    <xs:annotation>
+-      <xs:documentation>An enumerationOverride allows an attribute to change
+-        the behavior of the underlying enumeration.  An enumerationOverride
+-        element can have one allowedEnumerator element, any number of
+-        enumeratorOverride elements, or a union of those.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:choice>
+-        <xs:sequence>
+-          <xs:element ref="allowedEnumerators"/>
+-          <xs:element ref="enumeratorOverride"
+-            minOccurs="0" maxOccurs="unbounded"/>
+-        </xs:sequence>
+-        <xs:sequence>
+-          <xs:element ref="enumeratorOverride" maxOccurs="unbounded"/>
+-          <xs:element ref="allowedEnumerators" minOccurs="0"/>
+-        </xs:sequence>
+-      </xs:choice>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="allowedEnumerators">
+-    <xs:annotation>
+-      <xs:documentation>An allowedEnumerator restricts which enumerators can be
+-        used by the attribute.An allowedEnumerators element requires one or more
+-        name elements.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:sequence>
+-        <xs:element ref="name" maxOccurs="unbounded"/>
+-      </xs:sequence>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="enumeratorOverride">
+-    <xs:annotation>
+-      <xs:documentation>An enumeratorOverride allows an attribute to change the
+-        default text associated with an enumerator.  An enumeratorOverride
+-        requires a name element and a display-name element, descriptionElement,
+-        or union of both.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:complexType>
+-      <xs:sequence>
+-        <xs:element ref="name"/>
+-        <xs:choice>
+-          <xs:sequence>
+-            <xs:element ref="display-name"/>
+-            <xs:element ref="description" minOccurs="0"/>
+-          </xs:sequence>
+-          <xs:sequence>
+-            <xs:element ref="description"/>
+-            <xs:element ref="display-name" minOccurs="0"/>
+-          </xs:sequence>
+-        </xs:choice>
+-      </xs:sequence>
+-    </xs:complexType>
+-  </xs:element>
+-
+-  <xs:element name="id" type="xs:string">
+-    <xs:annotation>
+-      <xs:documentation>An id element provides a symbolic attribute ID that maps
+-        to a valid attribute in targeting
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="description" type="xs:string">
+-    <xs:annotation>
+-      <xs:documentation>A description element provides a longer help text for an
+-        attribute, enumeration, etc.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="display-name" type="xs:string">
+-    <xs:annotation>
+-      <xs:documentation>A display-name element provides a short name for an
+-        enumeration, attribute, etc.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="type" type="xs:string">
+-    <xs:annotation>
+-      <xs:documentation>A type element restricts the attribute to a specific
+-        named attribute type.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="start" type="xs:decimal">
+-    <xs:annotation>
+-      <xs:documentation>A start element gives the first value, inclusive, of one
+-        of the valid ranges for a numerical attribute. It cannot fall outside
+-        of the base range allowed for the given attribute type, and must be at
+-        least one less than the max of the base range.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="end" type="xs:decimal">
+-    <xs:annotation>
+-      <xs:documentation>An end element gives the last value, inclusive, of one
+-        of the valid ranges for a numerical attribute. It cannot fall outside
+-        of the base range allowed for the given attribute type, and must be at
+-        least one less than the max of the base range.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="name" type="xs:string">
+-    <xs:annotation>
+-      <xs:documentation>A name element gives the name of the attribute group,
+-        etc.
+-      </xs:documentation>
+-    </xs:annotation>
+-  </xs:element>
+-
+-  <xs:element name="unit">
+-    <xs:annotation>
+-      <xs:documentation>A unit element allows an attribute to restrict its
+-        scope to a specific target unit.  If a position element is specified in
+-        a targetRestriction along with a unit, then the unit's chip's position
+-        must match that as well.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:simpleType>
+-      <xs:restriction base="xs:unsignedByte">
+-        <xs:minInclusive value="0"/>
+-        <xs:maxInclusive value="254"/>
+-      </xs:restriction>
+-    </xs:simpleType>
+-  </xs:element>
+-
+-  <xs:element name="position">
+-    <xs:annotation>
+-      <xs:documentation>A position element allows an attribute to restrict
+-        its scope to a specific position.  Only applicable for targets with
+-        positions, unless used in conjuction with the unit element.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:simpleType>
+-      <xs:restriction base="xs:unsignedShort">
+-        <xs:minInclusive value="0"/>
+-        <xs:maxInclusive value="65534"/>
+-      </xs:restriction>
+-    </xs:simpleType>
+-  </xs:element>
+-
+-  <xs:element name="node">
+-    <xs:annotation>
+-      <xs:documentation>A node element allows an attribute to restrict
+-        its scope to a specific node.
+-      </xs:documentation>
+-    </xs:annotation>
+-    <xs:simpleType>
+-      <xs:restriction base="xs:unsignedByte">
+-        <xs:minInclusive value="0"/>
+-        <xs:maxInclusive value="14"/>
+-      </xs:restriction>
+-    </xs:simpleType>
+-  </xs:element>
+-
+-</xs:schema>
+-
+diff --git a/src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt b/src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt
+deleted file mode 100644
+index ee2a2bc..0000000
+--- a/src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt
++++ /dev/null
+@@ -1,93 +0,0 @@
+-<?xml version="1.0"?>
+-<!-- IBM_PROLOG_BEGIN_TAG                                                   -->
+-<!-- This is an automatically generated prolog.                             -->
+-<!--                                                                        -->
+-<!-- $Source: src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt $ -->
+-<!--                                                                        -->
+-<!-- OpenPOWER HostBoot Project                                             -->
+-<!--                                                                        -->
+-<!-- Contributors Listed Below - COPYRIGHT 2015                             -->
+-<!-- [+] International Business Machines Corp.                              -->
+-<!--                                                                        -->
+-<!--                                                                        -->
+-<!-- Licensed under the Apache License, Version 2.0 (the "License");        -->
+-<!-- you may not use this file except in compliance with the License.       -->
+-<!-- You may obtain a copy of the License at                                -->
+-<!--                                                                        -->
+-<!--     http://www.apache.org/licenses/LICENSE-2.0                         -->
+-<!--                                                                        -->
+-<!-- Unless required by applicable law or agreed to in writing, software    -->
+-<!-- distributed under the License is distributed on an "AS IS" BASIS,      -->
+-<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        -->
+-<!-- implied. See the License for the specific language governing           -->
+-<!-- permissions and limitations under the License.                         -->
+-<!--                                                                        -->
+-<!-- IBM_PROLOG_END_TAG                                                     -->
+-
+-<xsl:stylesheet version="1.0"
+-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+-
+-<xsl:output method="xml" version="1.0"
+-  encoding="UTF-8" indent="yes"/>
+-
+-<xsl:template match="/">
+-  <firmware-overrides>
+-    <xsl:apply-templates select="firmware-overrides/attribute"/>
+-    <xsl:apply-templates select="firmware-overrides/group"/>
+-  </firmware-overrides>
+-</xsl:template>
+-
+-<xsl:template match="attribute">
+-  <attribute>
+-    <xsl:attribute name="id">
+-      <xsl:value-of select="id"/>
+-    </xsl:attribute>
+-    <numeric-id><xsl:value-of select="numeric-id"/></numeric-id>
+-    <type>
+-        <size><xsl:value-of select="size"/></size>
+-        <encoding><xsl:value-of select="encoding"/></encoding>
+-    </type>
+-    <default><xsl:value-of select="default"/></default>
+-    <display-name><xsl:value-of select="display-name"/></display-name>
+-    <description><xsl:value-of select="description"/></description>
+-    <target>
+-      <type><xsl:value-of select="target/type"/></type>
+-      <node><xsl:value-of select="target/node"/></node>
+-      <position><xsl:value-of select="target/position"/></position>
+-      <unit><xsl:value-of select="target/unit"/></unit>
+-    </target>
+-    <xsl:apply-templates select="numericOverride"/>
+-    <xsl:apply-templates select="enumeration"/>
+-  </attribute>
+-</xsl:template>
+-
+-<xsl:template match="numericOverride">
+-  <range>
+-    <start><xsl:value-of select="start"/></start>
+-    <end><xsl:value-of select="end"/></end>
+-  </range>
+-</xsl:template>
+-
+-<xsl:template match="enumeration">
+-  <enumeration>
+-    <xsl:apply-templates select="./enumerator"/>
+-  </enumeration>
+-</xsl:template>
+-
+-<xsl:template match="enumerator">
+-  <enumerator>
+-    <display-name><xsl:value-of select="display-name"/></display-name>
+-    <description><xsl:value-of select="description"/></description>
+-    <value><xsl:value-of select="value"/></value>
+-  </enumerator>
+-</xsl:template>
+-
+-<xsl:template match="group">
+-  <group>
+-    <name><xsl:value-of select="name"/></name>
+-    <xsl:apply-templates select="./attribute"/>
+-    <xsl:apply-templates select="./group"/>
+-  </group>
+-</xsl:template>
+-
+-</xsl:stylesheet>
+diff --git a/src/usr/targeting/common/xmltohb/xmltohb.pl b/src/usr/targeting/common/xmltohb/xmltohb.pl
+index 6e8db84..d02c1a7 100755
+--- a/src/usr/targeting/common/xmltohb/xmltohb.pl
++++ b/src/usr/targeting/common/xmltohb/xmltohb.pl
+@@ -48,7 +48,6 @@ use Text::Wrap;
+ use Data::Dumper;
+ use POSIX;
+ use Env;
+-use XML::LibXML;
+ 
+ ################################################################################
+ # Set PREFERRED_PARSER to XML::Parser. Otherwise it uses XML::SAX which contains
+@@ -77,10 +76,6 @@ my $cfgIncludeFspAttributes = 0;
+ my $CfgSMAttrFile = "";
+ my $cfgAddVersionPage = 0;
+ 
+-my $cfgBiosXmlFile = undef;
+-my $cfgBiosSchemaFile = undef;
+-my $cfgBiosOutputFile = undef;
+-
+ GetOptions("hb-xml-file:s" => \$cfgHbXmlFile,
+            "src-output-dir:s" =>  \$cfgSrcOutputDir,
+            "img-output-dir:s" =>  \$cfgImgOutputDir,
+@@ -92,9 +87,6 @@ GetOptions("hb-xml-file:s" => \$cfgHbXmlFile,
+            "smattr-output-file:s" => \$CfgSMAttrFile,
+            "include-fsp-attributes!" =>  \$cfgIncludeFspAttributes,
+            "version-page!" => \$cfgAddVersionPage,
+-           "bios-xml-file:s" => \$cfgBiosXmlFile,
+-           "bios-schema-file:s" => \$cfgBiosSchemaFile,
+-           "bios-output-file:s" => \$cfgBiosOutputFile,
+            "help" => \$cfgHelp,
+            "man" => \$cfgMan,
+            "verbose" => \$cfgVerbose ) || pod2usage(-verbose => 0);
+@@ -124,9 +116,6 @@ if($cfgVerbose)
+     print STDOUT "Big endian = $cfgBigEndian\n";
+     print STDOUT "include-fsp-attributes = $cfgIncludeFspAttributes\n",
+     print STDOUT "version-page = $cfgAddVersionPage\n",
+-    print STDOUT "bios-schema-file = $cfgBiosSchemaFile\n";
+-    print STDOUT "bios-xml-file = $cfgBiosXmlFile\n";
+-    print STDOUT "bios-output-file = $cfgBiosOutputFile\n";
+ }
+ 
+ ################################################################################
+@@ -151,11 +140,6 @@ my @associationTypes = ( PARENT_BY_CONTAINMENT,
+ use constant ATTR_PHYS_PATH => "PHYS_PATH";
+ use constant ATTR_AFFINITY_PATH => "AFFINITY_PATH";
+ use constant ATTR_UNKNOWN => "UnknownAttributeName";
+-use constant ATTR_POSITION => "POSITION";
+-use constant ATTR_CHIP_UNIT => "CHIP_UNIT";
+-use constant ATTR_CLASS => "CLASS";
+-use constant ATTR_TYPE => "TYPE";
+-use constant ATTR_MODEL => "MODEL";
+ 
+ # Data manipulation constants
+ use constant BITS_PER_BYTE => 8;
+@@ -475,7 +459,6 @@ sub validateAttributes {
+                              = { required => 0, isscalar => 0};
+     $elements{"hwpfToHbAttrMap"}
+                              = { required => 0, isscalar => 0};
+-    $elements{"display-name"} = { required => 0, isscalar => 1};
+ 
+     foreach my $attribute (@{$attributes->{attribute}})
+     {
+@@ -5267,10 +5250,6 @@ sub generateTargetingImage {
+     my $pnorRoOffset = $offset;
+     my $attributesWritten = 0;
+ 
+-    my %biosData = ();
+-    my %attributeDefCache =
+-        map { $_->{id} => $_} @{$attributes->{attribute}};
+-
+     foreach my $targetInstance (@targetsAoH)
+     {
+         my $data;
+@@ -5306,6 +5285,9 @@ sub generateTargetingImage {
+         # themselves FSP specific.  Only need to do this 1x per target instance
+         my $fspTarget = isFspTargetInstance($attributes,$targetInstance);
+ 
++        my %attributeDefCache =
++            map { $_->{id} => $_} @{$attributes->{attribute}};
++
+         # Must have the same order as the attribute list from above.
+         for my $attributeId
+             (sort
+@@ -5322,20 +5304,6 @@ sub generateTargetingImage {
+                     $attrhash{$attributeId}->{default};
+             }
+ 
+-            # Cache these attributes away in the BIOS data structure as
+-            # identifying information that will be used to enforce the target
+-            # restrictions
+-            if(    ($attributeId eq ATTR_PHYS_PATH)
+-                || ($attributeId eq ATTR_POSITION )
+-                || ($attributeId eq ATTR_CHIP_UNIT)
+-                || ($attributeId eq ATTR_CLASS    )
+-                || ($attributeId eq ATTR_TYPE     )
+-                || ($attributeId eq ATTR_MODEL    ) )
+-            {
+-                $biosData{$targetInstance->{id}}{_identity_}{$attributeId} =
+-                     $attrhash{$attributeId}->{default};
+-            }
+-
+             my $attrValue =
+             enumNameToValue($attributeIdEnumeration,$attributeId);
+             $attrValue = sprintf ("%0x", $attrValue);
+@@ -5498,11 +5466,6 @@ sub generateTargetingImage {
+                         $attributes,
+                         $attributeDef,$attrhash{$attributeId}->{default});
+ 
+-                $biosData{$targetInstance->{id}}{$attributeId}{size} =
+-                    (length $heapZeroInitData);
+-                $biosData{$targetInstance->{id}}{$attributeId}{default} =
+-                    $attrhash{$attributeId}->{default};
+-
+                 my $hex = unpack ("H*",$heapZeroInitData);
+                 push @attrDataforSM, [$attrValue, $huidValue,
+                     $hex, $section, $targetInstance->{id}, $attributeId];
+@@ -5527,11 +5490,6 @@ sub generateTargetingImage {
+                         $attributes,
+                         $attributeDef,$attrhash{$attributeId}->{default});
+ 
+-                $biosData{$targetInstance->{id}}{$attributeId}{size} =
+-                    (length $heapPnorInitData);
+-                $biosData{$targetInstance->{id}}{$attributeId}{default} =
+-                    $attrhash{$attributeId}->{default};
+-
+                 my $hex = unpack ("H*",$heapPnorInitData);
+                 push @attrDataforSM, [$attrValue, $huidValue,
+                     $hex, $section, $targetInstance->{id}, $attributeId];
+@@ -5701,11 +5659,6 @@ sub generateTargetingImage {
+                         $attributes,
+                         $attributeDef,$attrhash{$attributeId}->{default});
+ 
+-                $biosData{$targetInstance->{id}}{$attributeId}{size} =
+-                    (length $hbHeapZeroInitData);
+-                $biosData{$targetInstance->{id}}{$attributeId}{default} =
+-                    $attrhash{$attributeId}->{default};
+-
+                 # Align the data as necessary
+                 my $pads = ($alignment - ($hbHeapZeroInitOffset
+                             % $alignment)) % $alignment;
+@@ -6028,37 +5981,6 @@ sub generateTargetingImage {
+             - $fspP1DefaultedFromP3Offset));
+     }
+ 
+-    if(defined $cfgBiosXmlFile)
+-    {
+-        unless (-e $cfgBiosXmlFile)
+-        {
+-            fatal("BIOS XML file $cfgBiosXmlFile does not exist.\n");
+-        }
+-
+-        unless (defined $cfgBiosSchemaFile)
+-        {
+-            fatal("BIOS XML file $cfgBiosXmlFile specified, but a BIOS schema "
+-                . "file was not.\n");
+-        }
+-
+-        unless (-e $cfgBiosSchemaFile)
+-        {
+-            fatal("BIOS schema file $cfgBiosSchemaFile does not exist.\n");
+-        }
+-
+-        unless (defined $cfgBiosOutputFile)
+-        {
+-            fatal("BIOS output file not specified.\n");
+-        }
+-
+-        my $bios = new
+-            Bios($cfgBiosXmlFile,$cfgBiosSchemaFile,$cfgBiosOutputFile);
+-        $bios->load();
+-        $bios->processBios(
+-            \%attributeDefCache,\$attributes,\%biosData,%targetPhysicalPath);
+-        $bios->export();
+-    }
+-
+     return $outFile;
+ }
+ 
+@@ -6090,935 +6012,6 @@ print SM_TARGET_FILE"
+     close(SM_TARGET_FILE);
+ }
+ 
+-################################################################################
+-# BIOS Package
+-#    Consumes platform-specific BIOS XML file, validates it, and outputs
+-#    extended data on the attributes, which will be transformed (via xslt
+-#    stylesheets) and used by 3rd parties (like Petitboot).  The BIOS
+-#    package validates the input file against a stylesheet to ensure
+-#    proper formatting.
+-################################################################################
+-
+-{
+-
+-package Bios;
+-
+-################################################################################
+-# Constructor; create a new Bios object
+-################################################################################
+-
+-sub new
+-{
+-    my ($class,$biosInputXmlFile,$biosSchemaXsdFile,$biosOutputXmlFile) = @_;
+-    my $self = {
+-        _biosInputXmlFile => $biosInputXmlFile,
+-        _libXmlParser => XML::LibXML->new(),
+-        _biosXmlDoc => undef,
+-        _biosSchemaXsdFile => $biosSchemaXsdFile,
+-        _biosOutputXmlFile => $biosOutputXmlFile,
+-    };
+-
+-    bless $self, $class;
+-
+-    return $self;
+-}
+-
+-################################################################################
+-# Load and parse the BIOS XML data, then validate it
+-################################################################################
+-
+-sub load
+-{
+-    my ($self) = @_;
+-    my $biosSchemaXsd = undef;
+-
+-    eval
+-    {
+-        $self->{_biosXmlDoc} =
+-            $self->{_libXmlParser}->parse_file($self->{_biosInputXmlFile});
+-    };
+-
+-    main::fatal ("Failed to parse BIOS file [$self->{_biosInputXmlFile}].\n"
+-        . " Reason: $@") if $@;
+-
+-    eval
+-    {
+-        $biosSchemaXsd =
+-            XML::LibXML::Schema->new(location => $self->{_biosSchemaXsdFile} );
+-    };
+-
+-    main::fatal ("Failed to load valid schema [$self->{_biosSchemaXsdFile}].\n"
+-        . "Reason: $@") if $@;
+-
+-    eval
+-    {
+-        $biosSchemaXsd->validate($self->{_biosXmlDoc})
+-    };
+-
+-    main::fatal ("Failed to validate [$self->{_biosInputXmlFile}] "
+-        . "using schema [$self->{_biosSchemaXsdFile}].\n"
+-        . "Reason: $@") if $@;
+-}
+-
+-################################################################################
+-# Export the working version of the BIOS document to a file our STDOUT
+-################################################################################
+-
+-sub export
+-{
+-    my ($self,$forceStdout) = @_;
+-
+-    if(defined $forceStdout
+-        && ($forceStdout == 1))
+-    {
+-        print STDOUT "In-memory BIOS XML dump:\n";
+-        print STDOUT $self->{_biosXmlDoc}->toString();
+-    }
+-    else
+-    {
+-        open(OUTPUT_XML,">$self->{_biosOutputXmlFile}") or
+-            main::fatal("Could not open output BIOS XML file "
+-                . "[$self->{_biosOutputXmlFile}] for writing.\n"
+-                . "Reason: $!");
+-
+-        print OUTPUT_XML $self->{_biosXmlDoc}->toString() or
+-            main::fatal ("Failed write output BIOS XML file "
+-                . "[$self->{_biosOutputXmlFile}].\n"
+-                . "Reason: $!");
+-
+-        close OUTPUT_XML or
+-            main::fatal ("Failed to close output BIOS XML file "
+-                . "[$self->{_biosOutputXmlFile}].\n"
+-                . "Reason: $!");
+-    }
+-}
+-
+-################################################################################
+-# Create child element in BIOS XML tree and return it
+-################################################################################
+-
+-sub createChildElement()
+-{
+-    my ($self,$parent,$name,$value) = @_;
+-
+-    my $child = XML::LibXML::Element->new($name);
+-
+-    # Value is optional parameter; if not specified, only the child container
+-    # element is created
+-    if(defined $value)
+-    {
+-        $child->appendTextNode($value);
+-    }
+-    $parent->addChild($child);
+-
+-    return $child;
+-}
+-
+-################################################################################
+-# Validate any constraint not enforced by the schema and amend the XML tree
+-################################################################################
+-
+-sub processBios
+-{
+-    my($self,$attrMapRef,$attributesRef,$instanceRef,%targetPhysicalPath) = @_;
+-
+-    use bigint;
+-
+-    my %attrTargAttrSetByBios = ();
+-
+-    # Process all attribute elements regardless of tree location
+-    foreach my $attribute ($self->{_biosXmlDoc}->findnodes('//attribute'))
+-    {
+-        my($id) = $attribute->findnodes('./id');
+-        my $attributeId =  $id->to_literal;
+-
+-        # Attribute must be defined in targeting
+-        if(!exists $attrMapRef->{$attributeId})
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is not defined in targeting.\n");
+-        }
+-
+-        # Attribute must have volatile persistency
+-        if($attrMapRef->{$attributeId}{persistency} ne "volatile"
+-             && $attrMapRef->{$attributeId}{persistency} ne "volatile-zeroed")
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is neither volatile nor volatile-zeroed "
+-                . "in targeting.  Actual persistency is "
+-                . "$attrMapRef->{$attributeId}{persistency}.\n");
+-        }
+-
+-        # Attribute must be read only
+-        my $readable = exists $attrMapRef->{$attributeId}{readable} ? 1 : 0;
+-        my $writeable = exists $attrMapRef->{$attributeId}{writeable} ? 1 : 0;
+-        if(!$readable || $writeable)
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is not read-only in targeting.  "
+-                . "Readable? " . $readable
+-                . " writeable? " . $writeable . "\n");
+-        }
+-
+-        # Attribute must not be an FSP-only attribute
+-        my $fspOnly = exists $attrMapRef->{$attributeId}{fspOnly} ? 1 : 0;
+-        if($fspOnly)
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is FSP only in targeting.\n");
+-        }
+-
+-        # Attribute must be an allowed type -and- supported by the BIOS code
+-        # Current support is for signed/unsigned ints (1,2,4,8 bytes in size)
+-        # and enumerations
+-        my $simpleType = exists $attrMapRef->{$attributeId}{simpleType} ? 1 : 0;
+-        my $complexType =
+-            exists $attrMapRef->{$attributeId}{complexType} ? 1 : 0;
+-        my $nativeType = exists $attrMapRef->{$attributeId}{nativeType} ? 1 : 0;
+-        if(!$simpleType)
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is not a simple type in targeting.  "
+-                . "Complex type? $complexType, native type? $nativeType.\n");
+-        }
+-
+-        # Defines which attributes can be put in the BIOS and provides
+-        # associated BIOS type hint for 3rd party consumer
+-        my %typeHash = ();
+-
+-        $typeHash{"int8_t"} =
+-             { generalType => 'signed',
+-               min         => -128,
+-               max         => 127,
+-               ror         => 1,
+-             };
+-        $typeHash{"int16_t"} =
+-             { generalType => 'signed',
+-               min         => -32768,
+-               max         => 32767,
+-               ror         => 1,
+-             };
+-        $typeHash{"int32_t"} =
+-             { generalType => 'signed',
+-               min         => -2147483648,
+-               max         => 2147483647,
+-               ror         => 1,
+-             };
+-        $typeHash{"int64_t"} =
+-             { generalType => 'signed',
+-               min         => -9223372036854775808,
+-               max         => 9223372036854775807,
+-               ror         => 1,
+-             };
+-        $typeHash{"uint8_t"} =
+-             { generalType => 'unsigned',
+-               min         => 0,
+-               max         => 255,
+-               ror         => 1,
+-              };
+-        $typeHash{"uint16_t"} =
+-             { generalType => 'unsigned',
+-               min         => 0,
+-               max         => 65535,
+-               ror         => 1,
+-             };
+-        $typeHash{"uint32_t"} =
+-             { generalType => 'unsigned',
+-               min         => 0,
+-               max         => 4294967295,
+-               ror         => 1,
+-             };
+-        $typeHash{"uint64_t"} =
+-             { generalType => 'unsigned',
+-               min         => 0,
+-               max         => 18446744073709551615,
+-               ror         => 1,
+-             };
+-        $typeHash{"enumeration"} =
+-             { generalType => 'unsigned',
+-               min         => 'na',
+-               max         => 'na',
+-               ror         => 1,
+-             };
+-
+-        my $validType = 0;
+-        my $attrType = "unknown";
+-        # Convert actual type into a generalized type hint for the BIOS consumer
+-        # and append to the XML tree
+-        foreach my $type (keys %typeHash)
+-        {
+-            if(exists $attrMapRef->{$attributeId}{simpleType}{$type})
+-            {
+-                $self->createChildElement($attribute,"encoding",
+-                    $typeHash{$type}{generalType});
+-                $attrType = $type;
+-                $validType = 1;
+-                last;
+-            }
+-        }
+-        if(!$validType)
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute's type is not supported in BIOS context. "
+-                . "Dump of type:\n"
+-                . ::Dumper($attrMapRef->{$attributeId}{simpleType}) . "\n");
+-        }
+-
+-        # Simple type must not be array
+-        if(exists $attrMapRef->{$attributeId}{simpleType}{array})
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "that attribute is an array which is not supported in "
+-                . "BIOS context.\n");
+-        }
+-
+-        # If attribute definition doesn't have a short name, it must be
+-        # overridden by the BIOS config.  Add final value to the XML tree
+-        my($displayNameNodes) = $attribute->findnodes('./display-name');
+-        if(!$displayNameNodes)
+-        {
+-            if(exists $attrMapRef->{$attributeId}{'display-name'})
+-            {
+-                $self->createChildElement(
+-                    $attribute,"display-name",
+-                    $attrMapRef->{$attributeId}{'display-name'});
+-            }
+-            else
+-            {
+-                main::fatal("BIOS definition specified attribute $attributeId, "
+-                    . "but attribute definition does not give a display name, "
+-                    . "so BIOS config must (but failed to do so).\n");
+-            }
+-        }
+-
+-        # If attribute definition doesn't have a description, it must be
+-        # overridden by the BIOS config.  Add final value to the XML tree
+-        my($descriptionNodes) = $attribute->findnodes('./description');
+-        if(!$descriptionNodes)
+-        {
+-            if(exists $attrMapRef->{$attributeId}{description})
+-            {
+-               $self->createChildElement(
+-                    $attribute,"description",
+-                    $attrMapRef->{$attributeId}{description});
+-            }
+-            else
+-            {
+-                main::fatal("BIOS definition specified attribute $attributeId, "
+-                    . "but attribute definition does not give a description, "
+-                    . "so BIOS config must (but failed to do so).\n");
+-            }
+-        }
+-
+-        my $default = undef;
+-        my $size = undef;
+-        my @targetRestrictions = $attribute->findnodes('./targetRestriction');
+-
+-        # Assume all targets have this BIOS attribute to begin with, then prove
+-        # otherwise during processing
+-        my %filteredTargets = %$instanceRef;
+-        foreach my $target (keys %filteredTargets)
+-        {
+-            $filteredTargets{$target}{_allowed_} = 1;
+-        }
+-
+-        # Hold the target override data
+-        my %restriction = ();
+-        $restriction{node} = 0x0F; # FAPI override value = any position
+-        $restriction{position} = 0xFFFF; # FAPI override value = any position
+-        $restriction{unit} = 0xFF; # FAPI override value = any unit
+-        $restriction{symbolicType} = "*"; # Easy to understand target type
+-        $restriction{numericType} = 0x0; # FAPI type indicator; 0 = any
+-
+-        # Scan target restriction(s).  If no restriction, the BIOS attribute
+-        # must have same default for all instances.  If target restriction, all
+-        # attributes that are grouped by the restriction must have the same
+-        # default value.
+-        if(scalar @targetRestrictions > 0)
+-        {
+-            my $restrictNode = "*";
+-            my $restrictPos  = "*"; # NA except for things with positions
+-                                    # including units
+-            my $restrictUnit = "*"; # NA except for units
+-            my $restrictType = "*";
+-
+-            # By default, a BIOS setting applies to every target the attribute
+-            # is assigned to in targeting.  However, a target restriction can
+-            # restrict an attribute to one or more subsets of those.  The set of
+-            # targets tied to same BIOS attribute+restriction cannot intersect
+-            # with any other similar grouping.  Further, all attributes of
+-            # same type tied to same BIOS attribute via the restriction must
+-            # have same default value.  Only one target restriction allowed by
+-            # the schema
+-            foreach my $targetRestriction (@targetRestrictions)
+-            {
+-                # Schema validation doesn't easily force targetRestrictions to
+-                # have at least one child, so bail if that's the case
+-                my @childElements = $targetRestriction->findnodes('./*');
+-                if(scalar @childElements == 0)
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, but requested targetRestriction with "
+-                        . "no parameters.\n");
+-                }
+-
+-                my @nodeElements = $targetRestriction->findnodes('./node');
+-                my @positionElements
+-                    = $targetRestriction->findnodes('./position');
+-                my @unitElements = $targetRestriction->findnodes('./unit');
+-                my @typeElements = $targetRestriction->findnodes('./type');
+-
+-                if(scalar @nodeElements)
+-                {
+-                    $restriction{node} = $nodeElements[0]->to_literal;
+-                }
+-
+-                if(scalar @positionElements)
+-                {
+-                    $restriction{position} = $positionElements[0]->to_literal;
+-                }
+-
+-                if(scalar @unitElements)
+-                {
+-                    $restriction{unit} = $unitElements[0]->to_literal;
+-                }
+-
+-                # If any type restriction, verify it is a valid type designator
+-                # any hold onto the numeric ID which will end up in the XML tree
+-                if(scalar @typeElements)
+-                {
+-                    my $symbolicType = $typeElements[0]->to_literal;
+-                    my $typeEnumDef =
+-                        ::getEnumerationType($$attributesRef,"TYPE");
+-                    my $numericType =
+-                        ::enumNameToValue($typeEnumDef,$symbolicType);
+-
+-                    $restriction{numericType} = $numericType;
+-                    $restriction{symbolicType} = $symbolicType;
+-                }
+-
+-                # Compute the affected targets
+-                foreach my $target (keys %filteredTargets)
+-                {
+-                    if(scalar @typeElements > 0)
+-                    {
+-                        $restrictType = $typeElements[0]->to_literal;
+-
+-                        # Screen out targets that don't match the given type
+-                        if($filteredTargets{$target}{_allowed_} == 1)
+-                        {
+-                            my $type =
+-                                $filteredTargets{$target}{_identity_}{TYPE};
+-                            if($restrictType ne $type
+-                                && $filteredTargets{$target}{_allowed_} == 1)
+-                            {
+-                                $filteredTargets{$target}{_allowed_} = 0;
+-                                next;
+-                            }
+-                        }
+-                    }
+-
+-                    if(scalar @nodeElements > 0)
+-                    {
+-                        $restrictNode = $nodeElements[0]->to_literal;
+-
+-                        # Screen out targets that don't match the given node.
+-                        # A target matches the node restriction if its physical
+-                        # path contains the same node ID.
+-                        my $isInSameNodeExpr =
+-                            quotemeta "physical:sys-0/node-$restrictNode" ;
+-                        my $path =
+-                            $filteredTargets{$target}{_identity_}{PHYS_PATH};
+-
+-                        if($path !~ m/^$isInSameNodeExpr/)
+-                        {
+-                            $filteredTargets{$target}{_allowed_} = 0;
+-                            next;
+-                        }
+-                    }
+-
+-                    if(scalar @unitElements > 0)
+-                    {
+-                        $restrictUnit = $unitElements[0]->to_literal;
+-
+-                        my $checkPosition = 0;
+-
+-                        # Screen out targets that do not have unit attributes,
+-                        # or which have non-matching unit attributes
+-                        if(   (!exists
+-                               $filteredTargets{$target}{_identity_}{CHIP_UNIT})
+-                           || ($filteredTargets{$target}{_identity_}{CHIP_UNIT}
+-                               != $restrictUnit)   )
+-                        {
+-                            $filteredTargets{$target}{_allowed_} = 0;
+-                            next;
+-                        }
+-                        else
+-                        {
+-                            $checkPosition = 1;
+-                        }
+-
+-                        # If unit matches, need to make sure it also sits on
+-                        # chip at requested position, if specified
+-                        if($checkPosition && ((scalar @positionElements) > 0))
+-                        {
+-                            my $candidatePath =
+-                               $filteredTargets{$target}{_identity_}{PHYS_PATH};
+-
+-                            my $parent_phys_path = substr(
+-                                $candidatePath, 0,(rindex $candidatePath, "/"));
+-                            my $foundPosition = 0;
+-
+-                            # Walk from unit to whatever parent has the position
+-                            # attribute; Remove this target from consideration
+-                            # if the position does not match the restriction
+-                            while(
+-                                defined $targetPhysicalPath{$parent_phys_path})
+-                            {
+-                                if(defined $filteredTargets{
+-                                       $targetPhysicalPath{$parent_phys_path}
+-                                   }{_identity_}{POSITION})
+-                                {
+-                                    if ($filteredTargets{
+-                                          $targetPhysicalPath{$parent_phys_path}
+-                                        }{_identity_}{POSITION}
+-                                        == $positionElements[0]->to_literal)
+-                                    {
+-                                        $foundPosition = 1;
+-                                    }
+-
+-                                    last;
+-                                }
+-
+-                                $candidatePath = $parent_phys_path;
+-                                $parent_phys_path = substr(
+-                                    $candidatePath, 0,
+-                                    (rindex $candidatePath, "/"));
+-                            }
+-
+-                            if(!$foundPosition)
+-                            {
+-                                $filteredTargets{$target}{_allowed_} = 0;
+-                                next;
+-                            }
+-                        }
+-                    }
+-
+-                    # If no unit restriction but position restriction, screen
+-                    # out targets that don't have position attribute or whose
+-                    # position attribute does not match the restriction
+-                    if(   (scalar @positionElements > 0)
+-                       && (scalar @unitElements == 0)   )
+-                    {
+-                        $restrictPos = $positionElements[0]->to_literal;
+-
+-                        if(   (!exists
+-                                $filteredTargets{$target}{_identity_}{POSITION})
+-                           || (  $filteredTargets{$target}{_identity_}{POSITION}
+-                               != $restrictPos))
+-                        {
+-                            $filteredTargets{$target}{_allowed_} = 0;
+-                        }
+-                    }
+-                 }
+-            }
+-        }
+-
+-        foreach my $target (keys %filteredTargets)
+-        {
+-            # Don't bother with any target that is not in play
+-            if($filteredTargets{$target}{_allowed_} != 1)
+-            {
+-                next;
+-            }
+-
+-            # Candidate is any target having the attribute and a default
+-            # value determined
+-            if(   exists $instanceRef->{$target}{$attributeId}
+-               && exists $instanceRef->{$target}{$attributeId}{default}
+-               && exists $instanceRef->{$target}{$attributeId}{size})
+-            {
+-                # Multiple BIOS directives cannot touch same
+-                # target/attribute
+-                if(defined $attrTargAttrSetByBios{$target}{$attributeId})
+-                {
+-                    main::fatal("$target, $attributeId set by multiple BIOS "
+-                        . "definitions.\n");
+-                }
+-                else
+-                {
+-                    $attrTargAttrSetByBios{$target}{$attributeId} = 1;
+-                }
+-
+-                # If no default set yet
+-                if(! (defined $default) )
+-                {
+-                    $default = $instanceRef->{$target}{$attributeId}{default};
+-                    $size = $instanceRef->{$target}{$attributeId}{size};
+-                }
+-                # Cannot have different defaults in same group
+-                elsif(   $instanceRef->{$target}{$attributeId}{default}
+-                      != $default )
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, but default values are not same "
+-                        . "across all qualifying targets.  "
+-                        . "$target/ $attributeId = "
+-                        . "$instanceRef->{$target}{$attributeId}{default}.\n");
+-                }
+-            }
+-        }
+-
+-        # If no targets had the attribute
+-        if(!defined $default || !defined $size)
+-        {
+-            main::fatal("BIOS definition specified attribute $attributeId, but "
+-                . "after considering target restrictions/etc., no "
+-                . "valid targets were found.\n");
+-        }
+-
+-        # Add the restriction info to the XML tree.  This info is useful for 3rd
+-        # parties to create Hostboot attribute overrides.
+-        my $targetElement = $self->createChildElement($attribute,"target");
+-        $self->createChildElement(
+-            $targetElement,"type",sprintf("0x%08X",$restriction{numericType}));
+-        $self->createChildElement(
+-            $targetElement,"node",sprintf("0x%02X",$restriction{node}));
+-        $self->createChildElement(
+-            $targetElement,"position",sprintf("0x%04X",$restriction{position}));
+-        $self->createChildElement(
+-            $targetElement,"unit",sprintf("0x%02X",$restriction{unit}));
+-
+-        my @enumerationOverrideElement
+-            = $attribute->findnodes('./enumerationOverride');
+-        if($attrType eq "enumeration")
+-        {
+-            # Get a copy of the enumeration description.  Schema requires
+-            # enumerator to have only a name (symbolic handle) + value.
+-            # Customization allows overriding description + short name
+-            # Customization allows specifying subset of values to actually use
+-            # Output includes short name, long name, value
+-            my $enumType =
+-                $attrMapRef->{$attributeId}{simpleType}{enumeration}{id};
+-            my $enumerationType =
+-                ::getEnumerationType($$attributesRef,$enumType);
+-
+-            my %foundAllowed = ();
+-            my $enableRestrictions = 0;
+-            if(scalar @enumerationOverrideElement)
+-            {
+-                # Each enumerator name must tie back to a valid enumeration
+-                foreach my $overrideNameElement (
+-                    $attribute->findnodes(
+-                        './enumerationOverride/allowedEnumerators/name'))
+-                {
+-                    my $overrideName = $overrideNameElement->to_literal;
+-                    my $nameFound = 0;
+-                    foreach my $enumerator (@{$enumerationType->{enumerator}})
+-                    {
+-                        if($enumerator->{name} eq $overrideName)
+-                        {
+-                            # Each allowed value must be different from all the
+-                            # rest previously found for this attribute
+-                            if(exists $foundAllowed{$overrideName})
+-                            {
+-                                main::fatal("BIOS definition specified "
+-                                    . "attribute $attributeId, and supplied "
+-                                    . "override to allowed enumeration values, "
+-                                    . "but duplicated a value of "
+-                                    . "$overrideName.\n");
+-                            }
+-                            else
+-                            {
+-                                $foundAllowed{$overrideName} = 1;
+-                                $enumerator->{allowed} = 1;
+-                            }
+-
+-                            $enableRestrictions = 1;
+-                            $nameFound = 1;
+-
+-                            last;
+-                        }
+-                    }
+-
+-                    if(!$nameFound)
+-                    {
+-                        main::fatal("BIOS definition specified attribute "
+-                            . "$attributeId, and supplied override to allowed "
+-                            . "enumeration values, but requested enumerator "
+-                            . "$overrideName is not valid.\n");
+-                    }
+-                }
+-
+-                # Apply any overrides to the enumerator text
+-                my %textOverrideAllowed = ();
+-                foreach my $enumeratorOverrideElement (
+-                    $attribute->findnodes(
+-                        './enumerationOverride/enumeratorOverride'))
+-                {
+-                    # Each override must have exactly one name element
+-                    my @name = $enumeratorOverrideElement->findnodes('./name');
+-
+-                    # Each override must have 0 or 1 display-name and
+-                    # descriptions elements
+-                    my @displayName =
+-                        $enumeratorOverrideElement->findnodes('./display-name');
+-                    my @description =
+-                        $enumeratorOverrideElement->findnodes('./description');
+-
+-                    # Make sure enumerator name is valid
+-                    my $overrideName = $name[0]->to_literal;
+-                    my $nameFound = 0;
+-                    foreach my $enumerator (@{$enumerationType->{enumerator}})
+-                    {
+-                        if($enumerator->{name} eq $overrideName)
+-                        {
+-                            # Must not duplicate already overridden enumerator
+-                            if(exists $textOverrideAllowed{$overrideName})
+-                            {
+-                                main::fatal("BIOS definition specified "
+-                                     . "attribute $attributeId, and supplied "
+-                                     . "override to allowed enumerator, "
+-                                     . "but already overrode this "
+-                                     . "enuemrator.\n");
+-                            }
+-                            # Can only override things that are not restricted
+-                            elsif(   !exists $foundAllowed{$overrideName}
+-                                  && $enableRestrictions)
+-                            {
+-                                main::fatal("BIOS definition specified "
+-                                     . "attribute $attributeId, and supplied "
+-                                     . "override to allowed enumerator, but "
+-                                     . "this enumerator $overrideName is "
+-                                     . "restricted.\n");
+-                            }
+-                            else
+-                            {
+-                                $textOverrideAllowed{$overrideName} = 1;
+-                            }
+-
+-                            if(scalar @displayName)
+-                            {
+-                                $enumerator->{'display-name'} =
+-                                    $displayName[0]->to_literal;
+-                            }
+-
+-                            if(scalar @description)
+-                            {
+-                                $enumerator->{description} =
+-                                    $description[0]->to_literal;
+-                            }
+-
+-                            $nameFound = 1;
+-                            last;
+-                        }
+-                    }
+-
+-                    if(!$nameFound)
+-                    {
+-                        main::fatal("BIOS definition specified attribute "
+-                            . "$attributeId, and supplied override to allowed "
+-                            . "enumeration, but requested invalid enumerator "
+-                            . "name to override of $overrideName.\n");
+-                    }
+-                }
+-            }
+-
+-            my $enumerationElement =
+-                $self->createChildElement($attribute,"enumeration");
+-
+-            foreach my $enumerator (@{$enumerationType->{enumerator}})
+-            {
+-                if($enableRestrictions && !exists $enumerator->{allowed})
+-                {
+-                    # If enumerator is not allowed and is same as attribute
+-                    # default then can't continue
+-                    if($default eq  $enumerator->{name})
+-                    {
+-                        main::fatal("BIOS definition specified attribute "
+-                            . "$attributeId as not allowing "
+-                            . "$enumerator->{name}, but that is the attribute "
+-                            . "default.\n");
+-                    }
+-
+-                    next;
+-                }
+-
+-                my $enumeratorElement =
+-                    $self->createChildElement($enumerationElement,"enumerator");
+-
+-                if(!exists $enumerator->{'display-name'})
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, and supplied override to enumerator "
+-                        . "$enumerator->{name}, but there is no "
+-                        . "display-name.\n");
+-                }
+-
+-                $self->createChildElement(
+-                   $enumeratorElement,"display-name",
+-                   $enumerator->{'display-name'});
+-
+-                if(!exists $enumerator->{description})
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, and supplied override to enumerator "
+-                        . "$enumerator->{name}, but there is no "
+-                        . "description.\n");
+-                }
+-
+-                $self->createChildElement(
+-                   $enumeratorElement,"description",$enumerator->{description});
+-                $self->createChildElement(
+-                   $enumeratorElement,"value",
+-                   sprintf("0x%08X",$enumerator->{value}));
+-            }
+-
+-            # Translate attribute default to actual value
+-            $default = ::enumNameToValue($enumerationType,$default);
+-        }
+-        # No enums allowed to be specified
+-        elsif(scalar @enumerationOverrideElement)
+-        {
+-                main::fatal("BIOS definition specified attribute $attributeId, "
+-                    . "and supplied enumerated values, but this is not an "
+-                    . "enumeration attribute, it is of type $attrType.\n");
+-        }
+-
+-        # Can only specify numeric override for signed/unsigned values of
+-        # 1,2,4,8 byte values
+-        my @numericOverrideElements= $attribute->findnodes('./numericOverride');
+-
+-        # Hash of min(key), max(value) pairs
+-        my %allowedRange = ();
+-        if(scalar @numericOverrideElements)
+-        {
+-            # If range override not allowed for this attribute, bail
+-            if($typeHash{$attrType}{ror} != 1)
+-            {
+-                main::fatal("BIOS definition specified attribute $attributeId, "
+-                    . "and supplied numeric override, but this attribute "
+-                    . "type does not support such override.  Type is "
+-                    . "$attrType.\n");
+-            }
+-
+-            # A numericOverride has exactly one start + end element
+-            my @startElements =
+-                @numericOverrideElements[0]->findnodes('./start');
+-            my @endElements = @numericOverrideElements[0]->findnodes('./end');
+-            my $min = $typeHash{$attrType}{min};
+-            my $max = $typeHash{$attrType}{max};
+-
+-            # Validate range min
+-            if(scalar @startElements)
+-            {
+-                my $rawMin = @startElements[0]->to_literal;
+-
+-                if($rawMin < $min || $rawMin > $max)
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, and supplied valid start or end "
+-                        . "range, but min out of range. requested "
+-                        . "min = $rawMin, allowed min = "
+-                        . "$typeHash{$attrType}{min}, allowed max = "
+-                        . "$typeHash{$attrType}{max}.\n");
+-                }
+-                $min = $rawMin;
+-            }
+-
+-            # Validate range max
+-            if(scalar @endElements)
+-            {
+-                my $rawMax = @endElements[0]->to_literal;
+-
+-                if($rawMax > $max || $rawMax < $min)
+-                {
+-                    main::fatal("BIOS definition specified attribute "
+-                        . "$attributeId, and supplied valid start or end "
+-                        . "range, but max out of range. requested "
+-                        . "max = $rawMax, current min = $min, "
+-                        . "allowed min = "
+-                        . "$typeHash{$attrType}{min}, allowed max = "
+-                        . "$typeHash{$attrType}{max}.\n");
+-                }
+-                $max = $rawMax;
+-            }
+-
+-            # Min must be <= Max
+-            if($min > $max)
+-            {
+-                main::fatal("BIOS definition specified attribute "
+-                    . "$attributeId, and supplied valid start or end "
+-                    . "range, but min > max. min = $min, "
+-                    . "max = $max.\n");
+-            }
+-
+-            # To prevent range overlaps, cannot duplicate the same start of
+-            # a range
+-            if(defined $allowedRange{$min})
+-            {
+-                main::fatal("Already range starting at $min.\n");
+-            }
+-
+-            $allowedRange{$min} = $max;
+-            my $defaultInRange = 0;
+-
+-            my $min = undef;
+-            my $max = undef;
+-
+-            # Ensure default value falls within a defined range.  The ranges are
+-            # sorted in numerically ascending order according to the start of
+-            # each range, so if the start of
+-            # range N falls within range N-1, we know there is an illegal range
+-            # overlap and fail.
+-            foreach my $rangeKey (sort {$a <=> $b} keys %allowedRange)
+-            {
+-                if(   ($default >= $rangeKey)
+-                   && ($default <= $allowedRange{$rangeKey}) )
+-                {
+-                    $defaultInRange = 1;
+-                }
+-
+-                if(!defined $min)
+-                {
+-                    $min = $rangeKey;
+-                    $max = $allowedRange{$rangeKey};
+-                    next;
+-                }
+-
+-                if($rangeKey <= $max)
+-                {
+-                    main::fatal("Range starting with $rangeKey overlaps "
+-                        . "range ending at $max.\n");
+-                }
+-
+-                $min = $rangeKey;
+-                $max = $allowedRange{$rangeKey};
+-            }
+-
+-            if(!$defaultInRange)
+-            {
+-                main::fatal("Default value $default not in any valid range.\n");
+-            }
+-        }
+-
+-        # Convert attribute ID to numerical value and append to XML tree
+-        my $attributeIdEnumeration
+-            = ::getAttributeIdEnumeration($$attributesRef);
+-        my $attrValue = ::enumNameToValue($attributeIdEnumeration,$attributeId);
+-        $attrValue = sprintf ("0x%0X", $attrValue);
+-
+-        # Add the remaining metadata to the XML tree
+-        $self->createChildElement($attribute,"default",$default);
+-        $self->createChildElement($attribute,"numeric-id",$attrValue);
+-        $self->createChildElement($attribute,"size",$size);
+-    }
+-}
+-
+-1;
+-
+-}
+-
+ __END__
+ 
+ =head1 NAME
+@@ -7117,23 +6110,6 @@ Adds 4096 bytes of version page as first page in the generated binaries.
+ Does not add 4096 bytes of version page as first page in the generated
+ binaries . This is the default behavior.
+ 
+-=item B<--bios-xml-file>
+-
+-Path + file name of XML file describing the platform's BIOS configuration.
+-Optional.
+-
+-=item B<--bios-schema-file>
+-
+-Path + file name of XSD schema file used to validate the BIOS XML file. Required
+-if a BIOS XML file is given.
+-
+-=item B<--bios-output-file>
+-
+-Path + filename of output XML file describing the amended BIOS configuration.
+-This output is commonly later modified by 3rd parties via xslt transformation to
+-tailor the output for a given application.  Required if a BIOS XML file is
+-given.
+-
+ =item B<--verbose>
+ 
+ Prints out some internal workings
+-- 
+1.8.2.2
+
+
+From 2a45170e801056f7f2952610ccd9079ad5324c98 Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Fri, 20 Feb 2015 11:04:36 -0600
+Subject: [PATCH 06/10] Revert "Targeting: Generate VERSION page for binaries."
 
 This reverts commit 34c58e19162834ff5bb8d4ffb9975b50d5a0770a.
 ---
@@ -281,11 +2322,11 @@
 1.8.2.2
 
 
-From 01728c387eebddd30e1ddd1b28c31c159cd5039e Mon Sep 17 00:00:00 2001
+From 0a4989176f0ef4f1374f88ae5dd4157cd63d45ce Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:02:36 -0600
-Subject: [PATCH 3/6] Revert "adding toc offsets to defaultPnorLayout for hwsv
- team"
+Date: Fri, 20 Feb 2015 11:04:47 -0600
+Subject: [PATCH 07/10] Revert "adding toc offsets to defaultPnorLayout for
+ hwsv team"
 
 This reverts commit 6990adda0f2996cc7baacba9f485c7b5a415904c.
 ---
@@ -321,10 +2362,10 @@
 1.8.2.2
 
 
-From db81af80e8d4efccfe9de9fe9e01972ff4689ef5 Mon Sep 17 00:00:00 2001
+From 2f98670c4b42a64f481a336e4d8d34a9a5ad93a8 Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:03:03 -0600
-Subject: [PATCH 4/6] Revert "Created 2-sided and golden-side pnor layouts"
+Date: Fri, 20 Feb 2015 11:04:55 -0600
+Subject: [PATCH 08/10] Revert "Created 2-sided and golden-side pnor layouts"
 
 This reverts commit e83759d6aa90999933318155772b50a8af679ec6.
 ---
@@ -953,10 +2994,10 @@
 1.8.2.2
 
 
-From 65fbfe1c2b67b9e8519220823b82a0ff244ba123 Mon Sep 17 00:00:00 2001
+From eea17a14de872f99c3d01a022f392b5f846fd746 Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:10:03 -0600
-Subject: [PATCH 5/6] Revert "Initial Support of SBE_UPDATE_INDEPENDENT Mode"
+Date: Fri, 20 Feb 2015 11:05:03 -0600
+Subject: [PATCH 09/10] Revert "Initial Support of SBE_UPDATE_INDEPENDENT Mode"
 
 This reverts commit 002c4beefb54d288eee8faf4d9aa2b08b137aed3.
 ---
@@ -1243,10 +3284,10 @@
 1.8.2.2
 
 
-From c7c2a249b32d8b3776febb6fd81b5fa6874717df Mon Sep 17 00:00:00 2001
+From 7820949b6720adb1b92f87175d373d1b01eea83a Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 17 Feb 2015 14:10:12 -0600
-Subject: [PATCH 6/6] Revert "Support for Redundant Copy of HB code in PNOR"
+Date: Fri, 20 Feb 2015 11:05:11 -0600
+Subject: [PATCH 10/10] Revert "Support for Redundant Copy of HB code in PNOR"
 
 This reverts commit 67c5a1ebe73f81bca1bb6608bbb8f204f0f37fa8.
 ---
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 5bc680b..e404f8a 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 7c5d303237f2bec25b7072ec3119d6d4fef875fc
+HOSTBOOT_VERSION ?= 07bb80e9281ed8aafbd283d5ab2c0f777e347b73
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
diff --git a/openpower/package/occ/occ.mk b/openpower/package/occ/occ.mk
index 728a941..cbabb94 100644
--- a/openpower/package/occ/occ.mk
+++ b/openpower/package/occ/occ.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-OCC_VERSION ?= 0a19fa3049ce60d8d9f5905cd05c1018cbdfb253
+OCC_VERSION ?= 2adf5f493db7436dd0df0fcb846c16b93dd1f374
 OCC_SITE ?= $(call github,open-power,occ,$(OCC_VERSION))
 OCC_LICENSE = Apache-2.0
 OCC_DEPENDENCIES = host-binutils host-p8-pore-binutils