prevent abort via polling during jtag_reset

Observed:

  openocd: core.c:318: jtag_checks: Assertion `jtag_trst == 0' failed.

The issue was that nothing disabled background polling during calls
from the TCL shell to "jtag_reset 1 1".  Fix by moving the existing
poll-disable mechanism to the JTAG layer where it belongs, and then
augmenting it to always pay attention to TRST and SRST.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
This commit is contained in:
David Brownell
2009-10-08 11:14:00 -07:00
parent 40c9668b70
commit a8234af06c
3 changed files with 51 additions and 9 deletions

View File

@@ -137,6 +137,32 @@ int jtag_error_clear(void)
return temp;
}
/************/
static bool jtag_poll = 1;
bool is_jtag_poll_safe(void)
{
/* Polling can be disabled explicitly with set_enabled(false).
* It is also implicitly disabled while TRST is active and
* while SRST is gating the JTAG clock.
*/
if (!jtag_poll || jtag_trst != 0)
return false;
return jtag_srst == 0 || (jtag_reset_config & RESET_SRST_NO_GATING);
}
bool jtag_poll_get_enabled(void)
{
return jtag_poll;
}
void jtag_poll_set_enabled(bool value)
{
jtag_poll = value;
}
/************/
jtag_tap_t *jtag_all_taps(void)
{

View File

@@ -737,4 +737,21 @@ int jtag_get_error(void);
*/
int jtag_error_clear(void);
/**
* Return true if it's safe for a background polling task to access the
* JTAG scan chain. Polling may be explicitly disallowed, and is also
* unsafe while nTRST is active or the JTAG clock is gated off.,
*/
bool is_jtag_poll_safe(void);
/**
* Return flag reporting whether JTAG polling is disallowed.
*/
bool jtag_poll_get_enabled(void);
/**
* Assign flag reporting whether JTAG polling is disallowed.
*/
void jtag_poll_set_enabled(bool value);
#endif /* JTAG_H */