ftdi_set_signal(trst, '0');
else
LOG_ERROR("Can't assert TRST: nTRST signal is not defined");
- } else if (trst && cmd->cmd.reset->trst == 0) {
+ } else if (trst && jtag_get_reset_config() & RESET_HAS_TRST &&
+ cmd->cmd.reset->trst == 0) {
if (jtag_get_reset_config() & RESET_TRST_OPEN_DRAIN)
ftdi_set_signal(trst, 'z');
else
ftdi_set_signal(srst, '0');
else
LOG_ERROR("Can't assert SRST: nSRST signal is not defined");
- } else if (srst && cmd->cmd.reset->srst == 0) {
+ } else if (srst && jtag_get_reset_config() & RESET_HAS_SRST &&
+ cmd->cmd.reset->srst == 0) {
if (jtag_get_reset_config() & RESET_SRST_PUSH_PULL)
ftdi_set_signal(srst, '1');
else
mpsse_loopback_config(mpsse_ctx, false);
- /* Set a low default */
- freq = mpsse_set_frequency(mpsse_ctx, 1000);
-
- if (swd_mode)
- ftdi_swd_switch_seq(NULL, JTAG_TO_SWD);
- else
- ftdi_swd_switch_seq(NULL, SWD_TO_JTAG);
+ freq = mpsse_set_frequency(mpsse_ctx, jtag_get_speed_khz() * 1000);
return mpsse_flush(mpsse_ctx);
}
{
mpsse_close(mpsse_ctx);
+ free(swd_cmd_queue);
+
return ERROR_OK;
}
}
for (size_t i = 0; i < swd_cmd_queue_length; i++) {
- int ack = buf_get_u32(&swd_cmd_queue[i].trn_ack_data_parity_trn, 1, 3);
+ int ack = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1, 3);
LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
1 + 3 + (swd_cmd_queue[i].cmd & SWD_CMD_RnW ? 0 : 1), 32));
if (ack != SWD_ACK_OK) {
- queued_retval = ack;
+ queued_retval = ack == SWD_ACK_WAIT ? ERROR_WAIT : ERROR_FAIL;
goto skip;
} else if (swd_cmd_queue[i].cmd & SWD_CMD_RnW) {