aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/drivers/mpsse.c
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2012-10-28 05:42:15 +0100
committerPeter Stuge <peter@stuge.se>2012-10-30 11:57:17 +0000
commit452248af1d06cb1140b85f53ef4fdee1c746d807 (patch)
tree1f350e66254f41a2f9b28046298b0889a242bad4 /src/jtag/drivers/mpsse.c
parentd2f61e1a4592449188305164b27f495f78dca00a (diff)
downloadriscv-openocd-452248af1d06cb1140b85f53ef4fdee1c746d807.zip
riscv-openocd-452248af1d06cb1140b85f53ef4fdee1c746d807.tar.gz
riscv-openocd-452248af1d06cb1140b85f53ef4fdee1c746d807.tar.bz2
mpsse: Always perform a general reset of the MPSSE in mpsse_open()
Per AN_135 FTDI MPSSE Basics Version 1.1, section 4.2 step 7. http://www.ftdichip.com/Support/Documents/AppNotes/AN_135_MPSSE_Basics.pdf This allows to stop and restart OpenOCD reliably, without needing to power cycle the interface. Change-Id: Ibeafe5ecfe7b2f6f82712cbc85116904407ddb36 Signed-off-by: Peter Stuge <peter@stuge.se> Reviewed-on: http://openocd.zylin.com/939 Tested-by: jenkins
Diffstat (limited to 'src/jtag/drivers/mpsse.c')
-rw-r--r--src/jtag/drivers/mpsse.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c
index d6cbc84..92f9331 100644
--- a/src/jtag/drivers/mpsse.c
+++ b/src/jtag/drivers/mpsse.c
@@ -55,6 +55,7 @@
#define FTDI_DEVICE_OUT_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
#define FTDI_DEVICE_IN_REQTYPE (0x80 | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
+#define BITMODE_RESET 0x00
#define BITMODE_MPSSE 0x02
#define SIO_RESET_REQUEST 0x00
@@ -315,6 +316,19 @@ struct mpsse_ctx *mpsse_open(const uint16_t *vid, const uint16_t *pid, const cha
err = libusb_control_transfer(ctx->usb_dev,
FTDI_DEVICE_OUT_REQTYPE,
SIO_SET_BITMODE_REQUEST,
+ 0x0b | (BITMODE_RESET << 8),
+ ctx->index,
+ NULL,
+ 0,
+ ctx->usb_write_timeout);
+ if (err < 0) {
+ LOG_ERROR("unable to reset bitmode: %d", err);
+ goto error;
+ }
+
+ err = libusb_control_transfer(ctx->usb_dev,
+ FTDI_DEVICE_OUT_REQTYPE,
+ SIO_SET_BITMODE_REQUEST,
0x0b | (BITMODE_MPSSE << 8),
ctx->index,
NULL,