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
