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>
This commit is contained in:
Spencer Oliver 2012-11-26 12:42:41 +00:00 committed by Freddie Chopin
parent 539a9cf208
commit c91dbd41ba
3 changed files with 41 additions and 7 deletions

View File

@ -3156,10 +3156,9 @@ from a particular combination of interface and board.
with a board that only wires up SRST.)
The @var{mode_flag} options can be specified in any order, but only one
of each type -- @var{signals}, @var{combination},
@var{gates},
@var{trst_type},
and @var{srst_type} -- may be specified at a time.
of each type -- @var{signals}, @var{combination}, @var{gates},
@var{trst_type}, @var{srst_type} and @var{connect_type}
-- may be specified at a time.
If you don't provide a new value for a given type, its previous
value (perhaps the default) is unchanged.
For example, this means that you don't need to say anything at all about
@ -3201,6 +3200,18 @@ JTAG clock. This means that no communication can happen on JTAG
while SRST is asserted.
Its converse is @option{srst_nogate}, indicating that JTAG commands
can safely be issued while SRST is active.
@item
The @var{connect_type} tokens control flags that describe some cases where
SRST is asserted while connecting to the target. @option{srst_nogate}
is required to use this option.
@option{connect_deassert_srst} (default)
indicates that SRST will not be asserted while connecting to the target.
Its converse is @option{connect_assert_srst}, indicating that SRST will
be asserted before any target connection.
Only some targets support this feature, STM32 and STR9 are examples.
This feature is useful if you are unable to connect to your target due
to incorrect options byte config or illegal program execution.
@end itemize
The optional @var{trst_type} and @var{srst_type} parameters allow the

View File

@ -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;
}

View File

@ -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);