Merge pull request #54 from ploetzma/hostbootUpdates

Update hostboot commits
diff --git a/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch b/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch
index f938bac..0fb587f 100644
--- a/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch
+++ b/openpower/package/hostboot/hostboot-0003-Revert-redundent-copy-of-hb-code-in-pnor.patch
@@ -1,19 +1,696 @@
-From a05bf62e7eb14354ca2d6ca45b149aac6dbd193c Mon Sep 17 00:00:00 2001
+From 5adea56942b770c02118e322e417f015415421f9 Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Wed, 11 Feb 2015 11:41:48 -0600
-Subject: [PATCH] Revert "Support for Redundant Copy of HB code in PNOR"
+Date: Mon, 16 Feb 2015 14:50:05 -0600
+Subject: [PATCH 1/3] Revert "adding toc offsets to defaultPnorLayout for hwsv
+ team"
+
+This reverts commit 6990adda0f2996cc7baacba9f485c7b5a415904c.
+---
+ src/build/buildpnor/defaultPnorLayout.xml | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/build/buildpnor/defaultPnorLayout.xml b/src/build/buildpnor/defaultPnorLayout.xml
+index d5d5d25..897d4db 100644
+--- a/src/build/buildpnor/defaultPnorLayout.xml
++++ b/src/build/buildpnor/defaultPnorLayout.xml
+@@ -28,9 +28,6 @@ Layout Description
+     <imageSize>    -> Size of PNOR image in bytes.
+     <blockSize>    -> size of erase blocks in bytes.
+     <tocSize>      -> size of each partition table
+-    <!- TODO:RTC:123734 - remove side offsets once hwsv implements new layout ->
+-    <sideAOffset>  -> Location of Side A Partition Table
+-    <sideBOffset>  -> Location of Side B Partition Table
+     <side>         -> Contains information about the side
+         <id>            -> Id of the side (A or B)
+         <arrangement>   -> Tag that specifies the arrangement of the side
+@@ -67,10 +64,6 @@ Layout Description
+         <imageSize>0x4000000</imageSize>
+         <blockSize>0x1000</blockSize>
+         <tocSize>0x8000</tocSize>
+-        <!--TODO: RTC 123734 - remove side offsets once hwsv implements new
+-        layout-->
+-        <sideAOffset>0x0</sideAOffset>
+-        <sideBOffset>0x8000</sideBOffset>
+         <arrangement>A-B-D</arrangement>
+         <side>
+             <id>B</id>
+-- 
+1.8.2.2
+
+
+From d277e6fce112af0088d2179a07482b71cc3f083e Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Mon, 16 Feb 2015 14:50:17 -0600
+Subject: [PATCH 2/3] Revert "Created 2-sided and golden-side pnor layouts"
+
+This reverts commit e83759d6aa90999933318155772b50a8af679ec6.
+---
+ src/build/buildpnor/buildpnor.pl          | 254 ++++++++----------------------
+ src/build/buildpnor/defaultPnorLayout.xml |  69 ++++----
+ src/usr/pnor/common/ffs_hb.H              |   3 +-
+ 3 files changed, 96 insertions(+), 230 deletions(-)
+
+diff --git a/src/build/buildpnor/buildpnor.pl b/src/build/buildpnor/buildpnor.pl
+index aad7c34..f6df6c8 100755
+--- a/src/build/buildpnor/buildpnor.pl
++++ b/src/build/buildpnor/buildpnor.pl
+@@ -61,7 +61,6 @@ my $g_trace = 1;
+ 
+ my $programName = File::Basename::basename $0;
+ my %pnorLayout;
+-my %PhysicalOffsets;
+ my %binFiles;
+ my $pnorLayoutFile;
+ my $pnorBinName = "";
+@@ -71,6 +70,7 @@ my $emitTestSections = 0;
+ my $g_fpartCmd = "";
+ my $g_fcpCmd = "";
+ my %sidelessSecFilled = ();
++
+ my %SideOptions = (
+         A => "A",
+         B => "B",
+@@ -132,7 +132,7 @@ if (-e $pnorBinName)
+ }
+ 
+ #Load PNOR Layout XML file
+-my $rc = loadPnorLayout($pnorLayoutFile, \%pnorLayout, \%PhysicalOffsets);
++my $rc = loadPnorLayout($pnorLayoutFile, \%pnorLayout);
+ if($rc != 0)
+ {
+     trace(0, "Error detected from call to loadPnorLayout().  Exiting");
+@@ -163,6 +163,8 @@ if($rc != 0)
+ }
+ trace(1, "Done checkSpaceConstraints");
+ 
++# @TODO RTC: 120062 - Determine which side is Golden, possibly handle a new
++#                    xml tag
+ # Create all Partition Tables at each TOC offset
+ # Each side has 2 TOC's created at different offsets for backup purposes.
+ # Loop all side sections
+@@ -172,6 +174,7 @@ foreach my $sideId ( keys %{$pnorLayout{metadata}{sides}} )
+     foreach my $toc ( keys %{$pnorLayout{metadata}{sides}{$sideId}{toc}})
+     {
+         my $tocOffset = $pnorLayout{metadata}{sides}{$sideId}{toc}{$toc};
++
+         $rc = createPnorPartition($tocVersion, $pnorBinName, \%pnorLayout,
+                                   $sideId, $tocOffset);
+         if($rc != 0)
+@@ -179,31 +182,9 @@ foreach my $sideId ( keys %{$pnorLayout{metadata}{sides}} )
+             trace(0, "Error detected from createPnorPartition() $tocOffset Exiting");
+             exit 1;
+         }
+-
+-        #Add the golden side tag to the "part" partition of PNOR`
+-        my $userflags1 = ($pnorLayout{metadata}{sides}{$sideId}{golden} eq "yes") ?
+-                            0x01 : 0x00;
+-
+-        #add a golden bit to the misc flags in userflag1
+-        $userflags1 = $userflags1 << 16;
+-        trace(2, "$g_fpartCmd --target $pnorBinName --partition-offset $tocOffset --user 1 --name part --value $userflags1 --force");
+-        $rc =    `$g_fpartCmd --target $pnorBinName --partition-offset $tocOffset --user 1 --name part --value $userflags1 --force`;
+-        if($rc != 0)
+-        {
+-            trace(0, "Call to add golden flag to PART failed.  rc=$rc.  Aborting!");
+-            exit;
+-        }
+     }
+ }
+ 
+-#add backup TOC and other side's toc information to each TOC
+-$rc = addTOCInfo(\%pnorLayout, $pnorBinName);
+-if($rc)
+-{
+-    trace(0, "Error detected from call to addTOCInfo().  Exiting");
+-    exit 1;
+-}
+-
+ # Fill all sides
+ foreach my $sideId ( keys %{$pnorLayout{metadata}{sides}} )
+ {
+@@ -227,7 +208,7 @@ exit 0;
+ ################################################################################
+ sub loadPnorLayout
+ {
+-    my ($i_pnorFile, $i_pnorLayoutRef, $i_physicalOffsets) = @_;
++    my ($i_pnorFile, $i_pnorLayoutRef) = @_;
+     my $this_func = (caller(0))[3];
+ 
+     unless(-e $i_pnorFile)
+@@ -240,6 +221,49 @@ sub loadPnorLayout
+     my $xs = new XML::Simple(keyattr=>[], forcearray => 1);
+     my $xml = $xs->XMLin($i_pnorFile);
+ 
++    #Save the meatadata - imageSize, blockSize, etc.
++    # @TODO RTC:120062 enhance metadata section, fix metadataE1 to match xml
++    # and change TOC names accordingly
++    foreach my $metadataEl (@{$xml->{metadata}})
++    {
++        # Get meta data
++        my $imageSize = $metadataEl->{imageSize}[0];
++        my $blockSize = $metadataEl->{blockSize}[0];
++        $imageSize = getNumber($imageSize);
++        $blockSize = getNumber($blockSize);
++        $$i_pnorLayoutRef{metadata}{imageSize} = $imageSize;
++        $$i_pnorLayoutRef{metadata}{blockSize} = $blockSize;
++
++        # Get Side A
++        my $sideATocOffset = $metadataEl->{sideATocOffset}[0];
++        my $sideATocBackupOffset = $metadataEl->{sideATocBackupOffset}[0];
++        $sideATocOffset = getNumber($sideATocOffset);
++        $sideATocBackupOffset = getNumber($sideATocBackupOffset);
++        # @TODO RTC: 120062 change pnorLayoutRef hash to match new xml
++        $$i_pnorLayoutRef{metadata}{sides}{$SideOptions{A}}{toc}{primary} = $sideATocOffset;
++        $$i_pnorLayoutRef{metadata}{sides}{$SideOptions{A}}{toc}{backup} = $sideATocBackupOffset;
++
++        # Get side B info (if it exists)
++        if (exists $metadataEl->{sideBTocOffset}[0])
++        {
++            trace(1, "Adding Side B information ....");
++            my $sideBTocOffset = $metadataEl->{sideBTocOffset}[0];
++            my $sideBTocBackupOffset = $metadataEl->{sideBTocBackupOffset}[0];
++            $sideBTocOffset = getNumber($sideBTocOffset);
++            $sideBTocBackupOffset = getNumber($sideBTocBackupOffset);
++            # @TODO RTC: 120062 change pnorLayoutRef hash to match new xml
++            $$i_pnorLayoutRef{metadata}{sides}{$SideOptions{B}}{toc}{primary} = $sideBTocOffset;
++            $$i_pnorLayoutRef{metadata}{sides}{$SideOptions{B}}{toc}{backup} = $sideBTocBackupOffset;
++
++            trace(3, "$this_func: metadata: imageSize = $imageSize, blockSize=$blockSize, sideATocOffset=$sideATocOffset, sideATocBackupOffset=$sideATocBackupOffset, sideBTocOffset=$sideBTocOffset, sideBTocBackupOffset=$sideBTocBackupOffset");
++        }
++        else
++        {
++           trace(3, "$this_func: metadata: imageSize = $imageSize, blockSize=$blockSize, sideATocOffset=$sideATocOffset, sideATocBackupOffset=$sideATocBackupOffset");
++        }
++
++    }
++
+     #Iterate over the <section> elements.
+     foreach my $sectionEl (@{$xml->{section}})
+     {
+@@ -252,6 +276,7 @@ sub loadPnorLayout
+         my $ecc = (exists $sectionEl->{ecc} ? "yes" : "no");
+         my $sha512Version = (exists $sectionEl->{sha512Version} ? "yes" : "no");
+         my $sha512perEC = (exists $sectionEl->{sha512perEC} ? "yes" : "no");
++        my $sideless = (exists $sectionEl->{sideless} ? "yes" : "no");
+         my $preserved = (exists $sectionEl->{preserved} ? "yes" : "no");
+         my $readOnly = (exists $sectionEl->{readOnly} ? "yes" : "no");
+         if (($emitTestSections == 0) && ($sectionEl->{testonly}[0] eq "yes"))
+@@ -272,93 +297,12 @@ sub loadPnorLayout
+         $$i_pnorLayoutRef{sections}{$physicalOffset}{ecc} = $ecc;
+         $$i_pnorLayoutRef{sections}{$physicalOffset}{sha512Version} = $sha512Version;
+         $$i_pnorLayoutRef{sections}{$physicalOffset}{sha512perEC} = $sha512perEC;
++        $$i_pnorLayoutRef{sections}{$physicalOffset}{sideless} = $sideless;
+         $$i_pnorLayoutRef{sections}{$physicalOffset}{preserved} = $preserved;
+         $$i_pnorLayoutRef{sections}{$physicalOffset}{readOnly} = $readOnly;
+ 
+-        #store the physical offsets of each section in a hash, so, it is easy
+-        #to search physicalOffsets based on the name of the section (eyecatch)
+-        if ($side eq "sideless")
+-        {
+-            foreach my $metadata (@{$xml->{metadata}})
+-            {
+-                foreach my $sides (@{$metadata->{side}})
+-                {
+-                    $$i_physicalOffsets{side}{$sides->{id}[0]}{eyecatch}{$eyeCatch} = $physicalOffset;
+-                }
+-            }
+-        }
+-        else
+-        {
+-            $$i_physicalOffsets{side}{$side}{eyecatch}{$eyeCatch} = $physicalOffset;
+-        }
+     }
+-    # Save the metadata - imageSize, blockSize, toc Information etc.
+-    foreach my $metadataEl (@{$xml->{metadata}})
+-    {
+-        # Get meta data
+-        my $imageSize   = $metadataEl->{imageSize}[0];
+-        my $blockSize   = $metadataEl->{blockSize}[0];
+-        my $tocSize     = $metadataEl->{tocSize}[0];
+-        my $arrangement = $metadataEl->{arrangement}[0];
+-        $imageSize      = getNumber($imageSize);
+-        $blockSize      = getNumber($blockSize);
+-        $tocSize        = getNumber($tocSize);
+-        $$i_pnorLayoutRef{metadata}{imageSize}   = $imageSize;
+-        $$i_pnorLayoutRef{metadata}{blockSize}   = $blockSize;
+-        $$i_pnorLayoutRef{metadata}{tocSize}     = $tocSize;
+-        $$i_pnorLayoutRef{metadata}{arrangement} = $arrangement;
+-
+-        my $numOfSides  = scalar (@{$metadataEl->{side}});
+-        my $sideSize = ($imageSize)/($numOfSides);
+-
+-        trace(1, " $this_func: metadata: imageSize = $imageSize, blockSize=$blockSize, arrangement = $arrangement, numOfSides: $numOfSides, sideSize: $sideSize, tocSize: $tocSize");
+-
+-        #determine the TOC offsets from the arrangement and side Information
+-        #stored in the layout xml
+-        #
+-        #Arrangement A-B-D means that the layout had Primary TOC (A), then backup TOC (B), then Data (pnor section information).
+-        #Similaryly, arrangement A-D-B means that primary toc is followed by the data (section information) and then
+-        #the backup TOC.
+-        if ($arrangement eq "A-B-D")
+-        {
+-            my $count = 0;
+-            foreach my $side (@{$metadataEl->{side}})
+-            {
+-                my $golden     = (exists $side->{golden} ? "yes" : "no");
+-                my $sideId     = $side->{id}[0];
+-                my $primaryTOC = ($sideSize)*($count);
+-                my $backupTOC  = ($primaryTOC)+($tocSize);
+ 
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{toc}{primary} = $primaryTOC;
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{toc}{backup}  = $backupTOC;
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{golden}       = $golden;
+-
+-                $count = $count + 1;
+-                trace(1, "A-B-D: side:$sideId primaryTOC:$primaryTOC, backupTOC:$backupTOC, golden: $golden");
+-            }
+-        }
+-        elsif ($arrangement eq "A-D-B")
+-        {
+-            foreach my $side (@{$metadataEl->{side}})
+-            {
+-                my $golden     = (exists $side->{golden} ? "yes" : "no");
+-                my $sideId     = $side->{id}[0];
+-                my $hbbAddr    = $$i_physicalOffsets{side}{$sideId}{eyecatch}{"HBB"};
+-                my $primaryTOC = align_down($hbbAddr, $sideSize);
+-                my $backupTOC  = align_up($hbbAddr, $sideSize) - $tocSize;
+-
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{toc}{primary} = $primaryTOC;
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{toc}{backup}  = $backupTOC;
+-                $$i_pnorLayoutRef{metadata}{sides}{$sideId}{golden}       = $golden;
+-                trace(1, "A-D-B: side:$sideId HBB:$hbbAddr, primaryTOC:$primaryTOC, backupTOC:$backupTOC, golden: $golden");
+-            }
+-        }
+-        else
+-        {
+-            trace(0, "Arrangement:$arrangement is not supported");
+-            exit(1);
+-        }
+-    }
+     return 0;
+ }
+ 
+@@ -387,6 +331,7 @@ sub createPnorImg
+             $rc = 1;
+             last;
+         }
++
+         #f{fs,part} --create tuleta.pnor --partition-offset 0 --size 8MiB --block 4KiB --force
+         trace(2, "$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --create --size $imageSize --block $blockSize --force");
+         $rc = `$g_fpartCmd --target $i_pnorBinName --partition-offset $i_offset --create --size $imageSize --block $blockSize --force`;
+@@ -449,6 +394,7 @@ sub addUserData
+         $miscFlags |= 0x40;
+     }
+ 
++
+     #First User Data Word
+     #[1:chip][1:compressType][2:dataInteg]
+     my $userflags0 = ($chip << 24)
+@@ -503,6 +449,7 @@ sub createPnorPartition
+         {
+             last;
+         }
++
+         #get Block size
+         my $blockSize = $$i_pnorLayoutRef{metadata}{blockSize};
+ 
+@@ -551,7 +498,7 @@ sub createPnorPartition
+ 
+                 #Add Partition
+                 #f{fs,part} --add --target tuleta.pnor --partition-offset 0 --offset 0x1000   --size 0x280000 --name HBI --flags 0x0
+-                trace(2, "$this_func: $g_fpartCmd --target $i_pnorBinName --partition-offset $offset --add --offset $physicalOffset --size $physicalRegionSize --name $eyeCatch --flags 0x0");
++                trace(2, "$g_fpartCmd --target $i_pnorBinName --partition-offset $offset --add --offset $physicalOffset --size $physicalRegionSize --name $eyeCatch --flags 0x0");
+                 $rc = `$g_fpartCmd --target $i_pnorBinName --partition-offset $offset --add --offset $physicalOffset --size $physicalRegionSize --name $eyeCatch --flags 0x0`;
+                 if($rc)
+                 {
+@@ -588,67 +535,6 @@ sub createPnorPartition
+ }
+ 
+ ################################################################################
+-# addTOCInfo -- adds BACKUP_PART and OTHER_SIDE information to all the TOCs
+-################################################################################
+-sub addTOCInfo
+-{
+-    my ($i_pnorLayout, $i_pnorBinName) = @_;
+-    my $rc        = 0;
+-    my $other_idx = 0;
+-    my $sideShift = 0;
+-    my @all_tocs;
+-    foreach my $sideId (keys %{$$i_pnorLayout{metadata}{sides}})
+-    {
+-        push @all_tocs, $$i_pnorLayout{metadata}{sides}{$sideId}{toc}{primary};
+-        push @all_tocs, $$i_pnorLayout{metadata}{sides}{$sideId}{toc}{backup};
+-    }
+-    foreach my $sideId ( keys %{$$i_pnorLayout{metadata}{sides}} )
+-    {
+-        my $physicalRegionSize = $$i_pnorLayout{metadata}{tocSize};
+-        my $backup_part = "BACKUP_PART";
+-        my $other_side  = "OTHER_SIDE";
+-        my $backup_idx  = 0;
+-        my $otherSide   = getOtherSide($sideId);
+-        my $numOfTOCs   =  scalar keys %{$$i_pnorLayout{metadata}{sides}{$sideId}{toc}};
+-
+-        #Adding an extra entry in the TOC that points to its backup TOC and other side's TOC (if other side exists).
+-        #This is used to search for all the TOCs in PnorRP code. The idea is to create a link between the tocs such that
+-        #if we can find one valid TOC, then we can look at its  BACKUP_PART entry or OTHER_SIDE entry in the TOC to
+-        #determine the location of backup TOC.Each TOC has only one BACKUP_PART entry and one OTHER_SIDE entry.
+-        foreach my $toc (keys %{$$i_pnorLayout{metadata}{sides}{$sideId}{toc}})
+-        {
+-            #adding backup_part
+-            my $toc_offset    = $$i_pnorLayout{metadata}{sides}{$sideId}{toc}{$toc};
+-            my $backup_offset = $all_tocs[(($backup_idx + 1)% $numOfTOCs) + $sideShift ];
+-            trace(1, "$g_fpartCmd --target $i_pnorBinName --partition-offset $toc_offset --add --offset $backup_offset --size $physicalRegionSize --name $backup_part --flags 0x0");
+-            $rc = `$g_fpartCmd --target $i_pnorBinName --partition-offset $toc_offset --add --offset $backup_offset --size $physicalRegionSize --name $backup_part --flags 0x0`;
+-            if($rc)
+-            {
+-                trace(0, "Call to add partition $backup_part failed.  rc=$rc.  Aborting!");
+-                exit;
+-            }
+-
+-            #Don't add OTHER_SIDE section if there is only one side in PNOR
+-            if ((scalar keys % {$$i_pnorLayout{metadata}{sides}}) > 1)
+-            {
+-                #adding other_side
+-                my $otherSide_offset = $all_tocs[(($other_idx + 2)% scalar @all_tocs)];
+-                trace(1, "$g_fpartCmd --target $i_pnorBinName --partition-offset $toc_offset --add --offset $otherSide_offset --size $physicalRegionSize --name $other_side --flags 0x0");
+-                $rc = `$g_fpartCmd --target $i_pnorBinName --partition-offset $toc_offset --add --offset $otherSide_offset --size $physicalRegionSize --name $other_side --flags 0x0`;
+-                if($rc)
+-                {
+-                    trace(0, "Call to add partition $other_side failed.  rc=$rc.  Aborting!");
+-                    exit;
+-                }
+-            }
+-            $backup_idx++;
+-            $other_idx++;
+-        }
+-        $sideShift = $sideShift + $numOfTOCs;
+-    }
+-    return $rc;
+-}
+-################################################################################
+ # robustifyImgs - Perform any ECC or ShawHash manipulations
+ ################################################################################
+ sub robustifyImgs
+@@ -663,24 +549,6 @@ sub robustifyImgs
+ }
+ 
+ ################################################################################
+-# align_down: Align the input to the lower end of the PNOR side
+-################################################################################
+-sub align_down
+-{
+-    my ($addr,$n) = @_;
+-    return (($addr) - ($addr)%($n));
+-}
+-
+-################################################################################
+-# align_up: Align the input address to the higher end of the PNOR side
+-################################################################################
+-sub align_up
+-{
+-    my ($addr,$n) = @_;
+-    return ((($addr) + ($n-1)) & ~($n-1));
+-}
+-
+-################################################################################
+ # findLayoutKeyByEyeCatch - Figure out hash key based on eyeCatcher
+ ################################################################################
+ sub findLayoutKeyByEyeCatch
+@@ -828,7 +696,7 @@ sub fillPnorImage
+                 last;
+             }
+          }
+-     }
++    }
+ 
+     return $rc;
+ }
+@@ -924,7 +792,15 @@ sub getSideInfo
+     my $side = "";
+     my $eyeCatch = $i_sectionHash{$i_key}{eyeCatch};
+ 
+-    $side = $i_sectionHash{$i_key}{side};
++
++    if($i_sectionHash{$i_key}{sideless} eq "yes")
++    {
++        return $SideOptions{sideless};
++    }
++    else
++    {
++        $side = $i_sectionHash{$i_key}{side};
++    }
+ 
+     # Error paths
+     if ($side eq "")
+diff --git a/src/build/buildpnor/defaultPnorLayout.xml b/src/build/buildpnor/defaultPnorLayout.xml
+index 897d4db..249bdb4 100644
+--- a/src/build/buildpnor/defaultPnorLayout.xml
++++ b/src/build/buildpnor/defaultPnorLayout.xml
+@@ -25,16 +25,12 @@
+ <!--
+ Layout Description
+ <metadata> Element -> Contains high-level information about the PNOR layout.
+-    <imageSize>    -> Size of PNOR image in bytes.
+-    <blockSize>    -> size of erase blocks in bytes.
+-    <tocSize>      -> size of each partition table
+-    <side>         -> Contains information about the side
+-        <id>            -> Id of the side (A or B)
+-        <arrangement>   -> Tag that specifies the arrangement of the side
+-                           (A-B-D or A-D-B)
+-                           A-B-D: Primary TOC (A),Backup TOC (B), and Section Information (Data - D)
+-                           A-D-B: Primary TOC (A), Section Information (Data - D), Backup TOC (B)
+-        <golden/> -> Indicates that the side of the PNOR is golden
++    <imageSize>           -> Size of PNOR image in bytes.
++    <blockSize>           -> size of erase blocks in bytes.
++    <sideATocOffset>      -> Location of Side A Partition Table
++    <sideATocBackupOffset>-> Location of Side A Backup Partition Table
++    <sideBTocOffset>      -> Location of Side B Partition Table
++    <sideBTocBackupOffset>-> Location of Side B Backup Partition Table
+ </metadata>
+ <section> Element -> Contains information about a PNOR Partition
+     <description>   -> Text description of the partition.
+@@ -43,12 +39,11 @@ Layout Description
+     <physicalOffset>-> Offset of the Partition in PNOR
+                        in bytes.
+     <physicalSize>  -> Size of the Partition in bytes.
+-    <side>          -> Side that this section is associated with.
+-                       could be (A, B, or sideless)
+-                       A - Section is associated with side A
+-                       B - Section is associated with side B
+-                       sideless - Indicates partition will be in both TOCs but
+-                                  only one copy of the partition should be created
++    <side>          -> Side the Partition should be associated with. This
++                       determines if the partition should be added to the
++                       partition table at <sideATocOffset> or <sideBTocOffset>
++    <sideless/>     -> Indicates partition will be in both TOCs but only one
++                       copy of the partition should be created
+     <testonly/>     -> Indicates partition is used for internal testing only.
+                        Partition should be skipped in production environments.
+     <ecc/>          -> Indicates Partition should be ECC protected
+@@ -63,18 +58,16 @@ Layout Description
+     <metadata>
+         <imageSize>0x4000000</imageSize>
+         <blockSize>0x1000</blockSize>
+-        <tocSize>0x8000</tocSize>
+-        <arrangement>A-B-D</arrangement>
+-        <side>
+-            <id>B</id>
+-        </side>
++        <!-- @TODO RTC: 120062 - Enhance meta info -->
++        <sideATocOffset>0x0</sideATocOffset>
++        <sideATocBackupOffset>0x8000</sideATocBackupOffset>
+     </metadata>
+     <section>
+         <description>Hostboot Error Logs (144K)</description>
+         <eyeCatch>HBEL</eyeCatch>
+         <physicalOffset>0x10000</physicalOffset>
+         <physicalRegionSize>0x24000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -82,7 +75,7 @@ Layout Description
+         <eyeCatch>GUARD</eyeCatch>
+         <physicalOffset>0x58000</physicalOffset>
+         <physicalRegionSize>0x5000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -90,7 +83,7 @@ Layout Description
+         <eyeCatch>HBD</eyeCatch>
+         <physicalOffset>0x5D000</physicalOffset>
+         <physicalRegionSize>0x120000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -99,7 +92,7 @@ Layout Description
+         <!--NOTE: MUST update standalone.simics if offset changes -->
+          <physicalOffset>0x17D000</physicalOffset>
+         <physicalRegionSize>0x48000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -108,7 +101,7 @@ Layout Description
+         <!--NOTE: MUST update standalone.simics if offset changes -->
+         <physicalOffset>0x1C5000</physicalOffset>
+         <physicalRegionSize>0x90000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -117,7 +110,7 @@ Layout Description
+         <!--NOTE: MUST update standalone.simics if offset changes -->
+         <physicalOffset>0x255000</physicalOffset>
+         <physicalRegionSize>0x48000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -126,7 +119,7 @@ Layout Description
+         <physicalOffset>0x29D000</physicalOffset>
+         <physicalRegionSize>0x5A0000</physicalRegionSize>
+         <sha512Version/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -135,7 +128,7 @@ Layout Description
+         <physicalOffset>0x83D000</physicalOffset>
+         <physicalRegionSize>0x90000</physicalRegionSize>
+         <sha512perEC/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -144,7 +137,7 @@ Layout Description
+         <physicalOffset>0x8CD000</physicalOffset>
+         <physicalRegionSize>0x48000</physicalRegionSize>
+         <sha512perEC/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -153,7 +146,7 @@ Layout Description
+         <physicalOffset>0x915000</physicalOffset>
+         <physicalRegionSize>0x120000</physicalRegionSize>
+         <sha512Version/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -162,7 +155,7 @@ Layout Description
+         <physicalOffset>0xA35000</physicalOffset>
+         <physicalRegionSize>0x240000</physicalRegionSize>
+         <sha512Version/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -170,7 +163,7 @@ Layout Description
+         <eyeCatch>PAYLOAD</eyeCatch>
+         <physicalOffset>0xC75000</physicalOffset>
+         <physicalRegionSize>0x1680000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -179,7 +172,7 @@ Layout Description
+         <physicalOffset>0x3590000</physicalOffset>
+         <physicalRegionSize>0x9000</physicalRegionSize>
+         <testonly/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -187,8 +180,8 @@ Layout Description
+         <eyeCatch>TESTRO</eyeCatch>
+         <physicalOffset>0x3599000</physicalOffset>
+         <physicalRegionSize>0x9000</physicalRegionSize>
+-        <side>sideless</side>
+         <testonly/>
++        <sideless/>
+         <preserved/>
+         <readOnly/>
+         <ecc/>
+@@ -196,13 +189,11 @@ Layout Description
+     <section>
+         <description>Hostboot Base (576K)</description>
+         <!--NOTE: MUST update standalone.simics if offset changes -->
+-        <!--NOTE: HBB must be at pnorSize-0x99000 for a new proc
+-                  part to be bootable -->
+         <eyeCatch>HBB</eyeCatch>
+         <physicalOffset>0x3F67000</physicalOffset>
+         <physicalRegionSize>0x90000</physicalRegionSize>
+         <sha512Version/>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+     <section>
+@@ -210,7 +201,7 @@ Layout Description
+         <eyeCatch>GLOBAL</eyeCatch>
+         <physicalOffset>0x3FF7000</physicalOffset>
+         <physicalRegionSize>0x9000</physicalRegionSize>
+-        <side>sideless</side>
++        <sideless/>
+         <ecc/>
+     </section>
+ </pnor>
+diff --git a/src/usr/pnor/common/ffs_hb.H b/src/usr/pnor/common/ffs_hb.H
+index 30a6173..c96911b 100644
+--- a/src/usr/pnor/common/ffs_hb.H
++++ b/src/usr/pnor/common/ffs_hb.H
+@@ -66,8 +66,7 @@ enum
+     /* Miscellaneous Bits : 1 byte */
+     FFS_MISC_PRESERVED     = 0x80,    /**< Preserved across code updates */
+     FFS_MISC_READ_ONLY     = 0x40,    /**< Read only section */
+-    FFS_MISC_GOLDEN        = 0x01,    /**< Golden side of PNOR */
+-    FFS_MISC_UNUSED        = 0x1E,    /**< Unused MISC Flags */
++    FFS_MISC_UNUSED        = 0x1F,    /**< Unused MISC Flags */
+ };
+ 
+ /**
+-- 
+1.8.2.2
+
+
+From fc5492346de6fdc8e2f58e8ec58881de6aae5510 Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Mon, 16 Feb 2015 14:58:48 -0600
+Subject: [PATCH 3/3] Revert "Support for Redundant Copy of HB code in PNOR"
 
 This reverts commit 67c5a1ebe73f81bca1bb6608bbb8f204f0f37fa8.
+
+Conflicts:
+	src/usr/sbe/sbe_update.C
+
+Change-Id: I84530811fb6204a29e879bce8065a17964df1a72
 ---
- src/build/buildpnor/buildpnor.pl            | 590 +++++++++++-----------------
- src/build/buildpnor/defaultPnorLayout.xml   |  91 ++---
- src/build/mkrules/hbfw/img/makefile         |   4 +-
- src/include/usr/hwas/hwasPlatDeconfigGard.H |  19 +-
+ src/build/buildpnor/buildpnor.pl            | 588 +++++++++++-----------------
+ src/build/buildpnor/defaultPnorLayout.xml   |  87 ++--
+ src/build/mkrules/hbfw/img/makefile         |   2 +-
+ src/include/usr/hwas/hwasPlatDeconfigGard.H |  15 -
  src/include/usr/pnor/pnor_reasoncodes.H     |   2 -
  src/include/usr/pnor/pnorif.H               |  39 +-
- src/usr/hwas/hwasPlatDeconfigGard.C         |  89 +----
+ src/usr/hwas/hwasPlatDeconfigGard.C         |  87 +---
  src/usr/pnor/HBconfig                       |   5 -
- src/usr/pnor/common/ffs_hb.H                |   7 +-
+ src/usr/pnor/common/ffs_hb.H                |   3 +-
  src/usr/pnor/makefile                       |   1 -
  src/usr/pnor/pnor_common.C                  | 182 ++-------
  src/usr/pnor/pnor_common.H                  |  19 +-
@@ -24,25 +701,16 @@
  src/usr/pnor/runtime/rt_pnor.C              |  11 +-
  src/usr/pnor/runtime/rt_pnor.H              |   2 +-
  src/usr/pnor/test/pnorrptest.H              | 104 +----
- src/usr/sbe/sbe_update.C                    |  95 +++--
- src/usr/sbe/sbe_update.H                    |  38 +-
+ src/usr/sbe/sbe_update.C                    |  97 +++--
+ src/usr/sbe/sbe_update.H                    |  34 +-
  src/usr/sbe/test/sbeupdatetest.H            |  24 +-
- 22 files changed, 535 insertions(+), 1057 deletions(-)
+ 22 files changed, 529 insertions(+), 1043 deletions(-)
  delete mode 100644 src/usr/pnor/pnorsbe.C
 
 diff --git a/src/build/buildpnor/buildpnor.pl b/src/build/buildpnor/buildpnor.pl
-index f6df6c8..51b6922 100755
+index f6df6c8..7c5bd92 100755
 --- a/src/build/buildpnor/buildpnor.pl
 +++ b/src/build/buildpnor/buildpnor.pl
-@@ -6,7 +6,7 @@
- #
- # OpenPOWER HostBoot Project
- #
--# Contributors Listed Below - COPYRIGHT 2012,2015
-+# Contributors Listed Below - COPYRIGHT 2012,2014
- # [+] International Business Machines Corp.
- #
- #
 @@ -62,20 +62,16 @@ my $g_trace = 1;
  my $programName = File::Basename::basename $0;
  my %pnorLayout;
@@ -810,21 +1478,10 @@
  
  ################################################################################
 diff --git a/src/build/buildpnor/defaultPnorLayout.xml b/src/build/buildpnor/defaultPnorLayout.xml
-index 249bdb4..e34f0fe 100644
+index 249bdb4..e20439e 100644
 --- a/src/build/buildpnor/defaultPnorLayout.xml
 +++ b/src/build/buildpnor/defaultPnorLayout.xml
-@@ -5,9 +5,7 @@
- <!--                                                                        -->
- <!-- OpenPOWER HostBoot Project                                             -->
- <!--                                                                        -->
--<!-- Contributors Listed Below - COPYRIGHT 2012,2015                        -->
--<!-- [+] International Business Machines Corp.                              -->
--<!--                                                                        -->
-+<!-- COPYRIGHT International Business Machines Corp. 2012,2014              -->
- <!--                                                                        -->
- <!-- Licensed under the Apache License, Version 2.0 (the "License");        -->
- <!-- you may not use this file except in compliance with the License.       -->
-@@ -24,50 +22,48 @@
+@@ -24,50 +24,48 @@
  <!-- IBM_PROLOG_END_TAG                                                     -->
  <!--
  Layout Description
@@ -905,7 +1562,7 @@
          <ecc/>
      </section>
      <section>
-@@ -75,7 +71,6 @@ Layout Description
+@@ -75,7 +73,6 @@ Layout Description
          <eyeCatch>GUARD</eyeCatch>
          <physicalOffset>0x58000</physicalOffset>
          <physicalRegionSize>0x5000</physicalRegionSize>
@@ -913,7 +1570,7 @@
          <ecc/>
      </section>
      <section>
-@@ -83,7 +78,6 @@ Layout Description
+@@ -83,7 +80,6 @@ Layout Description
          <eyeCatch>HBD</eyeCatch>
          <physicalOffset>0x5D000</physicalOffset>
          <physicalRegionSize>0x120000</physicalRegionSize>
@@ -921,7 +1578,7 @@
          <ecc/>
      </section>
      <section>
-@@ -92,7 +86,6 @@ Layout Description
+@@ -92,7 +88,6 @@ Layout Description
          <!--NOTE: MUST update standalone.simics if offset changes -->
           <physicalOffset>0x17D000</physicalOffset>
          <physicalRegionSize>0x48000</physicalRegionSize>
@@ -929,7 +1586,7 @@
          <ecc/>
      </section>
      <section>
-@@ -101,7 +94,6 @@ Layout Description
+@@ -101,7 +96,6 @@ Layout Description
          <!--NOTE: MUST update standalone.simics if offset changes -->
          <physicalOffset>0x1C5000</physicalOffset>
          <physicalRegionSize>0x90000</physicalRegionSize>
@@ -937,7 +1594,7 @@
          <ecc/>
      </section>
      <section>
-@@ -110,7 +102,6 @@ Layout Description
+@@ -110,7 +104,6 @@ Layout Description
          <!--NOTE: MUST update standalone.simics if offset changes -->
          <physicalOffset>0x255000</physicalOffset>
          <physicalRegionSize>0x48000</physicalRegionSize>
@@ -945,7 +1602,7 @@
          <ecc/>
      </section>
      <section>
-@@ -119,7 +110,6 @@ Layout Description
+@@ -119,7 +112,6 @@ Layout Description
          <physicalOffset>0x29D000</physicalOffset>
          <physicalRegionSize>0x5A0000</physicalRegionSize>
          <sha512Version/>
@@ -953,7 +1610,7 @@
          <ecc/>
      </section>
      <section>
-@@ -128,7 +118,6 @@ Layout Description
+@@ -128,7 +120,6 @@ Layout Description
          <physicalOffset>0x83D000</physicalOffset>
          <physicalRegionSize>0x90000</physicalRegionSize>
          <sha512perEC/>
@@ -961,7 +1618,7 @@
          <ecc/>
      </section>
      <section>
-@@ -137,7 +126,6 @@ Layout Description
+@@ -137,7 +128,6 @@ Layout Description
          <physicalOffset>0x8CD000</physicalOffset>
          <physicalRegionSize>0x48000</physicalRegionSize>
          <sha512perEC/>
@@ -969,7 +1626,7 @@
          <ecc/>
      </section>
      <section>
-@@ -146,7 +134,6 @@ Layout Description
+@@ -146,7 +136,6 @@ Layout Description
          <physicalOffset>0x915000</physicalOffset>
          <physicalRegionSize>0x120000</physicalRegionSize>
          <sha512Version/>
@@ -977,7 +1634,7 @@
          <ecc/>
      </section>
      <section>
-@@ -155,7 +142,6 @@ Layout Description
+@@ -155,7 +144,6 @@ Layout Description
          <physicalOffset>0xA35000</physicalOffset>
          <physicalRegionSize>0x240000</physicalRegionSize>
          <sha512Version/>
@@ -985,7 +1642,7 @@
          <ecc/>
      </section>
      <section>
-@@ -163,7 +149,6 @@ Layout Description
+@@ -163,7 +151,6 @@ Layout Description
          <eyeCatch>PAYLOAD</eyeCatch>
          <physicalOffset>0xC75000</physicalOffset>
          <physicalRegionSize>0x1680000</physicalRegionSize>
@@ -993,7 +1650,7 @@
          <ecc/>
      </section>
      <section>
-@@ -172,18 +157,6 @@ Layout Description
+@@ -172,18 +159,6 @@ Layout Description
          <physicalOffset>0x3590000</physicalOffset>
          <physicalRegionSize>0x9000</physicalRegionSize>
          <testonly/>
@@ -1012,7 +1669,7 @@
          <ecc/>
      </section>
      <section>
-@@ -193,7 +166,6 @@ Layout Description
+@@ -193,7 +168,6 @@ Layout Description
          <physicalOffset>0x3F67000</physicalOffset>
          <physicalRegionSize>0x90000</physicalRegionSize>
          <sha512Version/>
@@ -1020,7 +1677,7 @@
          <ecc/>
      </section>
      <section>
-@@ -201,7 +173,6 @@ Layout Description
+@@ -201,7 +175,6 @@ Layout Description
          <eyeCatch>GLOBAL</eyeCatch>
          <physicalOffset>0x3FF7000</physicalOffset>
          <physicalRegionSize>0x9000</physicalRegionSize>
@@ -1029,18 +1686,9 @@
      </section>
  </pnor>
 diff --git a/src/build/mkrules/hbfw/img/makefile b/src/build/mkrules/hbfw/img/makefile
-index 925061e..c0b0900 100755
+index 925061e..8b229ad 100755
 --- a/src/build/mkrules/hbfw/img/makefile
 +++ b/src/build/mkrules/hbfw/img/makefile
-@@ -5,7 +5,7 @@
- #
- # OpenPOWER HostBoot Project
- #
--# Contributors Listed Below - COPYRIGHT 2012,2015
-+# Contributors Listed Below - COPYRIGHT 2012,2014
- # [+] International Business Machines Corp.
- #
- #
 @@ -226,7 +226,7 @@ PNOR_BUILD_SCRIPT = ${buildpnor.pl:P}
  #so need to use tryinclude for now.
  .tryinclude <${.PATH:Ffips_pnor.mk}>
@@ -1051,21 +1699,10 @@
  
  HBFW_OBJPATH = ${.PATH:M*obj*}
 diff --git a/src/include/usr/hwas/hwasPlatDeconfigGard.H b/src/include/usr/hwas/hwasPlatDeconfigGard.H
-index c439a42..4b89353 100644
+index c439a42..985d261 100644
 --- a/src/include/usr/hwas/hwasPlatDeconfigGard.H
 +++ b/src/include/usr/hwas/hwasPlatDeconfigGard.H
-@@ -5,9 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
--/* [+] International Business Machines Corp.                              */
--/*                                                                        */
-+/* COPYRIGHT International Business Machines Corp. 2012,2014              */
- /*                                                                        */
- /* Licensed under the Apache License, Version 2.0 (the "License");        */
- /* you may not use this file except in compliance with the License.       */
-@@ -32,8 +30,6 @@
+@@ -32,8 +32,6 @@
  #ifndef HWASPLATDECONFIGGARD_H_
  #define HWASPLATDECONFIGGARD_H_
  
