diff --git a/src/connectivity/wlan/drivers/third_party/broadcom/brcmfmac/sdio/sdio.cc b/src/connectivity/wlan/drivers/third_party/broadcom/brcmfmac/sdio/sdio.cc
index 796206c..ff12846 100644
--- a/src/connectivity/wlan/drivers/third_party/broadcom/brcmfmac/sdio/sdio.cc
+++ b/src/connectivity/wlan/drivers/third_party/broadcom/brcmfmac/sdio/sdio.cc
@@ -2759,7 +2759,34 @@
       for (int ndx = 0; ndx < len; ndx++) {
         if (ram_cmp[ndx] != expected_data[offset + ndx]) {
           BRCMF_ERR("Downloaded RAM image is corrupted at offset %d of %zu (saw:%#x expect:%#x)",
-                    offset, ram_sz, ram_cmp[ndx], expected_data[offset + ndx]);
+                    offset + ndx, ram_sz, ram_cmp[ndx], expected_data[offset + ndx]);
+
+                    /*const int start = (ndx & 63) == 0 ? 0 : ((ndx & 63) - 1);*/
+		    const int start = (ndx & ~63) == 0 ? 0 : ((ndx & ~63) - 64);
+          const int blocks = start == 0 ? 2 : 3;
+          zxlogf(ERROR, "Read:");
+          for (int i = start; len >= (64 * blocks) && i < (64 * blocks); i += 16) {
+            zxlogf(ERROR,
+                   "%04x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x "
+                   "%02x %02x",
+                   i, ram_cmp[i + 0], ram_cmp[i + 1], ram_cmp[i + 2], ram_cmp[i + 3],
+                   ram_cmp[i + 4], ram_cmp[i + 5], ram_cmp[i + 6], ram_cmp[i + 7], ram_cmp[i + 8],
+                   ram_cmp[i + 9], ram_cmp[i + 10], ram_cmp[i + 11], ram_cmp[i + 12],
+                   ram_cmp[i + 13], ram_cmp[i + 14], ram_cmp[i + 15]);
+          }
+          const char* expected = expected_data + offset;
+          zxlogf(ERROR, "Expected:");
+          for (int i = start; len >= (64 * blocks) && i < (64 * blocks); i += 16) {
+            zxlogf(ERROR,
+                   "%04x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x "
+                   "%02x %02x",
+                   i, expected[i + 0], expected[i + 1], expected[i + 2], expected[i + 3],
+                   expected[i + 4], expected[i + 5], expected[i + 6], expected[i + 7],
+                   expected[i + 8], expected[i + 9], expected[i + 10], expected[i + 11],
+                   expected[i + 12], expected[i + 13], expected[i + 14], expected[i + 15]);
+          }
+
+
           break;
         }
       }
diff --git a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
index 8338afb..bde93f6 100644
--- a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
+++ b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
@@ -1141,55 +1141,35 @@
   auto clk = AmlSdmmcClock::Get().ReadFrom(&mmio_);
 
   auto set_adj_delay = [&](uint32_t param) -> void { SetAdjDelay(param); };
-  auto set_delay_lines = [&](uint32_t param) -> void { SetDelayLines(param); };
-
-  set_delay_lines(0);
-
-  TuneWindow phase_windows[AmlSdmmcClock::kMaxClkPhase + 1] = {};
-  for (uint32_t phase = 0; phase < std::size(phase_windows); phase++) {
-    if (phase != clk.cfg_co_phase()) {
-      clk.set_cfg_tx_phase(phase).WriteTo(&mmio_);
-      phase_windows[phase] =
-          TuneDelayParam(tuning_blk, tuning_cmd_idx, clk.cfg_div() - 1, set_adj_delay);
-    }
-  }
+  // auto set_delay_lines = [&](uint32_t param) -> void { SetDelayLines(param); };
 
   TuneWindow adj_delay_window;
