- Fixes '<<' whitespace
[openocd.git] / src / jtag / ft2232.c
index 734833b125594408e3d36a49a5c376aea29d3203..d4e0fbcbf3261852b1772e3d90b121047930aeff 100644 (file)
@@ -52,7 +52,7 @@
 
 #if (BUILD_FT2232_FTD2XX==1 && BUILD_FT2232_LIBFTDI==1)
 #error "BUILD_FT2232_FTD2XX && BUILD_FT2232_LIBFTDI are mutually exclusive"
-#elif (BUILD_FT2232_FTD2XX!=1 && BUILD_FT2232_LIBFTDI!=1)
+#elif (BUILD_FT2232_FTD2XX != 1 && BUILD_FT2232_LIBFTDI != 1)
 #error "BUILD_FT2232_FTD2XX || BUILD_FT2232_LIBFTDI must be chosen"
 #endif
 
@@ -101,14 +101,14 @@ static char *       ft2232_device_desc_A = NULL;
 static char*        ft2232_device_desc = NULL;
 static char*        ft2232_serial  = NULL;
 static char*        ft2232_layout  = NULL;
-static u8              ft2232_latency = 2;
+static uint8_t         ft2232_latency = 2;
 static unsigned                ft2232_max_tck = 6000;
 
 
 #define MAX_USB_IDS 8
 /* vid = pid = 0 marks the end of the list */
-static u16 ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 };
-static u16 ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 };
+static uint16_t ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 };
+static uint16_t ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 };
 
 typedef struct ft2232_layout_s
 {
@@ -168,13 +168,13 @@ static const ft2232_layout_t  ft2232_layouts[] =
        { NULL,                   NULL,                      NULL,               NULL                    },
 };
 
-static u8                  nTRST, nTRSTnOE, nSRST, nSRSTnOE;
+static uint8_t                  nTRST, nTRSTnOE, nSRST, nSRSTnOE;
 
 static const ft2232_layout_t *layout;
-static u8                  low_output     = 0x0;
-static u8                  low_direction  = 0x0;
-static u8                  high_output    = 0x0;
-static u8                  high_direction = 0x0;
+static uint8_t                  low_output     = 0x0;
+static uint8_t                  low_direction  = 0x0;
+static uint8_t                  high_output    = 0x0;
+static uint8_t                  high_direction = 0x0;
 
 #if BUILD_FT2232_FTD2XX == 1
 static FT_HANDLE       ftdih = NULL;
@@ -203,7 +203,7 @@ static int             require_send;
 
 #define FT2232_BUFFER_SIZE 131072
 
-static u8*             ft2232_buffer = NULL;
+static uint8_t*             ft2232_buffer = NULL;
 static int             ft2232_buffer_size  = 0;
 static int             ft2232_read_pointer = 0;
 static int             ft2232_expect_read  = 0;
@@ -213,7 +213,7 @@ static int             ft2232_expect_read  = 0;
  * writes a byte into the byte buffer, "ft2232_buffer", which must be sent later.
  * @param val is the byte to send.
  */
-static inline void buffer_write(u8 val)
+static inline void buffer_write(uint8_t val)
 {
        assert(ft2232_buffer);
        assert((unsigned) ft2232_buffer_size < (unsigned) FT2232_BUFFER_SIZE);
@@ -224,7 +224,7 @@ static inline void buffer_write(u8 val)
  * Function buffer_read
  * returns a byte from the byte buffer.
  */
-static inline u8 buffer_read(void)
+static inline uint8_t buffer_read(void)
 {
        assert(ft2232_buffer);
        assert(ft2232_read_pointer < ft2232_buffer_size);
@@ -249,9 +249,9 @@ static inline u8 buffer_read(void)
  *
  * See the MPSSE spec referenced above.
  */
-static void clock_tms(u8 mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit)
+static void clock_tms(uint8_t mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit)
 {
-       u8      tms_byte;
+       uint8_t tms_byte;
        int     i;
        int     tms_ndx;                                /* bit index into tms_byte */
 
@@ -264,7 +264,7 @@ static void clock_tms(u8 mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit)
                bool bit = tms_bits & 1;
 
                if (bit)
-                       tms_byte |= (1<<tms_ndx);
+                       tms_byte |= (1 << tms_ndx);
 
                /* always do state transitions in public view */
                tap_set_state(tap_state_transition(tap_get_state(), bit));
@@ -338,7 +338,7 @@ jtag_interface_t ft2232_interface =
        .quit                   = ft2232_quit,
 };
 
-static int ft2232_write(u8* buf, int size, u32* bytes_written)
+static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written)
 {
 #if BUILD_FT2232_FTD2XX == 1
        FT_STATUS status;
@@ -371,7 +371,7 @@ static int ft2232_write(u8* buf, int size, u32* bytes_written)
 }
 
 
-static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
+static int ft2232_read(uint8_t* buf, uint32_t size, uint32_t* bytes_read)
 {
 #if BUILD_FT2232_FTD2XX == 1
        DWORD     dw_bytes_read;
@@ -411,7 +411,9 @@ static int ft2232_read(u8* buf, u32 size, u32* bytes_read)
 
        if (*bytes_read < size)
        {
-               LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", *bytes_read, size);
+               LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", 
+                         (unsigned int)(*bytes_read), 
+                         (unsigned int)size);
                return ERROR_JTAG_DEVICE_ERROR;
        }
 
@@ -438,10 +440,10 @@ static int ft2232_adaptive_clocking(int speed)
                }
        }
 