@@ -1074,7 +1711,7 @@
  /**
   *  @brief Adapt common singleton declaration to specific platform
   *
-@@ -68,19 +64,6 @@ struct HBDeconfigGard
+@@ -68,19 +66,6 @@ struct HBDeconfigGard
      void *iv_pGardRecords;          // Pointer to the GARD Records in PNOR
  };
  
@@ -1200,18 +1837,9 @@
  
  #endif
 diff --git a/src/usr/hwas/hwasPlatDeconfigGard.C b/src/usr/hwas/hwasPlatDeconfigGard.C
-index 2911cf3..912f7d4 100644
+index 2911cf3..f163c0c 100644
 --- a/src/usr/hwas/hwasPlatDeconfigGard.C
 +++ b/src/usr/hwas/hwasPlatDeconfigGard.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
-+/* Contributors Listed Below - COPYRIGHT 2013,2014                        */
- /* [+] Google Inc.                                                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
 @@ -52,15 +52,6 @@ using namespace HWAS::COMMON;
  using namespace TARGETING;
  
@@ -1374,21 +2002,10 @@
 -    help
 -        This is used to turn on/off two sided pnor support
 diff --git a/src/usr/pnor/common/ffs_hb.H b/src/usr/pnor/common/ffs_hb.H
-index c96911b..b638021 100644
+index c96911b..3defcd4 100644
 --- a/src/usr/pnor/common/ffs_hb.H
 +++ b/src/usr/pnor/common/ffs_hb.H
-@@ -5,9 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
--/* [+] International Business Machines Corp.                              */
--/*                                                                        */
-+/* COPYRIGHT International Business Machines Corp. 2012,2014              */
- /*                                                                        */
- /* Licensed under the Apache License, Version 2.0 (the "License");        */
- /* you may not use this file except in compliance with the License.       */
-@@ -27,7 +25,7 @@
+@@ -27,7 +27,7 @@
  
  /*
   * FSP Destination: src/hbfw/fsp/pnor/common/ffs_hb.H
@@ -1397,7 +2014,7 @@
   * NOTE: Do NOT modify this file in CMVC directly!  It comes from the Hostboot
   *      repository and will be overwritten.
  */
