This is an automated email from Gerrit.

"Name of user not set <r.nooteb...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8073

-- gerrit

commit b5fbaadf1538e2dc21d9f06828f11ea90454d1e8
Author: RolfNoot <r.nooteb...@gmail.com>
Date:   Wed Dec 20 12:14:30 2023 +0100

    src/jtag: implemented SRST toggle
    
    Some targets can't connect-under-reset and need SRST toggle to wake
    from sleep in order to attach.
    
    Change-Id: I85f17b0036789a98fe0dedf5c33fe84145e4afd7
    Signed-off-by: RolfNoot <r.nooteb...@gmail.com>

diff --git a/src/jtag/core.c b/src/jtag/core.c
index e2af6c53d9..e2da74f93f 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -1877,6 +1877,21 @@ int adapter_resets(int trst, int srst)
        return ERROR_FAIL;
 }
 
+int adapter_toggles_reset(void)
+{
+       if (transport_is_swd() || transport_is_hla() || 
transport_is_dapdirect_jtag() ||
+               transport_is_dapdirect_swd() || transport_is_swim()) {
+               adapter_system_reset(1);
+               adapter_system_reset(0);
+               return ERROR_OK;
+       } else if (get_current_transport())
+               LOG_ERROR("reset is not supported on %s",
+                       get_current_transport()->name);
+       else
+               LOG_ERROR("transport is not selected");
+       return ERROR_FAIL;
+}
+
 int adapter_assert_reset(void)
 {
        if (transport_is_jtag()) {
diff --git a/src/jtag/interface.h b/src/jtag/interface.h
index 3df424086d..27566c9e00 100644
--- a/src/jtag/interface.h
+++ b/src/jtag/interface.h
@@ -355,6 +355,7 @@ struct adapter_driver {
 extern const char * const jtag_only[];
 
 int adapter_resets(int assert_trst, int assert_srst);
+int adapter_toggles_reset(void);
 int adapter_assert_reset(void);
 int adapter_deassert_reset(void);
 int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
diff --git a/src/target/adi_v5_swd.c b/src/target/adi_v5_swd.c
index 1b743657c2..59aa330c40 100644
--- a/src/target/adi_v5_swd.c
+++ b/src/target/adi_v5_swd.c
@@ -402,7 +402,7 @@ static int swd_connect(struct adiv5_dap *dap)
                        if (jtag_reset_config & RESET_SRST_NO_GATING)
                                adapter_assert_reset();
                        else
-                               LOG_WARNING("\'srst_nogate\' reset_config 
option is required");
+                               adapter_toggles_reset();
                }
        }
 

-- 

Reply via email to