aboutsummaryrefslogtreecommitdiff
path: root/src/target/adi_v5_swd.c
diff options
context:
space:
mode:
authorFredrik Hederstierna <fredrik@hederstierna.com>2015-10-15 06:49:58 +0200
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2016-07-04 23:44:02 +0100
commit12e4a2a220de4ddca5a429432b089471ee9bc28a (patch)
tree35ed4d1f1a6055f99d940f5988e570b0c59f04fd /src/target/adi_v5_swd.c
parent12ff09f7f27a707fe42226262f55b8ce8351cbf9 (diff)
downloadriscv-openocd-12e4a2a220de4ddca5a429432b089471ee9bc28a.zip
riscv-openocd-12e4a2a220de4ddca5a429432b089471ee9bc28a.tar.gz
riscv-openocd-12e4a2a220de4ddca5a429432b089471ee9bc28a.tar.bz2
swd: Add support for connect_assert_srst for SWD.
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>
Diffstat (limited to 'src/target/adi_v5_swd.c')
-rw-r--r--src/target/adi_v5_swd.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/target/adi_v5_swd.c b/src/target/adi_v5_swd.c
index 60223f9..41ddbd7 100644
--- a/src/target/adi_v5_swd.c
+++ b/src/target/adi_v5_swd.c
@@ -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);
}