-@@ -65,7 +63,6 @@ enum
+@@ -65,7 +65,6 @@ enum
  
      /* Miscellaneous Bits : 1 byte */
      FFS_MISC_PRESERVED     = 0x80,    /**< Preserved across code updates */
@@ -2381,10 +2998,10 @@
  
      /**
 diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
-index 698d41a..9dd9e0a 100644
+index a2fad1e..f9865ca 100644
 --- a/src/usr/sbe/sbe_update.C
 +++ b/src/usr/sbe/sbe_update.C
-@@ -1214,6 +1214,49 @@ namespace SBE
+@@ -1221,6 +1221,49 @@ namespace SBE
      }
  
  /////////////////////////////////////////////////////////////////////
@@ -2434,7 +3051,7 @@
      errlHndl_t getSbeInfoState(sbeTargetState_t& io_sbeState)
      {
  
-@@ -1308,11 +1351,11 @@ namespace SBE
+@@ -1315,11 +1358,11 @@ namespace SBE
              if(SEEPROM_0_PERMANENT_VALUE ==
                 (io_sbeState.mvpdSbKeyword.flags & PERMANENT_FLAG_MASK))
              {
@@ -2448,7 +3065,7 @@
              }
  
  
-@@ -1361,21 +1404,21 @@ namespace SBE
+@@ -1368,21 +1411,21 @@ namespace SBE
              /*  Determine which SEEPROM System Booted On   */
              /***********************************************/
              //Get Current (boot) Side
