]> git.sur5r.net Git - openocd/blobdiff - src/target/adi_v5_jtag.c
at91samd: Remove 'first' and 'last' checks in 'samd_erase'
[openocd] / src / target / adi_v5_jtag.c
index e500416b6e10587ffcb6c0fa544a7a4e60a586b4..7f61563f4e45aa15e6a18879bd3ad38b90530512 100644 (file)
@@ -23,7 +23,7 @@
  *   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.
  ***************************************************************************/
 
 /**
@@ -50,6 +50,8 @@
 #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)
@@ -232,12 +234,16 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap)
                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 {
@@ -350,7 +356,7 @@ static int jtag_idcode_q_read(struct adiv5_dap *dap,
 
        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);