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