@@ -2476,7 +3093,7 @@
              }
              else
              {
-@@ -2012,7 +2055,7 @@ namespace SBE
+@@ -2018,7 +2061,7 @@ namespace SBE
              /*  Determine what side to update                             */
              /**************************************************************/
              // Set cur and alt isDirty values
@@ -2485,7 +3102,16 @@
              {
                  current_side_isDirty = seeprom_0_isDirty;
                  alt_side_isDirty     = seeprom_1_isDirty;
-@@ -2179,14 +2222,14 @@ namespace SBE
+@@ -2207,7 +2250,7 @@ namespace SBE
+                 // Set Update side to cur
+                 io_sbeState.seeprom_side_to_update =
+                                 ( io_sbeState.cur_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
+                                   ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP;
+ 
+                 TRACFCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
+@@ -2251,14 +2294,14 @@ namespace SBE
                      io_sbeState.seeprom_side_to_update = EEPROM::SBE_PRIMARY;
  
                      // Update MVPD PERMANENT flag: make cur=perm
@@ -2502,12 +3128,12 @@
                           // clear bit 1
                           io_sbeState.mvpdSbKeyword.flags &= ~REIPL_SEEPROM_MASK
                           : //set bit 1
-@@ -2252,18 +2295,18 @@ namespace SBE
- 
+@@ -2325,18 +2368,18 @@ namespace SBE
                      // Set Update side to alt
                      io_sbeState.seeprom_side_to_update =
--                                ( io_sbeState.alt_seeprom_side == PNOR::SBE_SEEPROM0 )
-+                                ( io_sbeState.alt_seeprom_side == SBE_SEEPROM0 )
+                                 ( io_sbeState.alt_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
                                    ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP ;
  
                      // Update MVPD PERMANENT flag: make cur=perm
@@ -2524,12 +3150,12 @@
                           // clear bit 1
                           io_sbeState.mvpdSbKeyword.flags &= ~REIPL_SEEPROM_MASK
                           : //set bit 1
-@@ -2298,13 +2341,13 @@ namespace SBE
- 
+@@ -2372,13 +2415,13 @@ namespace SBE
                      // Set Update side to alt
                      io_sbeState.seeprom_side_to_update =
--                                ( io_sbeState.alt_seeprom_side == PNOR::SBE_SEEPROM0 )
-+                                ( io_sbeState.alt_seeprom_side == SBE_SEEPROM0 )
+                                 ( io_sbeState.alt_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
                                    ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP ;
  
  
@@ -2540,12 +3166,12 @@
                           // clear bit 0
                           io_sbeState.mvpdSbKeyword.flags &= ~PERMANENT_FLAG_MASK
                           : // set bit 0
-@@ -2358,11 +2401,11 @@ namespace SBE
- 
+@@ -2433,11 +2476,11 @@ namespace SBE
                      // Set Update side to alt
                      io_sbeState.seeprom_side_to_update =
--                                ( io_sbeState.alt_seeprom_side == PNOR::SBE_SEEPROM0 )
-+                                ( io_sbeState.alt_seeprom_side == SBE_SEEPROM0 )
+                                 ( io_sbeState.alt_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
                                    ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP ;
  
                      // Update MVPD RE-IPL SEEPROM flag: re-IPL on ALT:
@@ -2554,7 +3180,7 @@
                           // clear bit 1
                           io_sbeState.mvpdSbKeyword.flags &= ~REIPL_SEEPROM_MASK
                           : // set bit 1
-@@ -2373,7 +2416,7 @@ namespace SBE
+@@ -2448,7 +2491,7 @@ namespace SBE
                      if ( g_istep_mode )
                      {
                          // Update MVPD PERMANENT flag: make alt=perm
@@ -2563,12 +3189,12 @@
                           // clear bit 0
                           io_sbeState.mvpdSbKeyword.flags &= ~PERMANENT_FLAG_MASK
                           : //set bit 0
-@@ -2455,11 +2498,11 @@ namespace SBE
- 
+@@ -2531,11 +2574,11 @@ namespace SBE
                          // Set Update side to alt
                          io_sbeState.seeprom_side_to_update =
--                                ( io_sbeState.alt_seeprom_side == PNOR::SBE_SEEPROM0 )
-+                                ( io_sbeState.alt_seeprom_side == SBE_SEEPROM0 )
+                                 ( io_sbeState.alt_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
                                    ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP ;
  
                          // Update MVPD RE-IPL SEEPROM flag: re-IPL on ALT:
@@ -2577,21 +3203,21 @@
                            // clear bit 1
                            io_sbeState.mvpdSbKeyword.flags &= ~REIPL_SEEPROM_MASK
                            : // set bit 1
-@@ -2491,7 +2534,7 @@ namespace SBE
- 
+@@ -2568,7 +2611,7 @@ namespace SBE
                      // Set Update side to alt
                      io_sbeState.seeprom_side_to_update =
--                                ( io_sbeState.alt_seeprom_side == PNOR::SBE_SEEPROM0 )
-+                                ( io_sbeState.alt_seeprom_side == SBE_SEEPROM0 )
+                                 ( io_sbeState.alt_seeprom_side ==
+-                                              PNOR::SBE_SEEPROM0 )
++                                              SBE_SEEPROM0 )
                                    ? EEPROM::SBE_PRIMARY : EEPROM::SBE_BACKUP ;
  
                      TRACFCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
-@@ -3201,12 +3244,12 @@ namespace SBE
- 
+@@ -3279,12 +3322,12 @@ namespace SBE
                      // Compare against 'current' Master side in case there is
                      // an issue with the other side
--                    if (io_sbeStates_v[i].cur_seeprom_side == PNOR::SBE_SEEPROM0)
-+                    if (io_sbeStates_v[i].cur_seeprom_side == SBE_SEEPROM0)
+                     if (io_sbeStates_v[i].cur_seeprom_side ==
+-                                          PNOR::SBE_SEEPROM0)
++                                          SBE_SEEPROM0)
                      {
                          ver_ptr =
                              &(io_sbeStates_v[i].seeprom_0_ver.image_version);
@@ -2601,12 +3227,12 @@
                      {
                          ver_ptr =
                              &(io_sbeStates_v[i].seeprom_1_ver.image_version);
-@@ -3346,12 +3389,12 @@ namespace SBE
-                 else
+@@ -3428,12 +3471,12 @@ namespace SBE
                  {
                      // Not Master, so get 'current' version
--                    if (io_sbeStates_v[i].cur_seeprom_side == PNOR::SBE_SEEPROM0)
-+                    if (io_sbeStates_v[i].cur_seeprom_side == SBE_SEEPROM0)
+                     if (io_sbeStates_v[i].cur_seeprom_side ==
+-                                          PNOR::SBE_SEEPROM0)
++                                          SBE_SEEPROM0)
                      {
                          ver_ptr =
                              &(io_sbeStates_v[i].seeprom_0_ver.image_version);
@@ -2617,21 +3243,10 @@
                          ver_ptr =
                              &(io_sbeStates_v[i].seeprom_1_ver.image_version);
 diff --git a/src/usr/sbe/sbe_update.H b/src/usr/sbe/sbe_update.H
-index e49c582..aa880b2 100644
+index e49c582..09aa476 100644
 --- a/src/usr/sbe/sbe_update.H
 +++ b/src/usr/sbe/sbe_update.H
-@@ -5,9 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
--/* [+] International Business Machines Corp.                              */
--/*                                                                        */
-+/* COPYRIGHT International Business Machines Corp. 2013,2014              */
- /*                                                                        */
- /* Licensed under the Apache License, Version 2.0 (the "License");        */
- /* you may not use this file except in compliance with the License.       */
-@@ -55,6 +53,10 @@ namespace SBE
+@@ -55,6 +55,10 @@ namespace SBE
      const uint64_t SBE_IMAGE_SEEPROM_ADDRESS    = 0x400; // 1KB
      const uint64_t SBE_VERSION_SEEPROM_ADDRESS  = 0x300; // 1KB - 256B
  
@@ -2642,7 +3257,7 @@
      // PNOR SBE and SBEC Partition constants
      const uint32_t MAX_SBE_ENTRIES = 9;
      const uint32_t SBETOC_EYECATCH = 0x53424500;  //'SBE\0'
-@@ -104,6 +106,14 @@ namespace SBE
+@@ -104,6 +108,14 @@ namespace SBE
          MVPDOP_WRITE,     // Write version data to MVPD
      };
  
@@ -2657,7 +3272,7 @@
      // Actions can be combined
      enum sbeUpdateActions_t
      {
-@@ -117,6 +127,7 @@ namespace SBE
+@@ -117,6 +129,7 @@ namespace SBE
          UNSUPPORTED_SITUATION  = 0x80000000,
      };
  
@@ -2665,7 +3280,7 @@
      /******************************************/
      /*  Structs                               */
      /******************************************/
-@@ -196,9 +207,9 @@ namespace SBE
+@@ -196,9 +209,9 @@ namespace SBE
          bool                     seeprom_0_ver_ECC_fail;
          bool                     seeprom_1_ver_ECC_fail;
  
@@ -2678,7 +3293,7 @@
  
          // Customized Image Information for this Target
          size_t                   customizedImage_size;
-@@ -318,6 +329,21 @@ namespace SBE
+@@ -318,6 +331,21 @@ namespace SBE
                                     void* io_imgPtr,
                                     size_t& o_actImgSize);
  
diff --git a/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch b/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch
index 6eecc7b..9d7a6c0 100644
--- a/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch
+++ b/openpower/package/hostboot/hostboot-0004-Serverwiz2-scripts.patch
@@ -1,17 +1,16 @@
-From 065fd1bc3d9fcc8b06be7564f8df162580f8775e Mon Sep 17 00:00:00 2001
+From 8f139eab659dc681e24a8c414dac00607a090fa0 Mon Sep 17 00:00:00 2001
 From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Fri, 13 Feb 2015 10:41:12 -0600
-Subject: [PATCH] New severwiz2 scripts up to support up to commit
- 44fde6512e834ea8f5071299ca99b35973c0f979
+Date: Mon, 16 Feb 2015 13:15:43 -0600
+Subject: [PATCH] New Serverwiz2 patches
 
-Change-Id: I3df49506aad9490f5f6e1840fa5e6afe3150492d
+Change-Id: I4ba05d89e9ca0ef3298c0f9d503f349782632d89
 ---
- src/build/mkrules/dist.targets.mk      |    3 +-
- src/usr/targeting/common/Targets.pm    | 1446 ++++++++++++++++++++++++++++++++
- src/usr/targeting/common/processMrw.pl | 1144 +++++++++++++++++++++++++
- 3 files changed, 2592 insertions(+), 1 deletion(-)
- create mode 100755 src/usr/targeting/common/Targets.pm
- create mode 100755 src/usr/targeting/common/processMrw.pl
+ 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
@@ -28,2336 +27,337 @@
      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
-new file mode 100755
-index 0000000..53568cf
---- /dev/null
+old mode 100644
+new mode 100755
+index d4c2bfa..53568cf
+--- a/src/usr/targeting/common/Targets.pm
 +++ b/src/usr/targeting/common/Targets.pm
-@@ -0,0 +1,1446 @@
-+# IBM_PROLOG_BEGIN_TAG
-+# This is an automatically generated prolog.
-+#
-+# $Source: src/usr/targeting/common/Targets.pm $
-+#
-+# 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
-+package Targets;
-+
-+use strict;
-+use XML::Simple;
-+use Data::Dumper;
-+
-+sub new
-+{
-+    my $class = shift;
-+    my $self  = {
-+        xml          => undef,
-+        data         => undef,
-+        targeting    => undef,
-+        enumerations => undef,
-+        MAX_MCS      => 0,
-+        master_proc  => undef,
-+        huid_idx     => undef,
-+        mru_idx      => undef,
-+        force        => 0,
-+        debug        => 0,
-+        version      => "",
-+        errorsExist  => 0,
-+        NUM_PROCS    => 0,
-+        TOP_LEVEL    => "sys-0",
-+        TOPOLOGY     => undef,
-+        DMI_FSI_MAP  => {
-+            '0' => '3',
-+            '1' => '2',
-+            '4' => '7',
-+            '5' => '6'
-+        }
-+        # TODO RTC: TBD
-+        # DMI_FSI_MAP is a lookup table for DMI channel to FSI and ref clock.
-+        # It is processor specific and needs to be pulled from a
-+        # processor attribute instead of being hardcoded
-+
-+    };
-+    return bless $self, $class;
-+}
-+
-+sub setVersion
-+{
-+    my $self    = shift;
-+    my $version = shift;
-+
-+    $self->{version} = $version;
-+}
-+
-+sub getData
-+{
-+    my $self = shift;
-+    return $self->{data};
-+}
-+
-+## loads ServerWiz XML format
-+sub loadXML
-+{
-+    my $self = shift;
-+    my $filename = shift;
-+    $XML::Simple::PREFERRED_PARSER = 'XML::Parser';
-+    print "Loading MRW XML: $filename\n";
-+    $self->{xml} =
-+      XMLin($filename,forcearray => [ 'child_id', 'hidden_child_id', 'bus',
-+                                      'property' ]);
-+    $self->storeEnumerations();
-+    $self->buildHierarchy($self->{TOP_LEVEL});
-+    $self->buildAffinity();
-+}
-+
-+################################################
-+## prints out final XML for HOSTBOOT consumption
-+
-+sub printXML
-+{
-+    my $self = shift;
-+    my $fh   = shift;
-+    my $t    = shift;
-+
-+    my $atTop = 0;
-+    if ($t eq "top")
-+    {
-+        $atTop = 1;
-+        $t     = $self->{targeting}->{SYS};
-+        print $fh "<attributes>\n";
-+        print $fh "<version>" . $self->{version} . "</version>\n";
-+    }
-+    if (ref($t) ne "ARRAY")
-+    {
-+        return;
-+    }
-+    for (my $p = 0; $p < scalar(@{$t}); $p++)
-+    {
-+        if (ref($t->[$p]) ne "HASH") { next; }
-+        my $target = $t->[$p]->{KEY};
-+        $self->printTarget($fh, $target);
-+        my $children = $t->[$p];
-+        foreach my $u (sort(keys %{$children}))
-+        {
-+            if ($u ne "KEY")
-+            {
-+                $self->printXML($fh, $t->[$p]->{$u});
-+            }
-+        }
-+    }
-+    if ($atTop)
-+    {
-+        print $fh "</attributes>\n";
-+    }
-+}
-+
-+sub printTarget
-+{
-+    my $self   = shift;
-+    my $fh     = shift;
-+    my $target = shift;
-+
-+    my $target_ptr = $self->getTarget($target);
-+    print $fh "<targetInstance>\n";
-+    my $target_id = $self->getAttribute($target, "PHYS_PATH");
-+    $target_id = substr($target_id, 9);
-+    $target_id =~ s/\///g;
-+    $target_id =~ s/\-//g;
-+    print $fh "\t<id>" . $target_id . "</id>\n";
-+    print $fh "\t<type>" . $self->getTargetType($target) . "</type>\n";
-+
-+    ## get attributes
-+    foreach my $attr (sort (keys %{ $target_ptr->{ATTRIBUTES} }))
-+    {
-+        $self->printAttribute($fh, $target_ptr->{ATTRIBUTES}, $attr);
-+    }
-+    print $fh "</targetInstance>\n";
-+}
-+
-+sub printAttribute
-+{
-+    my $self       = shift;
-+    my $fh         = shift;
-+    my $target_ptr = shift;
-+    my $attribute  = shift;
-+    my $r          = "";
-+
-+    # TODO RTC: TBD
-+    # temporary until we converge attribute types
-+    my %filter;
-+    $filter{MRW_TYPE}                       = 1;
-+    $filter{INSTANCE_PATH}                  = 1;
-+    $filter{SYSTEM_NAME}                    = 1;
-+    $filter{BUS_TYPE}                       = 1;
-+    $filter{DIRECTION}                      = 1;
-+    $filter{ENABLE_CAPI}                    = 1;
-+    $filter{PCIE_CONFIG_NUM}                = 1;
-+    $filter{PCIE_LANE_MASK}                 = 1;
-+    $filter{PCIE_LANE_SET}                  = 1;
-+    $filter{PCIE_NUM_LANES}                 = 1;
-+    $filter{PHB_NUM}                        = 1;
-+    $filter{IOP_NUM}                        = 1;
-+    $filter{LOCATION_CODE}                  = 1;
-+    $filter{MCS_NUM}                        = 1;
-+    $filter{SCHEMATIC_INTERFACE}            = 1;
-+    $filter{ENTITY_ID}                      = 1;
-+    $filter{CLASS}                          = 1;
-+    $filter{MODEL}                          = 1;
-+    $filter{TYPE}                           = 1;
-+    $filter{CDM_POLICIES}                   = 1;
-+    $filter{ALL_MCS_IN_INTERLEAVING_GROUP}  = 1;
-+    $filter{MSS_INTERLEAVE_ENABLE}          = 1;
-+    $filter{CDM_POLICIES_BITMASK}           = 1;
-+    $filter{ENTITY_ID_LOOKUP}               = 1;
-+    $filter{ENTITY_INSTANCE}                = 1;
-+    $filter{MBA_NUM}                        = 1;
-+    $filter{IPMI_INSTANCE}                  = 1;
-+    $filter{INSTANCE_ID}                    = 1;
+@@ -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)
-+    {
-+        return;
-+    }
-+    print $fh "\t<attribute>\n";
-+    print $fh "\t\t<id>$attribute</id>\n";
-+    my $value = $target_ptr->{$attribute}->{default};
-+
-+    if (ref($value) eq "HASH")
-+    {
-+        if (defined($value->{field}))
-+        {
-+            print $fh "\t\t<default>\n";
-+            foreach my $f (sort keys %{ $value->{field} })
-+            {
-+                my $v = $value->{field}->{$f}->{value};
-+                print $fh "\t\t\t<field><id>$f</id><value>$v</value></field>\n";
-+            }
-+            print $fh "\t\t</default>\n";
-+        }
-+    }
-+    else
-+    {
-+        print $fh "\t\t<default>$value</default>\n";
-+    }
-+    print $fh "\t</attribute>\n";
-+}
-+
-+## stores TYPE enumeration values which is used to generate HUIDs
-+sub storeEnumerations
-+{
-+    my $self = shift;
-+
-+    foreach my $enumType (keys(%{ $self->{xml}->{enumerationType} }))
-+    {
-+        foreach my $enum (
-+            keys(%{$self->{xml}->{enumerationType}->{$enumType}->{enumerator}}))
-+        {
-+            $self->{enumeration}->{$enumType}->{$enum} =
-+              $self->{xml}->{enumerationType}->{$enumType}->{enumerator}
-+              ->{$enum}->{value};
-+        }
-+    }
-+}
-+
-+####################################################
-+## build target hierarchy recursively
-+##
-+## creates convenient data structure
-+## for accessing targets and busses
-+## Structure:
-+##
-+##{TARGETS}                                         # location of all targets
-+##{NSTANCE_PATH}                                    # keeps track of hierarchy
-+##                                                   path while iterating
-+##{TARGETS} -> target_name                          # specific target
-+##{TARGETS} -> target_name -> {TARGET}              # pointer to target data
-+##                                                   from XML data struture
-+##{TARGETS} -> target_name -> {TYPE}# special attribute
-+##{TARGETS} -> target_name -> {PARENT}              # parent target name
-+##{TARGETS} -> target_name -> {CHILDREN}            # array of children targets
-+##{TARGETS} -> target_name -> {CONNECTION} -> {DEST} # array of connection
-+##                                                     destination targets
-+##{TARGETS} -> target_name -> {CONNECTION} -> {BUS} # array of busses
-+##{TARGETS} -> target_name -> {CHILDREN}            # array of children targets
-+##{TARGETS} -> target_name -> {ATTRIBUTES}          # attributes
-+## {ENUMERATION} -> enumeration_type -> enum        # value of enumeration
-+## {BUSSES} -> bus_type[]                           # array of busses by
-+##                                                   bus_type (I2C, FSI, etc)
-+## {BUSSES} -> bus_type[] -> {BUS}                  # pointer to bus target
-+##                                                   from xml structure
-+## {BUSSES} -> bus_type[] -> {SOURCE_TARGET}        # source target name
-+## {BUSSES} -> bus_type[] -> {DEST_TARGET}          # dest target name
-+
-+sub buildHierarchy
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+
-+    my $old_path        = $self->{data}->{INSTANCE_PATH};
-+    my $target_xml      = $self->{xml}->{'targetInstance'}{$target};
-+    my $affinity_target = $target;
-+    my $key             = $self->{data}->{INSTANCE_PATH} . "/" . $target;
-+
-+    my $instance_path = $self->{data}->{INSTANCE_PATH};
-+    $instance_path = "instance:" . substr($instance_path, 1);
-+    $self->setAttribute($key, "INSTANCE_PATH", $instance_path);
-+    $self->{data}->{TARGETS}->{$key}->{TARGET} = $target_xml;
-+    $self->{data}->{INSTANCE_PATH} = $old_path . "/" . $target;
-+
-+    ## copy attributes
+ 
+     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};
-+        if (ref($value) eq "HASH")
-+        {
-+            if (defined($value->{field}))
-+            {
-+                foreach my $f (keys %{ $value->{field} })
-+                {
-+                    my $field_val=$value->{field}{$f}{value};
-+                    if (ref($field_val)) {
-+                        $self->setAttributeField($key, $attribute, $f,"");
-+                    }
-+                    else
-+                    {
-+                        $self->setAttributeField($key, $attribute, $f,
-+                            $value->{field}{$f}{value});
-+                    }
-+                }
-+            }
-+            else
-+            {
-+                $self->setAttribute($key, $attribute, "");
-+            }
-+        }
-+        else
-+        {
-+            $self->setAttribute($key, $attribute, $value);
-+        }
-+    }
+     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}->
-+                       {$prop}->{value};
-+        $self->setAttribute($key, $prop, $val);
-+    }
-+
-+    ## Save busses
-+    if (defined($target_xml->{bus}))
-+    {
-+        foreach my $b (@{ $target_xml->{bus} })
-+        {
-+            my $source_target =
-+              $key . "/" . $b->{source_path} . $b->{source_target};
-+            my $dest_target = $key . "/" . $b->{dest_path} . $b->{dest_target};
-+            my $bus_type    = $b->{bus_type};
-+            push(
-+                @{
-+                    $self->{data}->{TARGETS}->{$source_target}->{CONNECTION}
-+                      ->{DEST}
-+                  },
-+                $dest_target
-+            );
-+            push(
-+                @{
-+                    $self->{data}->{TARGETS}->{$source_target}->{CONNECTION}
-+                      ->{BUS}
-+                  },
-+                $b
-+            );
-+            my %bus_entry;
-+            $bus_entry{SOURCE_TARGET} = $source_target;
-+            $bus_entry{DEST_TARGET}   = $dest_target;
-+            $bus_entry{BUS_TARGET}    = $b;
-+            push(@{ $self->{data}->{BUSSES}->{$bus_type} }, \%bus_entry);
-+        }
-+    }
-+
-+    foreach my $child (@{ $target_xml->{child_id} })
-+    {
-+        my $child_key = $self->{data}->{INSTANCE_PATH} . "/" . $child;
-+        $self->{data}->{TARGETS}->{$child_key}->{PARENT} = $key;
-+        push(@{ $self->{data}->{TARGETS}->{$key}->{CHILDREN} }, $child_key);
-+        $self->buildHierarchy($child);
-+    }
-+    foreach my $child (@{ $target_xml->{hidden_child_id} })
-+    {
-+        my $child_key = $self->{data}->{INSTANCE_PATH} . "/" . $child;
-+        $self->{data}->{TARGETS}->{$child_key}->{PARENT} = $key;
-+        push(@{ $self->{data}->{TARGETS}->{$key}->{CHILDREN} }, $child_key);
-+        $self->buildHierarchy($child);
-+    }
-+    $self->{data}->{INSTANCE_PATH} = $old_path;
-+
-+}
-+
-+##########################################################
-+## traces busses and builds affinity hierarchy
-+## HOSTBOOT expected hierarchy: sys/node/proc/<unit>
-+##                              sys/node/proc/mcs/membuf/<unit>
-+##                              sys/node/proc/mcs/membuf/mba/dimm
-+
-+sub buildAffinity
-+{
-+    my $self = shift;
-+    my $node      = -1;
-+    my $proc      = -1;
-+    my $node_phys = "";
-+    my $node_aff  = "";
-+    my $core_num = 0;
-+    $self->{membuf_inst_num}=0;
-+    foreach my $target (sort keys %{ $self->{data}->{TARGETS} })
-+    {
-+        my $target_ptr = $self->{data}->{TARGETS}{$target};
-+        my $type       = $self->getType($target);
-+        my $type_id    = $self->getEnumValue("TYPE", $type);
-+        if ($type_id eq "") { $type_id = 0; }
-+
-+        if ($type eq "SYS")
-+        {
-+            $proc = -1;
-+            $node = -1;
+     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");
-+            $self->setAttribute($target, "ENTITY_INSTANCE","0");
-+        }
-+        elsif ($type eq "NODE")
-+        {
-+            $core_num = 0;
-+            $proc = -1;
-+            $self->{dimm_tpos} = 0;
-+            $self->{membuf_inst_num}=0;
-+            $node++;
-+            $node_phys = "physical:sys-0/node-$node";
-+            $node_aff  = "affinity:sys-0/node-$node";
-+            $self->{targeting}{SYS}[0]{NODES}[$node]{KEY} = $target;
-+            $self->setAttribute($target, "AFFINITY_PATH",
-+                "affinity:sys-0/node-$node");
-+            $self->setAttribute($target, "PHYS_PATH",
-+                "physical:sys-0/node-$node");
-+            $self->setHuid($target, 0, $node);
-+            $self->setAttribute($target, "ENTITY_INSTANCE",$node);
-+        }
-+        elsif ($type eq "PROC")
-+        {
-+            $proc++;
-+            my $num_mcs = 0;
-+            ### count number of MCSs
-+            foreach my $unit (@{ $self->{data}->{TARGETS}{$target}{CHILDREN} })
-+            {
-+                my $unit_type = $self->getType($unit);
-+                if ($unit_type eq "MCS")
-+                {
-+                    $num_mcs++;
-+                }
-+            }
-+            if ($num_mcs > $self->{MAX_MCS})
-+            {
-+                $self->{MAX_MCS} = $num_mcs;
-+            }
-+            $self->{NUM_PROCS_PER_NODE} = $proc + 1;
-+            $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY} =
-+              $target;
+             $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));
-+            my $parent_affinity = "affinity:sys-0/node-$node/proc-$proc";
-+            my $parent_physical = "physical:sys-0/node-$node/proc-$proc";
-+            $self->setAttribute($target, "AFFINITY_PATH",  $parent_affinity);
-+            $self->setAttribute($target, "PHYS_PATH",      $parent_physical);
-+            $self->setAttribute($target, "POSITION",       $proc);
-+            $self->setAttribute($target, "ENTITY_INSTANCE",$proc);
-+            $self->setAttribute($target, "FABRIC_NODE_ID",
-+                  $self->getAttribute($socket,"FABRIC_NODE_ID"));
-+             $self->setAttribute($target, "FABRIC_CHIP_ID",
-+                  $self->getAttribute($socket,"FABRIC_CHIP_ID"));
-+
-+            $self->setAttribute($target, "VPD_REC_NUM",    $proc);
-+
-+
-+            foreach my $unit (@{ $self->{data}->{TARGETS}{$target}{CHILDREN} })
-+            {
-+                my $unit_ptr     = $self->getTarget($unit);
-+                my $unit_type    = $self->getType($unit);
-+                my $unit_type_id = $self->getEnumValue("TYPE", $unit_type);
-+                if (   $unit_type_id eq "" || $unit_type eq "FSI"
-+                    || $unit_type eq "MCS")
-+                {
-+                    $unit_type_id = 0;
-+                }
-+
-+                ## don't want non-hostboot targets
-+                if ($unit_type_id > 0)
-+                {
+             $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 });
-+                    my $affinity_path =
-+                        $parent_affinity . "/"
-+                      . $self->getTarget($unit)->{TARGET}->{instance_name};
-+                    my $physical_path =
-+                        $parent_physical . "/"
-+                      . $self->getTarget($unit)->{TARGET}->{instance_name};
-+                    $self->setAttribute($unit, "AFFINITY_PATH",$affinity_path);
-+                    $self->setAttribute($unit, "PHYS_PATH", $physical_path);
-+                    $self->setHuid($unit, 0, $node);
-+                    if ($unit_type eq "OCC")
-+                    {
+                     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")
-+                    {
-+                        my $core_unit_num = $self->getAttribute($unit,
-+                            "CHIP_UNIT");
-+
-+                        my $core_unit =
-+                          $self->{data}->{TARGETS}{$unit}{CHILDREN}[0];
-+                        push(
-+                            @{
-+                                $self->{targeting}
-+                                  ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{CORE}
-+                              },
-+                            { 'KEY' => $core_unit }
-+                        );
-+                        my $core_affinity_path =
-+                            $affinity_path . "/"
-+                          . $self->getTarget($core_unit)->{TARGET}
-+                          ->{instance_name};
-+                        my $core_physical_path =
-+                            $physical_path . "/"
-+                          . $self->getTarget($core_unit)->{TARGET}
-+                          ->{instance_name};
-+                        $self->setAttribute($core_unit, "AFFINITY_PATH",
-+                            $core_affinity_path);
-+                        $self->setAttribute($core_unit, "PHYS_PATH",
-+                            $core_physical_path);
-+                        $self->setAttribute($core_unit, "CHIP_UNIT",
-+                            $core_unit_num);
-+                        $self->setHuid($core_unit, 0, $node);
-+                        $self->setAttribute($core_unit, "ENTITY_INSTANCE",
-+                             $core_num);
-+                        $core_num++;
-+                    }
-+                }
-+                elsif ($unit_type eq "MCS")
-+                {
-+                    $self->processMcs($unit, $node, $proc, $parent_affinity,
-+                        $parent_physical, $node_phys);
-+                }
-+            }
-+        }
-+    }
-+}
-+
-+sub processMcs
-+{
-+    my $self            = shift;
-+    my $unit            = shift;
-+    my $node            = shift;
-+    my $proc            = shift;
-+    my $parent_affinity = shift;
-+    my $parent_physical = shift;
-+    my $node_phys       = shift;
-+
-+    my $mcs = $self->getAttribute($unit, "CHIP_UNIT");
-+    my $membufnum = $proc * $self->{MAX_MCS} + $mcs;
-+    $self->setAttribute($unit, "AFFINITY_PATH",$parent_affinity . "/mcs-$mcs");
-+    $self->setAttribute($unit, "PHYS_PATH", $parent_physical . "/mcs-$mcs");
-+    $self->setAttribute($unit, "MCS_NUM",   $mcs);
-+    $self->setHuid($unit, 0, $node);
-+    $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs]{KEY} =
-+      $unit;
-+
-+        $self->setAttribute($unit, "EI_BUS_TX_LANE_INVERT","0");
-+        $self->setAttribute($unit, "EI_BUS_TX_MSBSWAP","0");
-+        $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE","0");
-+
-+    ## Find connected membufs
-+    my $membuf_dmi = $self->{data}->{TARGETS}{$unit}{CONNECTION}{DEST}[0];
-+    if (defined($membuf_dmi))
-+    {
-+        ## found membuf connected
-+        my $membuf =
-+          $self->{data}->{TARGETS}{$membuf_dmi}
-+          {PARENT};    ## get parent of dmi unit which is membuf
-+        my $dmi_bus = $self->{data}->{TARGETS}{$unit}{CONNECTION}{BUS}[0];
-+        $self->setAttribute($membuf, "POSITION",$membufnum);
-+        $self->setAttribute($membuf, "AFFINITY_PATH",
-+            $parent_affinity . "/mcs-$mcs/membuf-$membufnum");
-+        $self->setAttribute($membuf, "PHYS_PATH",
-+            $node_phys . "/membuf-$membufnum");
-+        $self->setAttribute($membuf, "VPD_REC_NUM",
-+            $self->getAttribute($membuf, "POSITION"));
-+
-+        ## copy DMI bus attributes to membuf
-+        $self->setAttribute($unit, "EI_BUS_TX_LANE_INVERT",
-+            $dmi_bus->{bus_attribute}->{PROC_TX_LANE_INVERT}->{default});
-+        $self->setAttribute($unit, "EI_BUS_TX_MSBSWAP",
-+            $dmi_bus->{bus_attribute}->{PROC_TX_MSBSWAP}->{default});
-+        $self->setAttribute($membuf, "EI_BUS_TX_LANE_INVERT",
-+            $dmi_bus->{bus_attribute}->{MEMBUF_TX_LANE_INVERT}->{default});
-+        $self->setAttribute($membuf, "EI_BUS_TX_MSBSWAP",
-+            $dmi_bus->{bus_attribute}->{MEMBUF_TX_MSBSWAP}->{default});
-+
-+        ## auto setup FSI assuming schematic symbol.  If FSI busses are
-+        ## defined in serverwiz2, this will be overridden
-+        ## in the schematic symbol, the fsi port num matches dmi ref clk num
-+
-+        my $fsi_port = $self->{DMI_FSI_MAP}->{$mcs};
-+        my $proc_key =
-+            $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY};
-+        my $proc_path = $self->getAttribute($proc_key,"PHYS_PATH");
-+        $self->setFsiAttributes($membuf,"FSICM",0,$proc_path,$fsi_port,0);
-+        $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE",$fsi_port);
-+        my $dmi_swizzle =
-+             $dmi_bus->{bus_attribute}->{DMI_REFCLOCK_SWIZZLE}->{default};
-+        my $dmi_swizzle =
-+             $self->getBusAttribute($unit,0,"DMI_REFCLOCK_SWIZZLE");
-+        if ($dmi_swizzle ne "")
-+        {
-+            $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE",$dmi_swizzle);
-+        }
-+
-+        $self->setHuid($membuf, 0, $node);
-+        $self->{targeting}
-+          ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs] {MEMBUFS}[0]{KEY} =
-+          $membuf;
+                     }
+                     ## 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->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} })
-+        {
-+            ## need to not hardcard the subunits
-+            if ($self->getType($child) eq "L4")
-+            {
-+                $self->{targeting}
-+                  ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs]{MEMBUFS}[0]
-+                  {L4S}[0] {KEY} = $child;
-+                $self->setAttribute($child, "AFFINITY_PATH",
-+                    $parent_affinity . "/mcs-$mcs/membuf-$membufnum/l4-0");
-+                $self->setAttribute($child, "PHYS_PATH",
-+                    $node_phys . "/membuf-$membufnum/l4-0");
-+                $self->setHuid($child, 0, $node);
-+            }
+         $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");
-+                $self->setAttribute($child, "AFFINITY_PATH",
-+                    $parent_affinity . "/mcs-$mcs/membuf-$membufnum/mba-$mba");
-+                $self->setAttribute($child, "PHYS_PATH",
-+                    $node_phys . "/membuf-$membufnum/mba-$mba");
-+                $self->setHuid($child, 0, $node);
-+                $self->{targeting}
-+                  ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs]{MEMBUFS}[0]
-+                  {MBAS}[$mba]{KEY} = $child;
-+
-+                ## Trace the DDR busses to find connected DIMM
-+                my $ddrs = $self->findConnections($child,"DDR3","");
-+                if ($ddrs ne "")
-+                {
-+                    my $affinitypos=0;
-+                    foreach my $dimms (@{$ddrs->{CONN}})
-+                    {
-+                        my $ddr = $dimms->{SOURCE};
-+                        my $port_num = $self->getAttribute($ddr,"MBA_PORT");
-+                        my $dimm_num = $self->getAttribute($ddr,"MBA_DIMM");
-+                        my $dimm=$dimms->{DEST_PARENT};
-+                        $self->setAttribute($dimm,"MBA_PORT",$port_num);
-+                        $self->setAttribute($dimm,"MBA_DIMM",$dimm_num);
-+
-+                        my $aff_pos=16*$proc+$mcs*$self->{MAX_MCS}+4*$mba+
-+                                    2*$port_num+$dimm_num;
-+                        $self->setAttribute($dimm, "AFFINITY_PATH",
-+                            $parent_affinity
-+                      . "/mcs-$mcs/membuf-$membufnum/mba-$mba/dimm-$affinitypos"
-+                        );
-+                        $self->setAttribute($dimm, "PHYS_PATH",
-+                            $node_phys . "/dimm-" . $self->{dimm_tpos});
-+                        $self->setAttribute($dimm, "POSITION",
-+                            $aff_pos);
-+                        $self->setAttribute($dimm, "VPD_REC_NUM",
-+                            $aff_pos);
-+                        $self->setHuid($dimm, 0, $node);
-+                        $self->{targeting}
-+                          ->{SYS}[0]{NODES}[$node]{PROCS}[$proc] {MCSS}[$mcs]
+             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->setAttribute($dimm, "ENTITY_INSTANCE",
+-                             $self->{dimm_tpos});
 +                             $self->{dimm_tpos});  
-+                        $self->{dimm_tpos}++;
-+                        $affinitypos++;
-+                    }
-+                }
-+            }
-+        }
-+    }
-+}
-+
-+sub setFsiAttributes
-+{
-+    my $self = shift;
-+    my $target = shift;
-+    my $type = shift;
-+    my $cmfsi = shift;
-+    my $phys_path = shift;
-+    my $fsi_port = shift;
-+    my $flip_port = shift;
-+
-+    $self->setAttribute($target, "FSI_MASTER_TYPE","NO_MASTER");
-+    if ($type eq "FSIM")
-+    {
-+        $self->setAttribute($target, "FSI_MASTER_TYPE","MFSI");
-+    }
-+    if ($type eq "FSICM")
-+    {
-+        $self->setAttribute($target, "FSI_MASTER_TYPE","CMFSI");
-+    }
-+    $self->setAttribute($target, "FSI_MASTER_CHIP","physical:sys");
-+    $self->setAttribute($target, "FSI_MASTER_PORT","0xFF");
-+    $self->setAttribute($target, "ALTFSI_MASTER_CHIP","physical:sys");
-+    $self->setAttribute($target, "ALTFSI_MASTER_PORT","0xFF");
-+    $self->setAttribute($target, "FSI_SLAVE_CASCADE", "0");
-+    if ($cmfsi == 0)
-+    {
-+        $self->setAttribute($target, "FSI_MASTER_CHIP",$phys_path);
-+        $self->setAttribute($target, "FSI_MASTER_PORT", $fsi_port);
-+    }
-+    else
-+    {
-+        $self->setAttribute($target, "ALTFSI_MASTER_CHIP",$phys_path);
-+        $self->setAttribute($target, "ALTFSI_MASTER_PORT", $fsi_port);
-+    }
-+
-+    #my $phys_path = $targetObj->getAttribute($parentTarget, "PHYS_PATH");
-+    $self->setAttributeField($target, "FSI_OPTION_FLAGS","flipPort",
-+          $flip_port);
-+    $self->setAttributeField($target, "FSI_OPTION_FLAGS","reserved", "0");
-+
-+}
-+
-+
-+## returns pointer to target from target name
-+sub getTarget
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    return $self->{data}->{TARGETS}->{$target};
-+}
-+
-+## returns pointer to array of all targets
-+sub getAllTargets
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    return $self->{data}->{TARGETS};
-+}
-+
-+## returns the target name of the parent of passed in target
-+sub getTargetParent
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{PARENT};
-+}
-+
-+## returns the number of connections associated with target
-+sub getNumConnections
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    if (!defined($target_ptr->{CONNECTION}->{DEST}))
-+    {
-+        return 0;
-+    }
-+    return scalar(@{ $target_ptr->{CONNECTION}->{DEST} });
-+}
-+
-+## returns destination target name of first connection
-+## useful for point to point busses with only 1 endpoint
-+sub getFirstConnectionDestination
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{CONNECTION}->{DEST}->[0];
-+}
-+
-+## returns pointer to bus of first connection
-+sub getFirstConnectionBus
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{CONNECTION}->{BUS}->[0];
-+}
-+## returns target name of $i connection
-+sub getConnectionDestination
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $i          = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{CONNECTION}->{DEST}->[$i];
-+}
-+
-+sub getConnectionBus
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $i          = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{CONNECTION}->{BUS}->[$i];
-+}
-+
-+sub findFirstEndpoint
-+{
-+    my $self     = shift;
-+    my $target   = shift;
-+    my $bus_type = shift;
-+    my $end_type = shift;
-+
-+    my $target_children = $self->getTargetChildren($target);
-+    if ($target_children eq "") { return ""; }
-+
-+    foreach my $child (@{ $self->getTargetChildren($target) })
-+    {
-+        my $child_bus_type = $self->getBusType($child);
-+        if ($child_bus_type eq $bus_type)
-+        {
-+            for (my $i = 0; $i < $self->getNumConnections($child); $i++)
-+            {
-+                my $dest_target = $self->getConnectionDestination($child, $i);
-+                my $dest_parent = $self->getTargetParent($dest_target);
-+                my $type        = $self->getMrwType($dest_parent);
-+                my $dest_type   = $self->getType($dest_parent);
-+                if ($type eq "NA") { $type = $dest_type; }
-+                if ($type eq $end_type)
-+                {
-+                    return $dest_parent;
-+                }
-+            }
-+        }
-+    }
-+    return "";
-+}
-+sub findConnections
-+{
-+    my $self     = shift;
-+    my $target   = shift;
-+    my $bus_type = shift;
-+    my $end_type = shift;
-+
-+    my %connections;
-+    my $num=0;
-+    my $target_children = $self->getTargetChildren($target);
-+    if ($target_children eq "")
-+    {
-+        return "";
-+    }
-+
-+    foreach my $child (@{ $self->getTargetChildren($target) })
-+    {
-+        my $child_bus_type = $self->getBusType($child);
-+        if ($child_bus_type eq $bus_type)
-+        {
-+            for (my $i = 0; $i < $self->getNumConnections($child); $i++)
-+            {
-+                my $dest_target = $self->getConnectionDestination($child, $i);
-+                my $dest_parent = $self->getTargetParent($dest_target);
-+                my $type        = $self->getMrwType($dest_parent);
-+                my $dest_type   = $self->getType($dest_parent);
-+                if ($type eq "NA")
-+                {
-+                    $type = $dest_type;
-+                }
-+
-+                if ($type eq $end_type || $end_type eq "")
-+                {
-+                    $connections{CONN}[$num]{SOURCE}=$child;
-+                    $connections{CONN}[$num]{SOURCE_PARENT}=$target;
-+                    $connections{CONN}[$num]{DEST}=$dest_target;
-+                    $connections{CONN}[$num]{DEST_PARENT}=$dest_parent;
-+                    $connections{CONN}[$num]{BUS_NUM}=$i;
-+                    $num++;
-+                }
-+            }
-+        }
-+    }
-+    if ($num==0) { return ""; }
-+    return \%connections;
-+}
-+
-+
-+## returns BUS_TYPE attribute of target
-+sub getBusType
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $type   = $self->getAttribute($target, "BUS_TYPE");
-+    if ($type eq "") { $type = "NA"; }
-+    return $type;
-+}
-+
-+## return target type
-+sub getType
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $type   = $self->getAttribute($target, "TYPE");
-+    if ($type eq "") { $type = "NA"; }
-+    return $type;
-+}
-+
-+## return target type
-+sub getMrwType
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $type   = $self->getAttribute($target, "MRW_TYPE");
-+    if ($type eq "") { $type = "NA"; }
-+    return $type;
-+}
-+
-+## returns target instance name
-+sub getInstanceName
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{TARGET}->{instance_name};
-+}
-+
-+## returns the parent target type
-+sub getTargetType
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    return $target_ptr->{TARGET}->{type};
-+}
-+
-+## checks if attribute is value
-+## must be defined and have a non-empty value
-+sub isBadAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $attribute  = shift;
-+    my $badvalue   = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}))
-+    {
-+        return 1;
-+    }
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->{default}))
-+    {
-+        return 1;
-+    }
-+    if ($target_ptr->{ATTRIBUTES}->{$attribute}->{default} eq "")
-+    {
-+        return 1;
-+    }
-+    if ($target_ptr->{ATTRIBUTES}->{$attribute}->{default} eq $badvalue)
-+    {
-+        return 1;
-+    }
-+    return 0;
-+}
-+
-+## checks if complex attribute field is
-+## defined and non-empty
-+sub isBadComplexAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $attribute  = shift;
-+    my $field      = shift;
-+    my $badvalue   = shift;
-+    my $target_ptr = $self->getTarget($target);
-+
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}))
-+    {
-+        return 1;
-+    }
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->{default}))
-+    {
-+        return 1;
-+    }
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->{default}->{field}))
-+    {
-+        return 1;
-+    }
-+    if ($target_ptr->{ATTRIBUTES}->{$attribute}->{default}->{field}->{$field}
-+        ->{value} eq "")
-+    {
-+        return 1;
-+    }
-+    if ($target_ptr->{ATTRIBUTES}->{$attribute}->{default}->{field}->{$field}
-+        ->{value} eq $badvalue)
-+    {
-+        return 1;
-+    }
-+    return 0;
-+}
-+
-+## returns attribute value
-+sub getAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $attribute  = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->{default}))
-+    {
-+        printf("ERROR: getAttribute(%s,%s) | Attribute not defined\n",
-+            $target, $attribute);
-+
-+        #print Dumper($target_ptr);
-+        $self->myExit(4);
-+    }
-+    return $target_ptr->{ATTRIBUTES}->{$attribute}->{default};
-+}
-+## renames a target attribute
-+sub renameAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $oldName    = shift;
-+    my $newName    = shift;
-+    my $target_ptr = $self->{data}->{TARGETS}->{$target};
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$oldName}))
-+    {
-+        return 1;
-+    }
-+    $target_ptr->{ATTRIBUTES}->{$newName}->{default} =
-+      $target_ptr->{ATTRIBUTES}->{$oldName}->{default};
-+    delete($target_ptr->{ATTRIBUTES}->{$oldName});
-+    $self->log($target, "Renaming attribute: $oldName => $newName");
-+    return 0;
-+}
-+
-+## copy an attribute between targets
-+sub copyAttribute
-+{
-+    my $self = shift;
-+    my $source_target = shift;
-+    my $dest_target = shift;
-+    my $attribute = shift;
-+
-+    my $value=$self->getAttribute($source_target,$attribute);
-+    $self->setAttribute($dest_target,$attribute,$value);
-+
-+    $self->log($dest_target, "Copy Attribute: $attribute=$value");
-+}
-+
-+## sets an attribute
-+sub setAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $attribute  = shift;
-+    my $value      = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    $target_ptr->{ATTRIBUTES}->{$attribute}->{default} = $value;
-+    $self->log($target, "Setting Attribute: $attribute=$value");
-+}
-+## sets the field of a complex attribute
-+sub setAttributeField
-+{
-+    my $self      = shift;
-+    my $target    = shift;
-+    my $attribute = shift;
-+    my $field     = shift;
-+    my $value     = shift;
-+    $self->{data}->{TARGETS}->{$target}->{ATTRIBUTES}->{$attribute}->{default}
-+      ->{field}->{$field}->{value} = $value;
-+}
-+## returns complex attribute value
-+sub getAttributeField
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $attribute  = shift;
-+    my $field      = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->
-+       {default}->{field}->{$field}->{value}))
-+    {
-+        printf("ERROR: getAttributeField(%s,%s,%s) | Attribute not defined\n",
-+            $target, $attribute,$field);
-+
-+        $self->myExit(4);
-+    }
-+
-+    return $target_ptr->{ATTRIBUTES}->{$attribute}->
-+           {default}->{field}->{$field}->{value};
-+}
-+
-+## returns an attribute from a bus
-+sub getBusAttribute
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $busnum     = shift;
-+    my $attr       = shift;
-+    my $target_ptr = $self->getTarget($target);
-+
-+    if (
-+        !defined(
-+            $target_ptr->{CONNECTION}->{BUS}->[$busnum]->{bus_attribute}
-+              ->{$attr}->{default}
-+        )
-+      )
-+    {
-+        printf("ERROR: getBusAttribute(%s,%d,%s) | Attribute not defined\n",
-+            $target, $busnum, $attr);
-+        $self->myExit(4);
-+    }
-+   if (ref($target_ptr->{CONNECTION}->{BUS}->[$busnum]->{bus_attribute}->{$attr}
-+      ->{default}) eq  "HASH") {
-+        return  "";
-+    }
-+    return $target_ptr->{CONNECTION}->{BUS}->[$busnum]->{bus_attribute}->{$attr}
-+      ->{default};
-+}
-+## returns a pointer to an array of children target names
-+sub getTargetChildren
-+{
-+    my $self       = shift;
-+    my $target     = shift;
-+    my $target_ptr = $self->getTarget($target);
-+    ## this is an array
-+    return $target_ptr->{CHILDREN};
-+}
-+
-+sub getEnumValue
-+{
-+    my $self     = shift;
-+    my $enumType = shift;
-+    my $enumName = shift;
-+    if (!defined($self->{enumeration}->{$enumType}->{$enumName}))
-+    {
-+        printf("ERROR: getEnumValue(%s,%s) | enumType not defined\n",
-+            $enumType, $enumName);
-+        $self->myExit(4);
-+    }
-+    return $self->{enumeration}->{$enumType}->{$enumName};
-+}
-+
-+sub getEnumHash
-+{
-+    my $self     = shift;
-+    my $enumType = shift;
-+    my $enumName = shift;
-+    if (!defined($self->{enumeration}->{$enumType}))
-+    {
-+        printf("ERROR: getEnumValue(%s) | enumType not defined\n",
-+            $enumType);
-+            print Dumper($self->{enumeration});
-+        $self->myExit(4);
-+    }
-+    return $self->{enumeration}->{$enumType};
-+}
-+
-+sub setHuid
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $sys    = shift;
-+    my $node   = shift;
-+
-+    my $type    = $self->getType($target);
-+    my $type_id = $self->{enumeration}->{TYPE}->{$type};
-+    if ($type_id eq "") { $type_id = 0; }
-+    if ($type_id == 0) { return; }
-+    my $index = 0;
-+    if (defined($self->{huid_idx}->{$type}))
-+    {
-+        $index = $self->{huid_idx}->{$type};
-+    }
-+    else { $self->{huid_idx}->{$type} = 0; }
-+
-+    # Format: SSSS NNNN TTTTTTTT iiiiiiiiiiiiiiii
-+    my $huid = sprintf("%01x%01x%02x%04x", $sys, $node, $type_id, $index);
-+    $huid = "0x" . uc($huid);
-+
-+    $self->setAttribute($target, "HUID", $huid);
-+    $self->{huid_idx}->{$type}++;
-+    $self->log($target, "Setting HUID: $huid");
-+    $self->setMruid($target, $node);
-+}
-+
-+sub setMruid
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $node   = shift;
-+
-+    my $type          = $self->getType($target);
-+    my $mru_prefix_id = $self->{enumeration}->{MRU_PREFIX}->{$type};
-+    if ($mru_prefix_id eq "") { $mru_prefix_id = "0xFFFF"; }
-+    if ($mru_prefix_id eq "0xFFFF") { return; }
-+    my $index = 0;
-+    if (defined($self->{mru_idx}->{$node}->{$type}))
-+    {
-+        $index = $self->{mru_idx}->{$node}->{$type};
-+    }
-+    else { $self->{mru_idx}->{$node}->{$type} = 0; }
-+
-+    my $mruid = sprintf("%s%04x", $mru_prefix_id, $index);
-+    $self->setAttribute($target, "MRU_ID", $mruid);
-+    $self->{mru_idx}->{$node}->{$type}++;
-+}
-+
-+sub getMasterProc
-+{
-+    my $self = shift;
-+    return $self->{master_proc};
-+}
-+
-+sub setMasterProc
-+{
-+    my $self = shift;
-+    my $target = shift;
-+    $self->{master_proc}=$target;
-+}
-+
-+sub getSystemName
-+{
-+    my $self = shift;
-+    return $self->getAttribute("/".$self->{TOP_LEVEL}, "SYSTEM_NAME");
-+}
-+
-+sub myExit
-+{
-+    my $self      = shift;
-+    my $exit_code = shift;
-+    if ($exit_code eq "") { $exit_code = 0; }
-+    $self->{errorsExist} = 1;
-+    if ($self->{force} == 0)
-+    {
-+        exit($exit_code);
-+    }
-+}
-+
-+sub log
-+{
-+    my $self   = shift;
-+    my $target = shift;
-+    my $msg    = shift;
-+    if ($self->{debug})
-+    {
-+        print "DEBUG: ($target) $msg\n";
-+    }
-+}
-+1;
-+
-+=head1 NAME
-+
-+Targets
-+
-+=head1 SYNOPSIS
-+
-+    use Targets;
-+
-+    my $targets = Targets->new;
-+    $targets->loadXML("myfile.xml");
-+    foreach my $target ( sort keys %{ $targets->getAllTargets() } ) {
-+        ## do stuff with targets
-+    }
-+
-+    $targets->printXML( $file_handle, "top" );
-+
-+=head1 DESCRIPTION
-+
-+C<Targets> is a class that consumes XML generated by ServerWiz2.  The XML
-+describes a POWER system topology including nodes, cards, chips, and busses.
-+
-+=head1 OVERVIEW
-+
-+A simple example of a ServerWiz2 topology would be:
-+
-+=over 4
-+
-+=item Topology Example:
-+
-+   -system
-+      -node
-+         -motherboard
-+           -processor
-+           -pcie card
-+               - daughtercard
-+                  - memory buffer
-+                  - dimms
-+
-+=back
-+
-+Targets->loadXML("myfile.xml") reads this topology and creates 2 data
-+structures.  One data structure simply represents the hierarchical system
-+topology.  The other data structure represents the hierarchical structure
-+that hostboot expects (affinity path).
-+
-+Unlike hostboot, everything in ServerWiz2 is represented as a target.
-+For example, FSI and I2C units are targets under the processor that have a
-+bus type and therefore allow connections to be made.
-+
-+=head1 CONSTRUCTOR
-+
-+=over 4
-+
-+=item new ()
-+
-+There are no arguments for the constructor.
-+
-+=back
-+
-+=head1 METHODS
-+
-+C<TARGET> is a pointer to data structure containing all target information.
-+C<TARGET_STRING> is the hierarchical target string used as key for data
-+structure.  An example for C<TARGET_STRING> would be:
-+C</sys-0/node-0/motherboard-0/dimm-0>
-+
-+=over 4
-+
-+=item loadXml (C<FILENAME>)
-+
-+Reads ServerWiz2 XML C<FILENAME> and stores into a data structure for
-+manipulation and printing.
-+
-+=item getTarget(C<TARGET_STRING>)
-+
-+Returns pointer to data structure (C<TARGET>)
-+
-+=item getAllTargets(C<TARGET_STRING>)
-+
-+Returns array with all existing target data structures
-+
-+=item getTargetParent(C<TARGET_STRING>)
-+
-+Returns C<TARGET_STRING> of parent target
-+
-+=item getNumConnections(C<TARGET_STRING>)
-+
-+Returns the number of bus connections to this target
-+
-+=item getFirstConnectionDestination(C<TARGET_STRING>)
-+
-+Returns the target string of the first target found connected to
-+C<TARGET_STRING>.  This is useful because many busses are guaranteed
-+to only have one connection because they are point to point.
-+
-+=item getFirstConnectionBus(C<TARGET_STRING>)
-+
-+Returns the data structure of the bus of the first target found connected to
-+C<TARGET_STRING>.  The bus data structure is also a target with attributes.
-+
-+=item getConnectionDestination(C<TARGET_STRING>,C<INDEX>)
-+
-+Returns the target string of the C<INDEX> target found connected to
-+C<TARGET_STRING>.
-+
-+=item getConnectionBus(C<TARGET_STRING>)
-+
-+Returns the data structure of the C<INDEX> bus target found connected to
-+C<TARGET_STRING>.
-+
-+=item findEndpoint(C<TARGET_STRING>,C<BUS_TYPE>,C<ENDPOINT_MRW_TYPE>)
-+
-+Searches through all connections to C<TARGET_STRING>
-+for a endpoint C<MRW_TYPE> and C<BUS_TYPE>
-+
-+=item getBusType(C<TARGET_STRING>)
-+
-+Returns the BUS_TYPE attribute of (C<TARGET_STRING>).  Examples are I2C and DMI.
-+
-+=item getType(C<TARGET_STRING>)
-+
-+Returns the TYPE attribute of (C<TARGET_STRING>).
-+Examples are PROC and MEMBUF.
-+
-+=item getMrwType(C<TARGET_STRING>)
-+
-+Returns the MRW_TYPE attribute of (C<TARGET_STRING>).
-+Examples are CARD and PCI_CONFIG.  This
-+is an extension to the TYPE attribute and are types that hostboot does
-+not care about.
-+
-+=item getTargetType(C<TARGET_STRING>)
-+
-+Returns the target type id of (C<TARGET_STRING>).
-+This is not the TYPE attribute.  This is the
-+<id> from target_types.xml.  Examples are unit-pci-power8 and enc-node-power8.
-+
-+=item isBadAttribute(C<TARGET_STRING>,C<ATTRIBUTE_NAME>)
-+
-+Tests where attribute (C<ATTRIBUTE_NAME>) has been set in
-+target (C<TARGET_STRING>).  Returns true if attribute is undefined or empty
-+and false if attribute is defined and not empty.
-+
-+=item getAttribute(C<TARGET_STRING>,C<ATTRIBUTE_NAME>)
-+
-+Returns the value of attribute C<ATTRIBUTE_NAME> in target C<TARGET_STRING>.
-+
-+=item renameAttribute(C<TARGET_STRING>,C<ATTRIBUTE_OLDNAME>,
-+C<ATTRIBUTE_OLDNAME>)
-+
-+Renames attribute C<ATTRIBUTE_OLDNAME> to C<ATTRIBUTE_NEWNAME> in target
-+C<TARGET_STRING>.
-+
-+=item setAttribute(C<TARGET_STRING>,C<ATTRIBUTE_NAME>,C<VALUE>)
-+
-+Sets attribute C<ATTRIBUTE_NAME> of target C<TARGET_STRING> to value C<VALUE>.
-+
-+=item setAttributeField(C<TARGET_STRING>,C<ATTRIBUTE_NAME>,C<FIELD>,C<VALUE>)
-+
-+Sets attribute C<ATTRIBUTE_NAME> and field C<FIELD> of target C<TARGET_STRING>
-+to value C<VALUE>.  This is for complex attributes.
-+
-+=item getBusAttribute(C<TARGET_STRING>,C<INDEX>,C<ATTRIBUTE_NAME>)
-+
-+Gets the attribute C<ATTRIBUTE_NAME> from bus C<TARGET_STRING> bus number
-+C<INDEX>.
-+
-+=item getTargetChildren(C<TARGET_STRING>)
-+
-+Returns an array of target strings representing all the children of target
-+C<TARGET_STRING>.
-+
-+=item getEnumValue(C<ENUM_TYPE>,C<ENUM_NAME>)
-+
-+Returns the enum value of type C<ENUM_TYPE> and name C<ENUM_NAME>.  The
-+enumerations are also defined in ServerWiz2 XML output and are directly
-+copied from attribute_types.xml.
-+
-+=item getMasterProc()
-+
-+Returns the target string of the master processor.
-+
-+=item myExit(C<EXIT_NUM>)
-+
-+Calls exit(C<EXIT_NUM>) when force flag is not set.
-+
-+=item log(C<TARGET_STRING>,C<MESSAGE>)
-+
-+Prints to stdout log message is debug mode is turned on.
-+
-+
-+=back
-+
-+=head1 CREDITS
-+
-+Norman James <njames@us.ibm.com>
-+
-+=cut
-+
+                         $self->{dimm_tpos}++;
+                         $affinitypos++;
+                     }
 diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