-       u8  buf = use_adaptive_clocking ? 0x96 : 0x97;
+       uint8_t  buf = use_adaptive_clocking ? 0x96 : 0x97;
        LOG_DEBUG("%2.2x", buf);
 
-       u32 bytes_written;
+       uint32_t bytes_written;
        int retval = ft2232_write(&buf, 1, &bytes_written);
        if (ERROR_OK != retval || bytes_written != 1)
        {
@@ -461,9 +463,9 @@ static int ft2232_adaptive_clocking(int speed)
 
 static int ft2232_speed(int speed)
 {
-       u8  buf[3];
+       uint8_t  buf[3];
        int retval;
-       u32 bytes_written;
+       uint32_t bytes_written;
 
        ft2232_adaptive_clocking(speed);
 
@@ -569,7 +571,7 @@ static void ft2232_end_state(tap_state_t state)
        }
 }
 
-static void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size)
+static void ft2232_read_scan(enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
@@ -617,12 +619,12 @@ static void ft2232_debug_dump_buffer(void)
 static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last)
 {
        jtag_command_t* cmd;
-       u8*             buffer;
+       uint8_t*             buffer;
        int             scan_size;
        enum scan_type  type;
        int             retval;
-       u32             bytes_written=0;
-       u32             bytes_read=0;
+       uint32_t             bytes_written=0;
+       uint32_t             bytes_read=0;
 
 #ifdef _DEBUG_USB_IO_
        struct timeval  start, inter, inter2, end;
@@ -758,7 +760,7 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states)
                if (tap_state_transition(walker, false) == desired_next_state)
                        ;       /* bit within tms_bits at index state_ndx is already zero */
                else if (tap_state_transition(walker, true) == desired_next_state)
-                       tms_bits |= (1<<state_ndx);
+                       tms_bits |= (1 << state_ndx);
                else
                {
                        LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
@@ -775,7 +777,7 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states)
 }
 
 
-static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_size)
+static void ft2232_add_scan(bool ir_scan, enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
@@ -823,8 +825,8 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s
                thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1);
                num_bytes    -= thisrun_bytes;
 
-               buffer_write((u8) (thisrun_bytes - 1));
-               buffer_write((u8) ((thisrun_bytes - 1) >> 8));
+               buffer_write((uint8_t) (thisrun_bytes - 1));
+               buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8));
 
                if (type != SCAN_IN)
                {
@@ -902,7 +904,7 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s
        {
                int tms_bits;
                int tms_count;
-               u8      mpsse_cmd;
+               uint8_t mpsse_cmd;
 
                /* move from Shift-IR/DR to end state */
                if (type != SCAN_OUT)
@@ -934,16 +936,16 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s
 }
 
 
-static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffer, int scan_size)
+static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* buffer, int scan_size)
 {
        int num_bytes = (scan_size + 7) / 8;
        int bits_left = scan_size;
        int cur_byte  = 0;
        int last_bit;
-       u8* receive_buffer  = malloc(CEIL(scan_size, 8));
-       u8* receive_pointer = receive_buffer;
-       u32 bytes_written;
-       u32 bytes_read;
+       uint8_t* receive_buffer  = malloc(CEIL(scan_size, 8));
+       uint8_t* receive_pointer = receive_buffer;
+       uint32_t bytes_written;
+       uint32_t bytes_read;
        int retval;
        int thisrun_read = 0;
 
@@ -963,7 +965,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                LOG_ERROR("couldn't write MPSSE commands to FT2232");
                exit(-1);
        }
-       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", 
+                 ft2232_buffer_size, (int)bytes_written);
        ft2232_buffer_size = 0;
 
        /* add command for complete bytes */
@@ -993,8 +996,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1);
                thisrun_read  = thisrun_bytes;
                num_bytes    -= thisrun_bytes;
