X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fcmsis_dap_usb.c;h=ff8b8ffaf767ef6c5bfb2d5afdc10139df1239c6;hb=554313b68b4791924a145c3db8082932afb91fbc;hp=6a7ca2595dec4d0d78229e5333b45188a37257af;hpb=ef02b69b14d133b061217a91add5a028a77e86bc;p=openocd.git diff --git a/src/jtag/drivers/cmsis_dap_usb.c b/src/jtag/drivers/cmsis_dap_usb.c index 6a7ca2595d..ff8b8ffaf7 100644 --- a/src/jtag/drivers/cmsis_dap_usb.c +++ b/src/jtag/drivers/cmsis_dap_usb.c @@ -247,7 +247,7 @@ static int cmsis_dap_usb_open(void) dev = hid_open(target_vid, target_pid, target_serial); if (dev == NULL) { - LOG_ERROR("unable to open CMSIS-DAP device"); + LOG_ERROR("unable to open CMSIS-DAP device 0x%x:0x%x", target_vid, target_pid); return ERROR_FAIL; } @@ -515,7 +515,7 @@ static int cmsis_dap_cmd_DAP_Delay(uint16_t delay_us) } #endif -static int cmsis_dap_swd_run_queue(struct adiv5_dap *dap) +static int cmsis_dap_swd_run_queue(void) { uint8_t *buffer = cmsis_dap_handle->packet_buffer; @@ -619,11 +619,11 @@ skip: return retval; } -static void cmsis_dap_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst, uint32_t data) +static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data) { if (pending_transfer_count == pending_queue_len) { /* Not enough room in the queue. Run the queue. */ - queued_retval = cmsis_dap_swd_run_queue(dap); + queued_retval = cmsis_dap_swd_run_queue(); } if (queued_retval != ERROR_OK) @@ -638,16 +638,16 @@ static void cmsis_dap_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t pending_transfer_count++; } -static void cmsis_dap_swd_write_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t value) +static void cmsis_dap_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk) { assert(!(cmd & SWD_CMD_RnW)); - cmsis_dap_swd_queue_cmd(dap, cmd, NULL, value); + cmsis_dap_swd_queue_cmd(cmd, NULL, value); } -static void cmsis_dap_swd_read_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t *value) +static void cmsis_dap_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk) { assert(cmd & SWD_CMD_RnW); - cmsis_dap_swd_queue_cmd(dap, cmd, value, 0); + cmsis_dap_swd_queue_cmd(cmd, value, 0); } static int cmsis_dap_get_version_info(void) @@ -707,13 +707,16 @@ static int cmsis_dap_get_status(void) return retval; } -static int cmsis_dap_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq seq) +static int cmsis_dap_swd_switch_seq(enum swd_special_seq seq) { uint8_t *buffer = cmsis_dap_handle->packet_buffer; const uint8_t *s; unsigned int s_len; int retval; + /* First disconnect before connecting, Atmel EDBG needs it for SAMD/R/L/C */ + cmsis_dap_cmd_DAP_Disconnect(); + /* When we are reconnecting, DAP_Connect needs to be rerun, at * least on Keil ULINK-ME */ retval = cmsis_dap_cmd_DAP_Connect(seq == LINE_RESET || seq == JTAG_TO_SWD ? @@ -999,7 +1002,7 @@ static int cmsis_dap_khz(int khz, int *jtag_speed) return ERROR_OK; } -static int_least32_t cmsis_dap_swd_frequency(struct adiv5_dap *dap, int_least32_t hz) +static int_least32_t cmsis_dap_swd_frequency(int_least32_t hz) { if (hz > 0) cmsis_dap_speed(hz / 1000);