diff --git a/openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch b/openpower/package/hostboot/hostboot-0003-mss_thermal_undo.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch
rename to openpower/package/hostboot/hostboot-0003-mss_thermal_undo.patch
diff --git a/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch b/openpower/package/hostboot/hostboot-0004-targeting-support-for-backplane-VPD.patch
similarity index 94%
rename from openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
rename to openpower/package/hostboot/hostboot-0004-targeting-support-for-backplane-VPD.patch
index 5779f22..edd4941 100644
--- a/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
+++ b/openpower/package/hostboot/hostboot-0004-targeting-support-for-backplane-VPD.patch
@@ -5,7 +5,7 @@
 
 Only the targeting support required by "Updated VPD_REC_NUM numbering"
 
-Change-Id: Ifa095f719b35de2cfae9344496dee63aea190334
+Change-Id: I24cda4d713806330a9f61d588006d63966f92550
 RTC: 118373
 ---
  src/usr/targeting/common/xmltohb/target_types.xml | 2 ++
diff --git a/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch b/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
deleted file mode 100644
index 6f1b80c..0000000
--- a/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
+++ /dev/null
@@ -1,350 +0,0 @@
-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] Add PNOR Version Information to IPMI Fru Inventory
-
-Change-Id: Ib49fe67e9c6631b2b7ea0005e692c9aea6d84057
-RTC:123353
----
- src/usr/ipmi/ipmifruinv.C                          | 207 +++++++++++++++++++++
- src/usr/ipmi/ipmifruinvprvt.H                      |  47 +++++
- .../targeting/common/xmltohb/attribute_types.xml   |   8 +
- src/usr/targeting/common/xmltohb/target_types.xml  |   1 +
- 4 files changed, 263 insertions(+)
-
-diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
-index 4f0d7d7..aaf62d1 100644
---- a/src/usr/ipmi/ipmifruinv.C
-+++ b/src/usr/ipmi/ipmifruinv.C
-@@ -37,6 +37,7 @@
- #include "ipmifruinvprvt.H"
- #include <stdio.h>
- #include <assert.h>
-+#include <pnor/pnorif.H>
- 
- extern trace_desc_t * g_trac_ipmi;
- 
-@@ -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;
-+        case TARGETING::TYPE_SYS:
-+            // Use sys target for setting System Firmware Info
-+            l_fru = new systemFwIpmiFruInv(l_target);
-+            break;
-         default:
-             assert(false,
-                 "IpmiFruInv::Factory: No support for target type given: [%08x]",
-@@ -927,6 +932,199 @@ errlHndl_t backplaneIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
-     return l_errl;
- }
- 
-+//##############################################################################
-+systemFwIpmiFruInv::systemFwIpmiFruInv( TARGETING::TargetHandle_t i_target )
-+    :IpmiFruInv(i_target)
-+{
-+
-+};
-+
-+errlHndl_t systemFwIpmiFruInv::buildInternalUseArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for proc type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildChassisInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildBoardInfoArea(std::vector<uint8_t> &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildProductInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    errlHndl_t l_errl = NULL;
-+
-+    do {
-+        //Set formatting data that goes at the beginning of the record
-+        preFormatProcessing(io_data, true);
-+
-+        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};
-+
-+        io_data.insert( io_data.end(),
-+                    &l_data[0],
-+                    &l_data[0] + (uint8_t(sizeof(l_data) / sizeof(uint8_t))));
-+
-+        //Get PNOR Version Here
-+        PNOR::SectionInfo_t l_pnorInfo;
-+        l_errl = getSectionInfo( PNOR::VERSION , l_pnorInfo);
-+        if (l_errl) { break; }
-+
-+        uint8_t* l_versionData = reinterpret_cast<uint8_t*>( l_pnorInfo.vaddr );
-+        //Total Bytes in PNOR Version String
-+        uint8_t l_numBytes = 0;
-+        uint8_t l_curOffset = 0;
-+
-+        //Total Number of fields needed to print PNOR Version String
-+        uint8_t l_numFields = 0;
-+        bool l_clearStandardFields = true;
-+
-+        //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 newline chars
-+        while ((l_numBytes < IPMIFRUINV::MAX_RECORD_SIZE -
-+                              (uint8_t(sizeof(l_data) / sizeof(uint8_t))) -
-+                              IPMIFRUINV::COMMON_HEADER_FORMAT_SIZE - 8)
-+                               && (((char)(l_versionData[l_numBytes])) != '\0'))
-+        {
-+
-+            if (((char)(l_versionData[l_numBytes])) == '\n')
-+            {
-+
-+                if (l_numBytes > l_curOffset)
-+                {
-+                    //Add on size of this field to the data buffer
-+                    io_data.push_back(
-+                         IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                           + (l_numBytes-l_curOffset));
-+
-+                    io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(l_curOffset),
-+                       &l_versionData[0]+(l_numBytes));
-+                }
-+
-+                //Null data for standard fields needs to be indicated once after
-+                // the first segment of data is displayed to match the
-+                // ipmi fru spec
-+                if (l_clearStandardFields)
-+                {
-+                    //Add Empty Asset Tag
-+                    io_data.push_back(uint8_t(0));
-+                    //FRU File ID - Empty
-+                    io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-+                    io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+                    l_clearStandardFields = false;
-+                }
-+
-+                //Increment past the newline char
-+                l_curOffset = l_numBytes + 1;
-+            }
-+            l_numBytes++;
-+        }
-+
-+        if (l_curOffset == 0)
-+        {
-+            //Calculate the number of fields required to display this data
-+            //  given only MAX_ASCII_FIELD_SIZE bytes can be in any one given
-+            //  IPMI fru inventory field
-+            l_numFields = l_numBytes / IPMIFRUINV::MAX_ASCII_FIELD_SIZE;
-+            if (l_numBytes % IPMIFRUINV::MAX_ASCII_FIELD_SIZE)
-+            {
-+                l_numFields += 1;
-+            }
-+
-+            //Count by number of fields, adding the data to the buffer as
-+            // we go.
-+            for (uint8_t i=0; i < l_numFields; i++)
-+            {
-+                //Determine the data size for this particular field
-+                uint8_t l_dataSize=IPMIFRUINV::MAX_ASCII_FIELD_SIZE;
-+                if (i == l_numFields - 1)
-+                {
-+                    l_dataSize = l_numBytes -
-+                           (i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE);
-+                }
-+
-+                //Add on size of this field to the data buffer
-+                io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                                         + l_dataSize);
-+
-+                //Insert this segment of version string data
-+                io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE),
-+                       &l_versionData[0]+(i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE)
-+                                        +l_dataSize);
-+
-+                //Null data for standard fields needs to be indicated once after
-+                // the first segment of data is displayed to match the
-+                // ipmi fru spec
-+                if (l_clearStandardFields)
-+                {
-+                    //Add Empty Asset Tag
-+                    io_data.push_back(uint8_t(0));
-+                    //FRU File ID - Empty
-+                    io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-+                    //io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+                    l_clearStandardFields = false;
-+                }
-+
-+            }
-+        }
-+        else
-+        {
-+            if (l_numBytes > l_curOffset)
-+            {
-+                io_data.push_back( IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                        + (l_numBytes-l_curOffset));
-+
-+                io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(l_curOffset),
-+                       &l_versionData[0]+(l_numBytes));
-+            }
-+
-+        }
-+
-+        if (l_clearStandardFields)
-+        {
-+            //Add Asset Tag
-+            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);
-+            //io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+        }
-+
-+        io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
-+
-+        //Finalize section formatting
-+        postFormatProcessing(io_data);
-+
-+    } while(0);
-+
-+    return l_errl;
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildMultiRecordInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+
-+
- void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
-                              const TARGETING::ATTR_ECID_type& i_ecidInfo,
-                              std::vector<uint8_t> &io_data)
-@@ -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);
-+        if (hasSystemFwFruId)
-+        {
-+            l_potentialFrus.push_back(std::make_pair(pSys, l_systemFwFruId));
-+        }
-+
-         // Find list of all target types that may need a fru inv. record set
-         IPMIFRUINV::gatherSetData(pSys, frusToClear,
-                                      l_potentialFrus, i_updateData);
-diff --git a/src/usr/ipmi/ipmifruinvprvt.H b/src/usr/ipmi/ipmifruinvprvt.H
-index 2573a84..468a47f 100644
---- a/src/usr/ipmi/ipmifruinvprvt.H
-+++ b/src/usr/ipmi/ipmifruinvprvt.H
-@@ -42,6 +42,8 @@ namespace IPMIFRUINV
-         COMMON_HEADER_FORMAT_SIZE     = 8, //size in bytes
-         DEFAULT_CHASSIS_TYPE          = 0x05,
-         DEFAULT_FRU_OFFSET            = 0,
-+        MAX_ASCII_FIELD_SIZE          = 0x3F, //size in bytes
-+        MAX_RECORD_SIZE               = 0xFF, //size in bytes
-     };
- };
- 
-@@ -460,4 +462,49 @@ class backplaneIpmiFruInv : public IpmiFruInv
- 
- };
- 
-+//Child class for building up System Firwmare Fru Inventory Record Data
-+class systemFwIpmiFruInv : public IpmiFruInv
-+{
-+
-+  public:
-+    /**
-+    * @brief Constructor
-+    *
-+    * @param[in] TargetHandle_t, Handle to target for which
-+    *             to get relevant IPMI FRU Data from
-+    */
-+    systemFwIpmiFruInv( TARGETING::TargetHandle_t i_target);
-+
-+    /**
-+     * @brief Builds the Internal Use Area Data Section
-+     * @param[in/out] data, The container to put internal use area data in
-+     */
-+    errlHndl_t buildInternalUseArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Chassis Info Area Data Section
-+     * @param[in/out] data, The container to put chassis info area data in
-+     */
-+    errlHndl_t buildChassisInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Board Info Area Data Section
-+     * @param[in/out] data, The container to put board info area data in
-+     */
-+    errlHndl_t buildBoardInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Product Info Area Data Section
-+     * @param[in/out] data, The container to put product info area data in
-+     */
-+    errlHndl_t buildProductInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the MultiRecord Info Area Data Section
-+     * @param[in/out] data, The container to put multirecord info area data in
-+     */
-+    errlHndl_t buildMultiRecordInfoArea(std::vector<uint8_t> &io_data);
-+
-+};
-+
- #endif
-diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
-index ec256de..17729cd 100644
---- a/src/usr/targeting/common/xmltohb/attribute_types.xml
-+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
-@@ -11659,6 +11659,14 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
- </attribute>
- 
- <attribute>
-+    <id>BMC_FRU_ID</id>
-+    <description>BMC FRU ID attribute for node class</description>
-+    <simpleType><uint32_t><default>0</default></uint32_t></simpleType>
-+    <persistency>non-volatile</persistency>
-+    <readable/>
-+</attribute>
-+
-+<attribute>
-     <id>PLCK_IPL_ATTR_OVERRIDES_EXIST</id>
-     <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 15d7921..82ec014 100644
---- a/src/usr/targeting/common/xmltohb/target_types.xml
-+++ b/src/usr/targeting/common/xmltohb/target_types.xml
-@@ -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>
-+    <attribute><id>BMC_FRU_ID</id></attribute>
- </targetType>
- 
- <targetType>
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0006-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
deleted file mode 100644
index 06e4730..0000000
--- a/openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From d6882c71233b9c4b2fb801c4f3e588b47c2c73bc Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Wed, 1 Apr 2015 11:07:42 -0500
-Subject: [PATCH] Move slave sbe start before proc_cen_ref_clk_enable
-
-The proc_cen_ref_clk_enable step contains scoms to the processor
-that do not work if the proc hasn't run through its sbe code yet.
-
-Change-Id: I7665992a01bd66a37cd5e79aa2bb2142a304a8f4
----
- src/include/usr/isteps/istep06list.H | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H
-index 6adb784..6a26b2a 100644
---- a/src/include/usr/isteps/istep06list.H
-+++ b/src/include/usr/isteps/istep06list.H
-@@ -68,12 +68,12 @@ namespace   INITSERVICE
-  *      :   Clear deconfigured states
-  *  06.8    proc_revert_sbe_mcs_setup
-  *      :   Clean up MCS extent regs
-- *  06.9    proc_cen_ref_clk_enable
-- *      :   Setup centaur ref clocks
-- *  06.10    host_slave_sbe_config
-+ *  06.10   host_slave_sbe_config
-  *  06.11   host_sbe_start
-  *  06.12   proc_check_slave_sbe_seeprom_complete
-  *        : Check Slave SBE Complete
-+ *  06.9    proc_cen_ref_clk_enable
-+ *      :   Setup centaur ref clocks
-  *  06.13   proc_xmit_sbe
-  *        : vSBE Init of Slave Chips
-  *
-@@ -127,11 +127,6 @@ const   TaskInfo    g_istep06[]  =   {
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-         },
-         {
--                ISTEPNAME(06,09,"proc_cen_ref_clk_enable"),
--                SLAVE_SBE::call_proc_cen_ref_clk_enable,
--                { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
--        },
--        {
-                 ISTEPNAME(06,10,"host_slave_sbe_config"),
-                 SLAVE_SBE::call_host_slave_sbe_config,
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-@@ -147,6 +142,11 @@ const   TaskInfo    g_istep06[]  =   {
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
-         },
-         {
-+                ISTEPNAME(06,09,"proc_cen_ref_clk_enable"),
-+                SLAVE_SBE::call_proc_cen_ref_clk_enable,
-+                { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-+        },
-+        {
-                 ISTEPNAME(06,13,"proc_xmit_sbe"),
-                 SLAVE_SBE::call_proc_xmit_sbe,
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
--- 
-1.8.2.2
-
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
deleted file mode 100644
index 8a14eda..0000000
--- a/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index 8f8a15e..0000000
--- a/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-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-0010-PRD-getBusEndpoints-parameter-issue.patch b/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
deleted file mode 100644
index 07a64bb..0000000
--- a/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 82374feb7e8ee67f254b7d8ec657a9239b622975 Mon Sep 17 00:00:00 2001
-From: Zane Shelley <zshelle@us.ibm.com>
-Date: Thu, 23 Apr 2015 11:18:12 -0500
-Subject: [PATCH 1/2] PRD: getBusEndpoints() parameter issue
-
-Change-Id: I947eeb506337f9c2fb8f845bbe04a20fb8b62bde
-CQ: SW304932
----
- .../prdf/common/plat/pegasus/prdfCalloutUtil.C     |    2 +-
- .../prdf/common/plat/pegasus/prdfCalloutUtil.H     |    4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-index f09ec6c..67941d6 100644
---- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-@@ -229,7 +229,7 @@ TargetHandleList getConnectedDimms( TargetHandle_t i_mba,
- //------------------------------------------------------------------------------
- 
- int32_t getBusEndpoints( ExtensibleChip * i_chip,
--                         TargetHandle_t o_rxTrgt, TargetHandle_t o_txTrgt,
-+                         TargetHandle_t & o_rxTrgt, TargetHandle_t & o_txTrgt,
-                          TYPE i_busType, uint32_t i_busPos )
- {
-     #define PRDF_FUNC "[CalloutUtil::getBusEndpoints] "
-diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-index fa3e843..502467b 100644
---- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-@@ -136,8 +136,8 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba,
-  *
-  */
- int32_t getBusEndpoints( ExtensibleChip * i_chip,
--                         TARGETING::TargetHandle_t o_rxTrgt,
--                         TARGETING::TargetHandle_t o_txTrgt,
-+                         TARGETING::TargetHandle_t & o_rxTrgt,
-+                         TARGETING::TargetHandle_t & o_txTrgt,
-                          TARGETING::TYPE i_busType = TARGETING::TYPE_NA,
-                          uint32_t i_busPos = 0 );
- 
--- 
-1.7.9.5
-
diff --git a/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch b/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch
deleted file mode 100644
index 02202c3..0000000
--- a/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch
+++ /dev/null
@@ -1,260 +0,0 @@
-From 3b397cfb77ca5315f6403874ad10534e5f42f8a6 Mon Sep 17 00:00:00 2001
-From: Corey Swenson <cswenson@us.ibm.com>
-Date: Tue, 14 Apr 2015 13:47:12 -0500
-Subject: [PATCH 1/2] Fix for Bad DQ Bitmap spare byte triggering false DRAM
- repairs
-
-Change-Id: I6b443fc7c05d1fda1f97d180e317ac8a93eb77ad
-RTC: 125477
----
- src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C | 122 ++++++++++++++++++++++------
- 1 file changed, 99 insertions(+), 23 deletions(-)
-
-diff --git a/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C b/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-index 4c61ab8..98f9bf9 100644
---- a/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-+++ b/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2012,2014                        */
-+/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -22,7 +22,7 @@
- /* permissions and limitations under the License.                         */
- /*                                                                        */
- /* IBM_PROLOG_END_TAG                                                     */
--// $Id: dimmBadDqBitmapAccessHwp.C,v 1.15 2014/03/27 20:55:12 whs Exp $
-+// $Id: dimmBadDqBitmapAccessHwp.C,v 1.16 2015/04/22 20:09:16 cswenson Exp $
- /**
-  *  @file dimmBadDqBitmapAccessHwp.C
-  *
-@@ -53,6 +53,7 @@
-  *                          whs         02/24/2014  Capture bad DQs as FFDC
-  *                                                  in mnfg error logs
-  *                          whs         03/27/2014  fix current FFDC bit map
-+ *                          cswenson    04/22/2014  fix spare byte translate
-  */
- 
- #include <dimmBadDqBitmapAccessHwp.H>
-@@ -78,23 +79,19 @@ extern "C"
- {
- 
- /**
-- * @brief Called by dimmBadDqBitmapAccessHwp() to query ATTR_EFF_DIMM_SPARE
-- * and set bits for unconnected spare DRAM in caller's data.
-+ * @brief Returns bits for unconnected spare DRAM.
-  *
-  *
-  * @param[in] i_mba       Reference to MBA Target.
-  * @param[in] i_dimm      Reference to DIMM Target.
-- * @param[o]  o_data      Reference to Bad DQ Bitmap set by
-- *                        the caller.  Only the SPARE_DRAM_DQ_BYTE_NUMBER_INDEX
-- *                        byte is modified by this function.
-+ * @param[o]  o_spareByte Reference to the spare byte returned to caller.
-  *
-  * @return ReturnCode
-  */
--
--fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-+fapi::ReturnCode dimmGetDqBitmapSpareByte(
-     const fapi::Target & i_mba,
-     const fapi::Target & i_dimm,
--    uint8_t (&o_data)[DIMM_DQ_MAX_DIMM_RANKS][DIMM_DQ_RANK_BITMAP_SIZE])
-+    uint8_t (&o_spareByte)[DIMM_DQ_MAX_DIMM_RANKS])
- {
-     fapi::ReturnCode l_rc;
- 
-@@ -108,7 +105,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_VPD_DIMM_SPARE, &i_mba, l_mbaSpare);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting DRAM Spare data");
-             break;
-         }
-@@ -117,7 +114,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_MBA_PORT, &i_dimm, l_mbaPort);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting MBA port number");
-             break;
-         }
-@@ -126,7 +123,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_MBA_DIMM, &i_dimm, l_dimm);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting dimm number");
-             break;
-         }
-@@ -139,20 +136,21 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE:
-                     // Set DQ bits reflecting unconnected
-                     // spare DRAM in caller's data
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] = 0xFF;
-+                    o_spareByte[i] = 0xFF;
-                     break;
- 
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_LOW_NIBBLE:
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= 0x0F;
-+                    o_spareByte[i] = 0x0F;
-                     break;
- 
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_HIGH_NIBBLE:
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= 0xF0;
-+                    o_spareByte[i] = 0xF0;
-                     break;
- 
-                 // As erroneous value will not be encountered.
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE:
-                 default:
-+                    o_spareByte[i] = 0x0;
-                     break;
-             }
-         }
-@@ -161,6 +159,45 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
- }
- 
- /**
-+ * @brief Called by dimmBadDqBitmapAccessHwp() to query ATTR_EFF_DIMM_SPARE
-+ * and set bits for unconnected spare DRAM in caller's data.
-+ *
-+ *
-+ * @param[in] i_mba       Reference to MBA Target.
-+ * @param[in] i_dimm      Reference to DIMM Target.
-+ * @param[o]  o_data      Reference to Bad DQ Bitmap set by
-+ *                        the caller.  Only the SPARE_DRAM_DQ_BYTE_NUMBER_INDEX
-+ *                        byte is modified by this function.
-+ *
-+ * @return ReturnCode
-+ */
-+
-+fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-+    const fapi::Target & i_mba,
-+    const fapi::Target & i_dimm,
-+    uint8_t (&o_data)[DIMM_DQ_MAX_DIMM_RANKS][DIMM_DQ_RANK_BITMAP_SIZE])
-+{
-+    fapi::ReturnCode l_rc;
-+
-+    uint8_t spareByte[DIMM_DQ_MAX_DIMM_RANKS];
-+    memset(spareByte, 0, sizeof(spareByte));
-+
-+    l_rc = dimmGetDqBitmapSpareByte(i_mba,i_dimm,spareByte);
-+    if (l_rc)
-+    {
-+        FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+                 "Error getting spare byte");
-+        return l_rc;
-+    }
-+
-+    for (uint32_t i=0; i<DIMM_DQ_MAX_DIMM_RANKS; i++)
-+    {
-+        o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= spareByte[i];
-+    }
-+    return l_rc;
-+}
-+
-+/**
-  * @brief Called by dimmBadDqBitmapAccessHwp() to query
-  * ATTR_SPD_MODULE_MEMORY_BUS_WIDTH in order to determine
-  * ECC support for this DIMM.  This function will set
-@@ -472,8 +509,13 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-     uint8_t (l_prev_data)[DIMM_DQ_MAX_DIMM_RANKS]
-                          [DIMM_DQ_RANK_BITMAP_SIZE];
-     bool badDQSet = false;
--    dimmBadDqBitmapGet(i_mba, i_dimm, l_prev_data, i_wiringData,
--                       i_allMnfgFlags);
-+    l_rc = dimmBadDqBitmapGet(i_mba, i_dimm, l_prev_data, i_wiringData,
-+                              i_allMnfgFlags);
-+    if (l_rc)
-+    {
-+        FAPI_ERR("dimmBadDqBitmapAccessHwp: Error getting DQ bitmap");
-+        return l_rc;
-+    }
- 
-     // Check if Bad DQ bit set
-     for (uint8_t i = 0; i < DIMM_DQ_MAX_DIMM_RANKS; i++)
-@@ -654,6 +696,18 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-         l_pSpdData->iv_reserved3 = 0;
-         memset(l_pSpdData->iv_bitmaps, 0, sizeof(l_pSpdData->iv_bitmaps));
- 
-+        // Get the spare byte
-+        uint8_t spareByte[DIMM_DQ_MAX_DIMM_RANKS];
-+        memset(spareByte, 0, sizeof(spareByte));
-+
-+        l_rc = dimmGetDqBitmapSpareByte(i_mba,i_dimm,spareByte);
-+        if (l_rc)
-+        {
-+            FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                    "Error getting spare byte");
-+            break;
-+        }
-+
-         // Translate bitmap from Centaur DQ to DIMM DQ point of view for
-         // each rank
-         for (uint8_t i = 0; i < DIMM_DQ_MAX_DIMM_RANKS; i++)
-@@ -661,6 +715,16 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-             // Iterate through all the DQ bits in the rank
-             for (uint8_t j = 0; j < DIMM_DQ_NUM_DQS; j++)
-             {
-+                if ((j/8) == SPARE_DRAM_DQ_BYTE_NUMBER_INDEX)
-+                {
-+                    // The spareByte can be one of: 0x00 0x0F 0xF0 0xFF
-+                    // If a bit is set, then that spare is unconnected
-+                    // so continue to the next num_dqs, do not translate
-+                    if (spareByte[i] & (0x80 >> (j % 8)))
-+                    {
-+                        continue;
-+                    }
-+                }
-                 if ((i_data[i][j/8]) & (0x80 >> (j % 8)))
-                 {
-                     // Centaur DQ bit set in callers data.
-@@ -747,13 +811,25 @@ fapi::ReturnCode dimmBadDqBitmapAccessHwp(
- 
-         if (i_get)
-         {
--            dimmBadDqBitmapGet(i_mba, i_dimm, io_data, l_wiringData,
--                               l_allMnfgFlags);
-+            l_rc = dimmBadDqBitmapGet(i_mba, i_dimm, io_data, l_wiringData,
-+                                      l_allMnfgFlags);
-+            if (l_rc)
-+            {
-+                FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                        "Error getting DQ bitmap");
-+                break;
-+            }
-         }
-         else
-         {
--            dimmBadDqBitmapSet(i_mba, i_dimm, io_data, l_wiringData,
--                               l_allMnfgFlags);
-+            l_rc = dimmBadDqBitmapSet(i_mba, i_dimm, io_data, l_wiringData,
-+                                      l_allMnfgFlags);
-+            if (l_rc)
-+            {
-+                FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                        "Error setting DQ bitmap");
-+                break;
-+            }
-         }
- 
-     }while(0);
-@@ -763,4 +839,4 @@ fapi::ReturnCode dimmBadDqBitmapAccessHwp(
-     return l_rc;
- }
- 
--}
-+}
-\ No newline at end of file
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch b/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch
deleted file mode 100644
index 3455e34..0000000
--- a/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From e33d32a5c249e5298a545889bba86129218c213d Mon Sep 17 00:00:00 2001
-From: Corey Swenson <cswenson@us.ibm.com>
-Date: Thu, 23 Apr 2015 14:55:20 -0500
-Subject: [PATCH 2/2] Disable Centaur I2C at runtime
-
-Change-Id: I0425f642ed84041e604ad8004f77f0c385227526
----
- src/usr/i2c/runtime/rt_i2c.C | 76 ++++++++++++++++++++++++--------------------
- 1 file changed, 42 insertions(+), 34 deletions(-)
-
-diff --git a/src/usr/i2c/runtime/rt_i2c.C b/src/usr/i2c/runtime/rt_i2c.C
-index 5d21bbf..bdadbbe 100755
---- a/src/usr/i2c/runtime/rt_i2c.C
-+++ b/src/usr/i2c/runtime/rt_i2c.C
-@@ -139,44 +139,52 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
-     proc_engine_port |= (uint64_t)(args.engine) << HBRT_I2C_MASTER_ENGINE_SHIFT;
-     proc_engine_port |= (uint64_t)(args.port) << HBRT_I2C_MASTER_PORT_SHIFT;
- 
--    if(i_opType == DeviceFW::READ)
-+    // Send I2C op to host interface
-+    // Centaur I2C not yet supported
-+    // @todo RTC:127533 -- Enable Centaur I2C at runtime
-+    if( i_target->getAttr<TARGETING::ATTR_TYPE>() != TARGETING::TYPE_MEMBUF )
-     {
--        if(g_hostInterfaces->i2c_read != NULL)
-+        if(i_opType == DeviceFW::READ)
-         {
--            rc = g_hostInterfaces->i2c_read
--                    (
--                        proc_engine_port,   // Master Chip/Engine/Port
--                        args.devAddr,       // Dev Addr
--                        args.offset_length, // Offset size
--                        offset,             // Offset
--                        io_buflen,          // Buffer length
--                        io_buffer           // Buffer
--                    );
-+            if(g_hostInterfaces->i2c_read != NULL)
-+            {
-+                rc = g_hostInterfaces->i2c_read
-+                        (
-+                            proc_engine_port,   // Master Chip/Engine/Port
-+                            args.devAddr,       // Dev Addr
-+                            args.offset_length, // Offset size
-+                            offset,             // Offset
-+                            io_buflen,          // Buffer length
-+                            io_buffer           // Buffer
-+                        );
-+            }
-+            else
-+            {
-+                TRACFCOMP(g_trac_i2c,
-+                    ERR_MRK"Hypervisor I2C read interface not linked");
-+                l_host_if_enabled = false;
-+            }
-         }
--        else
--        {
--            TRACFCOMP(g_trac_i2c,ERR_MRK"Hypervisor I2C read interface not linked");
--            l_host_if_enabled = false;
--        }
--    }
--    else if (i_opType == DeviceFW::WRITE)
--    {
--        if(g_hostInterfaces->i2c_write != NULL)
--        {
--            rc = g_hostInterfaces->i2c_write
--                    (
--                        proc_engine_port,   // Master Chip/Engine/Port
--                        args.devAddr,       // Dev Addr
--                        args.offset_length, // Offset size
--                        offset,             // Offset
--                        io_buflen,          // Buffer length
--                        io_buffer           // Buffer
--                    );
--        }
--        else
-+        else if (i_opType == DeviceFW::WRITE)
-         {
--            TRACFCOMP(g_trac_i2c,ERR_MRK"Hypervisor I2C write interface not linked");
--            l_host_if_enabled = false;
-+            if(g_hostInterfaces->i2c_write != NULL)
-+            {
-+                rc = g_hostInterfaces->i2c_write
-+                        (
-+                            proc_engine_port,   // Master Chip/Engine/Port
-+                            args.devAddr,       // Dev Addr
-+                            args.offset_length, // Offset size
-+                            offset,             // Offset
-+                            io_buflen,          // Buffer length
-+                            io_buffer           // Buffer
-+                        );
-+            }
-+            else
-+            {
-+                TRACFCOMP(g_trac_i2c,
-+                    ERR_MRK"Hypervisor I2C write interface not linked");
-+                l_host_if_enabled = false;
-+            }
-         }
-     }
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 5f423da..83aae71 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 6bdbe42ee0a2808be1f2f38026e57290cdfa8fc6
+HOSTBOOT_VERSION ?= 70b5e31d74487d51e69a0e0a390adea6b4f32dc5
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
