diff options
-rw-r--r-- | src/target/arm_adi_v5.c | 22 | ||||
-rw-r--r-- | src/transport/swd_core.c | 6 | ||||
-rw-r--r-- | src/transport/swd_libswd_drv_openocd.c | 2 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c index b7a8d514..88a5d3b8 100644 --- a/src/target/arm_adi_v5.c +++ b/src/target/arm_adi_v5.c @@ -1096,9 +1096,21 @@ int ahbap_debugport_init(struct adiv5_dap *dap) if (retval != ERROR_OK) return retval; - retval = dap_queue_dp_write(dap, DP_CTRL_STAT, SSTICKYERR); - if (retval != ERROR_OK) - return retval; + //Sticky Flags handling is different for JTAG and SWD. + //TODO: Create one function that will take care of error handling based on transport type. + if ((strncmp(jtag_interface->transport->name, "swd", 3)==0)) { + //Clear error flags on SW-DP + retval = dap_queue_dp_write(dap, DP_ABORT, \ + SWD_DP_ABORT_ORUNERRCLR|SWD_DP_ABORT_WDERRCLR \ + |SWD_DP_ABORT_STKERRCLR|SWD_DP_ABORT_STKCMPCLR); + if (retval != ERROR_OK) + return retval; + } else { + //Clear error flags on JTAG-DP + retval = dap_queue_dp_write(dap, DP_CTRL_STAT, SSTICKYERR); + if (retval != ERROR_OK) + return retval; + } retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); if (retval != ERROR_OK) @@ -1138,6 +1150,10 @@ int ahbap_debugport_init(struct adiv5_dap *dap) alive_sleep(10); } + //TC: Here CDBGPWRUPACK|CSYSPWRUPACK still may not be set! + //TODO: Should we proceed anyway? + if (cnt>=10) LOG_ERROR("CDBGPWRUPACK|CSYSPWRUPACK FLAGS NOT SET IN RESPONSE!"); + retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL); if (retval != ERROR_OK) return retval; diff --git a/src/transport/swd_core.c b/src/transport/swd_core.c index f1d4168d..cc9109d6 100644 --- a/src/transport/swd_core.c +++ b/src/transport/swd_core.c @@ -53,7 +53,7 @@ extern struct jtag_interface *jtag_interface; int oocd_swd_queue_idcode_read(struct adiv5_dap *dap, uint8_t *ack, uint32_t *data){ int retval; - retval=swd_dp_read_idcode(dap->ctx, SWD_OPERATION_ENQUEUE, (int **)&data); + retval=swd_dp_read_idcode(dap->ctx, SWD_OPERATION_EXECUTE, (int**) &data); if (retval<0) { LOG_ERROR("swd_dp_read_idcode() error: %s ", swd_error_string(retval)); return ERROR_FAIL; @@ -62,7 +62,7 @@ int oocd_swd_queue_idcode_read(struct adiv5_dap *dap, uint8_t *ack, uint32_t *da int oocd_swd_queue_dp_read(struct adiv5_dap *dap, unsigned reg, uint32_t *data){ int retval; - retval=swd_dp_read((swd_ctx_t *)dap->ctx, SWD_OPERATION_ENQUEUE, reg, (int **)&data); + retval=swd_dp_read((swd_ctx_t *)dap->ctx, SWD_OPERATION_EXECUTE, reg, (int**) &data); if (retval<0){ LOG_ERROR("swd_dp_read() error: %s ", swd_error_string(retval)); return ERROR_FAIL; @@ -82,7 +82,7 @@ int oocd_swd_queue_dp_write(struct adiv5_dap *dap, unsigned reg, uint32_t data){ int oocd_swd_queue_ap_read(struct adiv5_dap *dap, unsigned reg, uint32_t *data){ int retval; - retval=swd_ap_read((swd_ctx_t *)dap->ctx, SWD_OPERATION_ENQUEUE, (char) reg, (int **) &data); + retval=swd_ap_read((swd_ctx_t *)dap->ctx, SWD_OPERATION_EXECUTE, (char) reg, (int**) &data); if (retval<0){ LOG_ERROR("swd_ap_read() error: %s ", swd_error_string(retval)); return ERROR_FAIL; diff --git a/src/transport/swd_libswd_drv_openocd.c b/src/transport/swd_libswd_drv_openocd.c index a357bad3..2066d5b3 100644 --- a/src/transport/swd_libswd_drv_openocd.c +++ b/src/transport/swd_libswd_drv_openocd.c @@ -227,7 +227,7 @@ int swd_log_level_inherit(swd_ctx_t *swdctx, int loglevel){ swd_loglevel_t new_swdlevel; switch ((loglevel==-1)?debug_level:loglevel){ case LOG_LVL_DEBUG: - new_swdlevel=SWD_LOGLEVEL_DEBUG; + new_swdlevel=SWD_LOGLEVEL_PAYLOAD; break; case LOG_LVL_INFO: new_swdlevel=SWD_LOGLEVEL_INFO; |