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