-  uint32_t best_phase = 0;
-
-  // Find the largest window of working settings.
-  for (uint32_t phase = 0; phase < std::size(phase_windows); phase++) {
-    if (phase_windows[phase].size > adj_delay_window.size) {
-      adj_delay_window = phase_windows[phase];
-      best_phase = phase;
-    }
-  }
-
-  if (adj_delay_window.size == 0) {
-    AML_SDMMC_ERROR("No window found for any phase");
+  uint32_t delay_lines = 0;
+  do {
+    SetDelayLines(delay_lines++);
+    adj_delay_window = TuneDelayParam(tuning_blk, tuning_cmd_idx, clk.cfg_div() - 1, set_adj_delay);
+  } while (delay_lines <= max_delay() && adj_delay_window.size == clk.cfg_div());
+  delay_lines--;
+  if (adj_delay_window.size == clk.cfg_div()) {
+    AML_SDMMC_ERROR("Unable to tune, all transfers succeeded");
     return ZX_ERR_IO;
   }
 
-  const uint32_t best_adj_delay =
-      adj_delay_window.size == clk.cfg_div() ? 0 : adj_delay_window.middle() % clk.cfg_div();
+  // Sweep the entire range of settings.
+  // for (uint32_t i = 0; i < clk.cfg_div(); i++) {
+  //   set_adj_delay(i);
+  //   TuneDelayParam(tuning_blk, tuning_cmd_idx, max_delay(), set_delay_lines);
+  // }
 
-  clk.set_cfg_tx_phase(best_phase).WriteTo(&mmio_);
+  AML_SDMMC_INFO("Delay %u produced failing adj delay value", delay_lines);
+
+  const uint32_t best_adj_delay = adj_delay_window.middle() % clk.cfg_div();
+
+  SetDelayLines(delay_lines);
   set_adj_delay(best_adj_delay);
 
-  TuneWindow delay_window =
-      TuneDelayParam(tuning_blk, tuning_cmd_idx, max_delay(), set_delay_lines);
-
-  if (delay_window.size == 0) {
-    AML_SDMMC_ERROR("No delay window found");
-    return ZX_ERR_IO;
-  }
-
-  const uint32_t best_delay = delay_window.middle() % (max_delay() + 1);
-  set_delay_lines(best_delay);
-
   AML_SDMMC_INFO("Clock divider %u, clock phase %u, adj delay %u, delay %u", clk.cfg_div(),
-                 best_phase, best_adj_delay, best_delay);
-
+                 clk.cfg_tx_phase(), best_adj_delay, delay_lines);
   return ZX_OK;
 }
 
diff --git a/src/devices/board/drivers/vim3/vim3-i2c.cc b/src/devices/board/drivers/vim3/vim3-i2c.cc
index 0c3f865..6a93216 100644
--- a/src/devices/board/drivers/vim3/vim3-i2c.cc
+++ b/src/devices/board/drivers/vim3/vim3-i2c.cc
@@ -57,6 +57,13 @@
         .pid = PDEV_PID_VIM3,
         .did = PDEV_DID_VIM3_MCU,
     },
+        {
+        .bus_id = 1,
+        .address = 0x32,
+        .vid = 0,
+        .pid = 0,
+        .did = 0,
+    },
     // placeholder until driver implemented and vid/pid/did assigned
     // bus_ids and addresses are correct
     // TCA6408 (U17) IO expander (used for various lcd/cam signals and LEDs)
diff --git a/src/devices/board/drivers/vim3/vim3-sd.cc b/src/devices/board/drivers/vim3/vim3-sd.cc
index 4eba60b..04e7b24 100644
--- a/src/devices/board/drivers/vim3/vim3-sd.cc
+++ b/src/devices/board/drivers/vim3/vim3-sd.cc
@@ -155,7 +155,8 @@
     return status;
   }
 
-
+/*(void)comp_desc;
+*/
   return ZX_OK;
 }
 