-               buffer_write((u8) (thisrun_bytes - 1));
-               buffer_write((u8) ((thisrun_bytes - 1) >> 8));
+               buffer_write((uint8_t) (thisrun_bytes - 1));
+               buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8));
 
                if (type != SCAN_IN)
                {
@@ -1016,7 +1019,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                        LOG_ERROR("couldn't write MPSSE commands to FT2232");
                        exit(-1);
                }
-               LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+               LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", 
+                         ft2232_buffer_size, 
+                         (int)bytes_written);
                ft2232_buffer_size = 0;
 
                if (type != SCAN_OUT)
@@ -1026,7 +1031,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                                LOG_ERROR("couldn't read from FT2232");
                                exit(-1);
                        }
-                       LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read);
+                       LOG_DEBUG("thisrun_read: %i, bytes_read: %i", 
+                                 thisrun_read, 
+                                 (int)bytes_read);
                        receive_pointer += bytes_read;
                }
        }
@@ -1095,7 +1102,7 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
        {
                int tms_bits  = tap_get_tms_path(tap_get_state(), tap_get_end_state());
                int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
-               u8      mpsse_cmd;
+               uint8_t mpsse_cmd;
 
                /* move from Shift-IR/DR to end state */
                if (type != SCAN_OUT)
@@ -1122,7 +1129,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                LOG_ERROR("couldn't write MPSSE commands to FT2232");
                exit(-1);
        }
-       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written);
+       LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", 
+                 ft2232_buffer_size, 
+                 (int)bytes_written);
        ft2232_buffer_size = 0;
 
        if (type != SCAN_OUT)
@@ -1132,7 +1141,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe
                        LOG_ERROR("couldn't read from FT2232");
                        exit(-1);
                }
-               LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read);
+               LOG_DEBUG("thisrun_read: %i, bytes_read: %i", 
+                         thisrun_read, 
+                         (int)bytes_read);
                receive_pointer += bytes_read;
        }
 