-new file mode 100755
-index 0000000..1fb292f
---- /dev/null
+old mode 100644
+new mode 100755
+index 18107df..1fb292f
+--- a/src/usr/targeting/common/processMrw.pl
 +++ b/src/usr/targeting/common/processMrw.pl
-@@ -0,0 +1,1144 @@
-+#! /usr/bin/perl
-+# IBM_PROLOG_BEGIN_TAG
-+# This is an automatically generated prolog.
-+#
-+# $Source: src/usr/targeting/common/processMrw.pl $
-+#
-+# 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
-+
-+use strict;
-+use XML::Simple;
-+use Data::Dumper;
-+use Targets;
-+use Math::BigInt;
-+use Getopt::Long;
-+use File::Basename;
-+
-+my $VERSION = "1.0.0";
-+
-+my $force          = 0;
-+my $serverwiz_file = "";
-+my $version        = 0;
-+my $debug          = 0;
-+my $report         = 0;
-+my $sdr_file       = "";
-+
-+GetOptions(
-+    "f"   => \$force,             # numeric
-+    "x=s" => \$serverwiz_file,    # string
-+    "d"   => \$debug,
-+    "v"   => \$version,
-+    "r"   => \$report,
-+  )                               # flag
-+  or printUsage();
-+
-+if ($version == 1)
-+{
-+    die "\nprocessMrw.pl\tversion $VERSION\n";
-+}
-+
-+if ($serverwiz_file eq "")
-+{
-+    printUsage();
-+}
-+
-+$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
-+
-+my $targetObj = Targets->new;
-+if ($force == 1)
-+{
-+    $targetObj->{force} = 1;
-+}
-+if ($debug == 1)
-+{
-+    $targetObj->{debug} = 1;
-+}
-+
-+$targetObj->setVersion($VERSION);
-+my $xmldir = dirname($serverwiz_file);
-+$targetObj->loadXML($serverwiz_file);
-+
-+#--------------------------------------------------
-+## loop through all targets and do stuff
-+foreach my $target (sort keys %{ $targetObj->getAllTargets() })
-+{
-+    my $type = $targetObj->getType($target);
-+    if ($type eq "SYS")
-+    {
-+        processSystem($targetObj, $target);
+@@ -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);
-+    }
-+    elsif ($type eq "MEMBUF")
-+    {
-+        processMembuf($targetObj, $target);
-+    }
-+    elsif ($type eq "FSP")
-+    {
-+        processBmc($targetObj, $target);
-+    }
-+}
-+
-+
-+## check topology
-+foreach my $n (keys %{$targetObj->{TOPOLOGY}}) {
-+    foreach my $p (keys %{$targetObj->{TOPOLOGY}->{$n}}) {
-+        if ($targetObj->{TOPOLOGY}->{$n}->{$p} > 1) {
-+            print "ERROR: Fabric topology invalid.  2 targets have same ".
-+                  "FABRIC_NODE_ID,FABRIC_CHIP_ID ($n,$p)\n";
-+            $targetObj->myExit(3);
-+        }
-+    }
-+}
-+## check for errors
-+if ($targetObj->getMasterProc() eq "")
-+{
-+    print "ERROR: Master Processor not defined.  Please instaitant a BMC
-+ and connect LPC bus\n";
-+    $targetObj->myExit(3);
-+}
-+foreach my $target (keys %{ $targetObj->getAllTargets() })
-+{
-+    errorCheck($targetObj, $target);
-+}
-+
-+#--------------------------------------------------
-+## write out final XML
-+my $xml_fh;
-+my $filename = $xmldir . "/" . $targetObj->getSystemName() . "_hb.mrw.xml";
-+print "Creating XML: $filename\n";
-+open($xml_fh, ">$filename") || die "Unable to create: $filename";
-+$targetObj->printXML($xml_fh, "top");
-+close $xml_fh;
-+if (!$targetObj->{errorsExist})
-+{
-+    print "MRW created successfully!\n";
-+}
-+
-+
-+## optionally print out report
-+if ($report)
-+{
-+    my $report_file = $xmldir . "/" . $targetObj->getSystemName() . ".rpt";
-+    open(SUM,">$report_file") || die "Unable to create: $report_file\n";
+     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}})
-+        {
-+            my $mcs_target = $mcs->{KEY};
-+            my $membuf=$mcs->{MEMBUFS}[0];
-+            my $membuf_target = $membuf->{KEY};
+     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");
-+            my $huid = $targetObj->getAttribute($mcs_target,"HUID");
-+            print SUM "$sch | $huid | $mcs_target | $aff\n";
-+            if ($membuf_target ne "") {
-+                foreach my $mba (@{$membuf->{MBAS}}) {
-+                    my $mba_target = $mba->{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");
-+                    print SUM "\t | $huid | $mba_target | $aff\n";
-+                    foreach my $dimm (@{$mba->{DIMMS}}) {
-+                        my $dimm_target = $dimm->{KEY};
-+                        $aff = $targetObj->getAttribute($dimm_target,
-+                                   "AFFINITY_PATH");
-+                        $huid = $targetObj->getAttribute($dimm_target,"HUID");
-+                        my $p = $targetObj->getAttribute($dimm_target,
-+                                  "MBA_PORT");
-+                        my $d = $targetObj->getAttribute($dimm_target,
-+                                   "MBA_DIMM");
-+                        my $i2c = $targetObj->getAttributeField($dimm_target,
-+                                  "EEPROM_VPD_PRIMARY_INFO","devAddr");
-+                        my $sens = $targetObj->getAttribute($dimm_target,
-+                                  "IPMI_SENSORS");
-+                        my @s = split(/\,/,$sens);
+                     $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";
-+                    }
-+                }
-+            }
-+        }
-+    }
-+    close SUM;
-+}
-+
-+#--------------------------------------------------
-+#--------------------------------------------------
-+## Processing subroutines
-+
-+#--------------------------------------------------
-+
-+#--------------------------------------------------
-+## System
-+##
-+
-+sub processSystem
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+
-+    $targetObj->setAttribute($target, "MAX_MCS_PER_SYSTEM",
-+        $targetObj->{NUM_PROCS_PER_NODE} * $targetObj->{MAX_MCS});
-+    $targetObj->setAttribute($target, "MAX_PROC_CHIPS_PER_NODE",
-+        $targetObj->{NUM_PROCS_PER_NODE});
-+    parseBitwise($targetObj,$target,"CDM_POLICIES");
-+}
-+sub processBmc
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+    my $i2cs=$targetObj->findConnections($target,"I2C","PROC");
-+    if ($i2cs ne "")
-+    {
-+       foreach my $i2c (@{$i2cs->{CONN}})
-+       {
-+           my $addr=$targetObj->getBusAttribute(
-+                $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_ADDRESS");
-+           $targetObj->setAttribute(
-+                $i2c->{DEST_PARENT},"I2C_SLAVE_ADDRESS",$addr);
-+       }
-+    }
-+    my $lpcs=$targetObj->findConnections($target,"LPC","PROC");
-+    if ($lpcs ne "")
-+    {
-+       my $lpc=$lpcs->{CONN}->[0];
-+       $targetObj->setMasterProc($lpc->{DEST_PARENT});
-+    }
-+}
-+
-+
-+sub parseBitwise
-+{
-+    my $targetObj = shift;
-+    my $target = shift;
-+    my $attribute = shift;
-+
-+    my $mask = 0;
-+    foreach my $e (keys %{ $targetObj->getEnumHash($attribute) }) {
-+        my $field = $targetObj->getAttributeField(
-+                    $target,$attribute."_BITMASK",$e);
-+        my $val=hex($targetObj->getEnumValue($attribute,$e));
-+        if ($field eq "true")
-+        {
-+            $mask=$mask | $val;
-+        }
-+    }
-+    $targetObj->setAttribute($target,$attribute,$mask);
-+ }
-+#--------------------------------------------------
-+## Processor
-+##
-+
-+sub processProcessor
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+
-+    #########################
-+    ## Copy PCIE attributes from socket
-+    ## In serverwiz, processor instances are not unique
-+    ## because plugged into socket
-+    ## so processor instance unique attributes are socket level.
-+    ## The grandparent is guaranteed to be socket.
-+    my $socket_target =
-+       $targetObj->getTargetParent($targetObj->getTargetParent($target));
-+    $targetObj->copyAttribute($socket_target,$target,"LOCATION_CODE");
-+    $targetObj->copyAttribute($socket_target,$target,"FRU_ID");
+                         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} }))
-+    {
-+        if ($attr =~ /PROC\_PCIE/)
-+        {
-+            $targetObj->copyAttribute($socket_target,$target,$attr);
-+        }
-+    }
-+    $targetObj->log($target, "Processing PROC");
-+    foreach my $child (@{ $targetObj->getTargetChildren($target) })
-+    {
-+        $targetObj->log($target, "Processing PROC child: $child");
-+        my $child_type = $targetObj->getType($child);
-+        if ($child_type eq "NA" || $child_type eq "FSI")
-+        {
-+            $child_type = $targetObj->getMrwType($child);
-+        }
-+        if ($child_type eq "ABUS")
-+        {
-+            processAbus($targetObj, $child);
-+        }
-+        elsif ($child_type eq "XBUS")
-+        {
-+            processXbus($targetObj, $child);
-+        }
-+        elsif ($child_type eq "FSIM" || $child_type eq "FSICM")
-+        {
-+            processFsi($targetObj, $child, $target);
-+        }
-+        elsif ($child_type eq "PCI_CONFIGS")
-+        {
-+            foreach my $pci_child (@{ $targetObj->getTargetChildren($child) })
-+            {
-+               processPcie($targetObj, $pci_child, $target);
-+            }
-+        }
-+        elsif ($child_type eq "MCS")
-+        {
-+            processMcs($targetObj, $child, $target);
-+        }
-+        elsif ($child_type eq "OCC")
-+        {
-+            processOcc($targetObj, $child, $target);
-+        }
-+    }
-+
-+    ## update path for mvpd's and sbe's
-+    my $path  = $targetObj->getAttribute($target, "PHYS_PATH");
-+    my $model = $targetObj->getAttribute($target, "MODEL");
-+
-+    $targetObj->setAttributeField($target,
-+        "EEPROM_VPD_PRIMARY_INFO","i2cMasterPath",$path);
-+    $targetObj->setAttributeField($target,
-+        "EEPROM_VPD_BACKUP_INFO","i2cMasterPath",$path);
-+    $targetObj->setAttributeField($target,
-+        "EEPROM_SBE_PRIMARY_INFO","i2cMasterPath",$path);
-+    $targetObj->setAttributeField($target,
-+        "EEPROM_SBE_BACKUP_INFO","i2cMasterPath",$path);
-+    $targetObj->setAttributeField($target,
-+        "EEPROM_VPD_FRU_INFO","i2cMasterPath",$path);
-+
-+    ## initialize master processor FSI's
-+    $targetObj->setAttributeField($target, "FSI_OPTION_FLAGS", "flipPort", "0");
-+
-+    if ($target eq $targetObj->getMasterProc())
-+    {
-+        $targetObj->setAttributeField($target, "FSI_OPTION_FLAGS", "reserved",
-+            "0");
-+        $targetObj->setAttribute($target, "FSI_MASTER_CHIP",    "physical:sys");
-+        $targetObj->setAttribute($target, "FSI_MASTER_PORT",    "0xFF");
-+        $targetObj->setAttribute($target, "ALTFSI_MASTER_CHIP", "physical:sys");
-+        $targetObj->setAttribute($target, "ALTFSI_MASTER_PORT", "0xFF");
-+        $targetObj->setAttribute($target, "FSI_MASTER_TYPE",    "NO_MASTER");
-+        $targetObj->setAttribute($target, "FSI_SLAVE_CASCADE",  "0");
-+        $targetObj->setAttribute($target, "PROC_MASTER_TYPE", "ACTING_MASTER");
-+    }
-+    else
-+    {
-+        $targetObj->setAttribute($target, "PROC_MASTER_TYPE",
-+            "MASTER_CANDIDATE");
-+    }
-+    ## Update bus speeds
-+    processI2cSpeeds($targetObj,$target);
-+
-+    ## these are hardcoded because code sets them properly
-+    $targetObj->setAttributeField($target, "SCOM_SWITCHES", "reserved",   "0");
-+    $targetObj->setAttributeField($target, "SCOM_SWITCHES", "useFsiScom", "1");
-+    $targetObj->setAttributeField($target, "SCOM_SWITCHES", "useInbandScom",
-+        "0");
-+    $targetObj->setAttributeField($target, "SCOM_SWITCHES", "useXscom", "0");
-+
-+    processMembufVpdAssociation($targetObj,$target);
-+    setupBars($targetObj,$target);
-+}
-+
-+
-+sub processI2cSpeeds
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+
-+    my @bus_speeds;
-+    my $bus_speed_attr=$targetObj->getAttribute($target,"I2C_BUS_SPEED_ARRAY");
-+    my @bus_speeds2 = split(/,/,$bus_speed_attr);
-+    $bus_speeds[0][0] = $bus_speeds2[0];
-+    $bus_speeds[0][1] = $bus_speeds2[1];
-+    $bus_speeds[0][2] = $bus_speeds2[2];
-+    $bus_speeds[1][0] = $bus_speeds2[3];
-+    $bus_speeds[1][1] = $bus_speeds2[4];
-+    $bus_speeds[1][2] = $bus_speeds2[5];
-+
-+    my $i2cs=$targetObj->findConnections($target,"I2C","");
-+    if ($i2cs ne "") {
-+        foreach my $i2c (@{$i2cs->{CONN}}) {
-+            my $port=oct($targetObj->getAttribute($i2c->{SOURCE},"I2C_PORT"));
-+            my $engine=oct($targetObj->getAttribute(
-+                           $i2c->{SOURCE},"I2C_ENGINE"));
-+            my $bus_speed=$targetObj->getBusAttribute(
-+                  $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_SPEED");
-+            if ($bus_speed eq "" || $bus_speed==0) {
-+                print "ERROR: I2C bus speed not defined for $i2c->{SOURCE}\n";
-+                $targetObj->myExit(3);
-+            }
-+            ## choose lowest bus speed
-+            if ($bus_speeds[$engine][$port] eq "" ||
-+                  $bus_speeds[$engine][$port]==0  ||
-+                  $bus_speed < $bus_speeds[$engine][$port]) {
-+                $bus_speeds[$engine][$port] = $bus_speed;
-+            }
-+        }
-+    }
-+    $bus_speed_attr = $bus_speeds[0][0].",".
-+                      $bus_speeds[0][1].",".
-+                      $bus_speeds[0][2].",".
-+                      $bus_speeds[1][0].",".
-+                      $bus_speeds[1][1].",".
-+                      $bus_speeds[1][2];
-+
-+    $targetObj->setAttribute($target,"I2C_BUS_SPEED_ARRAY",$bus_speed_attr);
-+}
-+
-+################################
-+## Setup address map
-+
-+sub setupBars
-+{
-+    my $targetObj = shift;
-+    my $target = shift;
-+    #--------------------------------------------------
-+    ## Setup BARs
-+
-+    my $node = $targetObj->getAttribute($target, "FABRIC_NODE_ID");
-+    my $proc   = $targetObj->getAttribute($target, "FABRIC_CHIP_ID");
-+    $targetObj->{TOPOLOGY}->{$node}->{$proc}++;
-+
-+    my @bars=("FSP_BASE_ADDR","PSI_BRIDGE_BASE_ADDR",
-+              "INTP_BASE_ADDR","PHB_BASE_ADDRS","PCI_BASE_ADDRS_32",
-+              "PCI_BASE_ADDRS_64","RNG_BASE_ADDR","IBSCOM_PROC_BASE_ADDR");
-+
-+    foreach my $bar (@bars)
-+    {
-+        my ($num,$base,$node_offset,$proc_offset,$offset) = split(/,/,
-+               $targetObj->getAttribute($target,$bar));
-+        my $i_base = Math::BigInt->new($base);
-+        my $i_node_offset = Math::BigInt->new($node_offset);
-+        my $i_proc_offset = Math::BigInt->new($proc_offset);
-+        my $i_offset = Math::BigInt->new($offset);
-+
-+        my $value="";
-+        if ($num==0)
-+        {
-+            $value=$base;
-+        }
-+        else
-+        {
-+            for (my $i=0;$i<$num;$i++)
-+            {
-+                my $b=sprintf("0x%016X",
-+         $i_base+$i_node_offset*$node+$i_proc_offset*$proc+$i_offset*$i);
-+                my $sep=",";
+ 
+     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="";
-+                }
-+                $value=$value.$b.$sep;
-+            }
-+        }
-+        $targetObj->setAttribute($target,$bar,$value);
-+    }
-+}
-+
-+#--------------------------------------------------
-+## MCS
-+##
-+sub processMcs
-+{
-+    my $targetObj    = shift;
-+    my $target       = shift;
-+    my $parentTarget = shift;
-+
-+    my $node = $targetObj->getAttribute($parentTarget, "FABRIC_NODE_ID");
-+    my $proc   = $targetObj->getAttribute($parentTarget, "FABRIC_CHIP_ID");
-+
-+    my ($base,$node_offset,$proc_offset,$offset) = split(/,/,
-+               $targetObj->getAttribute($target,"IBSCOM_MCS_BASE_ADDR"));
-+    my $i_base = Math::BigInt->new($base);
-+    my $i_node_offset = Math::BigInt->new($node_offset);
-+    my $i_proc_offset = Math::BigInt->new($proc_offset);
-+    my $i_offset = Math::BigInt->new($offset);
-+
-+    my $mcs = $targetObj->getAttribute($target, "MCS_NUM");
+                 {
+                     $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);
-+}
-+
-+
-+#--------------------------------------------------
-+## XBUS
-+##
-+## Finds XBUS connections and creates PEER TARGET attributes
-+
-+sub processXbus
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+
-+    # $targetObj->setAttribute($target, "PEER_TARGET","");
+          $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","");
+-
 +  
