diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index ed4e725..83c9b80 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 HOSTBOOT_VERSION_BRANCH_MASTER_P8 ?= 695bd891343faf1f0ef85fe53148590e58239efd
-HOSTBOOT_VERSION_BRANCH_MASTER ?= 0f8d0c0955cc2a3769961257f4d39495ef6eba56
+HOSTBOOT_VERSION_BRANCH_MASTER ?= 3608c1ff8cc3df658c095280e0dab8705a6be036
 
 HOSTBOOT_VERSION ?= $(if $(BR2_OPENPOWER_POWER9),$(HOSTBOOT_VERSION_BRANCH_MASTER),$(HOSTBOOT_VERSION_BRANCH_MASTER_P8))
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch b/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch
deleted file mode 100644
index e2d052f..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch
+++ /dev/null
@@ -1,419 +0,0 @@
-From 826657215c64a6fba1f8141769af5a93994b4a5d Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Fri, 12 May 2017 15:40:46 -0500
-Subject: [PATCH] Updates to HBRT runtime interfaces
-
-Reconciling P9 function table with P8 table to make opal-prd
-work.
-
-Added new entries for:
-- firmware_request
-- get_ipoll_events
-- firmware_notify
-
-Added in entries for P8 functions:
-- get_interface_capabilities
-
-Added deprecated placeholders for P8 functions:
-- occ_load
-- occ_start
-- occ_stop
-
-Moved entries for:
-- load_pm_complex
-- start_pm_complex
-- reset_pm_complex
-
-Change-Id: I1892b4465a6e5901aa9eaa6a49e139a4bc4c5b56
----
- src/include/runtime/interface.h | 230 +++++++++++++++++++++++++++-------------
- src/runtime/rt_main.C           |  26 ++++-
- 2 files changed, 182 insertions(+), 74 deletions(-)
-
-diff --git a/src/include/runtime/interface.h b/src/include/runtime/interface.h
-index aafbbf9..363e50c 100644
---- a/src/include/runtime/interface.h
-+++ b/src/include/runtime/interface.h
-@@ -37,9 +37,9 @@
-  */
- 
- /** Current interface version.
-- *  0x9001:  9=P9, 001=Version 1
-+ *  0x9001:  9=P9, 002=Version 2
-  */
--#define HOSTBOOT_RUNTIME_INTERFACE_VERSION 0x9001
-+#define HOSTBOOT_RUNTIME_INTERFACE_VERSION 0x9002
- 
- #ifndef __HOSTBOOT_RUNTIME_INTERFACE_VERSION_ONLY
- 
-@@ -53,7 +53,7 @@ enum MemoryError_t
-      *  continues to report errors on subsequent reads. A second CE on that
-      *  cache line will result in memory UE. Therefore, it is advised to
-      *  migrate off of the address range as soon as possible. */
--    MEMORY_ERROR_CE,
-+    MEMORY_ERROR_CE = 0,
- 
-     /** Hardware has reported an uncorrectable error in memory (memory UE,
-      *  channel failure, etc). The hypervisor should migrate any partitions
-@@ -63,13 +63,13 @@ enum MemoryError_t
-      *  partition failures to handle the hardware attentions so that the
-      *  hypervisor will know all areas of memory that are impacted by the
-      *  failure. */
--    MEMORY_ERROR_UE,
-+    MEMORY_ERROR_UE = 1,
- 
-     /** Firmware has predictively requested service on a part in the memory
-      *  subsystem. The partitions may not have been affected, but it is
-      *  advised to migrate off of the address range as soon as possible to
-      *  avoid potential partition outages. */
--    MEMORY_ERROR_PREDICTIVE,
-+    MEMORY_ERROR_PREDICTIVE = 2,
- };
- 
- /**
-@@ -130,6 +130,21 @@ enum MemoryError_t
- #define HBRT_RSVD_MEM__SBE_FFDC           "ibm,sbe-ffdc"
- 
- 
-+/**
-+ * Specifiers for get_interface_capabilities
-+ */
-+
-+/* Common Features */
-+#define HBRT_CAPS_SET0_COMMON  0
-+
-+/* OPAL fixes */
-+#define HBRT_CAPS_SET1_OPAL    1
-+#define HBRT_CAPS_OPAL_HAS_XSCOM_RC     (1ul << 0)
-+
-+/* PHYP fixes */
-+#define HBRT_CAPS_SET2_PHYP    2
-+
-+
- /** @typedef hostInterfaces_t
-  *  @brief Interfaces provided by the underlying environment (ex. Sapphire).
-  *
-@@ -412,6 +427,40 @@ typedef struct hostInterfaces
-                          enum MemoryError_t i_errorType );
- 
-     /**
-+     * @brief Query the HBRT host for a list of fixes/features
-+     *
-+     * There are times when workarounds need to be put into place to handle
-+     * issues with the hosting layer (e.g. opal-prd) while fixes are not yet
-+     * released.  This is especially true because of the disconnected release
-+     * streams for the firmware and the hosting environment.
-+     *
-+     * @param  i_set Indicates which set of fixes/features we're checking
-+     *               see HBRT_CAPS_SET...
-+     *
-+     * @return a bitmask containing the relevant flags for the current
-+     *         implementation, see HBRT_CAPS_FLAGS_...
-+     */
-+    uint64_t (*get_interface_capabilities)( uint64_t i_set );
-+
-+    /**
-+     *  @brief Map a physical address space into usable memory
-+     *  @note Repeated calls to map the same memory should not return an error
-+     *  @param[in]  i_physMem  Physical address
-+     *  @param[in]  i_bytes    Number of bytes to map in
-+     *  @return NULL on error, else pointer to usable memory
-+     *  @platform FSP, OpenPOWER
-+     */
-+    void* (*map_phys_mem)(uint64_t i_physMem, size_t i_bytes);
-+
-+    /**
-+     *  @brief Unmap a physical address space from usable memory
-+     *  @param[in]  i_ptr  Previously mapped pointer
-+     *  @return 0 on success, else RC
-+     *  @platform FSP, OpenPOWER
-+     */
-+    int (*unmap_phys_mem)(void* i_ptr);
-+
-+    /**
-      *  @brief Modify the SCOM restore section of the HCODE image with the
-      *         given register data
-      *
-@@ -441,22 +490,27 @@ typedef struct hostInterfaces
-                               uint64_t i_scomData );
- 
-     /**
--     *  @brief Map a physical address space into usable memory
--     *  @note Repeated calls to map the same memory should not return an error
--     *  @param[in]  i_physMem  Physical address
--     *  @param[in]  i_bytes    Number of bytes to map in
--     *  @return NULL on error, else pointer to usable memory
--     *  @platform FSP, OpenPOWER
--     */
--    void* (*map_phys_mem)(uint64_t i_physMem, size_t i_bytes);
--
--    /**
--     *  @brief Unmap a physical address space from usable memory
--     *  @param[in]  i_ptr  Previously mapped pointer
--     *  @return 0 on success, else RC
--     *  @platform FSP, OpenPOWER
-+     * @brief Send a request to firmware, and receive a response
-+     * @details
-+     *   req_len bytes are sent to runtime firmware, and resp_len
-+     *   bytes received in response.
-+     *
-+     *   Both req and resp are allocated by the caller. If resp_len
-+     *   is not large enough to contain the full response, an error
-+     *   is returned.
-+     *
-+     * @param[in]  i_reqLen       length of request data
-+     * @param[in]  i_req          request data
-+     * @param[inout] o_respLen    in: size of request data buffer
-+     *                            out: length of request data
-+     * @param[in]  o_resp         response data
-+     * @return 0 on success, else RC
-+     * @platform FSP, OpenPOWER
-      */
--    int (*unmap_phys_mem)(void* i_ptr);
-+    int (*firmware_request)( uint64_t i_reqLen,
-+                             void *i_req,
-+                             uint64_t* o_respLen,
-+                             void *o_resp );
- 
-     // Reserve some space for future growth.
-     // do NOT ever change this number, even if you add functions.
-@@ -475,7 +529,7 @@ typedef struct hostInterfaces
-     // allocated with sufficient space and populated with NULL function
-     // pointers.  32 is big enough that we should not likely add that many
-     // functions from either direction in between any two levels of support.
--    void (*reserved[32])(void);
-+    void (*reserved[27])(void);
- 
- } hostInterfaces_t;
- 
-@@ -502,44 +556,11 @@ typedef struct runtimeInterfaces
-     const uint32_t * (*get_lid_list)(size_t * o_num);
- 
-     /**
--     *  @brief Load OCC/HCODE images into mainstore
--     *
--     *  @param[in] i_chip            the HW chip id (XSCOM chip ID)
--     *  @param[in] i_homer_addr      the physical mainstore address of the
--     *                               start of the HOMER image,
--     *  @param[in] i_occ_common_addr the physical mainstore address of the
--     *                               OCC common area, 8MB, used for
--     *                               OCC-OCC communication (1 per node)
--     *  @param[in] i_mode            selects initial load vs concurrent reloads
--     *                               HBRT_PM_LOAD:
--     *                                  load all lids/sections from scratch,
--     *                                  preserve nothing
--     *                               HBRT_PM_RELOAD:
--     *                                  reload all lids/sections,
--     *                                  but preserve runtime updates
--     *  @return 0 on success else return code
--     *  @platform FSP, OpenPOWER
--     */
--    int (*load_pm_complex)( uint64_t i_chip,
--                            uint64_t i_homer_addr,
--                            uint64_t i_occ_common_addr,
--                            uint32_t i_mode );
--
--    /**
--     *  @brief Start OCC/HCODE on the specified chip
--     *  @param[in] i_chip the HW chip id
--     *  @return 0 on success else return code
--     *  @platform FSP, OpenPOWER
--     */
--    int (*start_pm_complex)( uint64_t i_chip );
--
--    /**
--     *  @brief Reset OCC/HCODE on the specified chip
--     *  @param[in] i_chip the HW chip id
--     *  @return 0 on success else return code
--     *  @platform FSP, OpenPOWER
-+     * Space allocated for deprecated P8 interfaces
-      */
--    int (*reset_pm_complex)( uint64_t i_chip );
-+    const uint32_t * (*occ_load__deprecated)(size_t * o_num);
-+    const uint32_t * (*occ_start__deprecated)(size_t * o_num);
-+    const uint32_t * (*occ_stop__deprecated)(size_t * o_num);
- 
-     /**
-      *  @brief Notify HTMGT that an OCC has an error to report
-@@ -629,20 +650,20 @@ typedef struct runtimeInterfaces
-     /**
-      *  @brief Send a pass-through command to HTMGT
-      *
--     *  @details  This is a blocking call that will send a command
--     *            to HTMGT.
--     *  @note     If o_rspLength is returned with a non-zero value,
--     *            the data at the o_rspData should be dumped to
--     *            stdout in a hex dump format.
--     *  @note     The maximum response data returned will be 4096 bytes
-+     *  @details This is a blocking call that will send a command
-+     *           to HTMGT.
-+     *  @note   If o_rspLength is returned with a non-zero value,
-+     *          the data at the o_rspData should be dumped to
-+     *          stdout in a hex dump format.
-+     *  @note   The maximum response data returned will be 4096 bytes
-      *
-      *  @param[in]      i_cmdLength  number of bytes in pass-thru command data
--     *  @param[in]     *i_cmdData    pointer to pass-thru command data
-+     *  @param[in]   *i_cmdData   pointer to pass-thru command data
-      *  @param[out]    *o_rspLength  pointer to number of bytes returned
-      *                               in o_rspData
--     *  @param[out]    *o_rspData    pointer to a 4096 byte buffer that will
-+     *  @param[out]    *o_rspData   pointer to a 4096 byte buffer that will
-      *                               contain the response data from the command
--     *  @returns  0 on success, or return code if the command failed
-+     *  @returns 0 on success, or return code if the command failed
-      *  @platform OpenPOWER
-      */
-     int (*mfg_htmgt_pass_thru)( uint16_t   i_cmdLength,
-@@ -691,20 +712,83 @@ typedef struct runtimeInterfaces
-               size_t i_hwKeyHashSize);
- 
-     /**
--     *  @brief SBE message passing
-+     *  @brief SBE message passing notification
-      *
--     *  @details  This is a blocking call that will pass an SBE message
--     *            with a pass-through command through HBRT to code that
--     *            will process the command and provide a response.
-+     *  @details
-+     *      This is a blocking call that is used to notify HBRT there is
-+     *      a SBE message available.  This should be called when the Host
-+     *      detects the appropriate PSU interrupt from the SBE.
-      *
-      *  @param[in] i_procChipId Chip ID of the processor whose SBE is passing
-      *                          the message and sent the interrupt
-      *
--     *  @returns  0 on success, or return code if the command failed
-+     *  @return 0 on success, or return code if the command failed
-      *  @platform FSP, OpenPOWER
-      */
-     int (*sbe_message_passing)(uint32_t i_procChipId);
- 
-+    /**
-+     *  @brief Load OCC/HCODE images into mainstore
-+     *
-+     *  @param[in] i_chip            the HW chip id (XSCOM chip ID)
-+     *  @param[in] i_homer_addr      the physical mainstore address of the
-+     *                               start of the HOMER image,
-+     *  @param[in] i_occ_common_addr the physical mainstore address of the
-+     *                               OCC common area, 8MB, used for
-+     *                               OCC-OCC communication (1 per node)
-+     *  @param[in] i_mode            selects initial load vs concurrent reloads
-+     *                               HBRT_PM_LOAD:
-+     *                                  load all lids/sections from scratch,
-+     *                                  preserve nothing
-+     *                               HBRT_PM_RELOAD:
-+     *                                  reload all lids/sections,
-+     *                                  but preserve runtime updates
-+     *  @return 0 on success else return code
-+     *  @platform FSP, OpenPOWER
-+     */
-+    int (*load_pm_complex)( uint64_t i_chip,
-+                            uint64_t i_homer_addr,
-+                            uint64_t i_occ_common_addr,
-+                            uint32_t i_mode );
-+
-+    /**
-+     *  @brief Start OCC/HCODE on the specified chip
-+     *  @param[in] i_chip the HW chip id
-+     *  @return 0 on success else return code
-+     *  @platform FSP, OpenPOWER
-+     */
-+    int (*start_pm_complex)( uint64_t i_chip );
-+
-+    /**
-+     *  @brief Reset OCC/HCODE on the specified chip
-+     *  @param[in] i_chip the HW chip id
-+     *  @return 0 on success else return code
-+     *  @platform FSP, OpenPOWER
-+     */
-+    int (*reset_pm_complex)( uint64_t i_chip );
-+
-+    /**
-+     * @brief Query the IPOLL event mask supported by HBRT
-+     *
-+     * @details  This call allows the wrapper application to query
-+     * the ipoll event mask to set when the HBRT instance is running. Bits
-+     * that are *set* in this bitmask represent events that will be
-+     * forwarded to the handle_attn() callback.
-+     *
-+     * @return        The IPOLL event bits to enable during HBRT execution
-+     * @platform FSP, OpenPOWER
-+     */
-+    uint64_t (*get_ipoll_events)( void );
-+
-+    /**
-+     * @brief Receive an async notification from firmware
-+     * @param[in] i_len   length of notification data
-+     * @param[in] i_data  notification data
-+     * @platform FSP, OpenPOWER
-+     */
-+    void (*firmware_notify)( uint64_t len,
-+                             void *data );
-+
-     // Reserve some space for future growth.
-     // do NOT ever change this number, even if you add functions.
-     //
-@@ -722,7 +806,7 @@ typedef struct runtimeInterfaces
-     // allocated with sufficient space and populated with NULL function
-     // pointers.  32 is big enough that we should not likely add that many
-     // functions from either direction in between any two levels of support.
--    void (*reserved[32])(void);
-+    void (*reserved[22])(void);
- 
- } runtimeInterfaces_t;
- 
-diff --git a/src/runtime/rt_main.C b/src/runtime/rt_main.C
-index d9a21c9..d539018 100644
---- a/src/runtime/rt_main.C
-+++ b/src/runtime/rt_main.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2013,2016                        */
-+/* Contributors Listed Below - COPYRIGHT 2013,2017                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -70,6 +70,27 @@ extern "C"
-  */
- runtimeInterfaces_t* rt_start(hostInterfaces_t*) NEVER_INLINE;
- 
-+
-+/** @fn rt_version_fixup
-+ *
-+ *  @brief Make any adjustments needed to handle old versions
-+ */
-+void rt_version_fixup( void )
-+{
-+    uint64_t hostver = g_hostInterfaces->interfaceVersion;
-+    if( HOSTBOOT_RUNTIME_INTERFACE_VERSION == hostver )
-+    {
-+        return; //nothing to do, we match
-+    }
-+
-+    char verstring[100];
-+    sprintf( verstring,
-+             "HRBT Ver=%X, HostVer=%X\n",
-+             HOSTBOOT_RUNTIME_INTERFACE_VERSION,
-+             hostver );
-+    (g_hostInterfaces->puts)(verstring);
-+}
-+
- /** Call C++ constructors present in this image. */
- void rt_cppBootstrap();
- 
-@@ -111,6 +132,9 @@ runtimeInterfaces_t* rt_start(hostInterfaces_t* intf)
-     postInitCalls_t* rtPost = getPostInitCalls();
-     rtPost->callApplyTempOverrides();
- 
-+    // do any version mismatch fixups
-+    rt_version_fixup();
-+
-     // Return our interface pointer structure.
-     return rtInterfaces;
- }
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0012-Revert-increase-I2C_BUS_SPEED_ARRAY-to-be-4x13-array.patch b/openpower/package/hostboot/p9Patches/hostboot-0012-Revert-increase-I2C_BUS_SPEED_ARRAY-to-be-4x13-array.patch
new file mode 100644
index 0000000..709b022
--- /dev/null
+++ b/openpower/package/hostboot/p9Patches/hostboot-0012-Revert-increase-I2C_BUS_SPEED_ARRAY-to-be-4x13-array.patch
@@ -0,0 +1,234 @@
+From 7abdc8fec08c12bff5d52f4ee0f4a30c8e4c7137 Mon Sep 17 00:00:00 2001
+From: Bill Hoffa <wghoffa@us.ibm.com>
+Date: Mon, 12 Jun 2017 08:22:27 -0500
+Subject: [PATCH] Revert "increase I2C_BUS_SPEED_ARRAY to be 4x13 array"
+
+This reverts commit cfc04f8b5bb5453603d2e683502fd5c47fa7fc58.
+---
+ src/usr/targeting/common/genHwsvMrwXml.pl          | 38 ++++++++-------
+ src/usr/targeting/common/processMrw.pl             | 55 +++++++++++++---------
+ .../targeting/common/xmltohb/attribute_types.xml   | 10 ++--
+ .../common/xmltohb/simics_NIMBUS.system.xml        | 16 +++----
+ .../targeting/common/xmltohb/vbu_NIMBUS.system.xml |  8 ++--
+ 5 files changed, 67 insertions(+), 60 deletions(-)
+
+diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl
+index 18b8399..5cf4ad9 100755
+--- a/src/usr/targeting/common/genHwsvMrwXml.pl
++++ b/src/usr/targeting/common/genHwsvMrwXml.pl
+@@ -7043,11 +7043,9 @@ sub addI2cBusSpeedArray
+     my $tmp_offset = 0x0;
+     my $tmp_ct eq "";
+ 
+-    # bus_speed_array[engine][port] is 4x13 array
+-    my @speed_array =  (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+-                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+-                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+-                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
++    # bus_speed_array[engine][port] is 4x4 array
++    my @speed_array = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
++
+     # Loop through all i2c devices
+     for my $i ( 0 .. $#I2Cdevices )
+     {
+@@ -7135,7 +7133,7 @@ sub addI2cBusSpeedArray
+         $tmp_speed  = $I2Cdevices[$i]{i2c_speed};
+         $tmp_engine = $I2Cdevices[$i]{i2c_engine};
+         $tmp_port   = $I2Cdevices[$i]{i2c_port};
+-        $tmp_offset = ($tmp_engine * 13) + $tmp_port;
++        $tmp_offset = ($tmp_engine * 4) + $tmp_port;
+ 
+         # use the slower speed if there is a previous entry
+         if ( ($speed_array[$tmp_offset] == 0) ||
+@@ -7149,18 +7147,22 @@ sub addI2cBusSpeedArray
+     print "     <attribute>\n";
+     print "        <id>I2C_BUS_SPEED_ARRAY</id>\n";
+     print "        <default>\n";
+-
+-    my $speed_array_len = scalar(@speed_array);
+-    my $speed_array_str = "";
+-    for my $i (0 .. $speed_array_len)
+-    {
+-        $speed_array_str .= "            $speed_array[$i],\n";
+-    }
+-
+-    #remove last ","
+-    $speed_array_str =~ s/,\n$/\n/;
+-    print $speed_array_str;
+-
++    print "            $speed_array[0],\n";
++    print "            $speed_array[1],\n";
++    print "            $speed_array[2],\n";
++    print "            $speed_array[3],\n";
++    print "            $speed_array[4],\n";
++    print "            $speed_array[5],\n";
++    print "            $speed_array[6],\n";
++    print "            $speed_array[7],\n";
++    print "            $speed_array[8],\n";
++    print "            $speed_array[9],\n";
++    print "            $speed_array[10],\n";
++    print "            $speed_array[11],\n";
++    print "            $speed_array[12],\n";
++    print "            $speed_array[13],\n";
++    print "            $speed_array[14],\n";
++    print "            $speed_array[15],\n";
+     print "        </default>\n";
+     print "    </attribute>\n";
+ 
+diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
+index e907bcf..7b558de 100644
+--- a/src/usr/targeting/common/processMrw.pl
++++ b/src/usr/targeting/common/processMrw.pl
+@@ -666,17 +666,22 @@ sub processI2cSpeeds
+     my @bus_speeds;
+     my $bus_speed_attr=$targetObj->getAttribute($target,"I2C_BUS_SPEED_ARRAY");
+     my @bus_speeds2 = split(/,/,$bus_speed_attr);
+-
+-    #need to create a 4X13 array
+-    my $i = 0;
+-    for my $engineIdx (0 .. 3)
+-    {
+-        for my $portIdx (0 .. 12)
+-        {
+-            $bus_speeds[$engineIdx][$portIdx] = $bus_speeds2[$i];
+-            $i++;
+-        }
+-    }
++    $bus_speeds[0][0] = $bus_speeds2[0];
++    $bus_speeds[0][1] = $bus_speeds2[1];
++    $bus_speeds[0][2] = $bus_speeds2[2];
++    $bus_speeds[0][3] = $bus_speeds2[3];
++    $bus_speeds[1][0] = $bus_speeds2[4];
++    $bus_speeds[1][1] = $bus_speeds2[5];
++    $bus_speeds[1][2] = $bus_speeds2[6];
++    $bus_speeds[1][3] = $bus_speeds2[7];
++    $bus_speeds[2][0] = $bus_speeds2[8];
++    $bus_speeds[2][1] = $bus_speeds2[9];
++    $bus_speeds[2][2] = $bus_speeds2[10];
++    $bus_speeds[2][3] = $bus_speeds2[11];
++    $bus_speeds[3][0] = $bus_speeds2[12];
++    $bus_speeds[3][1] = $bus_speeds2[13];
++    $bus_speeds[3][2] = $bus_speeds2[14];
++    $bus_speeds[3][3] = $bus_speeds2[15];
+ 
+     my $i2cs=$targetObj->findConnections($target,"I2C","");
+     if ($i2cs ne "") {
+@@ -710,18 +715,22 @@ sub processI2cSpeeds
+             }
+         }
+     }
+-
+-    #need to flatten 4x13 array
+-    $bus_speed_attr = "";
+-    for my $engineIdx (0 .. 3)
+-    {
+-        for my $portIdx (0 .. 12)
+-        {
+-            $bus_speed_attr .= $bus_speeds[$engineIdx][$portIdx] . ",";
+-        }
+-    }
+-    #remove last ,
+-    $bus_speed_attr =~ s/,$//;
++    $bus_speed_attr = $bus_speeds[0][0].",".
++                      $bus_speeds[0][1].",".
++                      $bus_speeds[0][2].",".
++                      $bus_speeds[0][3].",".
++                      $bus_speeds[1][0].",".
++                      $bus_speeds[1][1].",".
++                      $bus_speeds[1][2].",".
++                      $bus_speeds[1][3].",".
++                      $bus_speeds[2][0].",".
++                      $bus_speeds[2][1].",".
++                      $bus_speeds[2][2].",".
++                      $bus_speeds[2][3].",".
++                      $bus_speeds[3][0].",".
++                      $bus_speeds[3][1].",".
++                      $bus_speeds[3][2].",".
++                      $bus_speeds[3][3];
+ 
+     $targetObj->setAttribute($target,"I2C_BUS_SPEED_ARRAY",$bus_speed_attr);
+ }
+diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
+index 1bbf23f..77465d2 100644
+--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
++++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
+@@ -17209,20 +17209,16 @@ Measured in GB</description>
+         Creator: MRW
+         Purpose: Used by FW to know the fastest possible bus speed that all of
+             the devices on a given bus are able to use.
+-        Data Format: 4x13 array of uint16_t values.  The first index indicates
++        Data Format: 4x4 array of uint16_t values.  The first index indicates
+             the engine number of the bus.  The second index indicates the port
+             number of the bus.  The value in the array is the I2C bus speed
+             used for that engine/port combination in KHz.
+     </description>
+     <simpleType>
+         <uint16_t>
+-            <default>
+-            0,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0</default>
++            <default>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</default>
+         </uint16_t>
+-        <array>4,13</array>
++        <array>4,4</array>
+     </simpleType>
+     <persistency>non-volatile</persistency>
+     <readable/>
+diff --git a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
+index fd630d5..485881f 100644
+--- a/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
++++ b/src/usr/targeting/common/xmltohb/simics_NIMBUS.system.xml
+@@ -458,10 +458,10 @@
+     <attribute>
+         <id>I2C_BUS_SPEED_ARRAY</id>
+         <default>
+-            400,400,0,0,0,0,0,0,0,0,0,0,0,
+-            400,400,400,400,0,0,0,0,0,0,0,0,0,
+-            400,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0
++            0, 0, 0, 0,
++            400, 400, 400, 400,
++            400, 0, 0, 0,
++            0, 0, 0, 0
+         </default>
+     </attribute>
+     <attribute>
+@@ -5440,10 +5440,10 @@
+     <attribute>
+         <id>I2C_BUS_SPEED_ARRAY</id>
+         <default>
+-            400,400,0,0,0,0,0,0,0,0,0,0,0,
+-            400,400,400,400,0,0,0,0,0,0,0,0,0,
+-            400,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0
++            0, 0, 0, 0,
++            400, 400, 400, 400,
++            0, 0, 0, 0,
++            0, 0, 0, 0
+         </default>
+     </attribute>
+     <!-- FSI connections -->
+diff --git a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
+index ffe2503..ac19f28 100644
+--- a/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
++++ b/src/usr/targeting/common/xmltohb/vbu_NIMBUS.system.xml
+@@ -428,10 +428,10 @@
+     <attribute>
+         <id>I2C_BUS_SPEED_ARRAY</id>
+         <default>
+-            400,400,0,0,0,0,0,0,0,0,0,0,0,
+-            400,400,400,400,0,0,0,0,0,0,0,0,0,
+-            400,0,0,0,0,0,0,0,0,0,0,0,0,
+-            0,0,0,0,0,0,0,0,0,0,0,0,0
++            400, 0, 0, 0,
++            0, 400, 0, 400,
++            400, 0, 0, 0,
++            0, 0, 0, 0
+         </default>
+     </attribute>
+     <attribute>
+-- 
+1.8.2.2
+
