jtag/drivers/jlink: implement register command to fix SWD
[openocd.git] / src / jtag / drivers / jlink.c
1 /***************************************************************************
2 * Copyright (C) 2007 by Juergen Stuber <juergen@jstuber.net> *
3 * based on Dominic Rath's and Benedikt Sauter's usbprog.c *
4 * *
5 * Copyright (C) 2008 by Spencer Oliver *
6 * spen@spen-soft.co.uk *
7 * *
8 * Copyright (C) 2011 by Jean-Christophe PLAGNIOL-VIILARD *
9 * plagnioj@jcrosoft.com *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
20 * *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program; if not, write to the *
23 * Free Software Foundation, Inc., *
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
25 ***************************************************************************/
26
27 #ifdef HAVE_CONFIG_H
28 #include "config.h"
29 #endif
30
31 #include <jtag/interface.h>
32 #include <jtag/swd.h>
33 #include <jtag/commands.h>
34 #include "libusb_common.h"
35
36 /* See Segger's public documentation:
37 * Reference manual for J-Link USB Protocol
38 * Document RM08001-R6 Date: June 16, 2009
39 * (Or newer, with some SWD information).
40 * http://www.segger.com/cms/admin/uploads/productDocs/RM08001_JLinkUSBProtocol.pdf
41 */
42
43 /*
44 * The default pid of the segger is 0x0101
45 * But when you change the USB Address it will also
46 *
47 * pid = ( usb_address > 0x4) ? 0x0101 : (0x101 + usb_address)
48 */
49
50 #define JLINK_USB_INTERFACE_CLASS 0xff
51 #define JLINK_USB_INTERFACE_SUBCLASS 0xff
52 #define JLINK_USB_INTERFACE_PROTOCOL 0xff
53
54 static unsigned int jlink_write_ep;
55 static unsigned int jlink_read_ep;
56 static unsigned int jlink_hw_jtag_version = 2;
57
58 #define JLINK_USB_TIMEOUT 1000
59
60 /* See Section 3.3.2 of the Segger JLink USB protocol manual */
61 /* 2048 is the max value we can use here */
62 #define JLINK_TAP_BUFFER_SIZE 2048
63 /*#define JLINK_TAP_BUFFER_SIZE 256*/
64 /*#define JLINK_TAP_BUFFER_SIZE 384*/
65
66 #define JLINK_IN_BUFFER_SIZE (2048 + 1)
67 #define JLINK_OUT_BUFFER_SIZE (2*2048 + 4)
68
69 /* Global USB buffers */
70 static uint8_t usb_in_buffer[JLINK_IN_BUFFER_SIZE];
71 static uint8_t usb_out_buffer[JLINK_OUT_BUFFER_SIZE];
72
73 /* Constants for JLink command */
74 #define EMU_CMD_VERSION 0x01
75 #define EMU_CMD_RESET_TRST 0x02
76 #define EMU_CMD_RESET_TARGET 0x03
77 #define EMU_CMD_SET_SPEED 0x05
78 #define EMU_CMD_GET_STATE 0x07
79 #define EMU_CMD_SET_KS_POWER 0x08
80 #define EMU_CMD_REGISTER 0x09
81 #define EMU_CMD_GET_SPEEDS 0xc0
82 #define EMU_CMD_GET_HW_INFO 0xc1
83 #define EMU_CMD_GET_COUNTERS 0xc2
84 #define EMU_CMD_SELECT_IF 0xc7
85 #define EMU_CMD_HW_CLOCK 0xc8
86 #define EMU_CMD_HW_TMS0 0xc9
87 #define EMU_CMD_HW_TMS1 0xca
88 #define EMU_CMD_HW_DATA0 0xcb
89 #define EMU_CMD_HW_DATA1 0xcc
90 #define EMU_CMD_HW_JTAG 0xcd
91 #define EMU_CMD_HW_JTAG2 0xce
92 #define EMU_CMD_HW_JTAG3 0xcf
93 #define EMU_CMD_HW_RELEASE_RESET_STOP_EX 0xd0
94 #define EMU_CMD_HW_RELEASE_RESET_STOP_TIMED 0xd1
95 #define EMU_CMD_GET_MAX_MEM_BLOCK 0xd4
96 #define EMU_CMD_HW_JTAG_WRITE 0xd5
97 #define EMU_CMD_HW_JTAG_GET_RESULT 0xd6
98 #define EMU_CMD_HW_RESET0 0xdc
99 #define EMU_CMD_HW_RESET1 0xdd
100 #define EMU_CMD_HW_TRST0 0xde
101 #define EMU_CMD_HW_TRST1 0xdf
102 #define EMU_CMD_GET_CAPS 0xe8
103 #define EMU_CMD_GET_CPU_CAPS 0xe9
104 #define EMU_CMD_EXEC_CPU_CMD 0xea
105 #define EMU_CMD_GET_CAPS_EX 0xed
106 #define EMU_CMD_GET_HW_VERSION 0xf0
107 #define EMU_CMD_WRITE_DCC 0xf1
108 #define EMU_CMD_READ_CONFIG 0xf2
109 #define EMU_CMD_WRITE_CONFIG 0xf3
110 #define EMU_CMD_WRITE_MEM 0xf4
111 #define EMU_CMD_READ_MEM 0xf5
112 #define EMU_CMD_MEASURE_RTCK_REACT 0xf6
113 #define EMU_CMD_WRITE_MEM_ARM79 0xf7
114 #define EMU_CMD_READ_MEM_ARM79 0xf8
115
116 /* Register subcommands */
117 #define REG_CMD_REGISTER 100
118 #define REG_CMD_UNREGISTER 101
119
120 /* bits return from EMU_CMD_GET_CAPS */
121 #define EMU_CAP_RESERVED_1 0
122 #define EMU_CAP_GET_HW_VERSION 1
123 #define EMU_CAP_WRITE_DCC 2
124 #define EMU_CAP_ADAPTIVE_CLOCKING 3
125 #define EMU_CAP_READ_CONFIG 4
126 #define EMU_CAP_WRITE_CONFIG 5
127 #define EMU_CAP_TRACE 6
128 #define EMU_CAP_WRITE_MEM 7
129 #define EMU_CAP_READ_MEM 8
130 #define EMU_CAP_SPEED_INFO 9
131 #define EMU_CAP_EXEC_CODE 10
132 #define EMU_CAP_GET_MAX_BLOCK_SIZE 11
133 #define EMU_CAP_GET_HW_INFO 12
134 #define EMU_CAP_SET_KS_POWER 13
135 #define EMU_CAP_RESET_STOP_TIMED 14
136 #define EMU_CAP_RESERVED_2 15
137 #define EMU_CAP_MEASURE_RTCK_REACT 16
138 #define EMU_CAP_SELECT_IF 17
139 #define EMU_CAP_RW_MEM_ARM79 18
140 #define EMU_CAP_GET_COUNTERS 19
141 #define EMU_CAP_READ_DCC 20
142 #define EMU_CAP_GET_CPU_CAPS 21
143 #define EMU_CAP_EXEC_CPU_CMD 22
144 #define EMU_CAP_SWO 23
145 #define EMU_CAP_WRITE_DCC_EX 24
146 #define EMU_CAP_UPDATE_FIRMWARE_EX 25
147 #define EMU_CAP_FILE_IO 26
148 #define EMU_CAP_REGISTER 27
149 #define EMU_CAP_INDICATORS 28
150 #define EMU_CAP_TEST_NET_SPEED 29
151 #define EMU_CAP_RAWTRACE 30
152 #define EMU_CAP_RESERVED_3 31
153
154 static const char * const jlink_cap_str[] = {
155 "Always 1.",
156 "Supports command EMU_CMD_GET_HARDWARE_VERSION",
157 "Supports command EMU_CMD_WRITE_DCC",
158 "Supports adaptive clocking",
159 "Supports command EMU_CMD_READ_CONFIG",
160 "Supports command EMU_CMD_WRITE_CONFIG",
161 "Supports trace commands",
162 "Supports command EMU_CMD_WRITE_MEM",
163 "Supports command EMU_CMD_READ_MEM",
164 "Supports command EMU_CMD_GET_SPEED",
165 "Supports command EMU_CMD_CODE_...",
166 "Supports command EMU_CMD_GET_MAX_BLOCK_SIZE",
167 "Supports command EMU_CMD_GET_HW_INFO",
168 "Supports command EMU_CMD_SET_KS_POWER",
169 "Supports command EMU_CMD_HW_RELEASE_RESET_STOP_TIMED",
170 "Reserved",
171 "Supports command EMU_CMD_MEASURE_RTCK_REACT",
172 "Supports command EMU_CMD_HW_SELECT_IF",
173 "Supports command EMU_CMD_READ/WRITE_MEM_ARM79",
174 "Supports command EMU_CMD_GET_COUNTERS",
175 "Supports command EMU_CMD_READ_DCC",
176 "Supports command EMU_CMD_GET_CPU_CAPS",
177 "Supports command EMU_CMD_EXEC_CPU_CMD",
178 "Supports command EMU_CMD_SWO",
179 "Supports command EMU_CMD_WRITE_DCC_EX",
180 "Supports command EMU_CMD_UPDATE_FIRMWARE_EX",
181 "Supports command EMU_CMD_FILE_IO",
182 "Supports command EMU_CMD_REGISTER",
183 "Supports command EMU_CMD_INDICATORS",
184 "Supports command EMU_CMD_TEST_NET_SPEED",
185 "Supports command EMU_CMD_RAWTRACE",
186 "Reserved",
187 };
188
189 /* max speed 12MHz v5.0 jlink */
190 #define JLINK_MAX_SPEED 12000
191
192 /* J-Link hardware versions */
193 #define JLINK_HW_TYPE_JLINK 0
194 #define JLINK_HW_TYPE_JTRACE 1
195 #define JLINK_HW_TYPE_FLASHER 2
196 #define JLINK_HW_TYPE_JLINK_PRO 3
197 #define JLINK_HW_TYPE_JLINK_LITE_ADI 5
198 #define JLINK_HW_TYPE_MAX 6
199
200 static const char * const jlink_hw_type_str[] = {
201 "J-Link",
202 "J-Trace",
203 "Flasher",
204 "J-Link Pro",
205 "Unknown",
206 "J-Link Lite-ADI",
207 };
208
209 #define JLINK_TIF_JTAG 0
210 #define JLINK_TIF_SWD 1
211 #define JLINK_SWD_DIR_IN 0
212 #define JLINK_SWD_DIR_OUT 1
213
214 /* Queue command functions */
215 static void jlink_end_state(tap_state_t state);
216 static void jlink_state_move(void);
217 static void jlink_path_move(int num_states, tap_state_t *path);
218 static void jlink_runtest(int num_cycles);
219 static void jlink_scan(bool ir_scan, enum scan_type type, uint8_t *buffer,
220 int scan_size, struct scan_command *command);
221 static void jlink_reset(int trst, int srst);
222 static void jlink_simple_command(uint8_t command);
223 static int jlink_get_status(void);
224 static int jlink_swd_run_queue(struct adiv5_dap *dap);
225 static void jlink_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst, uint32_t data);
226 static int jlink_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq seq);
227
228 /* J-Link tap buffer functions */
229 static void jlink_tap_init(void);
230 static int jlink_tap_execute(void);
231 static void jlink_tap_ensure_space(int scans, int bits);
232 static void jlink_tap_append_step(int tms, int tdi);
233 static void jlink_tap_append_scan(int length, uint8_t *buffer,
234 struct scan_command *command);
235
236 /* Jlink lowlevel functions */
237 struct jlink {
238 struct jtag_libusb_device_handle *usb_handle;
239 };
240
241 static struct jlink *jlink_usb_open(void);
242 static void jlink_usb_close(struct jlink *jlink);
243 static int jlink_usb_message(struct jlink *jlink, int out_length, int in_length);
244 static int jlink_usb_io(struct jlink *jlink, int out_length, int in_length);
245 static int jlink_usb_write(struct jlink *jlink, int out_length);
246 static int jlink_usb_read(struct jlink *jlink, int expected_size);
247
248 /* helper functions */
249 static int jlink_get_version_info(void);
250
251 #ifdef _DEBUG_USB_COMMS_
252 static void jlink_debug_buffer(uint8_t *buffer, int length);
253 #else
254 static inline void jlink_debug_buffer(uint8_t *buffer, int length)
255 {
256 }
257 #endif
258
259 static enum tap_state jlink_last_state = TAP_RESET;
260
261 static struct jlink *jlink_handle;
262
263 /* pid could be specified at runtime */
264 static uint16_t vids[] = { 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0 };
265 static uint16_t pids[] = { 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0 };
266
267 static uint32_t jlink_caps;
268 static uint32_t jlink_hw_type;
269
270 static int queued_retval;
271 static bool swd_mode;
272
273 /* 256 byte non-volatile memory */
274 struct jlink_config {
275 uint8_t usb_address;
276 /* 0ffset 0x01 to 0x03 */
277 uint8_t reserved_1[3];
278 uint32_t kickstart_power_on_jtag_pin_19;
279 /* 0ffset 0x08 to 0x1f */
280 uint8_t reserved_2[24];
281 /* IP only for J-Link Pro */
282 uint8_t ip_address[4];
283 uint8_t subnet_mask[4];
284 /* 0ffset 0x28 to 0x2f */
285 uint8_t reserved_3[8];
286 uint8_t mac_address[6];
287 /* 0ffset 0x36 to 0xff */
288 uint8_t reserved_4[202];
289 } __attribute__ ((packed));
290 struct jlink_config jlink_cfg;
291
292 /***************************************************************************/
293 /* External interface implementation */
294
295 static void jlink_execute_runtest(struct jtag_command *cmd)
296 {
297 DEBUG_JTAG_IO("runtest %i cycles, end in %i",
298 cmd->cmd.runtest->num_cycles,
299 cmd->cmd.runtest->end_state);
300
301 jlink_end_state(cmd->cmd.runtest->end_state);
302
303 jlink_runtest(cmd->cmd.runtest->num_cycles);
304 }
305
306 static void jlink_execute_statemove(struct jtag_command *cmd)
307 {
308 DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
309
310 jlink_end_state(cmd->cmd.statemove->end_state);
311 jlink_state_move();
312 }
313
314 static void jlink_execute_pathmove(struct jtag_command *cmd)
315 {
316 DEBUG_JTAG_IO("pathmove: %i states, end in %i",
317 cmd->cmd.pathmove->num_states,
318 cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
319
320 jlink_path_move(cmd->cmd.pathmove->num_states,
321 cmd->cmd.pathmove->path);
322 }
323
324 static void jlink_execute_scan(struct jtag_command *cmd)
325 {
326 int scan_size;
327 enum scan_type type;
328 uint8_t *buffer;
329
330 DEBUG_JTAG_IO("scan end in %s", tap_state_name(cmd->cmd.scan->end_state));
331
332 jlink_end_state(cmd->cmd.scan->end_state);
333
334 scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
335 DEBUG_JTAG_IO("scan input, length = %d", scan_size);
336
337 jlink_debug_buffer(buffer, (scan_size + 7) / 8);
338 type = jtag_scan_type(cmd->cmd.scan);
339 jlink_scan(cmd->cmd.scan->ir_scan,
340 type, buffer, scan_size, cmd->cmd.scan);
341 }
342
343 static void jlink_execute_reset(struct jtag_command *cmd)
344 {
345 DEBUG_JTAG_IO("reset trst: %i srst %i",
346 cmd->cmd.reset->trst, cmd->cmd.reset->srst);
347
348 jlink_tap_execute();
349 jlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
350 jlink_tap_execute();
351 }
352
353 static void jlink_execute_sleep(struct jtag_command *cmd)
354 {
355 DEBUG_JTAG_IO("sleep %" PRIi32 "", cmd->cmd.sleep->us);
356 jlink_tap_execute();
357 jtag_sleep(cmd->cmd.sleep->us);
358 }
359
360 static void jlink_execute_command(struct jtag_command *cmd)
361 {
362 switch (cmd->type) {
363 case JTAG_RUNTEST:
364 jlink_execute_runtest(cmd);
365 break;
366 case JTAG_TLR_RESET:
367 jlink_execute_statemove(cmd);
368 break;
369 case JTAG_PATHMOVE:
370 jlink_execute_pathmove(cmd);
371 break;
372 case JTAG_SCAN:
373 jlink_execute_scan(cmd);
374 break;
375 case JTAG_RESET:
376 jlink_execute_reset(cmd);
377 break;
378 case JTAG_SLEEP:
379 jlink_execute_sleep(cmd);
380 break;
381 default:
382 LOG_ERROR("BUG: unknown JTAG command type encountered");
383 exit(-1);
384 }
385 }
386
387 static int jlink_execute_queue(void)
388 {
389 struct jtag_command *cmd = jtag_command_queue;
390
391 while (cmd != NULL) {
392 jlink_execute_command(cmd);
393 cmd = cmd->next;
394 }
395
396 return jlink_tap_execute();
397 }
398
399 /* Sets speed in kHz. */
400 static int jlink_speed(int speed)
401 {
402 int result;
403
404 if (speed > JLINK_MAX_SPEED) {
405 LOG_INFO("reduce speed request: %dkHz to %dkHz maximum",
406 speed, JLINK_MAX_SPEED);
407 speed = JLINK_MAX_SPEED;
408 }
409
410 /* check for RTCK setting */
411 if (speed == 0)
412 speed = -1;
413
414 usb_out_buffer[0] = EMU_CMD_SET_SPEED;
415 usb_out_buffer[1] = (speed >> 0) & 0xff;
416 usb_out_buffer[2] = (speed >> 8) & 0xff;
417
418 result = jlink_usb_write(jlink_handle, 3);
419 if (result != 3) {
420 LOG_ERROR("J-Link setting speed failed (%d)", result);
421 return ERROR_JTAG_DEVICE_ERROR;
422 }
423
424 return ERROR_OK;
425 }
426
427 static int jlink_speed_div(int speed, int *khz)
428 {
429 *khz = speed;
430
431 return ERROR_OK;
432 }
433
434 static int jlink_khz(int khz, int *jtag_speed)
435 {
436 *jtag_speed = khz;
437
438 return ERROR_OK;
439 }
440
441 static int jlink_register(void)
442 {
443 int result;
444 usb_out_buffer[0] = EMU_CMD_REGISTER;
445 usb_out_buffer[1] = REG_CMD_REGISTER;
446 /* 2 - 11 is "additional parameter",
447 * 12 - 13 is connection handle, zero initially */
448 memset(&usb_out_buffer[2], 0, 10 + 2);
449
450 result = jlink_usb_write(jlink_handle, 14);
451 if (result != 14) {
452 LOG_ERROR("J-Link register write failed (%d)", result);
453 return ERROR_JTAG_DEVICE_ERROR;
454 }
455
456 /* Returns:
457 * 0 - 1 connection handle,
458 * 2 - 3 number of information entities,
459 * 4 - 5 size of a single information struct,
460 * 6 - 7 number of additional bytes,
461 * 8 - ... reply data
462 *
463 * Try to read the whole USB bulk packet
464 */
465 result = jtag_libusb_bulk_read(jlink_handle->usb_handle, jlink_read_ep,
466 (char *)usb_in_buffer, sizeof(usb_in_buffer),
467 JLINK_USB_TIMEOUT);
468 if (!result) {
469 LOG_ERROR("J-Link register read failed (0 bytes received)");
470 return ERROR_JTAG_DEVICE_ERROR;
471 }
472
473 return ERROR_OK;
474 }
475
476 /*
477 * select transport interface
478 *
479 * @param iface [0..31] currently: 0=JTAG, 1=SWD
480 * @returns ERROR_OK or ERROR_ code
481 *
482 * @pre jlink_handle must be opened
483 * @pre function may be called only for devices, that have
484 * EMU_CAP_SELECT_IF capability enabled
485 */
486 static int jlink_select_interface(int iface)
487 {
488 /* According to Segger's document RM08001-R7 Date: October 8, 2010,
489 * http://www.segger.com/admin/uploads/productDocs/RM08001_JLinkUSBProtocol.pdf
490 * section 5.5.3 EMU_CMD_SELECT_IF
491 * > SubCmd 1..31 to select interface (0..31)
492 *
493 * The table below states:
494 * 0 TIF_JTAG
495 * 1 TIF_SWD
496 *
497 * This obviosly means that to select TIF_JTAG one should write SubCmd = 1.
498 *
499 * In fact, JTAG interface operates when SubCmd=0
500 *
501 * It looks like a typo in documentation, because interfaces 0..31 could not
502 * be selected by 1..31 range command.
503 */
504 assert(iface >= 0 && iface < 32);
505 int result;
506
507 /* get available interfaces */
508 usb_out_buffer[0] = EMU_CMD_SELECT_IF;
509 usb_out_buffer[1] = 0xff;
510
511 result = jlink_usb_io(jlink_handle, 2, 4);
512 if (result != ERROR_OK) {
513 LOG_ERROR("J-Link query interface failed (%d)", result);
514 return ERROR_JTAG_DEVICE_ERROR;
515 }
516
517 uint32_t iface_mask = buf_get_u32(usb_in_buffer, 0, 32);
518
519 if (!(iface_mask & (1<<iface))) {
520 LOG_ERROR("J-Link requesting to select unsupported interface (%" PRIx32 ")", iface_mask);
521 return ERROR_JTAG_DEVICE_ERROR;
522 }
523
524 /* Select interface */
525 usb_out_buffer[0] = EMU_CMD_SELECT_IF;
526 usb_out_buffer[1] = iface;
527
528 result = jlink_usb_io(jlink_handle, 2, 4);
529 if (result != ERROR_OK) {
530 LOG_ERROR("J-Link interface select failed (%d)", result);
531 return ERROR_JTAG_DEVICE_ERROR;
532 }
533
534 return ERROR_OK;
535 }
536
537 static int jlink_init(void)
538 {
539 int i;
540
541 jlink_handle = jlink_usb_open();
542
543 if (jlink_handle == 0) {
544 LOG_ERROR("Cannot find jlink Interface! Please check "
545 "connection and permissions.");
546 return ERROR_JTAG_INIT_FAILED;
547 }
548
549 jlink_hw_jtag_version = 2;
550
551 if (jlink_get_version_info() == ERROR_OK) {
552 /* attempt to get status */
553 jlink_get_status();
554 }
555
556 /* Registration is sometimes necessary for SWD to work */
557 if (jlink_caps & (1<<EMU_CAP_REGISTER))
558 jlink_register();
559
560 /*
561 * Some versions of Segger's software do not select JTAG interface by default.
562 *
563 * Segger recommends to select interface necessarily as a part of init process,
564 * in case any previous session leaves improper interface selected.
565 */
566 int retval;
567 if (jlink_caps & (1<<EMU_CAP_SELECT_IF))
568 retval = jlink_select_interface(swd_mode ? JLINK_TIF_SWD : JLINK_TIF_JTAG);
569 else
570 retval = swd_mode ? ERROR_JTAG_DEVICE_ERROR : ERROR_OK;
571
572 if (retval != ERROR_OK) {
573 LOG_ERROR("Selected transport mode is not supported.");
574 return ERROR_JTAG_INIT_FAILED;
575 }
576
577 LOG_INFO("J-Link JTAG Interface ready");
578
579 jlink_reset(0, 0);
580 jtag_sleep(3000);
581 jlink_tap_init();
582
583 jlink_speed(jtag_get_speed_khz());
584
585 if (!swd_mode) {
586 /* v5/6 jlink seems to have an issue if the first tap move
587 * is not divisible by 8, so we send a TLR on first power up */
588 for (i = 0; i < 8; i++)
589 jlink_tap_append_step(1, 0);
590 jlink_tap_execute();
591 }
592
593 if (swd_mode)
594 jlink_swd_switch_seq(NULL, JTAG_TO_SWD);
595 else
596 jlink_swd_switch_seq(NULL, SWD_TO_JTAG);
597 jlink_swd_run_queue(NULL);
598
599 return ERROR_OK;
600 }
601
602 static int jlink_quit(void)
603 {
604 jlink_usb_close(jlink_handle);
605 return ERROR_OK;
606 }
607
608 /***************************************************************************/
609 /* Queue command implementations */
610
611 static void jlink_end_state(tap_state_t state)
612 {
613 if (tap_is_state_stable(state))
614 tap_set_end_state(state);
615 else {
616 LOG_ERROR("BUG: %i is not a valid end state", state);
617 exit(-1);
618 }
619 }
620
621 /* Goes to the end state. */
622 static void jlink_state_move(void)
623 {
624 int i;
625 int tms = 0;
626 uint8_t tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
627 uint8_t tms_scan_bits = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
628
629 for (i = 0; i < tms_scan_bits; i++) {
630 tms = (tms_scan >> i) & 1;
631 jlink_tap_append_step(tms, 0);
632 }
633
634 tap_set_state(tap_get_end_state());
635 }
636
637 static void jlink_path_move(int num_states, tap_state_t *path)
638 {
639 int i;
640
641 for (i = 0; i < num_states; i++) {
642 if (path[i] == tap_state_transition(tap_get_state(), false))
643 jlink_tap_append_step(0, 0);
644 else if (path[i] == tap_state_transition(tap_get_state(), true))
645 jlink_tap_append_step(1, 0);
646 else {
647 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
648 tap_state_name(tap_get_state()), tap_state_name(path[i]));
649 exit(-1);
650 }
651
652 tap_set_state(path[i]);
653 }
654
655 tap_set_end_state(tap_get_state());
656 }
657
658 static void jlink_runtest(int num_cycles)
659 {
660 int i;
661
662 tap_state_t saved_end_state = tap_get_end_state();
663
664 jlink_tap_ensure_space(1, num_cycles + 16);
665
666 /* only do a state_move when we're not already in IDLE */
667 if (tap_get_state() != TAP_IDLE) {
668 jlink_end_state(TAP_IDLE);
669 jlink_state_move();
670 /* num_cycles--; */
671 }
672
673 /* execute num_cycles */
674 for (i = 0; i < num_cycles; i++)
675 jlink_tap_append_step(0, 0);
676
677 /* finish in end_state */
678 jlink_end_state(saved_end_state);
679 if (tap_get_state() != tap_get_end_state())
680 jlink_state_move();
681 }
682
683 static void jlink_scan(bool ir_scan, enum scan_type type, uint8_t *buffer,
684 int scan_size, struct scan_command *command)
685 {
686 tap_state_t saved_end_state;
687
688 jlink_tap_ensure_space(1, scan_size + 16);
689
690 saved_end_state = tap_get_end_state();
691
692 /* Move to appropriate scan state */
693 jlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
694
695 /* Only move if we're not already there */
696 if (tap_get_state() != tap_get_end_state())
697 jlink_state_move();
698
699 jlink_end_state(saved_end_state);
700
701 /* Scan */
702 jlink_tap_append_scan(scan_size, buffer, command);
703
704 /* We are in Exit1, go to Pause */
705 jlink_tap_append_step(0, 0);
706
707 tap_set_state(ir_scan ? TAP_IRPAUSE : TAP_DRPAUSE);
708
709 if (tap_get_state() != tap_get_end_state())
710 jlink_state_move();
711 }
712
713 static void jlink_reset(int trst, int srst)
714 {
715 LOG_DEBUG("trst: %i, srst: %i", trst, srst);
716
717 /* Signals are active low */
718 if (srst == 0)
719 jlink_simple_command(EMU_CMD_HW_RESET1);
720
721 if (srst == 1)
722 jlink_simple_command(EMU_CMD_HW_RESET0);
723
724 if (trst == 1)
725 jlink_simple_command(EMU_CMD_HW_TRST0);
726
727 if (trst == 0)
728 jlink_simple_command(EMU_CMD_HW_TRST1);
729 }
730
731 static void jlink_simple_command(uint8_t command)
732 {
733 int result;
734
735 DEBUG_JTAG_IO("0x%02x", command);
736
737 usb_out_buffer[0] = command;
738 result = jlink_usb_write(jlink_handle, 1);
739
740 if (result != 1)
741 LOG_ERROR("J-Link command 0x%02x failed (%d)", command, result);
742 }
743
744 static int jlink_get_status(void)
745 {
746 int result;
747
748 jlink_simple_command(EMU_CMD_GET_STATE);
749
750 result = jlink_usb_read(jlink_handle, 8);
751 if (result != 8) {
752 LOG_ERROR("J-Link command EMU_CMD_GET_STATE failed (%d)", result);
753 return ERROR_JTAG_DEVICE_ERROR;
754 }
755
756 int vref = usb_in_buffer[0] + (usb_in_buffer[1] << 8);
757 LOG_INFO("Vref = %d.%d TCK = %d TDI = %d TDO = %d TMS = %d SRST = %d TRST = %d", \
758 vref / 1000, vref % 1000, \
759 usb_in_buffer[2], usb_in_buffer[3], usb_in_buffer[4], \
760 usb_in_buffer[5], usb_in_buffer[6], usb_in_buffer[7]);
761
762 if (vref < 1500)
763 LOG_ERROR("Vref too low. Check Target Power");
764
765 return ERROR_OK;
766 }
767
768 #define jlink_dump_printf(context, expr ...) \
769 do { \
770 if (context) \
771 command_print(context, expr); \
772 else \
773 LOG_INFO(expr); \
774 } while (0);
775
776 static void jlink_caps_dump(struct command_context *ctx)
777 {
778 int i;
779
780 jlink_dump_printf(ctx, "J-Link Capabilities");
781
782 for (i = 1; i < 31; i++)
783 if (jlink_caps & (1 << i))
784 jlink_dump_printf(ctx, "%s", jlink_cap_str[i]);
785 }
786
787 static void jlink_config_usb_address_dump(struct command_context *ctx, struct jlink_config *cfg)
788 {
789 if (!cfg)
790 return;
791
792 jlink_dump_printf(ctx, "USB-Address: 0x%x", cfg->usb_address);
793 }
794
795 static void jlink_config_kickstart_dump(struct command_context *ctx, struct jlink_config *cfg)
796 {
797 if (!cfg)
798 return;
799
800 jlink_dump_printf(ctx, "Kickstart power on JTAG-pin 19: 0x%" PRIx32,
801 cfg->kickstart_power_on_jtag_pin_19);
802 }
803
804 static void jlink_config_mac_address_dump(struct command_context *ctx, struct jlink_config *cfg)
805 {
806 if (!cfg)
807 return;
808
809 jlink_dump_printf(ctx, "MAC Address: %.02x:%.02x:%.02x:%.02x:%.02x:%.02x",
810 cfg->mac_address[5], cfg->mac_address[4],
811 cfg->mac_address[3], cfg->mac_address[2],
812 cfg->mac_address[1], cfg->mac_address[0]);
813 }
814
815 static void jlink_config_ip_dump(struct command_context *ctx, struct jlink_config *cfg)
816 {
817 if (!cfg)
818 return;
819
820 jlink_dump_printf(ctx, "IP Address: %d.%d.%d.%d",
821 cfg->ip_address[3], cfg->ip_address[2],
822 cfg->ip_address[1], cfg->ip_address[0]);
823 jlink_dump_printf(ctx, "Subnet Mask: %d.%d.%d.%d",
824 cfg->subnet_mask[3], cfg->subnet_mask[2],
825 cfg->subnet_mask[1], cfg->subnet_mask[0]);
826 }
827
828 static void jlink_config_dump(struct command_context *ctx, struct jlink_config *cfg)
829 {
830 if (!cfg)
831 return;
832
833 jlink_dump_printf(ctx, "J-Link configuration");
834 jlink_config_usb_address_dump(ctx, cfg);
835 jlink_config_kickstart_dump(ctx, cfg);
836
837 if (jlink_hw_type == JLINK_HW_TYPE_JLINK_PRO) {
838 jlink_config_ip_dump(ctx, cfg);
839 jlink_config_mac_address_dump(ctx, cfg);
840 }
841 }
842
843 static int jlink_get_config(struct jlink_config *cfg)
844 {
845 int result;
846 int size = sizeof(struct jlink_config);
847
848 usb_out_buffer[0] = EMU_CMD_READ_CONFIG;
849 result = jlink_usb_io(jlink_handle, 1, size);
850
851 if (result != ERROR_OK) {
852 LOG_ERROR("jlink_usb_read failed (requested=%d, result=%d)", size, result);
853 return ERROR_FAIL;
854 }
855
856 memcpy(cfg, usb_in_buffer, size);
857 return ERROR_OK;
858 }
859
860 static int jlink_set_config(struct jlink_config *cfg)
861 {
862 int result;
863 int size = sizeof(struct jlink_config);
864
865 jlink_simple_command(EMU_CMD_WRITE_CONFIG);
866
867 memcpy(usb_out_buffer, cfg, size);
868
869 result = jlink_usb_write(jlink_handle, size);
870 if (result != size) {
871 LOG_ERROR("jlink_usb_write failed (requested=%d, result=%d)", 256, result);
872 return ERROR_FAIL;
873 }
874
875 return ERROR_OK;
876 }
877
878 /*
879 * List of unsupported version string markers.
880 *
881 * The firmware versions does not correspond directly with
882 * "Software and documentation pack for Windows", it may be
883 * distinguished by the "compile" date in the information string.
884 *
885 * For example, version string is:
886 * "J-Link ARM V8 compiled May 3 2012 18:36:22"
887 * Marker sould be:
888 * "May 3 2012"
889 *
890 * The list must be terminated by NULL string.
891 */
892 static const char * const unsupported_versions[] = {
893 "Jan 31 2011",
894 "JAN 31 2011",
895 NULL /* End of list */
896 };
897
898 static void jlink_check_supported(const char *str)
899 {
900 const char * const *p = unsupported_versions;
901 while (*p) {
902 if (NULL != strstr(str, *p)) {
903 LOG_WARNING(
904 "Unsupported J-Link firmware version.\n"
905 " Please check http://www.segger.com/j-link-older-versions.html for updates");
906 return;
907 }
908 p++;
909 }
910 }
911
912 static int jlink_get_version_info(void)
913 {
914 int result;
915 int len;
916 uint32_t jlink_max_size;
917
918 /* query hardware version */
919 jlink_simple_command(EMU_CMD_VERSION);
920
921 result = jlink_usb_read(jlink_handle, 2);
922 if (2 != result) {
923 LOG_ERROR("J-Link command EMU_CMD_VERSION failed (%d)", result);
924 return ERROR_JTAG_DEVICE_ERROR;
925 }
926
927 len = buf_get_u32(usb_in_buffer, 0, 16);
928 if (len > JLINK_IN_BUFFER_SIZE) {
929 LOG_ERROR("J-Link command EMU_CMD_VERSION impossible return length 0x%0x", len);
930 len = JLINK_IN_BUFFER_SIZE;
931 }
932
933 result = jlink_usb_read(jlink_handle, len);
934 if (result != len) {
935 LOG_ERROR("J-Link command EMU_CMD_VERSION failed (%d)", result);
936 return ERROR_JTAG_DEVICE_ERROR;
937 }
938
939 usb_in_buffer[result] = 0;
940 LOG_INFO("%s", (char *)usb_in_buffer);
941 jlink_check_supported((char *)usb_in_buffer);
942
943 /* query hardware capabilities */
944 jlink_simple_command(EMU_CMD_GET_CAPS);
945
946 result = jlink_usb_read(jlink_handle, 4);
947 if (4 != result) {
948 LOG_ERROR("J-Link command EMU_CMD_GET_CAPS failed (%d)", result);
949 return ERROR_JTAG_DEVICE_ERROR;
950 }
951
952 jlink_caps = buf_get_u32(usb_in_buffer, 0, 32);
953 LOG_INFO("J-Link caps 0x%x", (unsigned)jlink_caps);
954
955 if (jlink_caps & (1 << EMU_CAP_GET_HW_VERSION)) {
956 /* query hardware version */
957 jlink_simple_command(EMU_CMD_GET_HW_VERSION);
958
959 result = jlink_usb_read(jlink_handle, 4);
960 if (4 != result) {
961 LOG_ERROR("J-Link command EMU_CMD_GET_HW_VERSION failed (%d)", result);
962 return ERROR_JTAG_DEVICE_ERROR;
963 }
964
965 uint32_t jlink_hw_version = buf_get_u32(usb_in_buffer, 0, 32);
966 uint32_t major_revision = (jlink_hw_version / 10000) % 100;
967 jlink_hw_type = (jlink_hw_version / 1000000) % 100;
968 if (major_revision >= 5)
969 jlink_hw_jtag_version = 3;
970
971 LOG_INFO("J-Link hw version %i", (int)jlink_hw_version);
972
973 if (jlink_hw_type >= JLINK_HW_TYPE_MAX)
974 LOG_INFO("J-Link hw type unknown 0x%" PRIx32, jlink_hw_type);
975 else
976 LOG_INFO("J-Link hw type %s", jlink_hw_type_str[jlink_hw_type]);
977 }
978
979 if (jlink_caps & (1 << EMU_CAP_GET_MAX_BLOCK_SIZE)) {
980 /* query hardware maximum memory block */
981 jlink_simple_command(EMU_CMD_GET_MAX_MEM_BLOCK);
982
983 result = jlink_usb_read(jlink_handle, 4);
984 if (4 != result) {
985 LOG_ERROR("J-Link command EMU_CMD_GET_MAX_MEM_BLOCK failed (%d)", result);
986 return ERROR_JTAG_DEVICE_ERROR;
987 }
988
989 jlink_max_size = buf_get_u32(usb_in_buffer, 0, 32);
990 LOG_INFO("J-Link max mem block %i", (int)jlink_max_size);
991 }
992
993 if (jlink_caps & (1 << EMU_CAP_READ_CONFIG)) {
994 if (jlink_get_config(&jlink_cfg) != ERROR_OK)
995 return ERROR_JTAG_DEVICE_ERROR;
996
997 jlink_config_dump(NULL, &jlink_cfg);
998 }
999
1000 return ERROR_OK;
1001 }
1002
1003 COMMAND_HANDLER(jlink_pid_command)
1004 {
1005 if (CMD_ARGC != 1) {
1006 LOG_ERROR("Need exactly one argument to jlink_pid");
1007 return ERROR_FAIL;
1008 }
1009
1010 pids[0] = strtoul(CMD_ARGV[0], NULL, 16);
1011 pids[1] = 0;
1012 vids[1] = 0;
1013
1014 return ERROR_OK;
1015 }
1016
1017 COMMAND_HANDLER(jlink_handle_jlink_info_command)
1018 {
1019 if (jlink_get_version_info() == ERROR_OK) {
1020 /* attempt to get status */
1021 jlink_get_status();
1022 }
1023
1024 return ERROR_OK;
1025 }
1026
1027 COMMAND_HANDLER(jlink_handle_jlink_caps_command)
1028 {
1029 jlink_caps_dump(CMD_CTX);
1030
1031 return ERROR_OK;
1032 }
1033
1034 COMMAND_HANDLER(jlink_handle_jlink_hw_jtag_command)
1035 {
1036 switch (CMD_ARGC) {
1037 case 0:
1038 command_print(CMD_CTX, "J-Link hw jtag %i", jlink_hw_jtag_version);
1039 break;
1040 case 1: {
1041 int request_version = atoi(CMD_ARGV[0]);
1042 switch (request_version) {
1043 case 2:
1044 case 3:
1045 jlink_hw_jtag_version = request_version;
1046 break;
1047 default:
1048 return ERROR_COMMAND_SYNTAX_ERROR;
1049 }
1050 break;
1051 }
1052 default:
1053 return ERROR_COMMAND_SYNTAX_ERROR;
1054 }
1055
1056 return ERROR_OK;
1057 }
1058
1059 COMMAND_HANDLER(jlink_handle_jlink_kickstart_command)
1060 {
1061 uint32_t kickstart;
1062
1063 if (CMD_ARGC < 1) {
1064 jlink_config_kickstart_dump(CMD_CTX, &jlink_cfg);
1065 return ERROR_OK;
1066 }
1067
1068 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], kickstart);
1069
1070 jlink_cfg.kickstart_power_on_jtag_pin_19 = kickstart;
1071 return ERROR_OK;
1072 }
1073
1074 COMMAND_HANDLER(jlink_handle_jlink_mac_address_command)
1075 {
1076 uint8_t addr[6];
1077 int i;
1078 char *e;
1079 const char *str;
1080
1081 if (CMD_ARGC < 1) {
1082 jlink_config_mac_address_dump(CMD_CTX, &jlink_cfg);
1083 return ERROR_OK;
1084 }
1085
1086 str = CMD_ARGV[0];
1087
1088 if ((strlen(str) != 17) || (str[2] != ':' || str[5] != ':' || str[8] != ':' ||
1089 str[11] != ':' || str[14] != ':')) {
1090 command_print(CMD_CTX, "ethaddr miss format ff:ff:ff:ff:ff:ff");
1091 return ERROR_COMMAND_SYNTAX_ERROR;
1092 }
1093
1094 for (i = 5; i >= 0; i--) {
1095 addr[i] = strtoul(str, &e, 16);
1096 str = e + 1;
1097 }
1098
1099 if (!(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5])) {
1100 command_print(CMD_CTX, "invalid it's zero mac_address");
1101 return ERROR_COMMAND_SYNTAX_ERROR;
1102 }
1103
1104 if (!(0x01 & addr[0])) {
1105 command_print(CMD_CTX, "invalid it's a multicat mac_address");
1106 return ERROR_COMMAND_SYNTAX_ERROR;
1107 }
1108
1109 memcpy(jlink_cfg.mac_address, addr, sizeof(addr));
1110
1111 return ERROR_OK;
1112 }
1113
1114 static int string_to_ip(const char *s, uint8_t *ip, int *pos)
1115 {
1116 uint8_t lip[4];
1117 char *e;
1118 const char *s_save = s;
1119 int i;
1120
1121 if (!s)
1122 return -EINVAL;
1123
1124 for (i = 0; i < 4; i++) {
1125 lip[i] = strtoul(s, &e, 10);
1126
1127 if (*e != '.' && i != 3)
1128 return -EINVAL;
1129
1130 s = e + 1;
1131 }
1132
1133 *pos = e - s_save;
1134
1135 memcpy(ip, lip, sizeof(lip));
1136 return ERROR_OK;
1137 }
1138
1139 static void cpy_ip(uint8_t *dst, uint8_t *src)
1140 {
1141 int i, j;
1142
1143 for (i = 0, j = 3; i < 4; i++, j--)
1144 dst[i] = src[j];
1145 }
1146
1147 COMMAND_HANDLER(jlink_handle_jlink_ip_command)
1148 {
1149 uint32_t ip_address;
1150 uint32_t subnet_mask = 0;
1151 int i, len;
1152 int ret;
1153 uint8_t subnet_bits = 24;
1154
1155 if (CMD_ARGC < 1) {
1156 jlink_config_ip_dump(CMD_CTX, &jlink_cfg);
1157 return ERROR_OK;
1158 }
1159
1160 ret = string_to_ip(CMD_ARGV[0], (uint8_t *)&ip_address, &i);
1161 if (ret != ERROR_OK)
1162 return ret;
1163
1164 len = strlen(CMD_ARGV[0]);
1165
1166 /* check for this format A.B.C.D/E */
1167
1168 if (i < len) {
1169 if (CMD_ARGV[0][i] != '/')
1170 return ERROR_COMMAND_SYNTAX_ERROR;
1171
1172 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[0] + i + 1, subnet_bits);
1173 } else {
1174 if (CMD_ARGC > 1) {
1175 ret = string_to_ip(CMD_ARGV[1], (uint8_t *)&subnet_mask, &i);
1176 if (ret != ERROR_OK)
1177 return ret;
1178 }
1179 }
1180
1181 if (!subnet_mask)
1182 subnet_mask = (uint32_t)(subnet_bits < 32 ?
1183 ((1ULL << subnet_bits) - 1) : 0xffffffff);
1184
1185 cpy_ip(jlink_cfg.ip_address, (uint8_t *)&ip_address);
1186 cpy_ip(jlink_cfg.subnet_mask, (uint8_t *)&subnet_mask);
1187
1188 return ERROR_OK;
1189 }
1190
1191 COMMAND_HANDLER(jlink_handle_jlink_reset_command)
1192 {
1193 memset(&jlink_cfg, 0xff, sizeof(jlink_cfg));
1194 return ERROR_OK;
1195 }
1196
1197 COMMAND_HANDLER(jlink_handle_jlink_save_command)
1198 {
1199 if (!(jlink_caps & (1 << EMU_CAP_WRITE_CONFIG))) {
1200 command_print(CMD_CTX, "J-Link write emulator configuration not supported");
1201 return ERROR_OK;
1202 }
1203
1204 command_print(CMD_CTX, "The J-Link need to be unpluged and repluged ta have the config effective");
1205 return jlink_set_config(&jlink_cfg);
1206 }
1207
1208 COMMAND_HANDLER(jlink_handle_jlink_usb_address_command)
1209 {
1210 uint32_t address;
1211
1212 if (CMD_ARGC < 1) {
1213 jlink_config_usb_address_dump(CMD_CTX, &jlink_cfg);
1214 return ERROR_OK;
1215 }
1216
1217 COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], address);
1218
1219 if (address > 0x3 && address != 0xff) {
1220 command_print(CMD_CTX, "USB Address must be between 0x00 and 0x03 or 0xff");
1221 return ERROR_COMMAND_SYNTAX_ERROR;
1222 }
1223
1224 jlink_cfg.usb_address = address;
1225 return ERROR_OK;
1226 }
1227
1228 COMMAND_HANDLER(jlink_handle_jlink_config_command)
1229 {
1230 struct jlink_config cfg;
1231 int ret = ERROR_OK;
1232
1233 if (CMD_ARGC == 0) {
1234 if (!(jlink_caps & (1 << EMU_CAP_READ_CONFIG))) {
1235 command_print(CMD_CTX, "J-Link read emulator configuration not supported");
1236 goto exit;
1237 }
1238
1239 ret = jlink_get_config(&cfg);
1240
1241 if (ret != ERROR_OK)
1242 command_print(CMD_CTX, "J-Link read emulator configuration failled");
1243 else
1244 jlink_config_dump(CMD_CTX, &jlink_cfg);
1245 }
1246
1247 exit:
1248 return ret;
1249 }
1250
1251 static const struct command_registration jlink_config_subcommand_handlers[] = {
1252 {
1253 .name = "kickstart",
1254 .handler = &jlink_handle_jlink_kickstart_command,
1255 .mode = COMMAND_EXEC,
1256 .help = "set Kickstart power on JTAG-pin 19.",
1257 .usage = "[val]",
1258 },
1259 {
1260 .name = "mac_address",
1261 .handler = &jlink_handle_jlink_mac_address_command,
1262 .mode = COMMAND_EXEC,
1263 .help = "set the MAC Address",
1264 .usage = "[ff:ff:ff:ff:ff:ff]",
1265 },
1266 {
1267 .name = "ip",
1268 .handler = &jlink_handle_jlink_ip_command,
1269 .mode = COMMAND_EXEC,
1270 .help = "set the ip address of the J-Link Pro, "
1271 "where A.B.C.D is the ip, "
1272 "E the bit of the subnet mask, "
1273 "F.G.H.I the subnet mask",
1274 .usage = "[A.B.C.D[/E] [F.G.H.I]]",
1275 },
1276 {
1277 .name = "reset",
1278 .handler = &jlink_handle_jlink_reset_command,
1279 .mode = COMMAND_EXEC,
1280 .help = "reset the current config",
1281 },
1282 {
1283 .name = "save",
1284 .handler = &jlink_handle_jlink_save_command,
1285 .mode = COMMAND_EXEC,
1286 .help = "save the current config",
1287 },
1288 {
1289 .name = "usb_address",
1290 .handler = &jlink_handle_jlink_usb_address_command,
1291 .mode = COMMAND_EXEC,
1292 .help = "set the USB-Address, "
1293 "This will change the product id",
1294 .usage = "[0x00 to 0x03 or 0xff]",
1295 },
1296 COMMAND_REGISTRATION_DONE
1297 };
1298
1299 static const struct command_registration jlink_subcommand_handlers[] = {
1300 {
1301 .name = "caps",
1302 .handler = &jlink_handle_jlink_caps_command,
1303 .mode = COMMAND_EXEC,
1304 .help = "show jlink capabilities",
1305 },
1306 {
1307 .name = "info",
1308 .handler = &jlink_handle_jlink_info_command,
1309 .mode = COMMAND_EXEC,
1310 .help = "show jlink info",
1311 },
1312 {
1313 .name = "hw_jtag",
1314 .handler = &jlink_handle_jlink_hw_jtag_command,
1315 .mode = COMMAND_EXEC,
1316 .help = "access J-Link HW JTAG command version",
1317 .usage = "[2|3]",
1318 },
1319 {
1320 .name = "config",
1321 .handler = &jlink_handle_jlink_config_command,
1322 .mode = COMMAND_EXEC,
1323 .help = "access J-Link configuration, "
1324 "if no argument this will dump the config",
1325 .chain = jlink_config_subcommand_handlers,
1326 },
1327 {
1328 .name = "pid",
1329 .handler = &jlink_pid_command,
1330 .mode = COMMAND_CONFIG,
1331 .help = "set the pid of the interface we want to use",
1332 },
1333 COMMAND_REGISTRATION_DONE
1334 };
1335
1336 static const struct command_registration jlink_command_handlers[] = {
1337 {
1338 .name = "jlink",
1339 .mode = COMMAND_ANY,
1340 .help = "perform jlink management",
1341 .chain = jlink_subcommand_handlers,
1342 },
1343 COMMAND_REGISTRATION_DONE
1344 };
1345
1346 static int jlink_swd_init(void)
1347 {
1348 LOG_INFO("JLink SWD mode enabled");
1349 swd_mode = true;
1350
1351 return ERROR_OK;
1352 }
1353
1354 static void jlink_swd_write_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t value)
1355 {
1356 assert(!(cmd & SWD_CMD_RnW));
1357 jlink_swd_queue_cmd(dap, cmd, NULL, value);
1358 }
1359
1360 static void jlink_swd_read_reg(struct adiv5_dap *dap, uint8_t cmd, uint32_t *value)
1361 {
1362 assert(cmd & SWD_CMD_RnW);
1363 jlink_swd_queue_cmd(dap, cmd, value, 0);
1364 }
1365
1366 static int_least32_t jlink_swd_frequency(struct adiv5_dap *dap, int_least32_t hz)
1367 {
1368 if (hz > 0)
1369 jlink_speed(hz / 1000);
1370
1371 return hz;
1372 }
1373
1374 static const struct swd_driver jlink_swd = {
1375 .init = jlink_swd_init,
1376 .frequency = jlink_swd_frequency,
1377 .switch_seq = jlink_swd_switch_seq,
1378 .read_reg = jlink_swd_read_reg,
1379 .write_reg = jlink_swd_write_reg,
1380 .run = jlink_swd_run_queue,
1381 };
1382
1383 static const char * const jlink_transports[] = { "jtag", "swd", NULL };
1384
1385 struct jtag_interface jlink_interface = {
1386 .name = "jlink",
1387 .commands = jlink_command_handlers,
1388 .transports = jlink_transports,
1389 .swd = &jlink_swd,
1390
1391 .execute_queue = jlink_execute_queue,
1392 .speed = jlink_speed,
1393 .speed_div = jlink_speed_div,
1394 .khz = jlink_khz,
1395 .init = jlink_init,
1396 .quit = jlink_quit,
1397 };
1398
1399 /***************************************************************************/
1400 /* J-Link tap functions */
1401
1402
1403 static unsigned tap_length;
1404 /* In SWD mode use tms buffer for direction control */
1405 static uint8_t tms_buffer[JLINK_TAP_BUFFER_SIZE];
1406 static uint8_t tdi_buffer[JLINK_TAP_BUFFER_SIZE];
1407 static uint8_t tdo_buffer[JLINK_TAP_BUFFER_SIZE];
1408
1409 struct pending_scan_result {
1410 int first; /* First bit position in tdo_buffer to read */
1411 int length; /* Number of bits to read */
1412 struct scan_command *command; /* Corresponding scan command */
1413 void *buffer;
1414 };
1415
1416 #define MAX_PENDING_SCAN_RESULTS 256
1417
1418 static int pending_scan_results_length;
1419 static struct pending_scan_result pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS];
1420
1421 static void jlink_tap_init(void)
1422 {
1423 tap_length = 0;
1424 pending_scan_results_length = 0;
1425 }
1426
1427 static void jlink_tap_ensure_space(int scans, int bits)
1428 {
1429 int available_scans = MAX_PENDING_SCAN_RESULTS - pending_scan_results_length;
1430 int available_bits = JLINK_TAP_BUFFER_SIZE * 8 - tap_length - 32;
1431
1432 if (scans > available_scans || bits > available_bits)
1433 jlink_tap_execute();
1434 }
1435
1436 static void jlink_tap_append_step(int tms, int tdi)
1437 {
1438 int index_var = tap_length / 8;
1439
1440 assert(index_var < JLINK_TAP_BUFFER_SIZE);
1441
1442 int bit_index = tap_length % 8;
1443 uint8_t bit = 1 << bit_index;
1444
1445 /* we do not pad TMS, so be sure to initialize all bits */
1446 if (0 == bit_index)
1447 tms_buffer[index_var] = tdi_buffer[index_var] = 0;
1448
1449 if (tms)
1450 tms_buffer[index_var] |= bit;
1451 else
1452 tms_buffer[index_var] &= ~bit;
1453
1454 if (tdi)
1455 tdi_buffer[index_var] |= bit;
1456 else
1457 tdi_buffer[index_var] &= ~bit;
1458
1459 tap_length++;
1460 }
1461
1462 static void jlink_tap_append_scan(int length, uint8_t *buffer,
1463 struct scan_command *command)
1464 {
1465 struct pending_scan_result *pending_scan_result =
1466 &pending_scan_results_buffer[pending_scan_results_length];
1467 int i;
1468
1469 pending_scan_result->first = tap_length;
1470 pending_scan_result->length = length;
1471 pending_scan_result->command = command;
1472 pending_scan_result->buffer = buffer;
1473
1474 for (i = 0; i < length; i++) {
1475 int tms = (i < (length - 1)) ? 0 : 1;
1476 int tdi = (buffer[i / 8] & (1 << (i % 8))) != 0;
1477 jlink_tap_append_step(tms, tdi);
1478 }
1479 pending_scan_results_length++;
1480 }
1481
1482 /* Pad and send a tap sequence to the device, and receive the answer.
1483 * For the purpose of padding we assume that we are in idle or pause state. */
1484 static int jlink_tap_execute(void)
1485 {
1486 int byte_length;
1487 int i;
1488 int result;
1489
1490 if (!tap_length)
1491 return ERROR_OK;
1492
1493 /* JLink returns an extra NULL in packet when size of incoming
1494 * message is a multiple of 64, creates problems with USB comms.
1495 * WARNING: This will interfere with tap state counting. */
1496 while ((DIV_ROUND_UP(tap_length, 8) % 64) == 0)
1497 jlink_tap_append_step((tap_get_state() == TAP_RESET) ? 1 : 0, 0);
1498
1499 /* number of full bytes (plus one if some would be left over) */
1500 byte_length = DIV_ROUND_UP(tap_length, 8);
1501
1502 bool use_jtag3 = jlink_hw_jtag_version >= 3;
1503 usb_out_buffer[0] = use_jtag3 ? EMU_CMD_HW_JTAG3 : EMU_CMD_HW_JTAG2;
1504 usb_out_buffer[1] = 0;
1505 usb_out_buffer[2] = (tap_length >> 0) & 0xff;
1506 usb_out_buffer[3] = (tap_length >> 8) & 0xff;
1507 memcpy(usb_out_buffer + 4, tms_buffer, byte_length);
1508 memcpy(usb_out_buffer + 4 + byte_length, tdi_buffer, byte_length);
1509
1510 jlink_last_state = jtag_debug_state_machine(tms_buffer, tdi_buffer,
1511 tap_length, jlink_last_state);
1512
1513 result = jlink_usb_message(jlink_handle, 4 + 2 * byte_length,
1514 use_jtag3 ? byte_length + 1 : byte_length);
1515 if (result != ERROR_OK) {
1516 LOG_ERROR("jlink_tap_execute failed USB io (%d)", result);
1517 jlink_tap_init();
1518 return ERROR_JTAG_QUEUE_FAILED;
1519 }
1520
1521 result = use_jtag3 ? usb_in_buffer[byte_length] : 0;
1522 if (result != 0) {
1523 LOG_ERROR("jlink_tap_execute failed, result %d (%s)", result,
1524 result == 1 ? "adaptive clocking timeout" : "unknown");
1525 jlink_tap_init();
1526 return ERROR_JTAG_QUEUE_FAILED;
1527 }
1528
1529 memcpy(tdo_buffer, usb_in_buffer, byte_length);
1530
1531 for (i = 0; i < pending_scan_results_length; i++) {
1532 struct pending_scan_result *pending_scan_result = &pending_scan_results_buffer[i];
1533 uint8_t *buffer = pending_scan_result->buffer;
1534 int length = pending_scan_result->length;
1535 int first = pending_scan_result->first;
1536 struct scan_command *command = pending_scan_result->command;
1537
1538 /* Copy to buffer */
1539 buf_set_buf(tdo_buffer, first, buffer, 0, length);
1540
1541 DEBUG_JTAG_IO("pending scan result, length = %d", length);
1542
1543 jlink_debug_buffer(buffer, DIV_ROUND_UP(length, 8));
1544
1545 if (jtag_read_buffer(buffer, command) != ERROR_OK) {
1546 jlink_tap_init();
1547 return ERROR_JTAG_QUEUE_FAILED;
1548 }
1549
1550 if (pending_scan_result->buffer != NULL)
1551 free(pending_scan_result->buffer);
1552 }
1553
1554 jlink_tap_init();
1555 return ERROR_OK;
1556 }
1557
1558 static void fill_buffer(uint8_t *buf, uint32_t val, uint32_t len)
1559 {
1560 unsigned int tap_pos = tap_length;
1561
1562 while (len > 32) {
1563 buf_set_u32(buf, tap_pos, 32, val);
1564 len -= 32;
1565 tap_pos += 32;
1566 }
1567 if (len)
1568 buf_set_u32(buf, tap_pos, len, val);
1569 }
1570
1571 static void jlink_queue_data_out(const uint8_t *data, uint32_t len)
1572 {
1573 const uint32_t dir_out = 0xffffffff;
1574
1575 if (data)
1576 bit_copy(tdi_buffer, tap_length, data, 0, len);
1577 else
1578 fill_buffer(tdi_buffer, 0, len);
1579 fill_buffer(tms_buffer, dir_out, len);
1580 tap_length += len;
1581 }
1582
1583 static void jlink_queue_data_in(uint32_t len)
1584 {
1585 const uint32_t dir_in = 0;
1586
1587 fill_buffer(tms_buffer, dir_in, len);
1588 tap_length += len;
1589 }
1590
1591 static int jlink_swd_switch_seq(struct adiv5_dap *dap, enum swd_special_seq seq)
1592 {
1593 const uint8_t *s;
1594 unsigned int s_len;
1595
1596 switch (seq) {
1597 case LINE_RESET:
1598 LOG_DEBUG("SWD line reset");
1599 s = swd_seq_line_reset;
1600 s_len = swd_seq_line_reset_len;
1601 break;
1602 case JTAG_TO_SWD:
1603 LOG_DEBUG("JTAG-to-SWD");
1604 s = swd_seq_jtag_to_swd;
1605 s_len = swd_seq_jtag_to_swd_len;
1606 break;
1607 case SWD_TO_JTAG:
1608 LOG_DEBUG("SWD-to-JTAG");
1609 s = swd_seq_swd_to_jtag;
1610 s_len = swd_seq_swd_to_jtag_len;
1611 break;
1612 default:
1613 LOG_ERROR("Sequence %d not supported", seq);
1614 return ERROR_FAIL;
1615 }
1616
1617 jlink_queue_data_out(s, s_len);
1618
1619 return ERROR_OK;
1620 }
1621
1622 static int jlink_swd_run_queue(struct adiv5_dap *dap)
1623 {
1624 LOG_DEBUG("Executing %d queued transactions", pending_scan_results_length);
1625 int retval;
1626
1627 if (queued_retval != ERROR_OK) {
1628 LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
1629 goto skip;
1630 }
1631
1632 /* A transaction must be followed by another transaction or at least 8 idle cycles to
1633 * ensure that data is clocked through the AP. */
1634 jlink_queue_data_out(NULL, 8);
1635
1636 size_t byte_length = DIV_ROUND_UP(tap_length, 8);
1637
1638 /* There's a comment in jlink_tap_execute saying JLink returns
1639 * an extra NULL in packet when size of incoming message is a
1640 * multiple of 64. Someone should verify if that's still the
1641 * case with the current jlink firmware */
1642
1643 usb_out_buffer[0] = EMU_CMD_HW_JTAG3;
1644 usb_out_buffer[1] = 0;
1645 usb_out_buffer[2] = (tap_length >> 0) & 0xff;
1646 usb_out_buffer[3] = (tap_length >> 8) & 0xff;
1647 memcpy(usb_out_buffer + 4, tms_buffer, byte_length);
1648 memcpy(usb_out_buffer + 4 + byte_length, tdi_buffer, byte_length);
1649
1650 retval = jlink_usb_message(jlink_handle, 4 + 2 * byte_length,
1651 byte_length + 1);
1652 if (retval != ERROR_OK) {
1653 LOG_ERROR("jlink_swd_run_queue failed USB io (%d)", retval);
1654 goto skip;
1655 }
1656
1657 retval = usb_in_buffer[byte_length];
1658 if (retval) {
1659 LOG_ERROR("jlink_swd_run_queue failed, result %d", retval);
1660 goto skip;
1661 }
1662
1663 for (int i = 0; i < pending_scan_results_length; i++) {
1664 int ack = buf_get_u32(usb_in_buffer, pending_scan_results_buffer[i].first, 3);
1665
1666 if (ack != SWD_ACK_OK) {
1667 LOG_ERROR("SWD ack not OK: %d %s", ack,
1668 ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK");
1669 queued_retval = ack;
1670 goto skip;
1671 } else if (pending_scan_results_buffer[i].length) {
1672 uint32_t data = buf_get_u32(usb_in_buffer, 3 + pending_scan_results_buffer[i].first, 32);
1673 int parity = buf_get_u32(usb_in_buffer, 3 + 32 + pending_scan_results_buffer[i].first, 1);
1674
1675 if (parity != parity_u32(data)) {
1676 LOG_ERROR("SWD Read data parity mismatch");
1677 queued_retval = ERROR_FAIL;
1678 goto skip;
1679 }
1680
1681 if (pending_scan_results_buffer[i].buffer)
1682 *(uint32_t *)pending_scan_results_buffer[i].buffer = data;
1683 }
1684 }
1685
1686 skip:
1687 jlink_tap_init();
1688 retval = queued_retval;
1689 queued_retval = ERROR_OK;
1690
1691 return retval;
1692 }
1693
1694 static void jlink_swd_queue_cmd(struct adiv5_dap *dap, uint8_t cmd, uint32_t *dst, uint32_t data)
1695 {
1696 uint8_t data_parity_trn[DIV_ROUND_UP(32 + 1, 8)];
1697 if (tap_length + 46 + 8 + dap->memaccess_tck >= sizeof(tdi_buffer) * 8 ||
1698 pending_scan_results_length == MAX_PENDING_SCAN_RESULTS) {
1699 /* Not enough room in the queue. Run the queue. */
1700 queued_retval = jlink_swd_run_queue(dap);
1701 }
1702
1703 if (queued_retval != ERROR_OK)
1704 return;
1705
1706 cmd |= SWD_CMD_START | SWD_CMD_PARK;
1707
1708 jlink_queue_data_out(&cmd, 8);
1709
1710 pending_scan_results_buffer[pending_scan_results_length].first = tap_length;
1711
1712 if (cmd & SWD_CMD_RnW) {
1713 /* Queue a read transaction */
1714 pending_scan_results_buffer[pending_scan_results_length].length = 32;
1715 pending_scan_results_buffer[pending_scan_results_length].buffer = dst;
1716
1717 jlink_queue_data_in(1 + 3 + 32 + 1 + 1);
1718 } else {
1719 /* Queue a write transaction */
1720 pending_scan_results_buffer[pending_scan_results_length].length = 0;
1721 jlink_queue_data_in(1 + 3 + 1);
1722
1723 buf_set_u32(data_parity_trn, 0, 32, data);
1724 buf_set_u32(data_parity_trn, 32, 1, parity_u32(data));
1725
1726 jlink_queue_data_out(data_parity_trn, 32 + 1);
1727 }
1728
1729 pending_scan_results_length++;
1730
1731 /* Insert idle cycles after AP accesses to avoid WAIT */
1732 if (cmd & SWD_CMD_APnDP)
1733 jlink_queue_data_out(NULL, dap->memaccess_tck);
1734 }
1735
1736 /*****************************************************************************/
1737 /* JLink USB low-level functions */
1738
1739 static struct jlink *jlink_usb_open()
1740 {
1741 struct jtag_libusb_device_handle *devh;
1742 if (jtag_libusb_open(vids, pids, NULL, &devh) != ERROR_OK)
1743 return NULL;
1744
1745 /* BE ***VERY CAREFUL*** ABOUT MAKING CHANGES IN THIS
1746 * AREA!!!!!!!!!!! The behavior of libusb is not completely
1747 * consistent across Windows, Linux, and Mac OS X platforms.
1748 * The actions taken in the following compiler conditionals may
1749 * not agree with published documentation for libusb, but were
1750 * found to be necessary through trials and tribulations. Even
1751 * little tweaks can break one or more platforms, so if you do
1752 * make changes test them carefully on all platforms before
1753 * committing them!
1754 */
1755
1756 /* This entire block can probably be removed. It was a workaround for
1757 * libusb0.1 and old JLink firmware. It has already be removed for
1758 * windows and causing problems (LPC Link-2 with JLink firmware) on
1759 * Linux with libusb1.0.
1760 *
1761 * However, for now the behavior will be left unchanged for non-windows
1762 * platforms using libusb0.1 due to lack of testing.
1763 */
1764 #if IS_WIN32 == 0 && HAVE_LIBUSB1 == 0
1765
1766 jtag_libusb_reset_device(devh);
1767
1768 #if IS_DARWIN == 0
1769
1770 int timeout = 5;
1771 /* reopen jlink after usb_reset
1772 * on win32 this may take a second or two to re-enumerate */
1773 int retval;
1774 while ((retval = jtag_libusb_open(vids, pids, NULL, &devh)) != ERROR_OK) {
1775 usleep(1000);
1776 timeout--;
1777 if (!timeout)
1778 break;
1779 }
1780 if (ERROR_OK != retval)
1781 return NULL;
1782 #endif
1783
1784 #endif
1785
1786 /* usb_set_configuration is only required under win32
1787 * with libusb 0.1 and libusb0.sys. For libusb 1.0 it is a no-op
1788 * since the configuration is already set. */
1789 jtag_libusb_set_configuration(devh, 0);
1790
1791 jtag_libusb_choose_interface(devh, &jlink_read_ep, &jlink_write_ep,
1792 JLINK_USB_INTERFACE_CLASS,
1793 JLINK_USB_INTERFACE_SUBCLASS,
1794 JLINK_USB_INTERFACE_PROTOCOL);
1795
1796 struct jlink *result = malloc(sizeof(struct jlink));
1797 result->usb_handle = devh;
1798 return result;
1799 }
1800
1801 static void jlink_usb_close(struct jlink *jlink)
1802 {
1803 jtag_libusb_close(jlink->usb_handle);
1804 free(jlink);
1805 }
1806
1807 /* Send a message and receive the reply. */
1808 static int jlink_usb_message(struct jlink *jlink, int out_length, int in_length)
1809 {
1810 int result;
1811
1812 result = jlink_usb_write(jlink, out_length);
1813 if (result != out_length) {
1814 LOG_ERROR("usb_bulk_write failed (requested=%d, result=%d)",
1815 out_length, result);
1816 return ERROR_JTAG_DEVICE_ERROR;
1817 }
1818
1819 result = jlink_usb_read(jlink, in_length);
1820 if (result != in_length) {
1821 LOG_ERROR("usb_bulk_read failed (requested=%d, result=%d)",
1822 in_length, result);
1823 return ERROR_JTAG_DEVICE_ERROR;
1824 }
1825 return ERROR_OK;
1826 }
1827
1828 /* calls the given usb_bulk_* function, allowing for the data to
1829 * trickle in with some timeouts */
1830 static int usb_bulk_with_retries(
1831 int (*f)(jtag_libusb_device_handle *, int, char *, int, int),
1832 jtag_libusb_device_handle *dev, int ep,
1833 char *bytes, int size, int timeout)
1834 {
1835 int tries = 3, count = 0;
1836
1837 while (tries && (count < size)) {
1838 int result = f(dev, ep, bytes + count, size - count, timeout);
1839 if (result > 0)
1840 count += result;
1841 else if ((-ETIMEDOUT != result) || !--tries)
1842 return result;
1843 }
1844 return count;
1845 }
1846
1847 static int wrap_usb_bulk_write(jtag_libusb_device_handle *dev, int ep,
1848 char *buff, int size, int timeout)
1849 {
1850 /* usb_bulk_write() takes const char *buff */
1851 return jtag_libusb_bulk_write(dev, ep, buff, size, timeout);
1852 }
1853
1854 static inline int usb_bulk_write_ex(jtag_libusb_device_handle *dev, int ep,
1855 char *bytes, int size, int timeout)
1856 {
1857 return usb_bulk_with_retries(&wrap_usb_bulk_write,
1858 dev, ep, bytes, size, timeout);
1859 }
1860
1861 static inline int usb_bulk_read_ex(jtag_libusb_device_handle *dev, int ep,
1862 char *bytes, int size, int timeout)
1863 {
1864 return usb_bulk_with_retries(&jtag_libusb_bulk_read,
1865 dev, ep, bytes, size, timeout);
1866 }
1867
1868 /* Write data from out_buffer to USB. */
1869 static int jlink_usb_write(struct jlink *jlink, int out_length)
1870 {
1871 int result;
1872
1873 if (out_length > JLINK_OUT_BUFFER_SIZE) {
1874 LOG_ERROR("jlink_write illegal out_length=%d (max=%d)",
1875 out_length, JLINK_OUT_BUFFER_SIZE);
1876 return -1;
1877 }
1878
1879 result = usb_bulk_write_ex(jlink->usb_handle, jlink_write_ep,
1880 (char *)usb_out_buffer, out_length, JLINK_USB_TIMEOUT);
1881
1882 DEBUG_JTAG_IO("jlink_usb_write, out_length = %d, result = %d",
1883 out_length, result);
1884
1885 jlink_debug_buffer(usb_out_buffer, out_length);
1886 return result;
1887 }
1888
1889 /* Read data from USB into in_buffer. */
1890 static int jlink_usb_read(struct jlink *jlink, int expected_size)
1891 {
1892 int result = usb_bulk_read_ex(jlink->usb_handle, jlink_read_ep,
1893 (char *)usb_in_buffer, expected_size, JLINK_USB_TIMEOUT);
1894
1895 DEBUG_JTAG_IO("jlink_usb_read, result = %d", result);
1896
1897 jlink_debug_buffer(usb_in_buffer, result);
1898 return result;
1899 }
1900
1901 /*
1902 * Send a message and receive the reply - simple messages.
1903 *
1904 * @param jlink pointer to driver data
1905 * @param out_length data length in @c usb_out_buffer
1906 * @param in_length data length to be read to @c usb_in_buffer
1907 */
1908 static int jlink_usb_io(struct jlink *jlink, int out_length, int in_length)
1909 {
1910 int result;
1911
1912 result = jlink_usb_write(jlink, out_length);
1913 if (result != out_length) {
1914 LOG_ERROR("usb_bulk_write failed (requested=%d, result=%d)",
1915 out_length, result);
1916 return ERROR_JTAG_DEVICE_ERROR;
1917 }
1918
1919 result = jlink_usb_read(jlink, in_length);
1920 if (result != in_length) {
1921 LOG_ERROR("usb_bulk_read failed (requested=%d, result=%d)",
1922 in_length, result);
1923 return ERROR_JTAG_DEVICE_ERROR;
1924 }
1925
1926 /*
1927 * Section 4.2.4 IN-transaction:
1928 * read dummy 0-byte packet if transaction size is
1929 * multiple of 64 bytes but not max. size of 0x8000
1930 */
1931 if ((in_length % 64) == 0 && in_length != 0x8000) {
1932 char dummy_buffer;
1933 result = usb_bulk_read_ex(jlink->usb_handle, jlink_read_ep,
1934 &dummy_buffer, 1, JLINK_USB_TIMEOUT);
1935 if (result != 0) {
1936 LOG_ERROR("dummy byte read failed");
1937 return ERROR_JTAG_DEVICE_ERROR;
1938 }
1939 }
1940 return ERROR_OK;
1941 }
1942
1943 #ifdef _DEBUG_USB_COMMS_
1944 #define BYTES_PER_LINE 16
1945
1946 static void jlink_debug_buffer(uint8_t *buffer, int length)
1947 {
1948 char line[81];
1949 char s[4];
1950 int i;
1951 int j;
1952
1953 for (i = 0; i < length; i += BYTES_PER_LINE) {
1954 snprintf(line, 5, "%04x", i);
1955 for (j = i; j < i + BYTES_PER_LINE && j < length; j++) {
1956 snprintf(s, 4, " %02x", buffer[j]);
1957 strcat(line, s);
1958 }
1959 LOG_DEBUG("%s", line);
1960 }
1961 }
1962 #endif

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)