-+}
-+
-+#--------------------------------------------------
-+## ABUS
-+##
-+## Finds ABUS connections and creates PEER TARGET attributes
-+
-+sub processAbus
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+
-+    my $found_abus = 0;
-+   $targetObj->setAttribute($target, "PEER_PATH","physical:na");
-+   $targetObj->setAttribute($target, "EI_BUS_TX_LANE_INVERT","0");
-+   $targetObj->setAttribute($target, "EI_BUS_TX_MSBSWAP","0");
-+   # $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 "")
-+    {
-+        ## set attributes for both directions
-+        my $aff1 = $targetObj->getAttribute($target, "AFFINITY_PATH");
-+        my $aff2 = $targetObj->getAttribute($abus_child_conn, "AFFINITY_PATH");
-+
-+        $targetObj->setAttribute($abus_child_conn, "PEER_TARGET",
-+            $targetObj->getAttribute($target, "PHYS_PATH"));
-+        $targetObj->setAttribute($target, "PEER_TARGET",
-+            $targetObj->getAttribute($abus_child_conn, "PHYS_PATH"));
-+
-+        $targetObj->setAttribute($abus_child_conn, "PEER_PATH",
-+            $targetObj->getAttribute($target, "PHYS_PATH"));
-+        $targetObj->setAttribute($target, "PEER_PATH",
-+            $targetObj->getAttribute($abus_child_conn, "PHYS_PATH"));
-+
-+        # copy Abus attributes to proc
-+        my $abus = $targetObj->getFirstConnectionBus($target);
-+        $targetObj->setAttribute($target, "EI_BUS_TX_LANE_INVERT",
-+            $abus->{bus_attribute}->{SOURCE_TX_LANE_INVERT}->{default});
-+        $targetObj->setAttribute($target, "EI_BUS_TX_MSBSWAP",
-+            $abus->{bus_attribute}->{SOURCE_TX_MSBSWAP}->{default});
-+        $targetObj->setAttribute($abus_child_conn, "EI_BUS_TX_LANE_INVERT",
-+            $abus->{bus_attribute}->{DEST_TX_LANE_INVERT}->{default});
-+        $targetObj->setAttribute($abus_child_conn, "EI_BUS_TX_MSBSWAP",
-+            $abus->{bus_attribute}->{DEST_TX_MSBSWAP}->{default});
-+        $found_abus = 1;
-+    }
-+}
-+
-+#--------------------------------------------------
-+## FSI
-+##
-+## Finds FSI connections and creates FSI MASTER attributes at endpoint target
-+
-+sub processFsi
-+{
-+    my $targetObj    = shift;
-+    my $target       = shift;
-+    my $parentTarget = shift;
-+    my $type         = $targetObj->getBusType($target);
-+
-+    ## fsi can only have 1 connection
-+    my $fsi_child_conn = $targetObj->getFirstConnectionDestination($target);
-+
-+    ## found something on other end
-+    if ($fsi_child_conn ne "")
-+    {
-+        my $fsi_link = $targetObj->getAttribute($target, "FSI_LINK");
-+        my $fsi_port = $targetObj->getAttribute($target, "FSI_PORT");
-+        my $cmfsi = $targetObj->getAttribute($target, "CMFSI");
-+        my $flip_port         = 0;
-+        my $proc_path = $targetObj->getAttribute($parentTarget,"PHYS_PATH");
-+        my $fsi_child_target = $targetObj->getTargetParent($fsi_child_conn);
-+        $targetObj->setFsiAttributes($fsi_child_target,
-+                    $type,$cmfsi,$proc_path,$fsi_port,$flip_port);
-+    }
-+}
-+
-+#--------------------------------------------------
-+## PCIE
-+##
-+## Creates attributes from abstract PCI attributes on bus
-+
-+sub processPcie
-+{
-+    my $targetObj    = shift;
-+    my $target       = shift;
-+    my $parentTarget = shift;
-+
-+
-+    ## process pcie config target
-+    ## this is a special target whose children are the different ways
-+    ## to configure iop/phb's
-+
-+    # TODO RTC: TBD
-+    # add a 3rd IOP for Naples
-+
-+    ## Get config children
-+    my @lane_swap;
-+    $lane_swap[0][0] = 0;
-+    $lane_swap[0][1] = 0;
-+    $lane_swap[1][0] = 0;
-+    $lane_swap[1][1] = 0;
-+
-+    my @lane_mask;
-+    $lane_mask[0][0] = "0x0000";
-+    $lane_mask[0][1] = "0x0000";
-+    $lane_mask[1][0] = "0x0000";
-+    $lane_mask[1][1] = "0x0000";
-+
-+    my @lane_rev;
-+    $lane_rev[0][0] = "";
-+    $lane_rev[0][1] = "";
-+    $lane_rev[1][0] = "";
-+    $lane_rev[1][1] = "";
-+
-+    my @is_slot;
-+    $is_slot[0][0] = 0;
-+    $is_slot[0][1] = 0;
-+    $is_slot[1][0] = 0;
-+    $is_slot[1][1] = 0;
-+
-+    my $phb_config = "00000000";
-+
-+    my %cfg_check;
-+    my @equalization;
-+
-+    my $wiring_table = $targetObj->getAttribute($target,"PCIE_LANE_SWAP_TABLE");
-+    $wiring_table=~s/\s+//g;
-+    $wiring_table=~s/\t+//g;
-+    $wiring_table=~s/\n+//g;
-+
-+    my @t = split(/,/,$wiring_table);
-+    my %iop_swap;
-+
-+    #iop_swap{iop}{clk swap}{clk group reversal}
-+    $iop_swap{0}{0}{'00'}=$t[0];
-+    $iop_swap{0}{0}{'01'}=$t[1];
-+    $iop_swap{0}{0}{'10'}=$t[2];
-+    $iop_swap{0}{0}{'11'}=$t[3];
-+    $iop_swap{0}{1}{'00'}=$t[4];
-+    $iop_swap{0}{1}{'01'}=$t[5];
-+    $iop_swap{0}{1}{'10'}=$t[6];
-+    $iop_swap{0}{1}{'11'}=$t[7];
-+
-+    $iop_swap{1}{0}{'00'}=$t[8];
-+    $iop_swap{1}{0}{'01'}=$t[9];
-+    $iop_swap{1}{0}{'10'}=$t[10];
-+    $iop_swap{1}{0}{'11'}=$t[11];
-+    $iop_swap{1}{1}{'00'}=$t[12];
-+    $iop_swap{1}{1}{'01'}=$t[13];
-+    $iop_swap{1}{1}{'10'}=$t[14];
-+    $iop_swap{1}{1}{'11'}=$t[15];
-+
-+    my @lane_eq;
-+    my $NUM_PHBS=4;
-+    for (my $p=0;$p<$NUM_PHBS;$p++)
-+    {
-+        for (my $lane=0;$lane<16;$lane++)
-+        {
-+           $equalization[$p][$lane] = "0x00,0x00";
-+        }
-+    }
-+    my $found=0;
-+    foreach my $child (@{ $targetObj->getTargetChildren($target) })
-+    {
-+        my $num_connections = $targetObj->getNumConnections($child);
-+        if ($num_connections > 0)
-+        {
-+            $found=1;
-+            my $pci_endpoint=$targetObj->getFirstConnectionDestination($child);
-+
-+            my $bus = $targetObj->getConnectionBus($target, 0);
-+            my $iop_num = $targetObj->getAttribute($child, "IOP_NUM");
-+            my $swap_clks=$targetObj->getBusAttribute($child, 0,
-+                         "PCIE_SWAP_CLKS");
-+
-+            my $lane_rev=$targetObj->getBusAttribute($child, 0,
-+                         "LANE_REVERSAL");
-+
-+            my $phb_num = $targetObj->getAttribute($child, "PHB_NUM");
-+            my $lane_set = $targetObj->getAttribute($child, "PCIE_LANE_SET");
-+            my $capi = $targetObj->getAttribute($child, "ENABLE_CAPI");
-+
-+            my $pci_endpoint_type =
-+              $targetObj->getAttribute(
-+                $targetObj->getTargetParent($pci_endpoint), "CLASS");
-+
-+            if ($pci_endpoint_type eq "CARD")
-+            {
-+                $is_slot[$iop_num][$lane_set] = 1;
-+            }
-+            $lane_swap[$iop_num][$lane_set] =
-+              $targetObj->getBusAttribute($child, 0, "PCIE_SWAP_CLKS");
-+            $lane_mask[$iop_num][$lane_set] =
-+              $targetObj->getAttribute($child, "PCIE_LANE_MASK");
-+            $lane_rev[$iop_num][$lane_set] =
-+              $targetObj->getBusAttribute($child, 0, "LANE_REVERSAL");
-+            my $eq = $targetObj->getBusAttribute($child, 0,
-+              "PCIE_LANE_EQUALIZATION");
-+            my @eqs = split(/\,/,$eq);
-+            for (my $e=0;$e<@eqs;$e=$e+3)
-+            {
-+                if ($eqs[$e] eq "all")
-+                {
-+                    for (my $lane=0;$lane<16;$lane++)
-+                    {
+     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
-+                {
+                 }
+                 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");
-+        }
-+    }
-+    if ($found)
-+    {
-+    my $hex = sprintf('%X', oct("0b$phb_config"));
-+
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_PHB_ACTIVE","0x" . $hex);
-+    my $lane_mask_attr = sprintf("%s,%s,%s,%s",
-+        $lane_mask[0][0], $lane_mask[0][1],
-+        $lane_mask[1][0], $lane_mask[1][1]);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_LANE_MASK",
-+        $lane_mask_attr);
-+    $targetObj->setAttribute($parentTarget,"PROC_PCIE_LANE_MASK_NON_BIFURCATED",
-+        $lane_mask_attr);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_LANE_MASK_BIFURCATED",
-+        "0,0,0,0");
-+
-+    my @iop_swap_lu;
-+    my @iop_lane_swap;
-+    for (my $iop=0;$iop<2;$iop++)
-+    {
-+        $iop_lane_swap[$iop] = $lane_swap[$iop][0] | $lane_swap[$iop][1];
-+        my $lane_rev = $lane_rev[$iop][0].$lane_rev[$iop][1];
-+        $iop_swap_lu[$iop]=
-+                 "0b".$iop_swap{$iop}{$iop_lane_swap[$iop]}{$lane_rev};
-+        if ($iop_swap_lu[$iop] eq "") {
-+          die "PCIE config for $iop,$iop_lane_swap[$iop],$lane_rev not found\n";
-+        }
-+    }
-+    my $lane_swap_attr0 = sprintf("%s,%s",$iop_lane_swap[0],
-+                          $iop_lane_swap[1]);
-+    my $lane_swap_attr1 = sprintf("%s,0,%s,0",$iop_lane_swap[0],
-+                          $iop_lane_swap[1]);
-+
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP",
-+        $lane_swap_attr0);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP_NON_BIFURCATED",
-+        $lane_swap_attr1);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP_BIFURCATED",
-+        "0,0,0,0");
-+
-+    my $lane_rev_attr = sprintf("%s,0,%s,0",
-+                         oct($iop_swap_lu[0]),oct($iop_swap_lu[1]));
-+
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_REVERSAL",
-+        $lane_rev_attr);
-+    $targetObj->setAttribute($parentTarget,
-+        "PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED",$lane_rev_attr);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_REVERSAL_BIFURCATED",
-+        "0,0,0,0");
-+
-+    my $is_slot_attr = sprintf("%s,%s,%s,%s",
-+        $is_slot[0][0], $is_slot[0][1], $is_slot[1][0], $is_slot[1][1]);
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_IS_SLOT", $is_slot_attr);
-+
-+    ## don't support DSMP
-+    $targetObj->setAttribute($parentTarget, "PROC_PCIE_DSMP_CAPABLE","0,0,0,0");
-+    my $eq_str="";
-+    for (my $p=0;$p<$NUM_PHBS;$p++)
-+    {
-+        for (my $lane=0;$lane<16;$lane++)
-+        {
-+            $eq_str=$eq_str.$equalization[$p][$lane].",";
-+        }
-+    }
-+    $eq_str = substr($eq_str,0,length($eq_str)-1);
-+    $targetObj->setAttribute($parentTarget,"PROC_PCIE_LANE_EQUALIZATION",
-+         $eq_str);
-+    }
-+}
-+#--------------------------------------------------
-+## OCC
-+##
-+sub processOcc
-+{
-+    my $targetObj    = shift;
-+    my $target       = shift;
-+    my $parentTarget = shift;
-+    my $master_capable=0;
-+    if ($parentTarget eq $targetObj->getMasterProc())
-+    {
-+        $master_capable=1;
-+    }
-+    $targetObj->setAttribute($target,"OCC_MASTER_CAPABLE",$master_capable);
-+}
-+
-+sub processMembufVpdAssociation
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
+                 }
+             }
+             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];
-+
-+        my $membuf_assocs=$targetObj->findConnections($vpd->{DEST_PARENT},
-+                          "LOGICAL_ASSOCIATION","MEMBUF");
-+        if ($membuf_assocs ne "") {
-+            foreach my $membuf_assoc (@{$membuf_assocs->{CONN}}) {
-+                my $membuf_target = $membuf_assoc->{DEST_PARENT};
-+                setEepromAttributes($targetObj,
-+                       "EEPROM_VPD_PRIMARY_INFO",$membuf_target,$vpd);
-+                setEepromAttributes($targetObj,
+     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(
-+                            $membuf_target,"ISDIMM_MBVPD_INDEX",$index);
-+            }
-+        }
-+    }
-+}
-+
-+#--------------------------------------------------
-+## MEMBUF
-+##
-+## Finds I2C connections to DIMM and creates EEPROM attributes
-+## FYI:  I had to handle DMI busses in framework because they
-+## define affinity path
-+
-+sub processMembuf
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
+                 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;
-+    }
-+
-+    processMembufVpdAssociation($targetObj,$target);
-+
-+    ## finds which gpio expander that controls vddr regs for membufs
-+    my $gpioexp=$targetObj->findConnections($target,"I2C","GPIO_EXPANDER");
-+    if ($gpioexp ne "" ) {
-+        my $vreg=$targetObj->findConnections(
-+            $gpioexp->{CONN}->[0]->{DEST_PARENT},"GPIO","VOLTAGE_REGULATOR");
-+        if ($vreg ne "") {
-+            my $vddPin = $targetObj->getAttribute(
-+                 $vreg->{CONN}->[0]->{SOURCE},"CHIP_UNIT");
-+            my $membufs=$targetObj->findConnections(
-+               $vreg->{CONN}->[0]->{DEST_PARENT},"POWER","MEMBUF");
-+            if ($membufs ne "") {
-+                foreach my $membuf (@{$membufs->{CONN}}) {
-+                    my $aff = $targetObj->getAttribute($membuf->{DEST_PARENT},
-+                        "PHYS_PATH");
-+                    setGpioAttributes($targetObj,$membuf->{DEST_PARENT},
-+                        $gpioexp->{CONN}->[0],$vddPin);
-+
-+                }
-+            }
-+        }
-+    }
+         ##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)})
@@ -2383,18 +383,15 @@
 +    }
 +    
 +    
