diff --git a/hw/top_matcha/dv/chip_sim_cfg.hjson b/hw/top_matcha/dv/chip_sim_cfg.hjson
index adc626e..60f47e5 100644
--- a/hw/top_matcha/dv/chip_sim_cfg.hjson
+++ b/hw/top_matcha/dv/chip_sim_cfg.hjson
@@ -1839,7 +1839,7 @@
     {
       name: chip_sw_rv_dm_access_after_wakeup
       uvm_test_seq: chip_sw_rv_dm_access_after_wakeup_vseq
-      sw_images: ["//sw/device/tests/sim_dv:rv_dm_access_after_wakeup:1"]
+      sw_images: ["//sw/device/tests/sim_dv:rv_dm_access_after_wakeup:1:matcha"]
       en_run_modes: ["sw_test_mode_test_rom"]
       run_opts: ["+use_jtag_dmi=1"]
     }
@@ -2057,6 +2057,7 @@
         "chip_sw_csrng_smoketest",
         "chip_sw_dma_main_test",
         "chip_sw_example_flash",
+        "chip_sw_example_rom",
         "chip_sw_gpio",
         "chip_sw_i2c_host_tx_rx",
         "chip_sw_mem_test",
@@ -2128,6 +2129,7 @@
         "chip_sw_dma_main_test",
         "chip_sw_entropy_src_smoketest",
         "chip_sw_example_flash",
+        "chip_sw_example_rom",
         "chip_sw_flash_ctrl_access",
         "chip_sw_flash_ctrl_access_jitter_en",
         "chip_sw_flash_ctrl_access_jitter_en_reduced_freq",
@@ -2154,6 +2156,7 @@
         "chip_sw_rstmgr_sw_rst",
         "chip_sw_rv_core_ibex_nmi_irq",
         "chip_sw_rv_core_ibex_rnd",
+        "chip_sw_rv_dm_access_after_wakeup",
         "chip_sw_rv_dm_ndm_reset_req_when_cpu_halted",
         "chip_sw_rv_plic_smoketest",
         "chip_sw_rv_timer_irq",
@@ -2234,6 +2237,7 @@
         "chip_sw_dma_main_test",
         "chip_sw_entropy_src_smoketest",
         "chip_sw_example_flash",
+        "chip_sw_example_rom",
         "chip_sw_flash_ctrl_access",
         "chip_sw_flash_ctrl_access_jitter_en",
         "chip_sw_flash_ctrl_access_jitter_en_reduced_freq",
@@ -2268,6 +2272,7 @@
         "chip_sw_rstmgr_sw_rst",
         "chip_sw_rv_core_ibex_nmi_irq",
         "chip_sw_rv_core_ibex_rnd",
+        "chip_sw_rv_dm_access_after_wakeup",
         "chip_sw_rv_dm_ndm_reset_req_when_cpu_halted",
         "chip_sw_rv_plic_smoketest",
         "chip_sw_rv_timer_irq",
diff --git a/hw/top_matcha/dv/env/seq_lib/chip_sw_rv_dm_access_after_wakeup_vseq.sv b/hw/top_matcha/dv/env/seq_lib/chip_sw_rv_dm_access_after_wakeup_vseq.sv
index 67120a3..1516e8b 100644
--- a/hw/top_matcha/dv/env/seq_lib/chip_sw_rv_dm_access_after_wakeup_vseq.sv
+++ b/hw/top_matcha/dv/env/seq_lib/chip_sw_rv_dm_access_after_wakeup_vseq.sv
@@ -1,3 +1,4 @@
+// Copyright 2023 Google LLC.
 // Copyright lowRISC contributors.
 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
 // SPDX-License-Identifier: Apache-2.0
@@ -17,6 +18,8 @@
     // Set up JTAG RV_DM TAP.
     cfg.chip_vif.tap_straps_if.drive(JtagTapRvDm);
     cfg.m_jtag_riscv_agent_cfg.is_rv_dm = 1;
+    // Wait a few clocks for the strap change to take effect before driving the JTAG interface
+    cfg.clk_rst_vif.wait_clks(5);
 
     // Attempt to activate RV_DM via JTAG.
     csr_wr(.ptr(cfg.jtag_dmi_ral.dmcontrol.dmactive), .value(1), .blocking(1), .predict(1));
@@ -96,6 +99,9 @@
 
     // We must reset the agent side also to stay synchronized with the design
     cfg.m_jtag_riscv_agent_cfg.m_jtag_agent_cfg.vif.do_trst_n(2);
+    // Wait for JTAG agent to come out of reset
+    cfg.clk_rst_vif.wait_clks(5);
+    // Reactivate DMI
     activate_jtag_dmi();
     exp_data = $urandom();
     csr_wr(
diff --git a/sw/device/tests/sim_dv/BUILD b/sw/device/tests/sim_dv/BUILD
index d5823a8..4686139 100644
--- a/sw/device/tests/sim_dv/BUILD
+++ b/sw/device/tests/sim_dv/BUILD
@@ -315,6 +315,31 @@
     ],
 )
 
+matcha_dv_test(
+    name = "rv_dm_access_after_wakeup",
+    srcs = ["rv_dm_access_after_wakeup.c"],
+    deps = [
+        "//sw/device/lib/dif:alert_handler",
+        "//sw/device/lib/dif:pinmux",
+        "//sw/device/lib/dif:rstmgr",
+        "//sw/device/lib/dif:rv_plic_sec",
+        "//sw/device/lib/testing:alert_handler_testutils",
+        "//sw/device/lib/testing:pinmux_testutils",
+        "//sw/device/tests:test_dv_lib",
+        "@lowrisc_opentitan//sw/device/lib/base:abs_mmio",
+        "@lowrisc_opentitan//sw/device/lib/dif:aon_timer",
+        "@lowrisc_opentitan//sw/device/lib/dif:flash_ctrl",
+        "@lowrisc_opentitan//sw/device/lib/dif:pwrmgr",
+        "@lowrisc_opentitan//sw/device/lib/dif:rv_timer",
+        "@lowrisc_opentitan//sw/device/lib/dif:sysrst_ctrl",
+        "@lowrisc_opentitan//sw/device/lib/testing:aon_timer_testutils",
+        "@lowrisc_opentitan//sw/device/lib/testing:flash_ctrl_testutils",
+        "@lowrisc_opentitan//sw/device/lib/testing:pwrmgr_testutils",
+        "@lowrisc_opentitan//sw/device/lib/testing:rstmgr_testutils",
+        "@lowrisc_opentitan//sw/device/lib/testing:rv_plic_testutils",
+    ],
+)
+
 ################################################################################
 #  Place the Opentitan-sourced DV test below.                                  #
 #  Opentitan DV binary build flow does not support centOS7, so we pull the     #
diff --git a/sw/device/tests/sim_dv/rv_dm_access_after_wakeup.c b/sw/device/tests/sim_dv/rv_dm_access_after_wakeup.c
new file mode 100644
index 0000000..bf0f97b
--- /dev/null
+++ b/sw/device/tests/sim_dv/rv_dm_access_after_wakeup.c
@@ -0,0 +1,142 @@
+// Copyright 2023 Google LLC.
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+#include "hw/top_matcha/sw/autogen/top_matcha.h"
+#include "pwrmgr_regs.h"
+#include "sw/device/lib/dif/dif_pinmux.h"
+#include "sw/device/lib/dif/dif_pwrmgr.h"
+#include "sw/device/lib/dif/dif_rv_plic.h"
+#include "sw/device/lib/dif/dif_sysrst_ctrl.h"
+#include "sw/device/lib/runtime/ibex.h"
+#include "sw/device/lib/runtime/irq.h"
+#include "sw/device/lib/runtime/log.h"
+#include "sw/device/lib/testing/aon_timer_testutils.h"
+#include "sw/device/lib/testing/pwrmgr_testutils.h"
+#include "sw/device/lib/testing/rstmgr_testutils.h"
+#include "sw/device/lib/testing/rv_plic_testutils.h"
+#include "sw/device/lib/testing/test_framework/check.h"
+#include "sw/device/lib/testing/test_framework/ottf_main.h"
+#include "sw/device/lib/testing/test_framework/status.h"
+
+/*
+ * RV_DM access after wakeup test.
+ */
+
+OTTF_DEFINE_TEST_CONFIG();
+
+enum {
+  kSoftwareBarrierTimeoutUsec = 24,
+};
+
+// This location will be update from SV
+static volatile const uint8_t kSoftwareBarrier = 0;
+
+// Handle to the plic
+dif_rv_plic_t rv_plic;
+
+/**
+ * External interrupt handler.
+ *
+ * Simply claim the interrupt and does nothing else.
+ */
+void ottf_external_isr(void) {
+  dif_rv_plic_irq_id_t plic_irq_id;
+  CHECK_DIF_OK(
+      dif_rv_plic_irq_claim(&rv_plic, kTopMatchaPlicTargetIbex0, &plic_irq_id));
+}
+
+/**
+ * Put the device to sleep.
+ *
+ * @param pwrmgr A handle to the power manager.
+ * @param deep_sleep Whether or not to enter a deep sleep.
+ */
+static void put_to_sleep(dif_pwrmgr_t *pwrmgr, bool deep_sleep) {
+  dif_pwrmgr_domain_config_t cfg;
+  CHECK_DIF_OK(dif_pwrmgr_get_domain_config(pwrmgr, &cfg));
+  cfg = cfg & (kDifPwrmgrDomainOptionIoClockInLowPower |
+               kDifPwrmgrDomainOptionUsbClockInLowPower |
+               kDifPwrmgrDomainOptionUsbClockInActivePower) |
+        (!deep_sleep ? kDifPwrmgrDomainOptionMainPowerInLowPower : 0);
+
+  pwrmgr_testutils_enable_low_power(pwrmgr, kDifPwrmgrWakeupRequestSourceOne,
+                                    cfg);
+  LOG_INFO("%s",
+           deep_sleep ? "Entering deep sleep." : "Entering normal sleep.");
+  wait_for_interrupt();
+}
+
+bool test_main(void) {
+  // Enable global and external IRQ at Ibex.
+  irq_global_ctrl(true);
+  irq_external_ctrl(true);
+
+  dif_pinmux_t pinmux;
+  dif_pwrmgr_t pwrmgr;
+  dif_sysrst_ctrl_t sysrst_ctrl;
+
+  CHECK_DIF_OK(dif_pinmux_init(
+      mmio_region_from_addr(TOP_MATCHA_PINMUX_AON_BASE_ADDR), &pinmux));
+  CHECK_DIF_OK(dif_pwrmgr_init(
+      mmio_region_from_addr(TOP_MATCHA_PWRMGR_AON_BASE_ADDR), &pwrmgr));
+  CHECK_DIF_OK(dif_rv_plic_init(
+      mmio_region_from_addr(TOP_MATCHA_RV_PLIC_BASE_ADDR), &rv_plic));
+  CHECK_DIF_OK(dif_sysrst_ctrl_init(
+      mmio_region_from_addr(TOP_MATCHA_SYSRST_CTRL_AON_BASE_ADDR),
+      &sysrst_ctrl));
+
+  switch (rstmgr_testutils_reason_get()) {
+    case kDifRstmgrResetInfoPor:  // The first power-up.
+      LOG_INFO("Software Setup.");
+      // Wait for sequence to run its checks.
+      IBEX_SPIN_FOR(kSoftwareBarrier == 1, kSoftwareBarrierTimeoutUsec);
+
+      // Enable all the AON interrupts used in this test.
+      rv_plic_testutils_irq_range_enable(&rv_plic, kTopMatchaPlicTargetIbex0,
+                                         kTopMatchaPlicIrqIdPwrmgrAonWakeup,
+                                         kTopMatchaPlicIrqIdPwrmgrAonWakeup);
+
+      // Enable pwrmgr interrupt.
+      CHECK_DIF_OK(dif_pwrmgr_irq_set_enabled(&pwrmgr, kDifPwrmgrIrqWakeup,
+                                              kDifToggleEnabled));
+
+      // Set up power button as wake up source.
+      dif_sysrst_ctrl_input_change_config_t config = {
+          .input_changes = kDifSysrstCtrlInputPowerButtonH2L,
+          .debounce_time_threshold = 1,  // 5us
+      };
+      CHECK_DIF_OK(
+          dif_sysrst_ctrl_input_change_detect_configure(&sysrst_ctrl, config));
+      CHECK_DIF_OK(dif_pinmux_input_select(
+          &pinmux, kTopMatchaPinmuxPeripheralInSysrstCtrlAonPwrbIn,
+          kTopMatchaPinmuxInselIor13));
+
+      // Put the device in a normal sleep.
+      put_to_sleep(&pwrmgr, /*deep_sleep=*/false);
+      LOG_INFO("Waking up from normal sleep.");
+
+      // Clean up wakeup source after sleep.
+      CHECK_DIF_OK(dif_sysrst_ctrl_ulp_wakeup_clear_status(&sysrst_ctrl));
+
+      // Wait for sequence to run its checks.
+      IBEX_SPIN_FOR(kSoftwareBarrier == 2, kSoftwareBarrierTimeoutUsec);
+
+      // Put the device in a deep sleep.
+      put_to_sleep(&pwrmgr, /*deep_sleep=*/true);
+      break;
+
+    case kDifRstmgrResetInfoLowPowerExit:  // The power up after deep sleep.
+      LOG_INFO("Waking up from deep sleep.");
+
+      // Wait for sequence to finish before returning.
+      IBEX_SPIN_FOR(kSoftwareBarrier == 3, kSoftwareBarrierTimeoutUsec);
+      return true;
+
+    default:
+      LOG_ERROR("Device was reset by an unexpected source.");
+      break;
+  }
+  return false;
+}
