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
