This is an automated email from Gerrit.

Andrey Smirnov ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/2112

-- gerrit

commit 8f4c1865b85cd4b4dd435fe7a0beabda8c57ef0a
Author: Andrey Smirnov <[email protected]>
Date:   Mon Apr 14 09:47:25 2014 -0700

    adi_v5_cmisis_dap: Separate ABORT from clearing sticky errors
    
    We don't need to do full blown AP ABORT in case of CMSIS-DAP errors,
    and the code that was in place was not doing that(issuing AP ABORT)
    anyway.
    
    Change-Id: Ide83b1f8875d725da6cb0d53aae8229f8c6316b3
    Signed-off-by: Andrey Smirnov <[email protected]>

diff --git a/src/target/adi_v5_cmsis_dap.c b/src/target/adi_v5_cmsis_dap.c
index 7df4cc7..72ea8d3 100644
--- a/src/target/adi_v5_cmsis_dap.c
+++ b/src/target/adi_v5_cmsis_dap.c
@@ -54,14 +54,26 @@
 /* YUK! - but this is currently a global.... */
 extern struct jtag_interface *jtag_interface;
 
-static int (cmsis_dap_queue_ap_abort)(struct adiv5_dap *dap, uint8_t *ack)
+static int cmsis_dap_clear_sticky_errors(struct adiv5_dap *dap)
 {
-       LOG_DEBUG("CMSIS-ADI: cmsis_dap_queue_ap_abort");
+       LOG_DEBUG("CMSIS-ADI: %s", __func__);
 
-       /* FIXME: implement this properly cmsis-dap has DAP_WriteABORT()
-        * for now just hack @ everything */
-       return jtag_interface->swd->write_reg(
-                       (CMSIS_CMD_DP | CMSIS_CMD_WRITE | 
CMSIS_CMD_A32(DP_ABORT)), 0x1e);
+       const struct swd_driver *swd = jtag_interface->swd;
+       assert(swd);
+
+       return swd->write_reg(swd_cmd(false,  false, DP_ABORT),
+                             STKCMPCLR | STKERRCLR | WDERRCLR | ORUNERRCLR);
+}
+
+static int cmsis_dap_queue_ap_abort(struct adiv5_dap *dap, uint8_t *ack)
+{
+       LOG_DEBUG("CMSIS-ADI: %s", __func__);
+
+       const struct swd_driver *swd = jtag_interface->swd;
+       assert(swd);
+
+       return swd->write_reg(swd_cmd(false,  false, DP_ABORT),
+                             DAPABORT | STKCMPCLR | STKERRCLR | WDERRCLR | 
ORUNERRCLR);
 }
 
 static int cmsis_dap_queue_dp_read(struct adiv5_dap *dap, unsigned reg, 
uint32_t *data)
@@ -71,11 +83,8 @@ static int cmsis_dap_queue_dp_read(struct adiv5_dap *dap, 
unsigned reg, uint32_t
        int retval = jtag_interface->swd->read_reg(
                        (CMSIS_CMD_DP | CMSIS_CMD_READ | CMSIS_CMD_A32(reg)), 
data);
 
-       if (retval != ERROR_OK) {
-               /* fault response */
-               uint8_t ack = retval & 0xff;
-               cmsis_dap_queue_ap_abort(dap, &ack);
-       }
+       if (retval != ERROR_OK)
+               cmsis_dap_clear_sticky_errors(dap);
 
        return retval;
 }
@@ -107,11 +116,8 @@ static int (cmsis_dap_queue_dp_write)(struct adiv5_dap 
*dap, unsigned reg, uint3
        int retval = jtag_interface->swd->write_reg(
                        (CMSIS_CMD_DP | CMSIS_CMD_WRITE | CMSIS_CMD_A32(reg)), 
data);
 
-       if (retval != ERROR_OK) {
-               /* fault response */
-               uint8_t ack = retval & 0xff;
-               cmsis_dap_queue_ap_abort(dap, &ack);
-       }
+       if (retval != ERROR_OK)
+               cmsis_dap_clear_sticky_errors(dap);
 
        return retval;
 }
@@ -141,11 +147,8 @@ static int (cmsis_dap_queue_ap_read)(struct adiv5_dap 
*dap, unsigned reg, uint32
        retval = jtag_interface->swd->read_reg(
                        (CMSIS_CMD_AP | CMSIS_CMD_READ | CMSIS_CMD_A32(reg)), 
data);
 
-       if (retval != ERROR_OK) {
-               /* fault response */
-               uint8_t ack = retval & 0xff;
-               cmsis_dap_queue_ap_abort(dap, &ack);
-       }
+       if (retval != ERROR_OK)
+               cmsis_dap_clear_sticky_errors(dap);
 
        return retval;
 }
@@ -168,11 +171,8 @@ static int (cmsis_dap_queue_ap_write)(struct adiv5_dap 
*dap, unsigned reg, uint3
        retval = jtag_interface->swd->write_reg(
                        (CMSIS_CMD_AP | CMSIS_CMD_WRITE | CMSIS_CMD_A32(reg)), 
data);
 
-       if (retval != ERROR_OK) {
-               /* fault response */
-               uint8_t ack = retval & 0xff;
-               cmsis_dap_queue_ap_abort(dap, &ack);
-       }
+       if (retval != ERROR_OK)
+               cmsis_dap_clear_sticky_errors(dap);
 
        return retval;
 }
@@ -186,11 +186,8 @@ static int (cmsis_dap_queue_ap_read_block)(struct 
adiv5_dap *dap, unsigned reg,
                        (CMSIS_CMD_AP | CMSIS_CMD_READ | 
CMSIS_CMD_A32(AP_REG_DRW)),
                        blocksize, buffer);
 
-       if (retval != ERROR_OK) {
-               /* fault response */
-               uint8_t ack = retval & 0xff;
-               cmsis_dap_queue_ap_abort(dap, &ack);
-       }
+       if (retval != ERROR_OK)
+               cmsis_dap_clear_sticky_errors(dap);
 
        return retval;
 }

-- 

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to