diff --git a/openpower/package/habanero-xml/habanero-xml.mk b/openpower/package/habanero-xml/habanero-xml.mk
index 0ab244c..557a7da 100644
--- a/openpower/package/habanero-xml/habanero-xml.mk
+++ b/openpower/package/habanero-xml/habanero-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HABANERO_XML_VERSION ?= 4173b205b0a7dfd18a97f3a0d5319c9aad893035
+HABANERO_XML_VERSION ?= b7f0e388bba972fcdcf749f9bb8e31bc9e1022c0
 HABANERO_XML_SITE ?= $(call github,open-power,habanero-xml,$(HABANERO_XML_VERSION))
 
 HABANERO_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/hostboot/hostboot-0002-Do-not-fail-IPL-for-missing-OSYS-SS-data.patch b/openpower/package/hostboot/hostboot-0002-Do-not-fail-IPL-for-missing-OSYS-SS-data.patch
deleted file mode 100644
index 804f62a..0000000
--- a/openpower/package/hostboot/hostboot-0002-Do-not-fail-IPL-for-missing-OSYS-SS-data.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 632df20fb598f38c246eb6ce93d972a9cbec4145 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Wed, 1 Apr 2015 10:29:25 -0500
-Subject: [PATCH] Do not fail IPL for missing OSYS:SS data
-
-Older planar vpd vintages may not have the OSYS record filled
-in.  We should allow the system to boot in this case but log
-an error pointing to the planar in need of update.
-
-CQ: SW201885
-Change-Id: Ia4f6440551b4bb6d4a849d24290c19667f3a6c6b
----
- src/usr/devtree/bld_devtree.C |    7 +++++--
- src/usr/errl/errlentry.C      |    1 +
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
-index 622178a..a73c812 100644
---- a/src/usr/devtree/bld_devtree.C
-+++ b/src/usr/devtree/bld_devtree.C
-@@ -1197,10 +1197,13 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
-                 }
-             }
-         }
--        // just commit any errors we get, this isn't critical
-+        // just delete any errors we get, this isn't critical
-         if( errhdl )
-         {
--            errlCommit(errhdl, DEVTREE_COMP_ID);
-+            // since there are old parts out in the wild without
-+            //  this data, we can't log an error
-+            delete errhdl;
-+            errhdl = NULL;
-         }
- 
-         if( !foundvpd ) //serial number not found, default to unavailable
-diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C
-index 2d604ce..967638f 100644
---- a/src/usr/errl/errlentry.C
-+++ b/src/usr/errl/errlentry.C
-@@ -94,6 +94,7 @@ struct epubTargetTypeToSub_t
- // Target type to subsystem table.
- static const epubTargetTypeToSub_t TARGET_TO_SUBSYS_TABLE[] =
- {
-+    { TARGETING::TYPE_NODE             , EPUB_CEC_HDW_SUBSYS       },
-     { TARGETING::TYPE_DIMM             , EPUB_MEMORY_DIMM          },
-     { TARGETING::TYPE_MEMBUF           , EPUB_MEMORY_SUBSYS        },
-     { TARGETING::TYPE_PROC             , EPUB_PROCESSOR_SUBSYS     },
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0003-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch b/openpower/package/hostboot/hostboot-0002-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0003-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch
rename to openpower/package/hostboot/hostboot-0002-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch
diff --git a/openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch b/openpower/package/hostboot/hostboot-0003-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
rename to openpower/package/hostboot/hostboot-0003-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
diff --git a/openpower/package/hostboot/hostboot-0007_mss_thermal_undo.patch b/openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0007_mss_thermal_undo.patch
rename to openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch
diff --git a/openpower/package/hostboot/hostboot-0015-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch b/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
similarity index 93%
rename from openpower/package/hostboot/hostboot-0015-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
rename to openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
index 83dca55..6f1b80c 100644
--- a/openpower/package/hostboot/hostboot-0015-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
+++ b/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
@@ -1,11 +1,10 @@
-From 5bda70dc5e135261f5393858959056b44332885b Mon Sep 17 00:00:00 2001
+From 1674da76fadc52f8c6aff6d8435536dd33b7417f Mon Sep 17 00:00:00 2001
 From: Bill Hoffa <wghoffa@us.ibm.com>
 Date: Mon, 30 Mar 2015 15:11:28 -0500
-Subject: [PATCH 6/7] Add PNOR Version Information to IPMI Fru Inventory
+Subject: [PATCH] Add PNOR Version Information to IPMI Fru Inventory
 
 Change-Id: Ib49fe67e9c6631b2b7ea0005e692c9aea6d84057
 RTC:123353
-(cherry picked from commit 90f8e938932e867283e28cade6741b6bf968602c)
 ---
  src/usr/ipmi/ipmifruinv.C                          | 207 +++++++++++++++++++++
  src/usr/ipmi/ipmifruinvprvt.H                      |  47 +++++
@@ -14,18 +13,18 @@
  4 files changed, 263 insertions(+)
 
 diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
-index c6c7a30..b376ebf 100644
+index 4f0d7d7..aaf62d1 100644
 --- a/src/usr/ipmi/ipmifruinv.C
 +++ b/src/usr/ipmi/ipmifruinv.C
-@@ -36,6 +36,7 @@
- #include "ipmifru.H"
+@@ -37,6 +37,7 @@
  #include "ipmifruinvprvt.H"
  #include <stdio.h>
+ #include <assert.h>
 +#include <pnor/pnorif.H>
  
  extern trace_desc_t * g_trac_ipmi;
  
-@@ -83,6 +84,10 @@ IpmiFruInv *IpmiFruInv::Factory(TARGETING::TargetHandleList i_targets,
+@@ -84,6 +85,10 @@ IpmiFruInv *IpmiFruInv::Factory(TARGETING::TargetHandleList i_targets,
              // @todo-RTC:117702
              l_fru = new backplaneIpmiFruInv(l_target, i_targets, i_updateData);
              break;
@@ -36,7 +35,7 @@
          default:
              assert(false,
                  "IpmiFruInv::Factory: No support for target type given: [%08x]",
-@@ -926,6 +931,199 @@ errlHndl_t backplaneIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
+@@ -927,6 +932,199 @@ errlHndl_t backplaneIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
      return l_errl;
  }
  
@@ -76,7 +75,7 @@
 +        //Set formatting data that goes at the beginning of the record
 +        preFormatProcessing(io_data, true);
 +
-+        uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 3,'I','B','M',
++        uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_NULL,
 +                            IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 18, 'O','p','e',
 +                            'n','P','O','W','E','R',' ','F','i','r','m','w','a',
 +                            'r','e', IPMIFRUINV::TYPELENGTH_BYTE_NULL};
@@ -102,7 +101,7 @@
 +        //First determine number of bytes in PNOR Version string
 +        //  with the caveat there is a max record size allowed, so
 +        //  the string will be cut off if too long
-+        //Also, remove whitespace/newline chars
++        //Also, remove newline chars
 +        while ((l_numBytes < IPMIFRUINV::MAX_RECORD_SIZE -
 +                              (uint8_t(sizeof(l_data) / sizeof(uint8_t))) -
 +                              IPMIFRUINV::COMMON_HEADER_FORMAT_SIZE - 8)
@@ -236,14 +235,14 @@
  void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
                               const TARGETING::ATTR_ECID_type& i_ecidInfo,
                               std::vector<uint8_t> &io_data)
-@@ -993,6 +1191,15 @@ void IPMIFRUINV::setData(bool i_updateData)
+@@ -997,6 +1195,15 @@ void IPMIFRUINV::setData(bool i_updateData)
              IPMIFRUINV::gatherClearData(pSys, frusToClear);
          }
  
 +        //Get System FW FRU_ID if available
 +        uint32_t l_systemFwFruId;
 +        bool hasSystemFwFruId =
-+                            pSys->tryGetAttr<TARGETING::ATTR_BMC_FRU_ID>(l_systemFwFruId);
++                  pSys->tryGetAttr<TARGETING::ATTR_BMC_FRU_ID>(l_systemFwFruId);
 +        if (hasSystemFwFruId)
 +        {
 +            l_potentialFrus.push_back(std::make_pair(pSys, l_systemFwFruId));
@@ -316,10 +315,10 @@
 +
  #endif
 diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
-index c961ebe..bbf02dd 100644
+index ec256de..17729cd 100644
 --- a/src/usr/targeting/common/xmltohb/attribute_types.xml
 +++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
-@@ -11425,6 +11425,14 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
+@@ -11659,6 +11659,14 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
  </attribute>
  
  <attribute>
@@ -335,10 +334,10 @@
      <description>
        Set to 1 by HWSV to indicate that attribute overrides exist in a PLCK IPL
 diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
-index 6dc4e58..b4b9a30 100644
+index 15d7921..82ec014 100644
 --- a/src/usr/targeting/common/xmltohb/target_types.xml
 +++ b/src/usr/targeting/common/xmltohb/target_types.xml
-@@ -305,6 +305,7 @@
+@@ -300,6 +300,7 @@
      <attribute><id>MNFG_TH_CEN_L4_CACHE_CES</id></attribute>
      <attribute><id>OPT_MEMMAP_GROUP_POLICY</id></attribute>
      <attribute><id>FRU_ID</id></attribute>
diff --git a/openpower/package/hostboot/hostboot-0020-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch b/openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0020-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
rename to openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
diff --git a/openpower/package/hostboot/hostboot-0006_POWER_CONTROL_CAPABLE.patch b/openpower/package/hostboot/hostboot-0006_POWER_CONTROL_CAPABLE.patch
deleted file mode 100644
index e7a902b..0000000
--- a/openpower/package/hostboot/hostboot-0006_POWER_CONTROL_CAPABLE.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From c474b26291b009f7a9c97e2bf94ad2917f11b1b9 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Sun, 22 Mar 2015 23:03:57 -0500
-Subject: [PATCH] Add support for POWER_CONTROL_CAPABLE to ISDIMMs
-
-Change-Id: If9de980385cac7706b321a9fefc1158dc540b7e0
----
- .../usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H     |   11 +++-
- .../hwp/mvpd_accessors/getControlCapableData.C     |   54 ++++++++++----------
- src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C     |   16 ++++++
- src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttrData.C |    3 +
- 4 files changed, 55 insertions(+), 29 deletions(-)
-
-diff --git a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
-index 07ea5fc..810cb40 100644
---- a/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
-+++ b/src/include/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.H
-@@ -46,11 +46,14 @@ namespace getAttrData
-     const uint8_t NUM_PORTS = 2;   //Each MBA has 2 ports
-     const uint8_t NUM_DIMMS = 2;   //Each port has 2 DIMMs
-     const uint8_t NUM_RANKS = 4;   //Number of ranks
--    const uint8_t PORT_SECTION_SIZE = 64; //Each port has 64 bytes
-+    //Each port has 64 bytes of space, but only 62 bytes is useable
-+    const uint8_t PORT_SECTION_SIZE = 64; 
-+    const uint8_t PORT_SECTION_USED = 62; 
- 
-     struct port_attributes
-     {
--       uint8_t port_attr[PORT_SECTION_SIZE];
-+       uint8_t port_attr[PORT_SECTION_USED];
-+       uint8_t nonport_data[PORT_SECTION_SIZE-PORT_SECTION_USED];
-     };
-     struct mba_attributes
-     {
-@@ -102,6 +105,7 @@ namespace getAttrData
-         UINT32_BY2        =0x0004,   // uint32_t [2]
-         UINT32_BY2_BY2    =0x0005,   // uint32_t [2][2]
-         UINT64            =0x0006,   // uint64_t
-+        UINT8             =0x0007,   // uint8_t  
-     };
-     const uint16_t OUTPUT_TYPE_MASK = 0x00FF;
- 
-@@ -111,6 +115,7 @@ namespace getAttrData
-     typedef uint32_t UINT32_BY2_t [2];
-     typedef uint32_t UINT32_BY2_BY2_t [2][2];
-     typedef uint64_t UINT64_t;
-+    typedef uint8_t UINT8_t;
- 
-     //  Special processing
-     //  Rules:
-@@ -343,6 +348,8 @@ template<>class MBvpdAttrDataType<fapi::ATTR_VPD_TSYS_ADR>
-     { public: typedef fapi::ATTR_VPD_TSYS_ADR_Type Type; };
- template<>class MBvpdAttrDataType<fapi::ATTR_VPD_TSYS_DP18>
-     { public: typedef fapi::ATTR_VPD_TSYS_DP18_Type Type; };
-+template<>class MBvpdAttrDataType<fapi::ATTR_VPD_POWER_CONTROL_CAPABLE>
-+    { public: typedef fapi::ATTR_VPD_POWER_CONTROL_CAPABLE_Type Type; };
- 
- 
- // Template function that checks that the type is as expected.
-diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getControlCapableData.C b/src/usr/hwpf/hwp/mvpd_accessors/getControlCapableData.C
-index 4e4fe02..90afda6 100644
---- a/src/usr/hwpf/hwp/mvpd_accessors/getControlCapableData.C
-+++ b/src/usr/hwpf/hwp/mvpd_accessors/getControlCapableData.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2014                             */
-+/* Contributors Listed Below - COPYRIGHT 2014,2015                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -40,38 +40,38 @@ fapi::ReturnCode getControlCapableData(
-                 const fapi::Target &i_mbTarget,
-                 uint8_t & o_val)
- {
--    //Record:VSPD, Keyword:MR, offset: 253, 1 byte.
--    const uint32_t MR_KEYWORD_SIZE = 255;
-+    fapi::ReturnCode l_rc;
- 
--    struct mr_keyword
--    {
--        uint8_t filler[253];
--        uint8_t position; //offset 253
--        uint8_t extraFiller[MR_KEYWORD_SIZE-sizeof(filler)-sizeof(position)];
--    };
--
--    fapi::ReturnCode l_fapirc;
--    mr_keyword * l_pMrBuffer = new mr_keyword;
--    uint32_t l_MrBufsize = MR_KEYWORD_SIZE;
--    do{
--
--        l_fapirc = fapiGetMBvpdField(fapi::MBVPD_RECORD_VSPD,
--                    fapi::MBVPD_KEYWORD_MR,
--                    i_mbTarget,
--                    reinterpret_cast<uint8_t *>(l_pMrBuffer),
--                    l_MrBufsize);
--        if(l_fapirc)
-+    FAPI_DBG("getControlCapableData: start");
-+    do {
-+        // ATTR_VPD_POWER_CONTROL_CAPABLE is at the membuf level, but the
-+        //  getMBvpdAttr() function takes a mba, so need to do a
-+        //  conversion
-+        std::vector<fapi::Target> l_mbas;
-+        l_rc = fapiGetChildChiplets( i_mbTarget,
-+                                     fapi::TARGET_TYPE_MBA_CHIPLET,
-+                                     l_mbas );
-+        if( l_rc )
-         {
--            FAPI_ERR("getControlCapableData: Read of MR Keyword failed");
-+            FAPI_ERR("getControlCapableData: fapiGetChildChiplets failed");
-             break;
-         }
--        o_val = l_pMrBuffer->position;
- 
--    }while(0);
-+        // If we don't have any functional MBAs then we will fail in
-+        //  the other function so just return a default value here
-+        if( l_mbas.empty() )
-+        {
-+            o_val = fapi::ENUM_ATTR_VPD_POWER_CONTROL_CAPABLE_NONE;
-+            break;
-+        }
- 
--    delete l_pMrBuffer;
--    l_pMrBuffer = NULL;
-+        // Call a VPD Accessor HWP to get the data
-+        FAPI_EXEC_HWP(l_rc, getMBvpdAttr,
-+                      l_mbas[0], ATTR_VPD_POWER_CONTROL_CAPABLE,
-+                      &o_val, sizeof(ATTR_VPD_POWER_CONTROL_CAPABLE_Type));
-+    } while(0);
-+    FAPI_ERR("getControlCapableData: end");
- 
--    return l_fapirc;
-+    return l_rc;
- }
- }
-diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
-index b13e4f9..7be8ed2 100644
---- a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
-+++ b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttr.C
-@@ -976,6 +976,22 @@ fapi::ReturnCode returnValue (const MBvpdAttrDef*   i_pAttrDef,
-             (*(UINT64_t*)o_pVal) = l_value;
-             break ;
-         }
-+        case  UINT8:            // uint8_t
-+        {
-+            // make sure return value size is correct
-+            if (sizeof(UINT8_t) != i_valSize)
-+            {
-+                l_fapirc = sizeMismatch(sizeof(UINT8_t),
-+                                        i_valSize,
-+                                        i_pAttrDef->iv_attrId);
-+                break; //return with error
-+            }
-+
-+            // only 1 value is present, it isn't stored per mba/port
-+            uint8_t l_value = (reinterpret_cast<uint8_t*>(i_pBuffer))[l_attrOffset];
-+            (*(UINT8_t*)o_pVal) = l_value;
-+            break ;
-+        }
-         default: // Hard to do, but needs to be caught
-             FAPI_ERR("returnValue: invalid output type 0x%04x for"
-                        " attribute ID 0x%08x",
-diff --git a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttrData.C b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttrData.C
-index 4b18e40..5a599b5 100644
---- a/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttrData.C
-+++ b/src/usr/hwpf/hwp/mvpd_accessors/getMBvpdAttrData.C
-@@ -178,6 +178,9 @@ const MBvpdAttrDef g_MBVPD_ATTR_DEF_array [] =
-     {ATTR_VPD_DRAM_2N_MODE_ENABLED,ALL_DIMM,ALL_VER,MBVPD_KEYWORD_MR,48,UINT8_BY2,0},
-     {ATTR_VPD_TSYS_ADR,ALL_DIMM,ALL_VER,MBVPD_KEYWORD_MR,49,UINT8_BY2|PORT00,0},
-     {ATTR_VPD_TSYS_DP18,ALL_DIMM,ALL_VER,MBVPD_KEYWORD_MR,49,UINT8_BY2|PORT11,0},
-+
-+// Membuf-level data that is stored within MR
-+    {ATTR_VPD_POWER_CONTROL_CAPABLE,ALL_DIMM,ALL_VER,MBVPD_KEYWORD_MR,253,UINT8,0},
- };
- 
- const uint32_t g_MBVPD_ATTR_DEF_array_size =
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch b/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch
new file mode 100644
index 0000000..8a14eda
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch
@@ -0,0 +1,30 @@
+From 5b26d8a2da4c8bba72781e45ec89572843f55f35 Mon Sep 17 00:00:00 2001
+From: Mike Baiocchi <baiocchi@us.ibm.com>
+Date: Tue, 21 Apr 2015 13:23:36 -0500
+Subject: [PATCH] Fix Bug in mss_setup_bars
+
+There was an update made to mss_setup_bars.C to fix memory corruption, but
+this commit corrects an issue that was missed by this initial update.
+
+Change-Id: I32889a5d07b33f5496e5ea12ec50a0f26d0e1561
+CQ: SW296125
+---
+ src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
+index 274dfdc..6c58193 100644
+--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
++++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
+@@ -615,7 +615,7 @@ fapi::ReturnCode mss_setup_bars(const fapi::Target& i_pu_target,   std::vector<f
+                     if(mcs_sz !=  sizeInfo.MCS_size[group_data[i][j]])
+                     {
+                           FAPI_INF(" Group %zd will not be configured as MCS %d is not valid grouped size is %d , present MCS size is %d \n",i,group_data[i][j],mcs_sz, sizeInfo.MCS_size[group_data[i][j]]);
+-                          for(uint8_t k = 0; k<32;k++) { group_data[i][k]=0; }
++                          for(uint8_t k = 0; k<16;k++) { group_data[i][k]=0; }
+                      }
+                }
+            }
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch b/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch
new file mode 100644
index 0000000..8f8a15e
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch
@@ -0,0 +1,38 @@
+From 0134ed35efb10842f8a1d59d456e39338e63eaea Mon Sep 17 00:00:00 2001
+From: Mike Baiocchi <baiocchi@us.ibm.com>
+Date: Tue, 21 Apr 2015 16:41:38 -0500
+Subject: [PATCH] Limit attribute NPU_MMIO_BAR_BASE_ADDR to Naples-based
+ systems
+
+This commit limits the use of the NPU_MMIO_BAR_BASE_ADDR to the
+systems for which it is defined.
+
+Change-Id: I7eab012a84611365e8e6cb6c44b49c4a4ffac8e4
+---
+ src/usr/targeting/common/processMrw.pl | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
+index 3515841..5d44e74 100644
+--- a/src/usr/targeting/common/processMrw.pl
++++ b/src/usr/targeting/common/processMrw.pl
+@@ -580,10 +580,15 @@ sub setupBars
+     my $proc   = $targetObj->getAttribute($target, "FABRIC_CHIP_ID");
+     $targetObj->{TOPOLOGY}->{$node}->{$proc}++;
+ 
+-    my @bars=("NPU_MMIO_BAR_BASE_ADDR","FSP_BASE_ADDR","PSI_BRIDGE_BASE_ADDR",
++    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");
+ 
++    # Attribute only valid in naples-based systems
++    if (!$targetObj->isBadAttribute($target,"NPU_MMIO_BAR_BASE_ADDR") ) {
++          push(@bars,"NPU_MMIO_BAR_BASE_ADDR");
++    }
++
+     foreach my $bar (@bars)
+     {
+         my ($num,$base,$node_offset,$proc_offset,$offset) = split(/,/,
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0008-Update-SBE-Update-IPMI-Watchdog-call-to-use-HARD_RES.patch b/openpower/package/hostboot/hostboot-0008-Update-SBE-Update-IPMI-Watchdog-call-to-use-HARD_RES.patch
deleted file mode 100644
index 9911d22..0000000
--- a/openpower/package/hostboot/hostboot-0008-Update-SBE-Update-IPMI-Watchdog-call-to-use-HARD_RES.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From a048585e96058e9bf1ba43853de3a6b70053d740 Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Thu, 26 Mar 2015 13:16:18 -0500
-Subject: [PATCH 1/5] Update SBE Update IPMI Watchdog call to use HARD_RESET
- action
-
-This commit updates how the SBE Update code will setup the IPMI
-watchdog timer before calling doShutdown().  Rather than using
-NO_ACTIONS, the updated code will use the HARD_RESET action.
-
-Change-Id: Id251307aa76259d8a290a92d9e9f3418b181bc3e
-RTC: 124679
-(cherry picked from commit 815998ab802c19ade01cdc71a9e59946eedf1ab1)
----
- src/usr/sbe/sbe_resolve_sides.C | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/usr/sbe/sbe_resolve_sides.C b/src/usr/sbe/sbe_resolve_sides.C
-index 49d2c25..26ac4e6 100644
---- a/src/usr/sbe/sbe_resolve_sides.C
-+++ b/src/usr/sbe/sbe_resolve_sides.C
-@@ -1350,7 +1350,7 @@ void sbePreShutdownIpmiCalls( void )
-                                static_cast<uint8_t>
-                                           (IPMIWATCHDOG::DO_NOT_STOP |
-                                            IPMIWATCHDOG::BIOS_FRB2), // default
--                               IPMIWATCHDOG::NO_ACTIONS); // boot count reset
-+                               IPMIWATCHDOG::TIMEOUT_HARD_RESET);
-         if(err)
-         {
-                TRACFCOMP( g_trac_sbe,
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0009-Reject-IPMI-events-which-arent-destined-for-the-host.patch b/openpower/package/hostboot/hostboot-0009-Reject-IPMI-events-which-arent-destined-for-the-host.patch
deleted file mode 100644
index 6676254..0000000
--- a/openpower/package/hostboot/hostboot-0009-Reject-IPMI-events-which-arent-destined-for-the-host.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-From 1e70ee010552ad835b03751ebf4788e367bcecd4 Mon Sep 17 00:00:00 2001
-From: Brian Silver <bsilver@us.ibm.com>
-Date: Thu, 26 Mar 2015 15:34:54 -0500
-Subject: [PATCH 2/5] Reject IPMI events which aren't destined for the host
-
-Change-Id: I378e0763c5ca8c13830d0e6c057b24e6beb5dc8c
-(cherry picked from commit e7b68743f7d2a160fd1dd3019f5614860576de64)
----
- src/include/usr/ipmi/ipmiif.H |  8 ++++
- src/usr/ipmi/ipmirp.C         | 92 +++++++++++++++++++++++++++----------------
- 2 files changed, 65 insertions(+), 35 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmiif.H b/src/include/usr/ipmi/ipmiif.H
-index 56e3c53..e65252a 100644
---- a/src/include/usr/ipmi/ipmiif.H
-+++ b/src/include/usr/ipmi/ipmiif.H
-@@ -88,6 +88,14 @@ namespace IPMI
-         NETFUN_NONE     = (0x30 << 2),
-     };
- 
-+    // SMS_ATN OEM Event constants
-+    enum oem_event
-+    {
-+        OEM_VALID_NETFUN      = 0x3a,
-+        OEM_VALID_SEL_ID      = 0x5555,
-+        OEM_VALID_RECORD_TYPE = 0xC0,
-+    };
-+
-     // IPMI Completion Codes
-     enum completion_code
-     {
-diff --git a/src/usr/ipmi/ipmirp.C b/src/usr/ipmi/ipmirp.C
-index 5925d45..de1b219 100644
---- a/src/usr/ipmi/ipmirp.C
-+++ b/src/usr/ipmi/ipmirp.C
-@@ -331,46 +331,68 @@ void IpmiRP::postEvent(IPMI::oemSEL* i_event)
- {
-     // Called in the context of the RP message loop, mutex locked
- 
--    // Check to see if this event has a queue registered
--    IPMI::event_q_t::iterator it = iv_eventq.find(i_event->iv_cmd[0]);
-+    do {
-+        // Check to see if event is valid. AMI recomends we check the netfun,
-+        // the SEL id, and the record id. If they don't match, we're allowed
-+        // to consider this an unhandled message.
-+        if ( (i_event->iv_netfun      != IPMI::OEM_VALID_NETFUN) ||
-+             (i_event->iv_record      != IPMI::OEM_VALID_SEL_ID) ||
-+             (i_event->iv_record_type != IPMI::OEM_VALID_RECORD_TYPE) )
-+        {
-+            IPMI_TRAC("rejecting event netfun: 0x%x record: 0x%x record type: 0x%x cmd: 0x%x",
-+                      i_event->iv_netfun,
-+                      i_event->iv_record,
-+                      i_event->iv_record_type,
-+                      i_event->iv_cmd[0]);
- 
--    msg_q_t outq = (it == iv_eventq.end()) ? iv_last_chanceq : it->second;
-+            // ... and clean up the memory for the caller
-+            delete i_event;
-+            break;
-+        }
- 
--    // Create a message to send asynchronously to the event handler queue
--    // Assign the event to the message, the caller will delete the message
--    // and the event.
--    msg_t* msg = msg_allocate();
--    msg->type = IPMI::TYPE_EVENT;
--    msg->extra_data = i_event;
-+        // Check to see if this event has a queue registered
-+        IPMI::event_q_t::iterator it = iv_eventq.find(i_event->iv_cmd[0]);
-+        msg_q_t outq = (it == iv_eventq.end()) ? iv_last_chanceq : it->second;
- 
--    IPMI_TRAC("queuing event %x:%x for handler",
--              i_event->iv_netfun, i_event->iv_cmd[0])
--    int rc = msg_send(outq, msg);
-+        // Create a message to send asynchronously to the event handler queue
-+        // Assign the event to the message, the caller will delete the message
-+        // and the event.
-+        msg_t* msg = msg_allocate();
-+        msg->type = IPMI::TYPE_EVENT;
-+        msg->extra_data = i_event;
- 
--    if (rc)
--    {
--        /* @errorlog tag
--         * @errortype       ERRL_SEV_UNRECOVERABLE
--         * @moduleid        IPMI::MOD_IPMISRV_SEND
--         * @reasoncode      IPMI::RC_INVALID_SEND
--         * @userdata1       rc from msq_send()
--         * @devdesc         msg_send() failed
--         * @custdesc        Firmware error during IPMI event handling
--         */
--        errlHndl_t err =
--            new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
--                                    IPMI::MOD_IPMISRV_SEND,
--                                    IPMI::RC_INVALID_SEND,
--                                    rc,
--                                    0,
--                                    true);
--        err->collectTrace(IPMI_COMP_NAME);
--        errlCommit(err, IPMI_COMP_ID);
-+        IPMI_TRAC("queuing event %x:%x for handler",
-+                  i_event->iv_netfun, i_event->iv_cmd[0])
-+            int rc = msg_send(outq, msg);
- 
--        // ... and clean up the memory for the caller
--        delete i_event;
--        msg_free(msg);
--    }
-+        if (rc)
-+        {
-+            /* @errorlog tag
-+             * @errortype       ERRL_SEV_UNRECOVERABLE
-+             * @moduleid        IPMI::MOD_IPMISRV_SEND
-+             * @reasoncode      IPMI::RC_INVALID_SEND
-+             * @userdata1       rc from msq_send()
-+             * @devdesc         msg_send() failed
-+             * @custdesc        Firmware error during IPMI event handling
-+             */
-+            errlHndl_t err =
-+                new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
-+                                        IPMI::MOD_IPMISRV_SEND,
-+                                        IPMI::RC_INVALID_SEND,
-+                                        rc,
-+                                        0,
-+                                        true);
-+            err->collectTrace(IPMI_COMP_NAME);
-+            errlCommit(err, IPMI_COMP_ID);
-+
-+            // ... and clean up the memory for the caller
-+            delete i_event;
-+            msg_free(msg);
-+        }
-+
-+    } while(0);
-+
-+    return;
- }
- 
- /**
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch b/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
new file mode 100644
index 0000000..5779f22
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
@@ -0,0 +1,29 @@
+From bc07c585c41d4c6119d8608af27ab7ad1acdaab8 Mon Sep 17 00:00:00 2001
+From: Mike Baiocchi <baiocchi@us.ibm.com>
+Date: Wed, 22 Apr 2015 10:31:08 -0500
+Subject: [PATCH] Add targeting support for backplane VPD
+
+Only the targeting support required by "Updated VPD_REC_NUM numbering"
+
+Change-Id: Ifa095f719b35de2cfae9344496dee63aea190334
+RTC: 118373
+---
+ src/usr/targeting/common/xmltohb/target_types.xml | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
+index 82ec014..759b73e 100644
+--- a/src/usr/targeting/common/xmltohb/target_types.xml
++++ b/src/usr/targeting/common/xmltohb/target_types.xml
+@@ -913,6 +913,8 @@
+     <attribute><id>FRU_ID</id></attribute>
+     <attribute><id>TPM_PRIMARY_INFO</id></attribute>
+     <attribute><id>TPM_BACKUP_INFO</id></attribute>
++    <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
++    <attribute><id>VPD_REC_NUM</id></attribute>
+ </targetType>
+ 
+ <targetType>
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0012-Cap-off-the-TRACFBIN-such-that-nothing-exceeds-64-by.patch b/openpower/package/hostboot/hostboot-0012-Cap-off-the-TRACFBIN-such-that-nothing-exceeds-64-by.patch
deleted file mode 100644
index fd60ef3..0000000
--- a/openpower/package/hostboot/hostboot-0012-Cap-off-the-TRACFBIN-such-that-nothing-exceeds-64-by.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 7cd4c46c4b6689dcd16f7667076283abf14ef575 Mon Sep 17 00:00:00 2001
-From: Elizabeth Liner <eliner@us.ibm.com>
-Date: Mon, 30 Mar 2015 12:41:45 -0500
-Subject: [PATCH 08/10] Cap off the TRACFBIN such that nothing exceeds 64 bytes
-
-Change-Id: If8f08d1602b4437aa0e72e6d2e8d99ca615a2c77
-Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16762
-Tested-by: Jenkins Server
-Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
-Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-(cherry picked from commit 56ab0ee178b8277c4cc7e24e8535802821b4cba7)
----
- src/include/usr/trace/interface.H | 17 ++++++++++++-----
- src/include/usr/trace/trace.H     |  3 +++
- 2 files changed, 15 insertions(+), 5 deletions(-)
-
-diff --git a/src/include/usr/trace/interface.H b/src/include/usr/trace/interface.H
-index 3ef8575..4115ec2 100644
---- a/src/include/usr/trace/interface.H
-+++ b/src/include/usr/trace/interface.H
-@@ -218,13 +218,20 @@ const uint32_t TRACE_FIELD   = 0;       //Indicates trace is field
- */
- #define TRACFBIN(des,printf_string,address,len) \
-     { \
-+        /*TODO: RTC 124618 - remove this block once issue is resolved*/ \
-+        uint16_t l_length = len; \
-+        if(l_length > MAX_WORKING_TRACBIN_SIZE) \
-+        { \
-+            l_length = MAX_WORKING_TRACBIN_SIZE; \
-+            TRACFCOMP(des,"Shrinking to max size in TRACFBIN"); \
-+        } \
-         __TRACE_HASH_STRUCTURES(printf_string); \
-         TRACE::trace_adal_write_bin((des), \
--                                    &__traceData_codeInfo, \
--                                    __LINE__, \
--                                    address, \
--                                    len, \
--                                    TRACE_FIELD); \
-+                                &__traceData_codeInfo, \
-+                                __LINE__, \
-+                                address, \
-+                                l_length, \
-+                                TRACE_FIELD); \
-     }
- 
- /**
-diff --git a/src/include/usr/trace/trace.H b/src/include/usr/trace/trace.H
-index fdcce88..bf5421c 100644
---- a/src/include/usr/trace/trace.H
-+++ b/src/include/usr/trace/trace.H
-@@ -42,6 +42,9 @@ const uint32_t TRACE_DEBUG_OFF   = 0;       //< Set to this when debug trace off
- const uint32_t TRAC_COMP_SIZE    = 16;      //< Max component name size
- const uint32_t TRAC_MAX_ARGS     = 9;       //< Max number of arguments in trace
- 
-+//TODO: RTC 124618 - remove this block once issue is resolved
-+const uint16_t MAX_WORKING_TRACBIN_SIZE = 64; //< Max working tracBin size
-+
- typedef uint32_t trace_hash_val;    //< Hash values are 32 bits.
- 
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0014-Update-VPD-Fields-Use-for-Fru-Inventory.patch b/openpower/package/hostboot/hostboot-0014-Update-VPD-Fields-Use-for-Fru-Inventory.patch
deleted file mode 100644
index b048484..0000000
--- a/openpower/package/hostboot/hostboot-0014-Update-VPD-Fields-Use-for-Fru-Inventory.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-From 1521a501ada30fd69606829b8f551547d7d882cd Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Mon, 30 Mar 2015 11:09:17 -0500
-Subject: [PATCH 5/5] Update VPD Fields Use for Fru Inventory
-
-Change-Id: Iaa4802e72e355acd03cb88e58c40d1069dd76ef5
-RTC:125044
-(cherry picked from commit 8a7427bd44bd4742a53412e6894cc2294d893012)
----
- src/usr/ipmi/ipmifruinv.C     | 97 +++++++++++++++++--------------------------
- src/usr/ipmi/ipmifruinvprvt.H |  6 ++-
- 2 files changed, 42 insertions(+), 61 deletions(-)
-
-diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
-index 7c9eb85..c6c7a30 100644
---- a/src/usr/ipmi/ipmifruinv.C
-+++ b/src/usr/ipmi/ipmifruinv.C
-@@ -35,6 +35,7 @@
- #include <ipmi/ipmifruinv.H>
- #include "ipmifru.H"
- #include "ipmifruinvprvt.H"
-+#include <stdio.h>
- 
- extern trace_desc_t * g_trac_ipmi;
- 
-@@ -401,7 +402,7 @@ errlHndl_t isdimmIpmiFruInv::buildProductInfoArea(std::vector<uint8_t> &io_data)
-         l_errl = addVpdData(io_data, SPD::BASIC_MEMORY_TYPE);
-         if (l_errl) { break; }
-         //Set Product Part/Model Number
--        l_errl = addVpdData(io_data, SPD::MODULE_PART_NUMBER);
-+        l_errl = addVpdData(io_data, SPD::MODULE_PART_NUMBER, true);
-         if (l_errl) { break; }
-         //Set Product Version
-         l_errl = addVpdData(io_data, SPD::MODULE_REVISION_CODE);
-@@ -411,8 +412,7 @@ errlHndl_t isdimmIpmiFruInv::buildProductInfoArea(std::vector<uint8_t> &io_data)
-         if (l_errl) { break; }
- 
-         //Add Asset Tag
--        io_data.push_back(uint8_t(1)); //Asset Tag is One Byte for now
--        io_data.push_back(uint8_t(0));
-+        io_data.push_back(uint8_t(0)); //No Asset Tag needed - O bytes
- 
-         //FRU File ID - Empty
-         io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-@@ -434,7 +434,8 @@ errlHndl_t isdimmIpmiFruInv::buildProductInfoArea(std::vector<uint8_t> &io_data)
- }
- 
- errlHndl_t isdimmIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
--                                     uint8_t i_keyword)
-+                                     uint8_t i_keyword,
-+                                     bool i_ascii)
- {
-     size_t     l_vpdSize = 0;
-     errlHndl_t l_errl = NULL;
-@@ -463,12 +464,22 @@ errlHndl_t isdimmIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
-             uint8_t l_offset = io_data.size();
-             io_data.resize(l_offset + 1 + l_vpdSize);
- 
--            //Add on the data to the type/length byte indicating it is binary
--            io_data.at(l_offset) = l_vpdSize;
-+            //Add on the data to the type/length byte indicating it is ascii
-+            // otherwise leave it as binary
-+            if (i_ascii)
-+            {
-+                io_data.at(l_offset) = l_vpdSize
-+                                       + IPMIFRUINV::TYPELENGTH_BYTE_ASCII;
-+            }
-+            else
-+            {
-+                io_data.at(l_offset) = l_vpdSize;
-+            }
-+            l_offset += 1;
- 
-             //Read the VPD data directly into fru inventory data buffer
--            l_errl = deviceRead(iv_target,&io_data[l_offset+1], l_vpdSize,
--                        DEVICE_SPD_ADDRESS(i_keyword));
-+            l_errl = deviceRead(iv_target,&io_data[l_offset], l_vpdSize,
-+                       DEVICE_SPD_ADDRESS(i_keyword));
-         }
-         else
-         {
-@@ -534,10 +545,10 @@ errlHndl_t procIpmiFruInv::buildBoardInfoArea(std::vector<uint8_t> &io_data)
-         l_errl = addVpdData(io_data, MVPD::VINI, MVPD::DR, true);
-         if (l_errl) { break; }
-         //Set Board Info serial number
--        l_errl = addVpdData(io_data, MVPD::VINI, MVPD::SN);
-+        l_errl = addVpdData(io_data, MVPD::VRML, MVPD::SN, true);
-         if (l_errl) { break; }
-         //Set Board part number
--        l_errl = addVpdData(io_data, MVPD::VINI, MVPD::FN);
-+        l_errl = addVpdData(io_data, MVPD::VRML, MVPD::PN, true);
-         if (l_errl) { break; }
-         //Set Board FRU File ID
-         l_errl = addVpdData(io_data, MVPD::VINI, MVPD::VZ);
-@@ -760,47 +771,18 @@ errlHndl_t backplaneIpmiFruInv::buildBoardInfoArea(
- 
-         //Set Product Name - ascii formatted data
-         //@fixme RTC Story 118373
--        l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::DR, true);
--
--        //Support Legacy VPD without OSYS record
--        if (l_errl)
--        {
--
--            TRACFCOMP(g_trac_ipmi,
--                      "backplaneIpmiFruInv::buildChassisBoardInfoArea - "
--                      " Using Legacy Chassis VPD Data without OSYS record");
--
--            //Delete errorlog and use Legacy VPD Fields
--            delete l_errl;
--            l_errl = NULL;
--            //Set Product Name - ascii formatted data
--            //@fixme RTC Story 118373
--            l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::DR, true);
--            if (l_errl) { break; }
--
--            //Set Product Serial number - ascii formatted data
--            //@fixme RTC Story 118373
--            l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VS, true);
--            if (l_errl) { break; }
--
--            //Set Product Part number - ascii formatted data
--            //@fixme RTC Story 118373
--            l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VP, true);
--            if (l_errl) { break; }
-+        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::DR, true);
-+        if (l_errl) { break; }
- 
--        }
--        else
--        {
--            //Set serial number - ascii formatted field
--            //@fixme RTC Story 118373
--            l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::SS, true);
--            if (l_errl) { break; }
-+        //Set Product Serial number - ascii formatted data
-+        //@fixme RTC Story 118373
-+        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VS, true);
-+        if (l_errl) { break; }
- 
--            //Set chassis part number - ascii formatted field
--            //@fixme RTC Story 118373
--            l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::MM, true);
--            if (l_errl) { break; }
--        }
-+        //Set Product Part number - ascii formatted data
-+        //@fixme RTC Story 118373
-+        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VP, true);
-+        if (l_errl) { break; }
- 
-         //Push Fru File ID Byte - NULL
-         io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-@@ -950,22 +932,19 @@ void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
- {
-     // Create Custom ECID Field
-     // - First put in 'ECID:' to make it obvious what this is
--    uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 5,'E','C','I','D',
--                                   ':', IPMIFRUINV::TYPELENGTH_BYTE_NULL + 16};
-+    uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 21,'E','C','I','D',
-+                                    ':'};
- 
-     // @todo-RTC:124687 - Refactor multiple reallocations
-     io_data.insert( io_data.end(),
-                     &l_data[0],
-                     &l_data[0] + (uint8_t(sizeof(l_data) / sizeof(uint8_t))));
- 
--    uint8_t* l_vDataPtr = (uint8_t*) &i_ecidInfo[0];
--    //Insert first 64 bits of ECID data
--    io_data.insert(io_data.end(),
--                &l_vDataPtr[0], &l_vDataPtr[0]+8);
--    l_vDataPtr = (uint8_t*) &i_ecidInfo[1];
--    //Insert second 64 bits of ECID data
--    io_data.insert(io_data.end(),
--        &l_vDataPtr[0], &l_vDataPtr[0]+8);
-+    char l_ecidAscii[33];
-+    sprintf(l_ecidAscii, "%.16llX%.16llX", i_ecidInfo[0], i_ecidInfo[1]);
-+
-+    uint8_t* l_vDataPtr = (uint8_t*) &l_ecidAscii[0];
-+    io_data.insert(io_data.end(), &l_vDataPtr[0], &l_vDataPtr[0]+16);
- 
-     return;
- }
-diff --git a/src/usr/ipmi/ipmifruinvprvt.H b/src/usr/ipmi/ipmifruinvprvt.H
-index aed5dfc..2573a84 100644
---- a/src/usr/ipmi/ipmifruinvprvt.H
-+++ b/src/usr/ipmi/ipmifruinvprvt.H
-@@ -303,9 +303,11 @@ class isdimmIpmiFruInv : public IpmiFruInv
-      *        record
-      * @param[in/out] data, The container with record data
-      * @param[in] keyword, Indicates where in the VPD to get more data
--
-+     * @param[in] ascii, Indicates if VPD field is in ascii format or not
-      */
--    errlHndl_t addVpdData(std::vector<uint8_t> &io_data, uint8_t i_keyword);
-+    errlHndl_t addVpdData(std::vector<uint8_t> &io_data,
-+                          uint8_t i_keyword,
-+                          bool i_ascii=false);
- 
- };
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0017-Fix-I2C-Reset-to-resolve-I2C-Bus-Arbitration-Lost-Er.patch b/openpower/package/hostboot/hostboot-0017-Fix-I2C-Reset-to-resolve-I2C-Bus-Arbitration-Lost-Er.patch
deleted file mode 100644
index 757f701..0000000
--- a/openpower/package/hostboot/hostboot-0017-Fix-I2C-Reset-to-resolve-I2C-Bus-Arbitration-Lost-Er.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-From 3f630837040bae961612214307d2903e65af9e5d Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Thu, 2 Apr 2015 13:42:00 -0500
-Subject: [PATCH 05/10] Fix I2C Reset to resolve I2C Bus Arbitration Lost
- Errors
-
-This commit fixes 2 bugs where the full "Force Reset and Unlock"
-I2C reset procedure used to both avoid and recover from I2C Bus
-Arbitration Lost errors was not being performed correctly on any
-ports but port 0.
-
-Change-Id: Ie967d81917e9b942d5cb516856075ebdb5029487
-CQ: SW297864
-(cherry picked from commit 01ee7107170c867d25af2485b75307e3bfa87339)
----
- src/include/usr/i2c/i2creasoncodes.H |   1 +
- src/usr/i2c/i2c.C                    | 182 ++++++++++++++++++++++++-----------
- src/usr/i2c/i2c.H                    |   4 +-
- 3 files changed, 130 insertions(+), 57 deletions(-)
-
-diff --git a/src/include/usr/i2c/i2creasoncodes.H b/src/include/usr/i2c/i2creasoncodes.H
-index a63e8d5..454ef15 100644
---- a/src/include/usr/i2c/i2creasoncodes.H
-+++ b/src/include/usr/i2c/i2creasoncodes.H
-@@ -58,6 +58,7 @@ enum i2cModuleId
-     I2C_SETUP_MASTERS                   = 0x08,
-     I2C_SEND_SLAVE_STOP                 = 0x09,
-     I2C_PROCESS_ACTIVE_MASTERS          = 0x0A,
-+    I2C_FORCE_RESET_AND_UNLOCK          = 0x0B,
- };
- 
- 
-diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C
-index bc4bb7b..ee7e5e3 100755
---- a/src/usr/i2c/i2c.C
-+++ b/src/usr/i2c/i2c.C
-@@ -1925,6 +1925,11 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
- {
- 
-     errlHndl_t err = NULL;
-+    mode_reg_t mode;
-+    uint64_t l_speed = I2C_BUS_SPEED_FROM_MRW;
-+
-+    // I2C Bus Speed Array
-+    TARGETING::ATTR_I2C_BUS_SPEED_ARRAY_type speed_array;
- 
-     TRACDCOMP( g_trac_i2c,
-                ENTER_MRK"i2cForceResetAndUnlock()" );
-@@ -1932,62 +1937,122 @@ errlHndl_t i2cForceResetAndUnlock( TARGETING::Target * i_target,
-     do
-     {
- 
--        // enable diagnostic mode
--        // set bit in mode register
--        mode_reg_t diagnostic;
--
--        diagnostic.diag_mode = 0x1;
--
--        err = i2cRegisterOp( DeviceFW::WRITE,
--                             i_target,
--                             &diagnostic.value,
--                             I2C_REG_MODE,
--                             i_args );
--
--        if( err )
-+        // Get I2C Bus Speed Array attribute.  It will be used to determine
-+        // which engine/port combinations have devices on them
-+        if (  !( i_target->tryGetAttr<TARGETING::ATTR_I2C_BUS_SPEED_ARRAY>
-+                                          (speed_array) ) )
-         {
-             TRACFCOMP( g_trac_i2c,
--                       ERR_MRK"I2C Enable Diagnostic mode Failed!!" );
-+                       ERR_MRK"i2cForceResetAndUnlock() - Cannot find "
-+                       "ATTR_I2C_BUS_SPEED_ARRAY needed for operation");
-+            /*@
-+             * @errortype
-+             * @reasoncode     I2C_ATTRIBUTE_NOT_FOUND
-+             * @severity       ERRORLOG_SEV_UNRECOVERABLE
-+             * @moduleid       I2C_FORCE_RESET_AND_UNLOCK
-+             * @userdata1      Target for the attribute
-+             * @userdata2      <UNUSED>
-+             * @devdesc        ATTR_I2C_BUS_SPEED_ARRAY not found
-+             * @custdesc       I2C configuration data missing
-+             */
-+            err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE,
-+                                           I2C_FORCE_RESET_AND_UNLOCK,
-+                                           I2C_ATTRIBUTE_NOT_FOUND,
-+                                           TARGETING::get_huid(i_target),
-+                                           0x0,
-+                                           true /*Add HB SW Callout*/ );
-+
-+            err->collectTrace( I2C_COMP_NAME, 256);
-+
-             break;
-         }
- 
-+        // Need to send slave stop to all ports with a device on the engine
-+        for( uint32_t port = 0; port < P8_MASTER_PORTS; port++ )
-+        {
- 
--        //toggle clock line
--        err = i2cToggleClockLine( i_target,
--                                  i_args );
-+            // Only send stop to a port if there are devices on it
-+            l_speed = speed_array[i_args.engine][port];
-+            if ( l_speed == 0 )
-+            {
-+                continue;
-+            }
- 
--        if( err )
--        {
--            break;
--        }
-+            TRACUCOMP( g_trac_i2c,
-+                       INFO_MRK"i2cForceResetAndUnlock() - Performing op on "
-+                       "engine=%d, port=%d",
-+                       i_args.engine, port);
- 
--        //manually send stop signal
--        err = i2cSendStopSignal( i_target,
--                                  i_args );
-+            // Clear mode register
-+            mode.value = 0x0ull;
- 
--        if( err )
--        {
--            break;
--        }
-+            // set port in mode register
-+            mode.port_num = port;
- 
--        //disable diagnostic mode
--        //set bit in mode register
--        diagnostic.diag_mode = 0x0;
-+            // enable diagnostic mode in mode register
-+            mode.diag_mode = 0x1;
- 
--        err = i2cRegisterOp( DeviceFW::WRITE,
--                             i_target,
--                             &diagnostic.value,
--                             I2C_REG_MODE,
--                             i_args );
-+            err = i2cRegisterOp( DeviceFW::WRITE,
-+                                 i_target,
-+                                 &mode.value,
-+                                 I2C_REG_MODE,
-+                                 i_args );
- 
-+            if( err )
-+            {
-+                TRACFCOMP( g_trac_i2c,
-+                           ERR_MRK"I2C Enable Diagnostic mode Failed!!" );
- 
--        if( err )
--        {
--            TRACFCOMP( g_trac_i2c,
--                       ERR_MRK"I2C disable Diagnostic mode Failed!!" );
--            break;
--        }
- 
-+                // We still need to reset the other ports on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-+            }
-+
-+
-+            //toggle clock line
-+            err = i2cToggleClockLine( i_target,
-+                                      i_args );
-+
-+            if( err )
-+            {
-+                // We still need to reset the other ports on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-+            }
-+
-+            //manually send stop signal
-+            err = i2cSendStopSignal( i_target,
-+                                     i_args );
-+
-+            if( err )
-+            {
-+                // We still need to reset the other ports on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-+            }
-+
-+            // disable diagnostic mode in mode register
-+            mode.diag_mode = 0x0;
-+
-+            err = i2cRegisterOp( DeviceFW::WRITE,
-+                                 i_target,
-+                                 &mode.value,
-+                                 I2C_REG_MODE,
-+                                 i_args );
-+
-+
-+            if( err )
-+            {
-+                TRACFCOMP( g_trac_i2c,
-+                           ERR_MRK"I2C disable Diagnostic mode Failed!!" );
-+                // We still need to reset the other ports on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-+            }
-+
-+
-+        } // end of port for loop
- 
-     }while(0);
- 
-@@ -2036,8 +2101,10 @@ errlHndl_t i2cReset ( TARGETING::Target * i_target,
- 
-             if( err )
-             {
--                //error trying to force a reset break
--                break;
-+                // We still want to send the slave stop command since the
-+                // initial reset completed above.
-+                // So just commit the log here and let the function continue.
-+                errlCommit( err, I2C_COMP_ID );
-             }
-         }
- 
-@@ -2114,13 +2181,6 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
-         // Need to send slave stop to all ports with a device on the engine
-         for( uint32_t port = 0; port < P8_MASTER_PORTS; port++ )
-         {
--            // Only do port 0 for FSI I2C
--            if ( ( i_args.switches.useFsiI2C == 1 ) &&
--                 ( port != 0 ) )
--            {
--                break;
--            }
--
-             // Only send stop to a port if there are devices on it
-             l_speed = speed_array[i_args.engine][port];
-             if ( l_speed == 0 )
-@@ -2139,7 +2199,10 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
-                                        i_args );
-             if( err )
-             {
--                break;
-+                // We still need to send the slave stop to the other ports
-+                // on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-             }
- 
-             mode.bit_rate_div = i_args.bit_rate_divisor;
-@@ -2156,7 +2219,10 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
- 
-             if( err )
-             {
--                break;
-+                // We still need to send the slave stop to the other ports
-+                // on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-             }
- 
-             cmd.value = 0x0ull;
-@@ -2174,7 +2240,10 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
- 
-             if( err )
-             {
--                break;
-+                // We still need to send the slave stop to the other ports
-+                // on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-             }
- 
-             // Now wait for cmd Complete
-@@ -2183,7 +2252,10 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
- 
-             if( err )
-             {
--                break;
-+                // We still need to send the slave stop to the other ports
-+                // on this I2C engine
-+                errlCommit( err, I2C_COMP_ID );
-+                continue;
-             }
- 
-         } // end of port for-loop
-diff --git a/src/usr/i2c/i2c.H b/src/usr/i2c/i2c.H
-index c3e5278..4a74663 100755
---- a/src/usr/i2c/i2c.H
-+++ b/src/usr/i2c/i2c.H
-@@ -723,8 +723,8 @@ errlHndl_t i2cSendStopSignal(TARGETING::Target * i_target,
- 
- /**
-  * @brief This function will reset the I2C Master engine specified
-- *      by the args.  It will also then initiate a Stop cmd to the
-- *      slave device.
-+ *      by the args.  It will also end the sequence by initiating a Stop
-+ *      cmd to all ports on the engine that have a slave device.
-  *
-  * @param[in] i_target - The I2C master target.
-  *
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0018-Fix-constant-refresh-of-vpd-cache.patch b/openpower/package/hostboot/hostboot-0018-Fix-constant-refresh-of-vpd-cache.patch
deleted file mode 100644
index ac16f09..0000000
--- a/openpower/package/hostboot/hostboot-0018-Fix-constant-refresh-of-vpd-cache.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 5f06da05527c3ef2d9ee709e912c5840eb366e87 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Thu, 2 Apr 2015 12:29:45 -0500
-Subject: [PATCH 04/10] Fix constant refresh of vpd cache
-
-Code was inadvertantly detecting mismatched pnor cache contents
-on every boot.
-
-Change-Id: I631dc758e03316a28d13f6d19032c1a76e3cffc1
-(cherry picked from commit 0d95414e03ff337404a3e20fd421fd8b4272ebc5)
----
- src/usr/vpd/ipvpd.C | 18 ++++++++++++------
- src/usr/vpd/ipvpd.H |  5 ++++-
- src/usr/vpd/vpd.C   |  2 +-
- 3 files changed, 17 insertions(+), 8 deletions(-)
-
-diff --git a/src/usr/vpd/ipvpd.C b/src/usr/vpd/ipvpd.C
-index a0682d2..2cefb6e 100644
---- a/src/usr/vpd/ipvpd.C
-+++ b/src/usr/vpd/ipvpd.C
-@@ -397,6 +397,9 @@ errlHndl_t IpVpdFacade::cmpPnorToSeeprom ( TARGETING::Target * i_target,
-                     l_dataSeeprom,
-                     l_sizePnor ) != 0 )
-         {
-+            TRACFCOMP( g_trac_vpd, "cmpPnorToSeeprom found mismatch for HUID %.8X 0x%X:0x%X", TARGETING::get_huid(i_target), i_record, i_keyword );
-+            TRACFBIN( g_trac_vpd, "EEPROM", l_dataSeeprom, l_sizeSeeprom );
-+            TRACFBIN( g_trac_vpd, "PNOR", l_dataPnor, l_sizePnor );
-             break;
-         }
- 
-@@ -898,8 +901,9 @@ bool IpVpdFacade::hasVpdPresent( TARGETING::Target * i_target,
-         }
- 
-         vpdPresent = recordPresent( recordName,
--                                recordOffset,
--                                i_target );
-+                                    recordOffset,
-+                                    i_target,
-+                                    VPD::AUTOSELECT );
- 
-     }while( 0 );
- 
-@@ -918,7 +922,8 @@ bool IpVpdFacade::hasVpdPresent( TARGETING::Target * i_target,
- // ------------------------------------------------------------------
- bool IpVpdFacade::recordPresent( const char * i_record,
-                                  uint16_t & o_offset,
--                                 TARGETING::Target * i_target )
-+                                 TARGETING::Target * i_target,
-+                                 VPD::vpdCmdTarget i_location )
- {
-     errlHndl_t err = NULL;
-     uint64_t tmpOffset = 0x0;
-@@ -946,7 +951,7 @@ bool IpVpdFacade::recordPresent( const char * i_record,
-                              RECORD_BYTE_SIZE,
-                              record,
-                              i_target,
--                             VPD::AUTOSELECT );
-+                             i_location );
-             tmpOffset += RECORD_BYTE_SIZE;
- 
-             if( err )
-@@ -963,7 +968,7 @@ bool IpVpdFacade::recordPresent( const char * i_record,
-                                  RECORD_ADDR_BYTE_SIZE,
-                                  &o_offset,
-                                  i_target,
--                                 VPD::AUTOSELECT );
-+                                 i_location );
-                 if( err )
-                 {
-                     break;
-@@ -1003,7 +1008,8 @@ errlHndl_t IpVpdFacade::findRecordOffsetPnor ( const char * i_record,
- 
-     matchFound = recordPresent( i_record,
-                                 offset,
--                                i_target );
-+                                i_target,
-+                                i_args.location );
- 
-     if( !matchFound )
-     {
-diff --git a/src/usr/vpd/ipvpd.H b/src/usr/vpd/ipvpd.H
-index 2350bdd..7c2090c 100644
---- a/src/usr/vpd/ipvpd.H
-+++ b/src/usr/vpd/ipvpd.H
-@@ -353,11 +353,14 @@ class IpVpdFacade
-      *
-      * @param[in] i_target - The target to retrieve the data for.
-      *
-+     * @param[in] i_location - VPD location to fetch data from (PNOR/SEEPROM)
-+     *
-      * @return bool - True if the record is found, False otherwise.
-      */
-     bool recordPresent( const char * i_record,
-                         uint16_t & offset,
--                        TARGETING::Target * i_target );
-+                        TARGETING::Target * i_target,
-+                        VPD::vpdCmdTarget i_location );
- 
-     /**
-      * @brief This function will read the VPD TOC to find the offset where the
-diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C
-index 3533af9..963025f 100755
---- a/src/usr/vpd/vpd.C
-+++ b/src/usr/vpd/vpd.C
-@@ -533,7 +533,7 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
-         // If we did not match, we need to load SEEPROM VPD data into PNOR
-         if( l_matchPN && l_matchSN )
-         {
--            TRACFCOMP(g_trac_vpd,"VPD::ensureCacheIsInSync: PNOR_PN/SN = SEEPROM_PN/SN for target %.8X",TARGETING::get_huid(i_target));
-+            TRACFCOMP(g_trac_vpd,"VPD::ensureCacheIsInSync: PNOR_PN/SN == SEEPROM_PN/SN for target %.8X",TARGETING::get_huid(i_target));
-         }
-         else
-         {
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0019-Fix-TX_MSBSWAP-attribute-for-Firestone.patch b/openpower/package/hostboot/hostboot-0019-Fix-TX_MSBSWAP-attribute-for-Firestone.patch
deleted file mode 100644
index fbdfbda..0000000
--- a/openpower/package/hostboot/hostboot-0019-Fix-TX_MSBSWAP-attribute-for-Firestone.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 42ad0709dfe4c053498660fe9bc884126082c2d6 Mon Sep 17 00:00:00 2001
-From: Norman James <njames@us.ibm.com>
-Date: Tue, 17 Mar 2015 23:49:24 -0500
-Subject: [PATCH] Serverwiz2: TX_MSBSWAP and PEER_PATH fix
-
-Change-Id: I733f9c09837482469365b4de533f3560d049d0a6
----
- src/usr/targeting/common/Targets.pm    |  7 +++++++
- src/usr/targeting/common/processMrw.pl | 29 ++++++++++++++++-------------
- 2 files changed, 23 insertions(+), 13 deletions(-)
-
-diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
-index 29f6bcb..ea5ffde 100644
---- a/src/usr/targeting/common/Targets.pm
-+++ b/src/usr/targeting/common/Targets.pm
-@@ -338,8 +338,15 @@ sub buildHierarchy
-     {
-         foreach my $b (@{ $target_xml->{bus} })
-         {
-+            if (ref($b->{dest_path}) eq "HASH") {
-+                $b->{dest_path}="";
-+            }
-+            if (ref($b->{source_path}) eq "HASH") {
-+                $b->{source_path}="";
-+            }
-             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(
-diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
-index 691cbcb..7133534 100644
---- a/src/usr/targeting/common/processMrw.pl
-+++ b/src/usr/targeting/common/processMrw.pl
-@@ -667,11 +667,15 @@ sub processAbus
-     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","");
--
-+    if ($targetObj->isBadAttribute($target, "PEER_PATH"))
-+    {
-+        $targetObj->setAttribute($target, "PEER_PATH","physical:na");
-+    }
-+    $targetObj->setAttribute($target, "EI_BUS_TX_LANE_INVERT","0");
-+    if ($targetObj->isBadAttribute($target, "EI_BUS_TX_MSBSWAP"))
-+    {
-+        $targetObj->setAttribute($target, "EI_BUS_TX_MSBSWAP","0");
-+    }
-     my $abus_child_conn = $targetObj->getFirstConnectionDestination($target);
-     if ($abus_child_conn ne "")
-     {
-@@ -787,12 +791,12 @@ sub processPcie
- 
-     #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}{'10'}=$t[1];
-+    $iop_swap{0}{0}{'01'}=$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}{'10'}=$t[5];
-+    $iop_swap{0}{1}{'01'}=$t[6];
-     $iop_swap{0}{1}{'11'}=$t[7];
- 
-     $iop_swap{1}{0}{'00'}=$t[8];
-@@ -800,8 +804,8 @@ sub processPcie
-     $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}{'10'}=$t[13];
-+    $iop_swap{1}{1}{'01'}=$t[14];
-     $iop_swap{1}{1}{'11'}=$t[15];
- 
-     my @lane_eq;
-@@ -958,13 +962,12 @@ 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};
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0021-Fix-more-than-2-PT-keywords-in-MVPD-VTOC.patch b/openpower/package/hostboot/hostboot-0021-Fix-more-than-2-PT-keywords-in-MVPD-VTOC.patch
deleted file mode 100644
index 2e8a811..0000000
--- a/openpower/package/hostboot/hostboot-0021-Fix-more-than-2-PT-keywords-in-MVPD-VTOC.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From d64701a8932f53511485f23b8acfb9c564b72297 Mon Sep 17 00:00:00 2001
-From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Wed, 15 Apr 2015 14:51:11 -0500
-Subject: [PATCH] Fix for firestone vpd cache
-
-Change-Id: Ica112e3d5d131b0171b7b54d85a3810582a08e27
----
- src/usr/vpd/ipvpd.C | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/usr/vpd/ipvpd.C b/src/usr/vpd/ipvpd.C
-index b409c50..3738c61 100644
---- a/src/usr/vpd/ipvpd.C
-+++ b/src/usr/vpd/ipvpd.C
-@@ -1333,7 +1333,7 @@ IpVpdFacade::getRecordListSeeprom ( std::list<TocPtRecord> & o_recList,
-     offset = le16toh( toc_rec->record_offset ) + 1;  // skip 'large resource'
- 
-     // Read the PT keyword(s) from the VTOC
--    for (uint16_t index = 0; index < 2; ++index)
-+    for (uint16_t index = 0; index < 3; ++index)
-     {
-         pt_len = sizeof(l_buffer);
-         err = retrieveKeyword( "PT",
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index aa689ce..5f423da 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= f18b0d9ab1a518dc5556bb01b264b67ad63f6f00
+HOSTBOOT_VERSION ?= 6bdbe42ee0a2808be1f2f38026e57290cdfa8fc6
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
