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__
parent
cb7ad25c04
commit
016e7ebbfa
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue