Skip to content
Snippets Groups Projects
Commit 704fc7eb authored by Evan Hunter's avatar Evan Hunter Committed by Spencer Oliver
Browse files

Add abort when JTAG-DP transaction times out.


Fixes system hang for devices that don't ignore
transactions to bad addresses.

Change-Id: Ia98344d7efc12951ef79dbc82b8f792b70a22cee
Signed-off-by: default avatarEvan Hunter <ehunter@broadcom.com>
Reviewed-on: http://openocd.zylin.com/1115


Tested-by: jenkins
Reviewed-by: default avatarSpencer Oliver <spen@spen-soft.co.uk>
parent 2a8a89ed
Branches
Tags
No related merge requests found
...@@ -50,6 +50,8 @@ ...@@ -50,6 +50,8 @@
#define JTAG_ACK_OK_FAULT 0x2 #define JTAG_ACK_OK_FAULT 0x2
#define JTAG_ACK_WAIT 0x1 #define JTAG_ACK_WAIT 0x1
static int jtag_ap_q_abort(struct adiv5_dap *dap, uint8_t *ack);
/*************************************************************************** /***************************************************************************
* *
* DPACC and APACC scanchain access through JTAG-DP (or SWJ-DP) * DPACC and APACC scanchain access through JTAG-DP (or SWJ-DP)
...@@ -232,12 +234,16 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap) ...@@ -232,12 +234,16 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap)
while (dap->ack != JTAG_ACK_OK_FAULT) { while (dap->ack != JTAG_ACK_OK_FAULT) {
if (dap->ack == JTAG_ACK_WAIT) { if (dap->ack == JTAG_ACK_WAIT) {
if ((timeval_ms()-then) > 1000) { if ((timeval_ms()-then) > 1000) {
/* NOTE: this would be a good spot
* to use JTAG_DP_ABORT.
*/
LOG_WARNING("Timeout (1000ms) waiting " LOG_WARNING("Timeout (1000ms) waiting "
"for ACK=OK/FAULT " "for ACK=OK/FAULT "
"in JTAG-DP transaction"); "in JTAG-DP transaction - aborting");
uint8_t ack;
int abort_ret = jtag_ap_q_abort(dap, &ack);
if (abort_ret != 0)
LOG_WARNING("Abort failed : return=%d ack=%d", abort_ret, ack);
return ERROR_JTAG_DEVICE_ERROR; return ERROR_JTAG_DEVICE_ERROR;
} }
} else { } else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment