diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-10-08 11:14:00 -0700 |
---|---|---|
committer | David Brownell <dbrownell@users.sourceforge.net> | 2009-10-08 11:14:00 -0700 |
commit | a8234af06c16500426a421910886d26a46e6fa53 (patch) | |
tree | 557a5d04fb74e34980be1ac433217812ae1ade93 /src/jtag/core.c | |
parent | 40c9668b703389890d30ab5a410e39f6f1e5251e (diff) |
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>
Diffstat (limited to 'src/jtag/core.c')
-rw-r--r-- | src/jtag/core.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c index b8235eb1..bdfd6e5b 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -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) { |