swd: Add support for connect_assert_srst for SWD.
authorFredrik Hederstierna <fredrik@hederstierna.com>
Thu, 15 Oct 2015 04:49:58 +0000 (06:49 +0200)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Mon, 4 Jul 2016 22:44:02 +0000 (23:44 +0100)
Today the reset option for connect_assert_srst is not done for SWD.
This patch adds this to SWD and make it possible to connect to targets which might disable JTAG interface when running.

Change-Id: Ib89f7cf59b628e8f0b5fca9dd9e362e383c4b99f
Signed-off-by: Fredrik Hederstierna <fredrik@hederstierna.com>
Reviewed-on: http://openocd.zylin.com/3018
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
src/target/adi_v5_swd.c

index 60223f91163c134f7f8f4aa2034c24243051476c..41ddbd7895698aae256955a04993d1702c30a2e3 100644 (file)
@@ -107,6 +107,18 @@ static int swd_connect(struct adiv5_dap *dap)
         * MUST READ DPIDR
         */
 
+       /* Check if we should reset srst already when connecting, but not if reconnecting. */
+       if (!dap->do_reconnect) {
+               enum reset_types jtag_reset_config = jtag_get_reset_config();
+
+               if (jtag_reset_config & RESET_CNCT_UNDER_SRST) {
+                       if (jtag_reset_config & RESET_SRST_NO_GATING)
+                               swd_add_reset(1);
+                       else
+                               LOG_WARNING("\'srst_nogate\' reset_config option is required");
+               }
+       }
+
        /* Note, debugport_init() does setup too */
        jtag_interface->swd->switch_seq(JTAG_TO_SWD);
 
@@ -412,6 +424,8 @@ static int swd_init(struct command_context *ctx)
        /* Force the DAP's ops vector for SWD mode.
         * messy - is there a better way? */
        arm->dap->ops = &swd_dap_ops;
+       /* First connect after init is not reconnecting. */
+       dap->do_reconnect = false;
 
        return swd_connect(dap);
 }