aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-11-26 12:42:41 +0000
committerFreddie Chopin <freddie.chopin@gmail.com>2012-12-10 16:13:52 +0000
commitc91dbd41ba5490b1b63617bab42624e45f5cd3ad (patch)
tree1d313f3cd1bd04c79a766e57f2285863a7bfe462 /src
parent539a9cf20831c96588c0db62b871f7438067b509 (diff)
jtag: add connect_type reset_config mode flag
This adds the ability to request to the adapter how we want to connect to the target, eg. while srst is asserted or not. This ability can very handy for connecting to unresponsive targets. A prerequisite is that the target supports srst_nogate. Change-Id: I0f7c9475160048e8a963e16077754f5403ac8325 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/976 Reviewed-by: Paul Fertser <fercerpav@gmail.com> Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/jtag/adapter.c28
-rw-r--r--src/jtag/jtag.h1
2 files changed, 26 insertions, 3 deletions
diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c
index ec658270..5d29bd79 100644
--- a/src/jtag/adapter.c
+++ b/src/jtag/adapter.c
@@ -289,6 +289,22 @@ COMMAND_HANDLER(handle_reset_config_command)
if (m)
goto next;
+ /* connect_type - only valid when srst_nogate */
+ m = RESET_CNCT_UNDER_SRST;
+ if (strcmp(*CMD_ARGV, "connect_assert_srst") == 0)
+ tmp |= RESET_CNCT_UNDER_SRST;
+ else if (strcmp(*CMD_ARGV, "connect_deassert_srst") == 0)
+ /* connect normally - default */;
+ else
+ m = 0;
+ if (mask & m) {
+ LOG_ERROR("extra reset_config %s spec (%s)",
+ "connect_type", *CMD_ARGV);
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+ if (m)
+ goto next;
+
/* caller provided nonsense; fail */
LOG_ERROR("unknown reset_config flag (%s)", *CMD_ARGV);
return ERROR_COMMAND_SYNTAX_ERROR;
@@ -314,7 +330,7 @@ next:
/*
* Display the (now-)current reset mode
*/
- char *modes[5];
+ char *modes[6];
/* minimal JTAG has neither SRST nor TRST (so that's the default) */
switch (new_cfg & (RESET_HAS_TRST | RESET_HAS_SRST)) {
@@ -368,14 +384,20 @@ next:
modes[4] = " srst_push_pull";
else
modes[4] = " srst_open_drain";
+
+ if (new_cfg & RESET_CNCT_UNDER_SRST)
+ modes[5] = " connect_assert_srst";
+ else
+ modes[5] = " connect_deassert_srst";
} else {
modes[2] = "";
modes[4] = "";
+ modes[5] = "";
}
- command_print(CMD_CTX, "%s %s%s%s%s",
+ command_print(CMD_CTX, "%s %s%s%s%s%s",
modes[0], modes[1],
- modes[2], modes[3], modes[4]);
+ modes[2], modes[3], modes[4], modes[5]);
return ERROR_OK;
}
diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h
index da5e025f..3d2146c3 100644
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -266,6 +266,7 @@ enum reset_types {
RESET_TRST_OPEN_DRAIN = 0x10,
RESET_SRST_PUSH_PULL = 0x20,
RESET_SRST_NO_GATING = 0x40,
+ RESET_CNCT_UNDER_SRST = 0x80
};
enum reset_types jtag_get_reset_config(void);