X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fftdi.c;h=d8c7d64229af7880affcb5d6e4b8166ef61f855e;hp=7df6389e24b6c4ea73d2bd34cc8701d6977128f0;hb=a6c4eb03455f6e97fc25183aae249d6ccdcbfb0f;hpb=355f4cadbbf10c75cf05fb1a82bf918b3ab65c55 diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index 7df6389e24..d8c7d64229 100644 --- a/src/jtag/drivers/ftdi.c +++ b/src/jtag/drivers/ftdi.c @@ -128,7 +128,7 @@ static uint16_t direction; static uint16_t jtag_output_init; static uint16_t jtag_direction_init; -static int ftdi_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq seq); +static int ftdi_swd_switch_seq(enum swd_special_seq seq); static struct signal *find_signal_by_name(const char *name) { @@ -662,6 +662,8 @@ static int ftdi_quit(void) { mpsse_close(mpsse_ctx); + free(swd_cmd_queue); + return ERROR_OK; } @@ -939,7 +941,7 @@ static void ftdi_swd_swdio_en(bool enable) * @param dap * @return */ -static int ftdi_swd_run_queue(struct adiv5_dap *dap) +static int ftdi_swd_run_queue(void) { LOG_DEBUG("Executing %zu queued transactions", swd_cmd_queue_length); int retval; @@ -1006,13 +1008,13 @@ skip: return retval; } -static void ftdi_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst, uint32_t data) +static void ftdi_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data, uint32_t ap_delay_clk) { if (swd_cmd_queue_length >= swd_cmd_queue_alloced) { /* Not enough room in the queue. Run the queue and increase its size for next time. * Note that it's not possible to avoid running the queue here, because mpsse contains * pointers into the queue which may be invalid after the realloc. */ - queued_retval = ftdi_swd_run_queue(dap); + queued_retval = ftdi_swd_run_queue(); struct swd_cmd_queue_entry *q = realloc(swd_cmd_queue, swd_cmd_queue_alloced * 2 * sizeof(*swd_cmd_queue)); if (q != NULL) { swd_cmd_queue = q; @@ -1055,23 +1057,23 @@ static void ftdi_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst /* Insert idle cycles after AP accesses to avoid WAIT */ if (cmd & SWD_CMD_APnDP) - mpsse_clock_data_out(mpsse_ctx, NULL, 0, dap->memaccess_tck, SWD_MODE); + mpsse_clock_data_out(mpsse_ctx, NULL, 0, ap_delay_clk, SWD_MODE); } -static void ftdi_swd_read_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t *value) +static void ftdi_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk) { assert(cmd & SWD_CMD_RnW); - ftdi_swd_queue_cmd(dap, cmd, value, 0); + ftdi_swd_queue_cmd(cmd, value, 0, ap_delay_clk); } -static void ftdi_swd_write_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t value) +static void ftdi_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk) { assert(!(cmd & SWD_CMD_RnW)); - ftdi_swd_queue_cmd(dap, cmd, NULL, value); + ftdi_swd_queue_cmd(cmd, NULL, value, ap_delay_clk); } -static int_least32_t ftdi_swd_frequency(struct adiv5_dap *dap, int_least32_t hz) +static int_least32_t ftdi_swd_frequency(int_least32_t hz) { if (hz > 0) freq = mpsse_set_frequency(mpsse_ctx, hz); @@ -1079,7 +1081,7 @@ static int_least32_t ftdi_swd_frequency(struct adiv5_dap *dap, int_least32_t hz) return freq; } -static int ftdi_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq seq) +static int ftdi_swd_switch_seq(enum swd_special_seq seq) { switch (seq) { case LINE_RESET: