diff --git a/openpower/configs/p9dsu_defconfig b/openpower/configs/p9dsu_defconfig
index 260dfc1..7487d09 100644
--- a/openpower/configs/p9dsu_defconfig
+++ b/openpower/configs/p9dsu_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="p9dsu.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="p9dsu-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="8ff7cebbaad6426e17706b7585300e63653a219e"
+BR2_OPENPOWER_MACHINE_XML_VERSION="1c5c5b43ace53371671ca189f7fae16fdf8fe3ed"
 BR2_OPENPOWER_MACHINE_XML_FILENAME="p9dsu.xml"
 BR2_OPENPOWER_SYSTEM_XML_FILENAME="P9DSU_hb.system.xml"
 BR2_OPENPOWER_MRW_XML_FILENAME="P9DSU_hb.mrw.xml"
diff --git a/openpower/configs/witherspoon_defconfig b/openpower/configs/witherspoon_defconfig
index 9228e77..309fc03 100644
--- a/openpower/configs/witherspoon_defconfig
+++ b/openpower/configs/witherspoon_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="witherspoon.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="witherspoon-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="c5e17e084a1eb057fe8ad41af886e1558a407dc0"
+BR2_OPENPOWER_MACHINE_XML_VERSION="d0f86cf46a99800c6f15a4e650701da141216940"
 BR2_OPENPOWER_MACHINE_XML_FILENAME="witherspoon.xml"
 BR2_OPENPOWER_SYSTEM_XML_FILENAME="WITHERSPOON_hb.system.xml"
 BR2_OPENPOWER_MRW_XML_FILENAME="WITHERSPOON_hb.mrw.xml"
