srst_gates_jtag option. at91sam9260 needs retesting, and possibly srst_gates_jtag added to reset_config. Could i.MX27 be a case where srst does not pull trst, but really srst gates jtag clock?

git-svn-id: svn://svn.berlios.de/openocd/trunk@2720 b42882b7-edfa-0310-969c-e2dbd0fdcd60
__archive__
oharboe 2009-09-17 11:23:41 +00:00
parent cb7ad25c04
commit 016e7ebbfa
4 changed files with 25 additions and 1 deletions

View File

@ -2018,6 +2018,10 @@ haven't seen hardware with such a bug, and can be worked around).
@option{combined} implies both @option{srst_pulls_trst} and
@option{trst_pulls_srst}.
@option{srst_gates_jtag} indicates that asserting SRST gates the
JTAG clock. This means that no communication can happen on JTAG
while SRST is asserted.
The optional @var{trst_type} and @var{srst_type} parameters allow the
driver mode of each reset line to be specified. These values only affect
JTAG interfaces with support for different driver modes, like the Amontec

View File

@ -277,6 +277,7 @@ enum reset_types {
RESET_TRST_PULLS_SRST = 0x8,
RESET_TRST_OPEN_DRAIN = 0x10,
RESET_SRST_PUSH_PULL = 0x20,
RESET_SRST_GATES_JTAG = 0x40,
};
enum reset_types jtag_get_reset_config(void);

View File

@ -845,6 +845,14 @@ static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *
int tmp = 0;
int m;
m = RESET_SRST_GATES_JTAG;
tmp = 0;
if (strcmp(*args, "srst_gates_jtag") == 0)
{
tmp = RESET_SRST_GATES_JTAG;
goto next;
}
/* signals */
m = RESET_HAS_TRST | RESET_HAS_SRST;
if (strcmp(*args, "none") == 0)

View File

@ -1021,6 +1021,17 @@ int arm7_9_assert_reset(target_t *target)
return ERROR_FAIL;
}
/* at this point trst has been asserted/deasserted once. We want to
* program embedded ice while SRST is asserted, but some CPUs gate
* the JTAG clock while SRST is asserted
*/
bool srst_asserted = false;
if (((jtag_reset_config & RESET_SRST_PULLS_TRST) == 0) && ((jtag_reset_config & RESET_SRST_GATES_JTAG) == 0))
{
jtag_add_reset(0, 1);
srst_asserted = true;
}
if (target->reset_halt)
{
/*
@ -1053,7 +1064,7 @@ int arm7_9_assert_reset(target_t *target)
if (jtag_reset_config & RESET_SRST_PULLS_TRST)
{
jtag_add_reset(1, 1);
} else
} else if (!srst_asserted)
{
jtag_add_reset(0, 1);
}