@@ -1193,6 +1204,7 @@ static int ft2232_predict_scan_in(int scan_size, enum scan_type type)
 
 static void usbjtag_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1232,6 +1244,7 @@ static void usbjtag_reset(int trst, int srst)
 
 static void jtagkey_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1273,6 +1286,7 @@ static void jtagkey_reset(int trst, int srst)
 
 static void olimex_jtag_reset(int trst, int srst)
 {
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (trst == 1)
        {
                if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
@@ -1596,7 +1610,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
 
 static int ft2232_execute_scan(jtag_command_t *cmd)
 {
-       u8*             buffer;
+       uint8_t*             buffer;
        int             scan_size;                  /* size of IR or DR scan */
        int             predicted_size = 0;
        int                             retval = ERROR_OK;
@@ -1777,7 +1791,7 @@ static int ft2232_execute_queue()
 
 
 #if BUILD_FT2232_FTD2XX == 1
-static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
+static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_more)
 {
        FT_STATUS       status;
        DWORD           deviceID;
@@ -1785,7 +1799,7 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
        char            Description[64];
        DWORD   openex_flags  = 0;
        char*   openex_string = NULL;
-       u8      latency_timer;
+       uint8_t latency_timer;
 
        LOG_DEBUG("'ft2232' interface using FTD2XX with '%s' layout (%4.4x:%4.4x)", ft2232_layout, vid, pid);
 
@@ -1857,7 +1871,7 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more)
                if (status == FT_OK)
                {
                        char** desc_array = malloc(sizeof(char*) * (num_devices + 1));
-                       u32 i;
+                       uint32_t i;
 
                        for (i = 0; i < num_devices; i++)
                                desc_array[i] = malloc(64);
@@ -1955,9 +1969,9 @@ static int ft2232_purge_ftd2xx(void)
 #endif /* BUILD_FT2232_FTD2XX == 1 */
 
 #if BUILD_FT2232_LIBFTDI == 1
-static int ft2232_init_libftdi(u16 vid, u16 pid, int more, int* try_more)
+static int ft2232_init_libftdi(uint16_t vid, uint16_t pid, int more, int* try_more)
 {
-       u8 latency_timer;
+       uint8_t latency_timer;
 
        LOG_DEBUG("'ft2232' interface using libftdi with '%s' layout (%4.4x:%4.4x)",
                        ft2232_layout, vid, pid);
@@ -2029,9 +2043,9 @@ static int ft2232_purge_libftdi(void)
 
 static int ft2232_init(void)
 {
-       u8  buf[1];
+       uint8_t  buf[1];
        int retval;
-       u32 bytes_written;
+       uint32_t bytes_written;
        const ft2232_layout_t* cur_layout = ft2232_layouts;
        int i;
 
@@ -2120,8 +2134,8 @@ static int ft2232_init(void)
 
 static int usbjtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x0b;
@@ -2155,6 +2169,7 @@ static int usbjtag_init(void)
                return ERROR_JTAG_INIT_FAILED;
        }
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                low_direction &= ~nTRSTnOE; /* nTRST input */
@@ -2195,8 +2210,8 @@ static int usbjtag_init(void)
 
 static int axm0432_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x2b;
@@ -2229,6 +2244,7 @@ static int axm0432_jtag_init(void)
        high_output    = 0x0;
        high_direction = 0x0c;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                LOG_ERROR("can't set nTRSTOE to push-pull on the Dicarlo jtag");
@@ -2265,8 +2281,8 @@ static int axm0432_jtag_init(void)
 
 static int jtagkey_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
@@ -2307,6 +2323,7 @@ static int jtagkey_init(void)
        high_output    = 0x0;
        high_direction = 0x0f;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                high_output |= nTRSTnOE;
@@ -2347,8 +2364,8 @@ static int jtagkey_init(void)
 
 static int olimex_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
@@ -2373,6 +2390,7 @@ static int olimex_jtag_init(void)
        high_output    = 0x0;
        high_direction = 0x0f;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
        {
                high_output |= nTRSTnOE;
@@ -2414,8 +2432,8 @@ static int olimex_jtag_init(void)
 
 static int flyswatter_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x18;
        low_direction = 0xfb;
@@ -2461,8 +2479,8 @@ static int flyswatter_init(void)
 
 static int turtle_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x5b;
@@ -2502,8 +2520,8 @@ static int turtle_init(void)
 
 static int comstick_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x0b;
@@ -2546,8 +2564,8 @@ static int comstick_init(void)
 
 static int stm32stick_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x88;
        low_direction = 0x8b;
@@ -2590,8 +2608,8 @@ static int stm32stick_init(void)
 
 static int sheevaplug_init(void)
 {
-       u8 buf[3];
-       u32 bytes_written;
+       uint8_t buf[3];
+       uint32_t bytes_written;
 
        low_output = 0x08;
        low_direction = 0x1b;
@@ -2641,8 +2659,8 @@ static int sheevaplug_init(void)
 
 static int cortino_jtag_init(void)
 {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_output    = 0x08;
        low_direction = 0x1b;
@@ -2820,8 +2838,6 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char*
 
 static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc)
 {
-       int i;
-
        if (argc > MAX_USB_IDS * 2)
        {
                LOG_WARNING("ignoring extra IDs in ft2232_vid_pid "
@@ -2832,13 +2848,21 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
        {
                LOG_WARNING("incomplete ft2232_vid_pid configuration directive");
                if (argc < 2)
-                       return ERROR_OK;
+                       return ERROR_COMMAND_SYNTAX_ERROR;
+               // remove the incomplete trailing id
+               argc -= 1;
        }
 
-       for (i = 0; i + 1 < argc; i += 2)
+       int i;
+       int retval = ERROR_OK;
+       for (i = 0; i < argc; i += 2)
        {
-               ft2232_vid[i >> 1] = strtol(args[i], NULL, 0);
-               ft2232_pid[i >> 1] = strtol(args[i + 1], NULL, 0);
+               retval = parse_u16(args[i], &ft2232_vid[i >> 1]);
+               if (ERROR_OK != retval)
+                       break;
+               retval = parse_u16(args[i + 1], &ft2232_pid[i >> 1]);
+               if (ERROR_OK != retval)
+                       break;
        }
 
        /*
@@ -2847,7 +2871,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char
         */
        ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0;
 
-       return ERROR_OK;
+       return retval;
 }
 
 
@@ -2871,7 +2895,7 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
        int retval = 0;
 
        /* 7 bits of either ones or zeros. */
-       u8  tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00);
+       uint8_t  tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00);
 
        while (num_cycles > 0)
        {
@@ -2936,14 +2960,15 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd)
  * ADBUS7 -   GND
  */
 static int icebear_jtag_init(void) {
-       u8  buf[3];
-       u32 bytes_written;
+       uint8_t  buf[3];
+       uint32_t bytes_written;
 
        low_direction   = 0x0b; /* output: TCK TDI TMS; input: TDO */
        low_output      = 0x08; /* high: TMS; low: TCK TDI */
        nTRST           = 0x10;
        nSRST           = 0x20;
 
+       enum reset_types jtag_reset_config = jtag_get_reset_config();
        if ((jtag_reset_config & RESET_TRST_OPEN_DRAIN) != 0) {
                low_direction   &= ~nTRST;      /* nTRST high impedance */
        }
@@ -2991,6 +3016,7 @@ static void icebear_jtag_reset(int trst, int srst) {
                low_output      &= ~nTRST;
        }
        else if (trst == 0) {
+               enum reset_types jtag_reset_config = jtag_get_reset_config();
                if ((jtag_reset_config & RESET_TRST_OPEN_DRAIN) != 0)
                        low_direction   &= ~nTRST;
                else

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)