diff --git a/openpower/configs/zaius_defconfig b/openpower/configs/zaius_defconfig
index 6a04a61..2657629 100644
--- a/openpower/configs/zaius_defconfig
+++ b/openpower/configs/zaius_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="zaius.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="zaius-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="6843fceba8404c600782fec2dcdcaca604e48d05"
+BR2_OPENPOWER_MACHINE_XML_VERSION="500647235aab6e2bb5a24dd00baab59083461833"
 BR2_OPENPOWER_MACHINE_XML_FILENAME="zaius.xml"
 BR2_OPENPOWER_SYSTEM_XML_FILENAME="ZAIUS_hb.system.xml"
 BR2_OPENPOWER_MRW_XML_FILENAME="ZAIUS_hb.mrw.xml"
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch b/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch
deleted file mode 100644
index 8d64244..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-From 569a650085d4ea7cf87c88ec5542ff31477e8c6d Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Fri, 2 Jun 2017 10:32:27 -0500
-Subject: [PATCH] Revert "Handling of functional NX chiplet"
-
-This reverts commit 392272c0247878a832473157e7d2e6023496ca99.
----
- src/include/usr/hwas/common/hwas_reasoncodes.H |  1 -
- src/usr/hwas/common/hwas.C                     | 51 ------------------------
- src/usr/isteps/istep10/call_host_rng_bist.C    | 53 ++++++-------------------
- src/usr/isteps/istep16/call_host_secure_rng.C  | 55 +++++++-------------------
- 4 files changed, 28 insertions(+), 132 deletions(-)
-
-diff --git a/src/include/usr/hwas/common/hwas_reasoncodes.H b/src/include/usr/hwas/common/hwas_reasoncodes.H
-index 1c3a789..667ac6c 100644
---- a/src/include/usr/hwas/common/hwas_reasoncodes.H
-+++ b/src/include/usr/hwas/common/hwas_reasoncodes.H
-@@ -55,7 +55,6 @@ namespace HWAS
-         RC_SYSAVAIL_MISSING_CRITICAL_RESOURCE   = HWAS_COMP_ID | 0x0B,
-         RC_SYSAVAIL_NO_MCAS_FUNC                = HWAS_COMP_ID | 0x0C,
-         RC_SYSAVAIL_NO_MEMORY_FUNC_MASTER       = HWAS_COMP_ID | 0x0D,
--        RC_SYSAVAIL_NO_NX_FUNC                  = HWAS_COMP_ID | 0x0E,
-     };
- };
- 
-diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C
-index 9908ef8..79d541b 100644
---- a/src/usr/hwas/common/hwas.C
-+++ b/src/usr/hwas/common/hwas.C
-@@ -1881,57 +1881,6 @@ errlHndl_t checkMinimumHardware(const TARGETING::ConstTargetHandle_t i_nodeOrSys
-                 // errl is now NULL
-             }
-         }
--
--        // check for functional NX chiplets
--        TargetHandleList l_functionalNXChiplets;
--        getChildChiplets(l_functionalNXChiplets, pTop, TYPE_NX, true);
--        HWAS_DBG( "checkMinimumHardware: %d NX chiplets",
--                  l_functionalNXChiplets.size());
--
--        if (l_functionalNXChiplets.empty())
--        {
--            HWAS_ERR( "Insufficient hardware to continue IPL (NX chiplets)");
--
--            if(o_bootable)
--            {
--                *o_bootable = false;
--                break;
--            }
--            TargetHandleList l_presentNXChiplets;
--            getChildChiplets(l_presentNXChiplets, pTop, TYPE_NX, false);
--            uint32_t nx_present = l_presentNXChiplets.size();
--
--            /*@
--             * @errortype
--             * @severity           ERRL_SEV_UNRECOVERABLE
--             * @moduleid           MOD_CHECK_MIN_HW
--             * @reasoncode         RC_SYSAVAIL_NO_NX_FUNC
--             * @devdesc            checkMinimumHardware found no
--             *                     functional NX chiplets
--             * @custdesc           Insufficient hardware to continue IPL
--             * @userdata1[00:31]   HUID of node
--             * @userdata2[00:31]   number of present nonfunctional NX chiplets
--             */
--            const uint64_t userdata1 =
--                (static_cast<uint64_t>(get_huid(pTop)) << 32);
--            const uint64_t userdata2 =
--                (static_cast<uint64_t>(nx_present) << 32);
--            l_errl = hwasError(ERRL_SEV_UNRECOVERABLE,
--                         MOD_CHECK_MIN_HW,
--                         RC_SYSAVAIL_NO_NX_FUNC,
--                         userdata1, userdata2);
--
--            //  call out the procedure to find the deconfigured part.
--            hwasErrorAddProcedureCallout( l_errl,
--                         EPUB_PRC_FIND_DECONFIGURED_PART,
--                         SRCI_PRIORITY_HIGH );
--
--            //  if we already have an error, link this one to the earlier;
--            //  if not, set the common plid
--            hwasErrorUpdatePlid( l_errl, l_commonPlid );
--            errlCommit(l_errl, HWAS_COMP_ID);
--        }
--
-         //  ------------------------------------------------------------
-         //  Check for Mirrored memory -
-         //  If the user requests mirrored memory and we do not have it,
-diff --git a/src/usr/isteps/istep10/call_host_rng_bist.C b/src/usr/isteps/istep10/call_host_rng_bist.C
-index 68d2435..b1ccc51 100644
---- a/src/usr/isteps/istep10/call_host_rng_bist.C
-+++ b/src/usr/isteps/istep10/call_host_rng_bist.C
-@@ -42,7 +42,6 @@
- 
- #include    <isteps/hwpisteperror.H>
- #include    <errl/errludtarget.H>
--#include    <errl/errlreasoncodes.H>
- 
- #include    <initservice/isteps_trace.H>
- #include    <initservice/initserviceif.H>
-@@ -87,49 +86,23 @@ void* call_host_rng_bist( void *io_pArgs )
-     // Loop through all processors including master
-     for (const auto & l_cpu_target: l_cpuTargetList)
-     {
--        const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
-+      const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
-                 l_cpu_target);
--        // Check for functional NX
--        TARGETING::TargetHandleList l_nxTargetList;
--        getChildChiplets(l_nxTargetList, l_cpu_target, TYPE_NX, true);
--        if (l_nxTargetList.empty())
--        {
--            TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
--              "p9_rng_init_phase1: no functional NX found for proc %.8X",
--              TARGETING::get_huid(l_cpu_target));
--            continue;
--        }
--        TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
-+
-+      TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
-           "Running p9_rng_init_phase1 HWP on processor target %.8X",
-           TARGETING::get_huid(l_cpu_target) );
- 
--        FAPI_INVOKE_HWP(l_err, p9_rng_init_phase1, l_fapi2_proc_target);
--        if(l_err)
--        {
--            TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
--                "ERROR: call p9_rng_init_phase1, PLID=0x%x, rc=0x%.4X",
--                l_err->plid(), l_err->reasonCode());
--
--            for (const auto l_callout : l_err->getUDSections(
--                    HWPF_COMP_ID,
--                    ERRORLOG::ERRL_UDT_CALLOUT))
--            {
--                if(reinterpret_cast<HWAS::callout_ud_t*>
--                    (l_callout)->type == HWAS::HW_CALLOUT)
--                {
--                    for (const auto & l_nxTarget: l_nxTargetList)
--                    {
--                        l_err->addHwCallout( l_nxTarget,
--                            HWAS::SRCI_PRIORITY_HIGH,
--                            HWAS::DECONFIG,
--                            HWAS::GARD_NULL );
--                    }
--                 }
--            }
--
--            l_StepError.addErrorDetails(l_err);
--            errlCommit(l_err, HWPF_COMP_ID);
--        }
-+      FAPI_INVOKE_HWP(l_err, p9_rng_init_phase1, l_fapi2_proc_target);
-+      if(l_err)
-+      {
-+          TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
-+                    "ERROR: call p9_rng_init_phase1, PLID=0x%x",
-+                    l_err->plid());
-+          l_StepError.addErrorDetails(l_err);
-+          errlCommit(l_err, HWPF_COMP_ID);
-+      }
-+
-     } // end of going through all processors
- 
-     TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
-diff --git a/src/usr/isteps/istep16/call_host_secure_rng.C b/src/usr/isteps/istep16/call_host_secure_rng.C
-index 9ca7e0f..5a51504 100644
---- a/src/usr/isteps/istep16/call_host_secure_rng.C
-+++ b/src/usr/isteps/istep16/call_host_secure_rng.C
-@@ -45,7 +45,6 @@
- 
- #include    <isteps/hwpisteperror.H>
- #include    <errl/errludtarget.H>
--#include    <errl/errlreasoncodes.H>
- 
- #include    <initservice/isteps_trace.H>
- #include    <initservice/initserviceif.H>
-@@ -90,47 +89,23 @@ void* call_host_secure_rng( void *io_pArgs )
-     // Loop through all processors including master
-     for (const auto & l_cpu_target: l_cpuTargetList)
-     {
--        const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
-+      const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
-                 l_cpu_target);
- 
--        // Check for functional NX
--        TARGETING::TargetHandleList l_nxTargetList;
--        getChildChiplets(l_nxTargetList, l_cpu_target, TYPE_NX, true);
--        if (l_nxTargetList.empty())
--        {
--            TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
--              "Running host_secure_rng; no functional NX found for proc %.8X",
--              TARGETING::get_huid(l_cpu_target));
--            continue;
--        }
--
--        FAPI_INVOKE_HWP(l_err, p9_rng_init_phase2, l_fapi2_proc_target);
--        if(l_err)
--        {
--            TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
--                "ERROR: call p9_rng_init_phase2, PLID=0x%x, rc=0x%.4X",
--                l_err->plid(), l_err->reasonCode());
--
--            for (const auto l_callout : l_err->getUDSections(
--                    HWPF_COMP_ID,
--                    ERRORLOG::ERRL_UDT_CALLOUT))
--            {
--                if(reinterpret_cast<HWAS::callout_ud_t*>
--                    (l_callout)->type == HWAS::HW_CALLOUT)
--                {
--                    for (const auto & l_nxTarget: l_nxTargetList)
--                    {
--                        l_err->addHwCallout( l_nxTarget,
--                            HWAS::SRCI_PRIORITY_HIGH,
--                            HWAS::DECONFIG,
--                            HWAS::GARD_NULL );
--                    }
--                 }
--            }
--
--            l_StepError.addErrorDetails(l_err);
--            errlCommit(l_err, HWPF_COMP_ID);
--        }
-+      TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
-+          "Running host_secure_rng HWP on processor target %.8X",
-+          TARGETING::get_huid(l_cpu_target) );
-+
-+      FAPI_INVOKE_HWP(l_err, p9_rng_init_phase2, l_fapi2_proc_target);
-+      if(l_err)
-+      {
-+          TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
-+                    "ERROR: call p9_rng_init_phase2, PLID=0x%x",
-+                    l_err->plid());
-+          l_StepError.addErrorDetails(l_err);
-+          errlCommit(l_err, HWPF_COMP_ID);
-+      }
-+
-     } // end of going through all processors
- 
-     TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
--- 
-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
deleted file mode 100644
index 709b022..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0012-Revert-increase-I2C_BUS_SPEED_ARRAY-to-be-4x13-array.patch
+++ /dev/null
@@ -1,234 +0,0 @@
-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
-