-+    ## Process MEMBUF to DIMM I2C connections
+     ## 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}}) {
-+            my $dimm_target = $targetObj->getTargetParent($dimm->{DEST_PARENT});
-+            setEepromAttributes($targetObj,
-+                       "EEPROM_VPD_PRIMARY_INFO",$dimm_target,
-+                       $dimm);
-+            setEepromAttributes($targetObj,
-+                       "EEPROM_VPD_FRU_INFO",$dimm_target,
-+                       $dimm,"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};
@@ -2403,33 +400,27 @@
 +                $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);
-+
-+    ## Do MBA port mapping
-+    my %mba_port_map;
-+    my $ddrs=$targetObj->findConnections($target,"DDR3","DIMM");
-+    if ($ddrs ne "") {
-+        my %portmap;
-+        foreach my $ddr (@{$ddrs->{CONN}}) {
-+            my $mba=$ddr->{SOURCE};
-+            my $dimm=$ddr->{DEST_PARENT};
+     ## 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}++;
-+
-+            ## Copy connector attributes
-+            my $dimmconn=$targetObj->getTargetParent($dimm);
-+        }
-+    }
-+}
-+
+             $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;
@@ -2448,187 +439,18 @@
 +    return $hexfield;
 +}
 +
-+
-+sub setEepromAttributes
-+{
-+    my $targetObj = shift;
-+    my $name = shift;
-+    my $target = shift;
-+    my $conn_target = shift;
-+    my $fru = 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 $path = $targetObj->getAttribute($conn_target->{SOURCE_PARENT},
-+               "PHYS_PATH");
-+    my $mem  = $targetObj->getAttribute($conn_target->{DEST_PARENT},
-+               "MEMORY_SIZE_IN_KB");
-+    my $cycle  = $targetObj->getAttribute($conn_target->{DEST_PARENT},
-+               "WRITE_CYCLE_TIME");
-+    my $page  = $targetObj->getAttribute($conn_target->{DEST_PARENT},
-+               "WRITE_PAGE_SIZE");
-+    my $offset  = $targetObj->getAttribute($conn_target->{DEST_PARENT},
-+               "BYTE_ADDRESS_OFFSET");
-+
-+    $targetObj->setAttributeField($target, $name, "i2cMasterPath", $path);
-+    $targetObj->setAttributeField($target, $name, "port", $port);
-+    $targetObj->setAttributeField($target, $name, "devAddr", $addr);
-+    $targetObj->setAttributeField($target, $name, "engine", $engine);
-+    $targetObj->setAttributeField($target, $name, "byteAddrOffset", $offset);
-+    $targetObj->setAttributeField($target, $name, "maxMemorySizeKB", $mem);
-+    $targetObj->setAttributeField($target, $name, "writePageSize", $page);
-+    $targetObj->setAttributeField($target, $name, "writeCycleTime", $cycle);
-+
-+    if ($fru ne "")
-+    {
-+        $targetObj->setAttributeField($target, $name, "fruId", $fru);
-+    }
-+}
-+
-+
-+sub setGpioAttributes
-+{
-+    my $targetObj = shift;
-+    my $target = shift;
-+    my $conn_target = shift;
-+    my $vddrPin = 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");
+ 
+ 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");
-+
-+
-+    my $name="GPIO_INFO";
-+    $targetObj->setAttributeField($target, $name, "i2cMasterPath", $path);
-+    $targetObj->setAttributeField($target, $name, "port", $port);
-+    $targetObj->setAttributeField($target, $name, "devAddr", $addr);
-+    $targetObj->setAttributeField($target, $name, "engine", $engine);
-+    $targetObj->setAttributeField($target, $name, "vddrPin", $vddrPin);
-+}
-+
-+#--------------------------------------------------
-+## ERROR checking
-+sub errorCheck
-+{
-+    my $targetObj = shift;
-+    my $target    = shift;
-+    my $type      = $targetObj->getType($target);
-+
-+    ## error checking even for connections are done with attribute checks
-+    ##  since connections simply create attributes at source and/or destination
-+    ##
-+    ## also error checking after processing is complete vs during
-+    ## processing is easier
-+    my %attribute_checks = (
-+        SYS         => ['SYSTEM_NAME','OPAL_MODEL'],
-+        PROC_MASTER => ['I2C_SLAVE_ADDRESS'],
-+        PROC        => ['FSI_MASTER_CHIP','I2C_SLAVE_ADDRESS'],
-+        MEMBUF => [ 'PHYS_PATH', 'EI_BUS_TX_MSBSWAP', 'FSI_MASTER_PORT|0xFF' ],
-+        DIMM   => ['EEPROM_VPD_PRIMARY_INFO/devAddr'],
-+    );
-+    my %error_msg = (
-+        'EEPROM_VPD_PRIMARY_INFO/devAddr' =>
-+          'I2C connection to target is not defined',
-+        'FSI_MASTER_PORT' => 'This target is missing a required FSI connection',
-+        'FSI_MASTER_CHIP' => 'This target is missing a required FSI connection',
-+        'EI_BUS_TX_MSBSWAP' =>
-+          'DMI connection is missing to this membuf from processor',
-+        'PHYS_PATH' =>'DMI connection is missing to this membuf from processor',
-+        'I2C_SLAVE_ADDRESS' =>'I2C connection is missing from BMC to processor',
-+    );
-+
-+    my @errors;
-+    if ($targetObj->getMasterProc() eq $target)
-+    {
-+        $type = "PROC_MASTER";
-+    }
-+    foreach my $attr (@{ $attribute_checks{$type} })
-+    {
-+        my ($a,         $v)     = split(/\|/, $attr);
-+        my ($a_complex, $field) = split(/\//, $a);
-+        if ($field ne "")
-+        {
-+            if ($targetObj->isBadComplexAttribute(
-+                    $target, $a_complex, $field, $v) )
-+            {
-+                push(@errors,sprintf(
-+                        "$a attribute is invalid (Target=%s)\n\t%s\n",
-+                        $target, $error_msg{$a}));
-+            }
-+        }
-+        else
-+        {
-+            if ($targetObj->isBadAttribute($target, $a, $v))
-+            {
-+                push(@errors,sprintf(
-+                        "$a attribute is invalid (Target=%s)\n\t%s\n",
-+                        $target, $error_msg{$a}));
-+            }
-+        }
-+    }
-+    if ($type eq "PROC")
-+    {
-+        ## note: DMI is checked on membuf side so don't need to check that here
-+        ## this checks if at least 1 abus is connected
-+        my $found_abus = 0;
-+        my $abus_error = "";
-+        foreach my $child (@{ $targetObj->getTargetChildren($target) })
-+        {
-+            my $child_type = $targetObj->getBusType($child);
-+            if ($child_type eq "ABUS" || $child_type eq "XBUS")
-+            {
-+                if ($targetObj->getMasterProc() ne $target)
-+                {
-+                    if (!$targetObj->isBadAttribute($child, "PEER_TARGET"))
-+                    {
-+                        $found_abus = 1;
-+                    }
-+                    else
-+                    {
-+                        $abus_error = sprintf(
-+"proc not connected to proc via Abus or Xbus (Target=%s)",$child);
-+                    }
-+                }
-+            }
-+        }
-+        if ($found_abus)
-+        {
-+            $abus_error = "";
-+        }
-+        else
-+        {
-+            push(@errors, $abus_error);
-+        }
-+    }
-+    if ($errors[0])
-+    {
-+        foreach my $err (@errors)
-+        {
-+            print "ERROR: $err\n";
-+        }
-+        $targetObj->myExit(3);
-+    }
-+}
-+
-+sub printUsage
-+{
-+    print "
-+processMrwl.pl -x [XML filename] [OPTIONS]
-+Options:
-+        -f = force output file creation even when errors
-+        -d = debug mode
-+        -s [SDR XML file] = import SDRs
-+        -r = create report and save to [system_name].rpt
-+        -v = version
-+";
-+    exit(1);
-+}
+                "PHYS_PATH");
+ 
+ 
 -- 
 1.8.2.2
 
