Op-Build Update 06/14/2017
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
+