* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
***************************************************************************/
/**
#define JTAG_ACK_OK_FAULT 0x2
#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)
while (dap->ack != JTAG_ACK_OK_FAULT) {
if (dap->ack == JTAG_ACK_WAIT) {
if ((timeval_ms()-then) > 1000) {
- /* NOTE: this would be a good spot
- * to use JTAG_DP_ABORT.
- */
LOG_WARNING("Timeout (1000ms) waiting "
"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;
}
} else {
fields[0].num_bits = 32;
fields[0].out_value = NULL;
- fields[0].in_value = (void *) data;
+ fields[0].in_value = (uint8_t *) data;
jtag_add_dr_scan(jtag_info->tap, 1, fields, TAP_IDLE);