diff --git a/openpower/package/hostboot/hostboot-0005-Add-loop-fix-and-missing-include-to-attribute-overri.patch b/openpower/package/hostboot/hostboot-0005-Add-loop-fix-and-missing-include-to-attribute-overri.patch
deleted file mode 100644
index d781d33..0000000
--- a/openpower/package/hostboot/hostboot-0005-Add-loop-fix-and-missing-include-to-attribute-overri.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 7a51e37d5d7672fbef3a8f3c4a11a652ded9241a Mon Sep 17 00:00:00 2001
-From: Andres Lugo-Reyes <aalugore@us.ibm.com>
-Date: Mon, 16 Feb 2015 10:16:48 -0600
-Subject: [PATCH] Add loop fix and missing include to attribute override tool.
-
-Change-Id: I451d905d96822a151aa7966d31d27353bebbe953
-Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15757
-Tested-by: Jenkins Server
-Reviewed-by: Brian Silver <bsilver@us.ibm.com>
-Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
----
- src/usr/targeting/attroverride/attrTextToBinaryBlob.C | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
-index 10ef7bb..e4b3330 100755
---- a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
-+++ b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
-@@ -48,6 +48,7 @@
- #include <stdio.h>
- #include <arpa/inet.h>
- #include <endian.h>
-+#include <unistd.h>
- #include <hwpf/fapi/fapiTarget.H>
- #include <attributeenums.H>
- #include <pnor/ecc.H>
-@@ -1024,7 +1025,7 @@ bool AttrTextToBinaryBlob::getAttrDataFromMap(const char * i_attrString,
- 
-         o_attrId = currentAttr->iv_attrId;
-         o_attrElemSizeBytes = currentAttr->iv_attrElemSizeBytes;
--        for(size_t i = 0; i < sizeof(o_dims)/sizeof(uint32_t); ++i)
-+        for(size_t i = 0; i < sizeof(o_dims)/sizeof(size_t); ++i)
-         {
-             o_dims[i] = currentAttr->iv_dims[i];
-         }
--- 
-2.1.1
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 8eaf3c9..2055371 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 44fde6512e834ea8f5071299ca99b35973c0f979
+HOSTBOOT_VERSION ?= 7a51e37d5d7672fbef3a8f3c4a11a652ded9241a
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0