This is an automated email from Gerrit.

Andreas Fritiofson (andreas.fritiof...@gmail.com) just uploaded a new patch set 
to Gerrit, which you can find at http://openocd.zylin.com/1956

-- gerrit

commit 7ec912c234bd28839b81a4659bc842f7b423003b
Author: Andreas Fritiofson <andreas.fritiof...@gmail.com>
Date:   Sun Feb 16 17:33:28 2014 +0100

    adi_v5_swd: Separate sticky error clearing from AP abort
    
    Swd_queue_ap_abort should set DAPABORT, not only clear sticky errors.
    However, DAPABORT should not be set as soon as there is a single
    FAULT/WAIT response. It's an "emergency only" operations for use only when
    the AP have stalled the transfer for a long time. So these need to be
    separate functions.
    
    Change-Id: I37618447884faad54d846c2b07fa668ad505919d
    Signed-off-by: Andreas Fritiofson <andreas.fritiof...@gmail.com>

diff --git a/src/target/adi_v5_swd.c b/src/target/adi_v5_swd.c
index ec97d10..104832e 100644
--- a/src/target/adi_v5_swd.c
+++ b/src/target/adi_v5_swd.c
@@ -72,7 +72,7 @@ static int swd_finish_read(struct adiv5_dap *dap)
 static int (swd_queue_dp_write)(struct adiv5_dap *dap, unsigned reg,
                uint32_t data);
 
-static int (swd_queue_ap_abort)(struct adiv5_dap *dap, uint8_t *ack)
+static int swd_clear_sticky_errors(struct adiv5_dap *dap)
 {
        const struct swd_driver *swd = jtag_interface->swd;
        assert(swd);
@@ -81,6 +81,15 @@ static int (swd_queue_ap_abort)(struct adiv5_dap *dap, 
uint8_t *ack)
                STKCMPCLR | STKERRCLR | WDERRCLR | ORUNERRCLR);
 }
 
+static int swd_queue_ap_abort(struct adiv5_dap *dap, uint8_t *ack)
+{
+       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);
+}
+
 /** Select the DP register bank matching bits 7:4 of reg. */
 static int swd_queue_dp_bankselect(struct adiv5_dap *dap, unsigned reg)
 {
@@ -114,8 +123,7 @@ static int swd_queue_dp_read(struct adiv5_dap *dap, 
unsigned reg,
 
        if (retval != ERROR_OK) {
                /* fault response */
-               uint8_t ack = retval & 0xff;
-               swd_queue_ap_abort(dap, &ack);
+               swd_clear_sticky_errors(dap);
        }
 
        return retval;
@@ -142,8 +150,7 @@ static int (swd_queue_dp_write)(struct adiv5_dap *dap, 
unsigned reg,
 
        if (retval != ERROR_OK) {
                /* fault response */
-               uint8_t ack = retval & 0xff;
-               swd_queue_ap_abort(dap, &ack);
+               swd_clear_sticky_errors(dap);
        }
 
        return retval;
@@ -179,8 +186,7 @@ static int (swd_queue_ap_read)(struct adiv5_dap *dap, 
unsigned reg,
 
        if (retval != ERROR_OK) {
                /* fault response */
-               uint8_t ack = retval & 0xff;
-               swd_queue_ap_abort(dap, &ack);
+               swd_clear_sticky_errors(dap);
                return retval;
        }
 
@@ -207,8 +213,7 @@ static int (swd_queue_ap_write)(struct adiv5_dap *dap, 
unsigned reg,
 
        if (retval != ERROR_OK) {
                /* fault response */
-               uint8_t ack = retval & 0xff;
-               swd_queue_ap_abort(dap, &ack);
+               swd_clear_sticky_errors(dap);
        }
 
        return retval;
@@ -453,7 +458,7 @@ static int swd_init(struct command_context *ctx)
                LOG_INFO("SWD IDCODE %#8.8" PRIx32, idcode);
 
        /* force clear all sticky faults */
-       swd_queue_ap_abort(dap, &ack);
+       swd_clear_sticky_errors(dap);
 
        /* this is a workaround to get polling working */
        jtag_add_reset(0, 0);

-- 

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to