diff --git a/openpower/configs/hostboot/firestone.config b/openpower/configs/hostboot/firestone.config
index efd44cc..4b96cd9 100755
--- a/openpower/configs/hostboot/firestone.config
+++ b/openpower/configs/hostboot/firestone.config
@@ -41,3 +41,7 @@
 set DISABLE_HOSTBOOT_RUNTIME
 unset HTMGT
 unset START_OCC_DURING_BOOT
+
+# Enable Checktop Analysis
+set ENABLE_CHECKSTOP_ANALYSIS
+
diff --git a/openpower/configs/hostboot/habanero.config b/openpower/configs/hostboot/habanero.config
index 2130784..90e5735 100755
--- a/openpower/configs/hostboot/habanero.config
+++ b/openpower/configs/hostboot/habanero.config
@@ -55,5 +55,8 @@
 
 set BMC_BT_LPC_IPMI
 
+# Enable Checktop Analysis
+set ENABLE_CHECKSTOP_ANALYSIS
+
 # set for trace debug to console
 unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/configs/hostboot/palmetto.config b/openpower/configs/hostboot/palmetto.config
index 0d48abe..12ebc2c 100755
--- a/openpower/configs/hostboot/palmetto.config
+++ b/openpower/configs/hostboot/palmetto.config
@@ -51,5 +51,8 @@
 
 set BMC_BT_LPC_IPMI
 
+# Enable Checktop Analysis
+set ENABLE_CHECKSTOP_ANALYSIS
+
 # set for trace debug to console
 unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/package/hostboot/hostboot-0003-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch b/openpower/package/hostboot/hostboot-0003-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
deleted file mode 100644
index 43b5c43..0000000
--- a/openpower/package/hostboot/hostboot-0003-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From e02245750b63a6b892ee48f1422309c8dd4f0c4f Mon Sep 17 00:00:00 2001
-From: Corey Swenson <cswenson@us.ibm.com>
-Date: Fri, 27 Feb 2015 09:45:47 -0600
-Subject: [PATCH 2/4] Disable SPD writes - workaround for DRAM repairs error
-
-Change-Id: Ic5fac400abff8fef004268dfbdf33fa6ecdded1c
-(cherry picked from commit 1bc5bb42be8e81b525993e9b5dcf08fe684bade4)
----
- src/usr/vpd/spd.C |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/src/usr/vpd/spd.C b/src/usr/vpd/spd.C
-index 54837a5..e101ff0 100644
---- a/src/usr/vpd/spd.C
-+++ b/src/usr/vpd/spd.C
-@@ -323,6 +323,7 @@ errlHndl_t spdWriteKeywordValue ( DeviceFW::OperationType i_opType,
-                                   va_list i_args )
- {
-     errlHndl_t err = NULL;
-+    return err;
-     VPD::vpdKeyword keyword = va_arg( i_args, uint64_t );
-     VPD::vpdCmdTarget location =
-             (VPD::vpdCmdTarget)va_arg( i_args, uint64_t );
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch b/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
new file mode 100644
index 0000000..07a64bb
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
@@ -0,0 +1,43 @@
+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
new file mode 100644
index 0000000..02202c3
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch
@@ -0,0 +1,260 @@
+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
new file mode 100644
index 0000000..3455e34
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch
@@ -0,0 +1,104 @@
+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
+
