diff --git a/buildroot b/buildroot
index 3120591..f462e06 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit 31205912fed95fa0edf1adc5d89dc78d7a068a29
+Subproject commit f462e06ab10035029f24d494d9936fcb8c6cf49a
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
index 8b0b4ab..fd60ef3 100644
--- 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
@@ -1,25 +1,30 @@
-From 22c58d6a7d3e6d69294aa16c9b0fa354ae9cf861 Mon Sep 17 00:00:00 2001
+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 4/5] Cap off the TRACFBIN such that nothing exceeds 64 bytes
+Subject: [PATCH 08/10] Cap off the TRACFBIN such that nothing exceeds 64 bytes
 
 Change-Id: If8f08d1602b4437aa0e72e6d2e8d99ca615a2c77
-(cherry picked from commit cb2ea9c1b5d1906e0f58eda347367c648c18809a)
+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 | 16 +++++++++++-----
- src/include/usr/trace/trace.H     |  2 ++
- 2 files changed, 13 insertions(+), 5 deletions(-)
+ 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..d02db76 100644
+index 3ef8575..4115ec2 100644
 --- a/src/include/usr/trace/interface.H
 +++ b/src/include/usr/trace/interface.H
-@@ -218,13 +218,19 @@ const uint32_t TRACE_FIELD   = 0;       //Indicates trace is field
+@@ -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(len > MAX_WORKING_TRACBIN_SIZE) \
++        if(l_length > MAX_WORKING_TRACBIN_SIZE) \
 +        { \
 +            l_length = MAX_WORKING_TRACBIN_SIZE; \
 +            TRACFCOMP(des,"Shrinking to max size in TRACFBIN"); \
@@ -40,13 +45,14 @@
  
  /**
 diff --git a/src/include/usr/trace/trace.H b/src/include/usr/trace/trace.H
-index fdcce88..e969487 100644
+index fdcce88..bf5421c 100644
 --- a/src/include/usr/trace/trace.H
 +++ b/src/include/usr/trace/trace.H
-@@ -42,6 +42,8 @@ const uint32_t TRACE_DEBUG_OFF   = 0;       //< Set to this when debug trace off
+@@ -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.
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
new file mode 100644
index 0000000..757f701
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0017-Fix-I2C-Reset-to-resolve-I2C-Bus-Arbitration-Lost-Er.patch
@@ -0,0 +1,306 @@
+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
new file mode 100644
index 0000000..ac16f09
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0018-Fix-constant-refresh-of-vpd-cache.patch
@@ -0,0 +1,116 @@
+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
+
