adapter: switch from struct jtag_interface to adapter_driver
[openocd.git] / src / jtag / drivers / ulink.c
1 /***************************************************************************
2 * Copyright (C) 2011-2013 by Martin Schmoelzer *
3 * <martin.schmoelzer@student.tuwien.ac.at> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
17 ***************************************************************************/
18
19 #ifdef HAVE_CONFIG_H
20 #include "config.h"
21 #endif
22
23 #include <math.h>
24 #include <jtag/interface.h>
25 #include <jtag/commands.h>
26 #include <target/image.h>
27 #include <libusb.h>
28 #include "OpenULINK/include/msgtypes.h"
29
30 /** USB Vendor ID of ULINK device in unconfigured state (no firmware loaded
31 * yet) or with OpenULINK firmware. */
32 #define ULINK_VID 0xC251
33
34 /** USB Product ID of ULINK device in unconfigured state (no firmware loaded
35 * yet) or with OpenULINK firmware. */
36 #define ULINK_PID 0x2710
37
38 /** Address of EZ-USB CPU Control & Status register. This register can be
39 * written by issuing a Control EP0 vendor request. */
40 #define CPUCS_REG 0x7F92
41
42 /** USB Control EP0 bRequest: "Firmware Load". */
43 #define REQUEST_FIRMWARE_LOAD 0xA0
44
45 /** Value to write into CPUCS to put EZ-USB into reset. */
46 #define CPU_RESET 0x01
47
48 /** Value to write into CPUCS to put EZ-USB out of reset. */
49 #define CPU_START 0x00
50
51 /** Base address of firmware in EZ-USB code space. */
52 #define FIRMWARE_ADDR 0x0000
53
54 /** USB interface number */
55 #define USB_INTERFACE 0
56
57 /** libusb timeout in ms */
58 #define USB_TIMEOUT 5000
59
60 /** Delay (in microseconds) to wait while EZ-USB performs ReNumeration. */
61 #define ULINK_RENUMERATION_DELAY 1500000
62
63 /** Default location of OpenULINK firmware image. */
64 #define ULINK_FIRMWARE_FILE PKGDATADIR "/OpenULINK/ulink_firmware.hex"
65
66 /** Maximum size of a single firmware section. Entire EZ-USB code space = 8kB */
67 #define SECTION_BUFFERSIZE 8192
68
69 /** Tuning of OpenOCD SCAN commands split into multiple OpenULINK commands. */
70 #define SPLIT_SCAN_THRESHOLD 10
71
72 /** ULINK hardware type */
73 enum ulink_type {
74 /** Original ULINK adapter, based on Cypress EZ-USB (AN2131):
75 * Full JTAG support, no SWD support. */
76 ULINK_1,
77
78 /** Newer ULINK adapter, based on NXP LPC2148. Currently unsupported. */
79 ULINK_2,
80
81 /** Newer ULINK adapter, based on EZ-USB FX2 + FPGA. Currently unsupported. */
82 ULINK_PRO,
83
84 /** Newer ULINK adapter, possibly based on ULINK 2. Currently unsupported. */
85 ULINK_ME
86 };
87
88 enum ulink_payload_direction {
89 PAYLOAD_DIRECTION_OUT,
90 PAYLOAD_DIRECTION_IN
91 };
92
93 enum ulink_delay_type {
94 DELAY_CLOCK_TCK,
95 DELAY_CLOCK_TMS,
96 DELAY_SCAN_IN,
97 DELAY_SCAN_OUT,
98 DELAY_SCAN_IO
99 };
100
101 /**
102 * OpenULINK command (OpenULINK command queue element).
103 *
104 * For the OUT direction payload, things are quite easy: Payload is stored
105 * in a rather small array (up to 63 bytes), the payload is always allocated
106 * by the function generating the command and freed by ulink_clear_queue().
107 *
108 * For the IN direction payload, things get a little bit more complicated:
109 * The maximum IN payload size for a single command is 64 bytes. Assume that
110 * a single OpenOCD command needs to scan 256 bytes. This results in the
111 * generation of four OpenULINK commands. The function generating these
112 * commands shall allocate an uint8_t[256] array. Each command's #payload_in
113 * pointer shall point to the corresponding offset where IN data shall be
114 * placed, while #payload_in_start shall point to the first element of the 256
115 * byte array.
116 * - first command: #payload_in_start + 0
117 * - second command: #payload_in_start + 64
118 * - third command: #payload_in_start + 128
119 * - fourth command: #payload_in_start + 192
120 *
121 * The last command sets #needs_postprocessing to true.
122 */
123 struct ulink_cmd {
124 uint8_t id; /**< ULINK command ID */
125
126 uint8_t *payload_out; /**< OUT direction payload data */
127 uint8_t payload_out_size; /**< OUT direction payload size for this command */
128
129 uint8_t *payload_in_start; /**< Pointer to first element of IN payload array */
130 uint8_t *payload_in; /**< Pointer where IN payload shall be stored */
131 uint8_t payload_in_size; /**< IN direction payload size for this command */
132
133 /** Indicates if this command needs post-processing */
134 bool needs_postprocessing;
135
136 /** Indicates if ulink_clear_queue() should free payload_in_start */
137 bool free_payload_in_start;
138
139 /** Pointer to corresponding OpenOCD command for post-processing */
140 struct jtag_command *cmd_origin;
141
142 struct ulink_cmd *next; /**< Pointer to next command (linked list) */
143 };
144
145 /** Describes one driver instance */
146 struct ulink {
147 struct libusb_context *libusb_ctx;
148 struct libusb_device_handle *usb_device_handle;
149 enum ulink_type type;
150
151 int delay_scan_in; /**< Delay value for SCAN_IN commands */
152 int delay_scan_out; /**< Delay value for SCAN_OUT commands */
153 int delay_scan_io; /**< Delay value for SCAN_IO commands */
154 int delay_clock_tck; /**< Delay value for CLOCK_TMS commands */
155 int delay_clock_tms; /**< Delay value for CLOCK_TCK commands */
156
157 int commands_in_queue; /**< Number of commands in queue */
158 struct ulink_cmd *queue_start; /**< Pointer to first command in queue */
159 struct ulink_cmd *queue_end; /**< Pointer to last command in queue */
160 };
161
162 /**************************** Function Prototypes *****************************/
163
164 /* USB helper functions */
165 int ulink_usb_open(struct ulink **device);
166 int ulink_usb_close(struct ulink **device);
167
168 /* ULINK MCU (Cypress EZ-USB) specific functions */
169 int ulink_cpu_reset(struct ulink *device, unsigned char reset_bit);
170 int ulink_load_firmware_and_renumerate(struct ulink **device, const char *filename,
171 uint32_t delay);
172 int ulink_load_firmware(struct ulink *device, const char *filename);
173 int ulink_write_firmware_section(struct ulink *device,
174 struct image *firmware_image, int section_index);
175
176 /* Generic helper functions */
177 void ulink_print_signal_states(uint8_t input_signals, uint8_t output_signals);
178
179 /* OpenULINK command generation helper functions */
180 int ulink_allocate_payload(struct ulink_cmd *ulink_cmd, int size,
181 enum ulink_payload_direction direction);
182
183 /* OpenULINK command queue helper functions */
184 int ulink_get_queue_size(struct ulink *device,
185 enum ulink_payload_direction direction);
186 void ulink_clear_queue(struct ulink *device);
187 int ulink_append_queue(struct ulink *device, struct ulink_cmd *ulink_cmd);
188 int ulink_execute_queued_commands(struct ulink *device, int timeout);
189
190 static void ulink_print_queue(struct ulink *device);
191
192 int ulink_append_scan_cmd(struct ulink *device,
193 enum scan_type scan_type,
194 int scan_size_bits,
195 uint8_t *tdi,
196 uint8_t *tdo_start,
197 uint8_t *tdo,
198 uint8_t tms_count_start,
199 uint8_t tms_sequence_start,
200 uint8_t tms_count_end,
201 uint8_t tms_sequence_end,
202 struct jtag_command *origin,
203 bool postprocess);
204 int ulink_append_clock_tms_cmd(struct ulink *device, uint8_t count,
205 uint8_t sequence);
206 int ulink_append_clock_tck_cmd(struct ulink *device, uint16_t count);
207 int ulink_append_get_signals_cmd(struct ulink *device);
208 int ulink_append_set_signals_cmd(struct ulink *device, uint8_t low,
209 uint8_t high);
210 int ulink_append_sleep_cmd(struct ulink *device, uint32_t us);
211 int ulink_append_configure_tck_cmd(struct ulink *device,
212 int delay_scan_in,
213 int delay_scan_out,
214 int delay_scan_io,
215 int delay_tck,
216 int delay_tms);
217 int ulink_append_led_cmd(struct ulink *device, uint8_t led_state);
218 int ulink_append_test_cmd(struct ulink *device);
219
220 /* OpenULINK TCK frequency helper functions */
221 int ulink_calculate_delay(enum ulink_delay_type type, long f, int *delay);
222
223 /* Interface between OpenULINK and OpenOCD */
224 static void ulink_set_end_state(tap_state_t endstate);
225 int ulink_queue_statemove(struct ulink *device);
226
227 int ulink_queue_scan(struct ulink *device, struct jtag_command *cmd);
228 int ulink_queue_tlr_reset(struct ulink *device, struct jtag_command *cmd);
229 int ulink_queue_runtest(struct ulink *device, struct jtag_command *cmd);
230 int ulink_queue_reset(struct ulink *device, struct jtag_command *cmd);
231 int ulink_queue_pathmove(struct ulink *device, struct jtag_command *cmd);
232 int ulink_queue_sleep(struct ulink *device, struct jtag_command *cmd);
233 int ulink_queue_stableclocks(struct ulink *device, struct jtag_command *cmd);
234
235 int ulink_post_process_scan(struct ulink_cmd *ulink_cmd);
236 int ulink_post_process_queue(struct ulink *device);
237
238 /* adapter driver functions */
239 static int ulink_execute_queue(void);
240 static int ulink_khz(int khz, int *jtag_speed);
241 static int ulink_speed(int speed);
242 static int ulink_speed_div(int speed, int *khz);
243 static int ulink_init(void);
244 static int ulink_quit(void);
245
246 /****************************** Global Variables ******************************/
247
248 struct ulink *ulink_handle;
249
250 /**************************** USB helper functions ****************************/
251
252 /**
253 * Opens the ULINK device and claims its USB interface.
254 *
255 * Currently, only the original ULINK is supported
256 *
257 * @param device pointer to struct ulink identifying ULINK driver instance.
258 * @return on success: ERROR_OK
259 * @return on failure: ERROR_FAIL
260 */
261 int ulink_usb_open(struct ulink **device)
262 {
263 ssize_t num_devices, i;
264 bool found;
265 libusb_device **usb_devices;
266 struct libusb_device_descriptor usb_desc;
267 struct libusb_device_handle *usb_device_handle;
268
269 num_devices = libusb_get_device_list((*device)->libusb_ctx, &usb_devices);
270
271 if (num_devices <= 0)
272 return ERROR_FAIL;
273
274 found = false;
275 for (i = 0; i < num_devices; i++) {
276 if (libusb_get_device_descriptor(usb_devices[i], &usb_desc) != 0)
277 continue;
278 else if (usb_desc.idVendor == ULINK_VID && usb_desc.idProduct == ULINK_PID) {
279 found = true;
280 break;
281 }
282 }
283
284 if (!found)
285 return ERROR_FAIL;
286
287 if (libusb_open(usb_devices[i], &usb_device_handle) != 0)
288 return ERROR_FAIL;
289 libusb_free_device_list(usb_devices, 1);
290
291 if (libusb_claim_interface(usb_device_handle, 0) != 0)
292 return ERROR_FAIL;
293
294 (*device)->usb_device_handle = usb_device_handle;
295 (*device)->type = ULINK_1;
296
297 return ERROR_OK;
298 }
299
300 /**
301 * Releases the ULINK interface and closes the USB device handle.
302 *
303 * @param device pointer to struct ulink identifying ULINK driver instance.
304 * @return on success: ERROR_OK
305 * @return on failure: ERROR_FAIL
306 */
307 int ulink_usb_close(struct ulink **device)
308 {
309 if (libusb_release_interface((*device)->usb_device_handle, 0) != 0)
310 return ERROR_FAIL;
311
312 libusb_close((*device)->usb_device_handle);
313
314 (*device)->usb_device_handle = NULL;
315
316 return ERROR_OK;
317 }
318
319 /******************* ULINK CPU (EZ-USB) specific functions ********************/
320
321 /**
322 * Writes '0' or '1' to the CPUCS register, putting the EZ-USB CPU into reset
323 * or out of reset.
324 *
325 * @param device pointer to struct ulink identifying ULINK driver instance.
326 * @param reset_bit 0 to put CPU into reset, 1 to put CPU out of reset.
327 * @return on success: ERROR_OK
328 * @return on failure: ERROR_FAIL
329 */
330 int ulink_cpu_reset(struct ulink *device, unsigned char reset_bit)
331 {
332 int ret;
333
334 ret = libusb_control_transfer(device->usb_device_handle,
335 (LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE),
336 REQUEST_FIRMWARE_LOAD, CPUCS_REG, 0, &reset_bit, 1, USB_TIMEOUT);
337
338 /* usb_control_msg() returns the number of bytes transferred during the
339 * DATA stage of the control transfer - must be exactly 1 in this case! */
340 if (ret != 1)
341 return ERROR_FAIL;
342 return ERROR_OK;
343 }
344
345 /**
346 * Puts the ULINK's EZ-USB microcontroller into reset state, downloads
347 * the firmware image, resumes the microcontroller and re-enumerates
348 * USB devices.
349 *
350 * @param device pointer to struct ulink identifying ULINK driver instance.
351 * The usb_handle member will be modified during re-enumeration.
352 * @param filename path to the Intel HEX file containing the firmware image.
353 * @param delay the delay to wait for the device to re-enumerate.
354 * @return on success: ERROR_OK
355 * @return on failure: ERROR_FAIL
356 */
357 int ulink_load_firmware_and_renumerate(struct ulink **device,
358 const char *filename, uint32_t delay)
359 {
360 int ret;
361
362 /* Basic process: After downloading the firmware, the ULINK will disconnect
363 * itself and re-connect after a short amount of time so we have to close
364 * the handle and re-enumerate USB devices */
365
366 ret = ulink_load_firmware(*device, filename);
367 if (ret != ERROR_OK)
368 return ret;
369
370 ret = ulink_usb_close(device);
371 if (ret != ERROR_OK)
372 return ret;
373
374 usleep(delay);
375
376 ret = ulink_usb_open(device);
377 if (ret != ERROR_OK)
378 return ret;
379
380 return ERROR_OK;
381 }
382
383 /**
384 * Downloads a firmware image to the ULINK's EZ-USB microcontroller
385 * over the USB bus.
386 *
387 * @param device pointer to struct ulink identifying ULINK driver instance.
388 * @param filename an absolute or relative path to the Intel HEX file
389 * containing the firmware image.
390 * @return on success: ERROR_OK
391 * @return on failure: ERROR_FAIL
392 */
393 int ulink_load_firmware(struct ulink *device, const char *filename)
394 {
395 struct image ulink_firmware_image;
396 int ret, i;
397
398 ret = ulink_cpu_reset(device, CPU_RESET);
399 if (ret != ERROR_OK) {
400 LOG_ERROR("Could not halt ULINK CPU");
401 return ret;
402 }
403
404 ulink_firmware_image.base_address = 0;
405 ulink_firmware_image.base_address_set = 0;
406
407 ret = image_open(&ulink_firmware_image, filename, "ihex");
408 if (ret != ERROR_OK) {
409 LOG_ERROR("Could not load firmware image");
410 return ret;
411 }
412
413 /* Download all sections in the image to ULINK */
414 for (i = 0; i < ulink_firmware_image.num_sections; i++) {
415 ret = ulink_write_firmware_section(device, &ulink_firmware_image, i);
416 if (ret != ERROR_OK)
417 return ret;
418 }
419
420 image_close(&ulink_firmware_image);
421
422 ret = ulink_cpu_reset(device, CPU_START);
423 if (ret != ERROR_OK) {
424 LOG_ERROR("Could not restart ULINK CPU");
425 return ret;
426 }
427
428 return ERROR_OK;
429 }
430
431 /**
432 * Send one contiguous firmware section to the ULINK's EZ-USB microcontroller
433 * over the USB bus.
434 *
435 * @param device pointer to struct ulink identifying ULINK driver instance.
436 * @param firmware_image pointer to the firmware image that contains the section
437 * which should be sent to the ULINK's EZ-USB microcontroller.
438 * @param section_index index of the section within the firmware image.
439 * @return on success: ERROR_OK
440 * @return on failure: ERROR_FAIL
441 */
442 int ulink_write_firmware_section(struct ulink *device,
443 struct image *firmware_image, int section_index)
444 {
445 uint16_t addr, size, bytes_remaining, chunk_size;
446 uint8_t data[SECTION_BUFFERSIZE];
447 uint8_t *data_ptr = data;
448 size_t size_read;
449 int ret;
450
451 size = (uint16_t)firmware_image->sections[section_index].size;
452 addr = (uint16_t)firmware_image->sections[section_index].base_address;
453
454 LOG_DEBUG("section %02i at addr 0x%04x (size 0x%04x)", section_index, addr,
455 size);
456
457 /* Copy section contents to local buffer */
458 ret = image_read_section(firmware_image, section_index, 0, size, data,
459 &size_read);
460
461 if ((ret != ERROR_OK) || (size_read != size)) {
462 /* Propagating the return code would return '0' (misleadingly indicating
463 * successful execution of the function) if only the size check fails. */
464 return ERROR_FAIL;
465 }
466
467 bytes_remaining = size;
468
469 /* Send section data in chunks of up to 64 bytes to ULINK */
470 while (bytes_remaining > 0) {
471 if (bytes_remaining > 64)
472 chunk_size = 64;
473 else
474 chunk_size = bytes_remaining;
475
476 ret = libusb_control_transfer(device->usb_device_handle,
477 (LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE),
478 REQUEST_FIRMWARE_LOAD, addr, FIRMWARE_ADDR, (unsigned char *)data_ptr,
479 chunk_size, USB_TIMEOUT);
480
481 if (ret != (int)chunk_size) {
482 /* Abort if libusb sent less data than requested */
483 return ERROR_FAIL;
484 }
485
486 bytes_remaining -= chunk_size;
487 addr += chunk_size;
488 data_ptr += chunk_size;
489 }
490
491 return ERROR_OK;
492 }
493
494 /************************** Generic helper functions **************************/
495
496 /**
497 * Print state of interesting signals via LOG_INFO().
498 *
499 * @param input_signals input signal states as returned by CMD_GET_SIGNALS
500 * @param output_signals output signal states as returned by CMD_GET_SIGNALS
501 */
502 void ulink_print_signal_states(uint8_t input_signals, uint8_t output_signals)
503 {
504 LOG_INFO("ULINK signal states: TDI: %i, TDO: %i, TMS: %i, TCK: %i, TRST: %i,"
505 " SRST: %i",
506 (output_signals & SIGNAL_TDI ? 1 : 0),
507 (input_signals & SIGNAL_TDO ? 1 : 0),
508 (output_signals & SIGNAL_TMS ? 1 : 0),
509 (output_signals & SIGNAL_TCK ? 1 : 0),
510 (output_signals & SIGNAL_TRST ? 0 : 1), /* Inverted by hardware */
511 (output_signals & SIGNAL_RESET ? 0 : 1)); /* Inverted by hardware */
512 }
513
514 /**************** OpenULINK command generation helper functions ***************/
515
516 /**
517 * Allocate and initialize space in memory for OpenULINK command payload.
518 *
519 * @param ulink_cmd pointer to command whose payload should be allocated.
520 * @param size the amount of memory to allocate (bytes).
521 * @param direction which payload to allocate.
522 * @return on success: ERROR_OK
523 * @return on failure: ERROR_FAIL
524 */
525 int ulink_allocate_payload(struct ulink_cmd *ulink_cmd, int size,
526 enum ulink_payload_direction direction)
527 {
528 uint8_t *payload;
529
530 payload = calloc(size, sizeof(uint8_t));
531
532 if (payload == NULL) {
533 LOG_ERROR("Could not allocate OpenULINK command payload: out of memory");
534 return ERROR_FAIL;
535 }
536
537 switch (direction) {
538 case PAYLOAD_DIRECTION_OUT:
539 if (ulink_cmd->payload_out != NULL) {
540 LOG_ERROR("BUG: Duplicate payload allocation for OpenULINK command");
541 free(payload);
542 return ERROR_FAIL;
543 } else {
544 ulink_cmd->payload_out = payload;
545 ulink_cmd->payload_out_size = size;
546 }
547 break;
548 case PAYLOAD_DIRECTION_IN:
549 if (ulink_cmd->payload_in_start != NULL) {
550 LOG_ERROR("BUG: Duplicate payload allocation for OpenULINK command");
551 free(payload);
552 return ERROR_FAIL;
553 } else {
554 ulink_cmd->payload_in_start = payload;
555 ulink_cmd->payload_in = payload;
556 ulink_cmd->payload_in_size = size;
557
558 /* By default, free payload_in_start in ulink_clear_queue(). Commands
559 * that do not want this behavior (e. g. split scans) must turn it off
560 * separately! */
561 ulink_cmd->free_payload_in_start = true;
562 }
563 break;
564 }
565
566 return ERROR_OK;
567 }
568
569 /****************** OpenULINK command queue helper functions ******************/
570
571 /**
572 * Get the current number of bytes in the queue, including command IDs.
573 *
574 * @param device pointer to struct ulink identifying ULINK driver instance.
575 * @param direction the transfer direction for which to get byte count.
576 * @return the number of bytes currently stored in the queue for the specified
577 * direction.
578 */
579 int ulink_get_queue_size(struct ulink *device,
580 enum ulink_payload_direction direction)
581 {
582 struct ulink_cmd *current = device->queue_start;
583 int sum = 0;
584
585 while (current != NULL) {
586 switch (direction) {
587 case PAYLOAD_DIRECTION_OUT:
588 sum += current->payload_out_size + 1; /* + 1 byte for Command ID */
589 break;
590 case PAYLOAD_DIRECTION_IN:
591 sum += current->payload_in_size;
592 break;
593 }
594
595 current = current->next;
596 }
597
598 return sum;
599 }
600
601 /**
602 * Clear the OpenULINK command queue.
603 *
604 * @param device pointer to struct ulink identifying ULINK driver instance.
605 * @return on success: ERROR_OK
606 * @return on failure: ERROR_FAIL
607 */
608 void ulink_clear_queue(struct ulink *device)
609 {
610 struct ulink_cmd *current = device->queue_start;
611 struct ulink_cmd *next = NULL;
612
613 while (current != NULL) {
614 /* Save pointer to next element */
615 next = current->next;
616
617 /* Free payloads: OUT payload can be freed immediately */
618 free(current->payload_out);
619 current->payload_out = NULL;
620
621 /* IN payload MUST be freed ONLY if no other commands use the
622 * payload_in_start buffer */
623 if (current->free_payload_in_start == true) {
624 free(current->payload_in_start);
625 current->payload_in_start = NULL;
626 current->payload_in = NULL;
627 }
628
629 /* Free queue element */
630 free(current);
631
632 /* Proceed with next element */
633 current = next;
634 }
635
636 device->commands_in_queue = 0;
637 device->queue_start = NULL;
638 device->queue_end = NULL;
639 }
640
641 /**
642 * Add a command to the OpenULINK command queue.
643 *
644 * @param device pointer to struct ulink identifying ULINK driver instance.
645 * @param ulink_cmd pointer to command that shall be appended to the OpenULINK
646 * command queue.
647 * @return on success: ERROR_OK
648 * @return on failure: ERROR_FAIL
649 */
650 int ulink_append_queue(struct ulink *device, struct ulink_cmd *ulink_cmd)
651 {
652 int newsize_out, newsize_in;
653 int ret;
654
655 newsize_out = ulink_get_queue_size(device, PAYLOAD_DIRECTION_OUT) + 1
656 + ulink_cmd->payload_out_size;
657
658 newsize_in = ulink_get_queue_size(device, PAYLOAD_DIRECTION_IN)
659 + ulink_cmd->payload_in_size;
660
661 /* Check if the current command can be appended to the queue */
662 if ((newsize_out > 64) || (newsize_in > 64)) {
663 /* New command does not fit. Execute all commands in queue before starting
664 * new queue with the current command as first entry. */
665 ret = ulink_execute_queued_commands(device, USB_TIMEOUT);
666 if (ret != ERROR_OK)
667 return ret;
668
669 ret = ulink_post_process_queue(device);
670 if (ret != ERROR_OK)
671 return ret;
672
673 ulink_clear_queue(device);
674 }
675
676 if (device->queue_start == NULL) {
677 /* Queue was empty */
678 device->commands_in_queue = 1;
679
680 device->queue_start = ulink_cmd;
681 device->queue_end = ulink_cmd;
682 } else {
683 /* There are already commands in the queue */
684 device->commands_in_queue++;
685
686 device->queue_end->next = ulink_cmd;
687 device->queue_end = ulink_cmd;
688 }
689
690 return ERROR_OK;
691 }
692
693 /**
694 * Sends all queued OpenULINK commands to the ULINK for execution.
695 *
696 * @param device pointer to struct ulink identifying ULINK driver instance.
697 * @return on success: ERROR_OK
698 * @return on failure: ERROR_FAIL
699 */
700 int ulink_execute_queued_commands(struct ulink *device, int timeout)
701 {
702 struct ulink_cmd *current;
703 int ret, i, index_out, index_in, count_out, count_in, transferred;
704 uint8_t buffer[64];
705
706 if (LOG_LEVEL_IS(LOG_LVL_DEBUG_IO))
707 ulink_print_queue(device);
708
709 index_out = 0;
710 count_out = 0;
711 count_in = 0;
712
713 for (current = device->queue_start; current; current = current->next) {
714 /* Add command to packet */
715 buffer[index_out] = current->id;
716 index_out++;
717 count_out++;
718
719 for (i = 0; i < current->payload_out_size; i++)
720 buffer[index_out + i] = current->payload_out[i];
721 index_out += current->payload_out_size;
722 count_in += current->payload_in_size;
723 count_out += current->payload_out_size;
724 }
725
726 /* Send packet to ULINK */
727 ret = libusb_bulk_transfer(device->usb_device_handle, (2 | LIBUSB_ENDPOINT_OUT),
728 (unsigned char *)buffer, count_out, &transferred, timeout);
729 if (ret != 0)
730 return ERROR_FAIL;
731 if (transferred != count_out)
732 return ERROR_FAIL;
733
734 /* Wait for response if commands contain IN payload data */
735 if (count_in > 0) {
736 ret = libusb_bulk_transfer(device->usb_device_handle, (2 | LIBUSB_ENDPOINT_IN),
737 (unsigned char *)buffer, 64, &transferred, timeout);
738 if (ret != 0)
739 return ERROR_FAIL;
740 if (transferred != count_in)
741 return ERROR_FAIL;
742
743 /* Write back IN payload data */
744 index_in = 0;
745 for (current = device->queue_start; current; current = current->next) {
746 for (i = 0; i < current->payload_in_size; i++) {
747 current->payload_in[i] = buffer[index_in];
748 index_in++;
749 }
750 }
751 }
752
753 return ERROR_OK;
754 }
755
756 /**
757 * Convert an OpenULINK command ID (\a id) to a human-readable string.
758 *
759 * @param id the OpenULINK command ID.
760 * @return the corresponding human-readable string.
761 */
762 static const char *ulink_cmd_id_string(uint8_t id)
763 {
764 switch (id) {
765 case CMD_SCAN_IN:
766 return "CMD_SCAN_IN";
767 break;
768 case CMD_SLOW_SCAN_IN:
769 return "CMD_SLOW_SCAN_IN";
770 break;
771 case CMD_SCAN_OUT:
772 return "CMD_SCAN_OUT";
773 break;
774 case CMD_SLOW_SCAN_OUT:
775 return "CMD_SLOW_SCAN_OUT";
776 break;
777 case CMD_SCAN_IO:
778 return "CMD_SCAN_IO";
779 break;
780 case CMD_SLOW_SCAN_IO:
781 return "CMD_SLOW_SCAN_IO";
782 break;
783 case CMD_CLOCK_TMS:
784 return "CMD_CLOCK_TMS";
785 break;
786 case CMD_SLOW_CLOCK_TMS:
787 return "CMD_SLOW_CLOCK_TMS";
788 break;
789 case CMD_CLOCK_TCK:
790 return "CMD_CLOCK_TCK";
791 break;
792 case CMD_SLOW_CLOCK_TCK:
793 return "CMD_SLOW_CLOCK_TCK";
794 break;
795 case CMD_SLEEP_US:
796 return "CMD_SLEEP_US";
797 break;
798 case CMD_SLEEP_MS:
799 return "CMD_SLEEP_MS";
800 break;
801 case CMD_GET_SIGNALS:
802 return "CMD_GET_SIGNALS";
803 break;
804 case CMD_SET_SIGNALS:
805 return "CMD_SET_SIGNALS";
806 break;
807 case CMD_CONFIGURE_TCK_FREQ:
808 return "CMD_CONFIGURE_TCK_FREQ";
809 break;
810 case CMD_SET_LEDS:
811 return "CMD_SET_LEDS";
812 break;
813 case CMD_TEST:
814 return "CMD_TEST";
815 break;
816 default:
817 return "CMD_UNKNOWN";
818 break;
819 }
820 }
821
822 /**
823 * Print one OpenULINK command to stdout.
824 *
825 * @param ulink_cmd pointer to OpenULINK command.
826 */
827 static void ulink_print_command(struct ulink_cmd *ulink_cmd)
828 {
829 int i;
830
831 printf(" %-22s | OUT size = %i, bytes = 0x",
832 ulink_cmd_id_string(ulink_cmd->id), ulink_cmd->payload_out_size);
833
834 for (i = 0; i < ulink_cmd->payload_out_size; i++)
835 printf("%02X ", ulink_cmd->payload_out[i]);
836 printf("\n | IN size = %i\n",
837 ulink_cmd->payload_in_size);
838 }
839
840 /**
841 * Print the OpenULINK command queue to stdout.
842 *
843 * @param device pointer to struct ulink identifying ULINK driver instance.
844 */
845 static void ulink_print_queue(struct ulink *device)
846 {
847 struct ulink_cmd *current;
848
849 printf("OpenULINK command queue:\n");
850
851 for (current = device->queue_start; current; current = current->next)
852 ulink_print_command(current);
853 }
854
855 /**
856 * Perform JTAG scan
857 *
858 * Creates and appends a JTAG scan command to the OpenULINK command queue.
859 * A JTAG scan consists of three steps:
860 * - Move to the desired SHIFT state, depending on scan type (IR/DR scan).
861 * - Shift TDI data into the JTAG chain, optionally reading the TDO pin.
862 * - Move to the desired end state.
863 *
864 * @param device pointer to struct ulink identifying ULINK driver instance.
865 * @param scan_type the type of the scan (IN, OUT, IO (bidirectional)).
866 * @param scan_size_bits number of bits to shift into the JTAG chain.
867 * @param tdi pointer to array containing TDI data.
868 * @param tdo_start pointer to first element of array where TDO data shall be
869 * stored. See #ulink_cmd for details.
870 * @param tdo pointer to array where TDO data shall be stored
871 * @param tms_count_start number of TMS state transitions to perform BEFORE
872 * shifting data into the JTAG chain.
873 * @param tms_sequence_start sequence of TMS state transitions that will be
874 * performed BEFORE shifting data into the JTAG chain.
875 * @param tms_count_end number of TMS state transitions to perform AFTER
876 * shifting data into the JTAG chain.
877 * @param tms_sequence_end sequence of TMS state transitions that will be
878 * performed AFTER shifting data into the JTAG chain.
879 * @param origin pointer to OpenOCD command that generated this scan command.
880 * @param postprocess whether this command needs to be post-processed after
881 * execution.
882 * @return on success: ERROR_OK
883 * @return on failure: ERROR_FAIL
884 */
885 int ulink_append_scan_cmd(struct ulink *device, enum scan_type scan_type,
886 int scan_size_bits, uint8_t *tdi, uint8_t *tdo_start, uint8_t *tdo,
887 uint8_t tms_count_start, uint8_t tms_sequence_start, uint8_t tms_count_end,
888 uint8_t tms_sequence_end, struct jtag_command *origin, bool postprocess)
889 {
890 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
891 int ret, i, scan_size_bytes;
892 uint8_t bits_last_byte;
893
894 if (cmd == NULL)
895 return ERROR_FAIL;
896
897 /* Check size of command. USB buffer can hold 64 bytes, 1 byte is command ID,
898 * 5 bytes are setup data -> 58 remaining payload bytes for TDI data */
899 if (scan_size_bits > (58 * 8)) {
900 LOG_ERROR("BUG: Tried to create CMD_SCAN_IO OpenULINK command with too"
901 " large payload");
902 free(cmd);
903 return ERROR_FAIL;
904 }
905
906 scan_size_bytes = DIV_ROUND_UP(scan_size_bits, 8);
907
908 bits_last_byte = scan_size_bits % 8;
909 if (bits_last_byte == 0)
910 bits_last_byte = 8;
911
912 /* Allocate out_payload depending on scan type */
913 switch (scan_type) {
914 case SCAN_IN:
915 if (device->delay_scan_in < 0)
916 cmd->id = CMD_SCAN_IN;
917 else
918 cmd->id = CMD_SLOW_SCAN_IN;
919 ret = ulink_allocate_payload(cmd, 5, PAYLOAD_DIRECTION_OUT);
920 break;
921 case SCAN_OUT:
922 if (device->delay_scan_out < 0)
923 cmd->id = CMD_SCAN_OUT;
924 else
925 cmd->id = CMD_SLOW_SCAN_OUT;
926 ret = ulink_allocate_payload(cmd, scan_size_bytes + 5, PAYLOAD_DIRECTION_OUT);
927 break;
928 case SCAN_IO:
929 if (device->delay_scan_io < 0)
930 cmd->id = CMD_SCAN_IO;
931 else
932 cmd->id = CMD_SLOW_SCAN_IO;
933 ret = ulink_allocate_payload(cmd, scan_size_bytes + 5, PAYLOAD_DIRECTION_OUT);
934 break;
935 default:
936 LOG_ERROR("BUG: ulink_append_scan_cmd() encountered an unknown scan type");
937 ret = ERROR_FAIL;
938 break;
939 }
940
941 if (ret != ERROR_OK) {
942 free(cmd);
943 return ret;
944 }
945
946 /* Build payload_out that is common to all scan types */
947 cmd->payload_out[0] = scan_size_bytes & 0xFF;
948 cmd->payload_out[1] = bits_last_byte & 0xFF;
949 cmd->payload_out[2] = ((tms_count_start & 0x0F) << 4) | (tms_count_end & 0x0F);
950 cmd->payload_out[3] = tms_sequence_start;
951 cmd->payload_out[4] = tms_sequence_end;
952
953 /* Setup payload_out for types with OUT transfer */
954 if ((scan_type == SCAN_OUT) || (scan_type == SCAN_IO)) {
955 for (i = 0; i < scan_size_bytes; i++)
956 cmd->payload_out[i + 5] = tdi[i];
957 }
958
959 /* Setup payload_in pointers for types with IN transfer */
960 if ((scan_type == SCAN_IN) || (scan_type == SCAN_IO)) {
961 cmd->payload_in_start = tdo_start;
962 cmd->payload_in = tdo;
963 cmd->payload_in_size = scan_size_bytes;
964 }
965
966 cmd->needs_postprocessing = postprocess;
967 cmd->cmd_origin = origin;
968
969 /* For scan commands, we free payload_in_start only when the command is
970 * the last in a series of split commands or a stand-alone command */
971 cmd->free_payload_in_start = postprocess;
972
973 return ulink_append_queue(device, cmd);
974 }
975
976 /**
977 * Perform TAP state transitions
978 *
979 * @param device pointer to struct ulink identifying ULINK driver instance.
980 * @param count defines the number of TCK clock cycles generated (up to 8).
981 * @param sequence defines the TMS pin levels for each state transition. The
982 * Least-Significant Bit is read first.
983 * @return on success: ERROR_OK
984 * @return on failure: ERROR_FAIL
985 */
986 int ulink_append_clock_tms_cmd(struct ulink *device, uint8_t count,
987 uint8_t sequence)
988 {
989 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
990 int ret;
991
992 if (cmd == NULL)
993 return ERROR_FAIL;
994
995 if (device->delay_clock_tms < 0)
996 cmd->id = CMD_CLOCK_TMS;
997 else
998 cmd->id = CMD_SLOW_CLOCK_TMS;
999
1000 /* CMD_CLOCK_TMS has two OUT payload bytes and zero IN payload bytes */
1001 ret = ulink_allocate_payload(cmd, 2, PAYLOAD_DIRECTION_OUT);
1002 if (ret != ERROR_OK) {
1003 free(cmd);
1004 return ret;
1005 }
1006
1007 cmd->payload_out[0] = count;
1008 cmd->payload_out[1] = sequence;
1009
1010 return ulink_append_queue(device, cmd);
1011 }
1012
1013 /**
1014 * Generate a defined amount of TCK clock cycles
1015 *
1016 * All other JTAG signals are left unchanged.
1017 *
1018 * @param device pointer to struct ulink identifying ULINK driver instance.
1019 * @param count the number of TCK clock cycles to generate.
1020 * @return on success: ERROR_OK
1021 * @return on failure: ERROR_FAIL
1022 */
1023 int ulink_append_clock_tck_cmd(struct ulink *device, uint16_t count)
1024 {
1025 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1026 int ret;
1027
1028 if (cmd == NULL)
1029 return ERROR_FAIL;
1030
1031 if (device->delay_clock_tck < 0)
1032 cmd->id = CMD_CLOCK_TCK;
1033 else
1034 cmd->id = CMD_SLOW_CLOCK_TCK;
1035
1036 /* CMD_CLOCK_TCK has two OUT payload bytes and zero IN payload bytes */
1037 ret = ulink_allocate_payload(cmd, 2, PAYLOAD_DIRECTION_OUT);
1038 if (ret != ERROR_OK) {
1039 free(cmd);
1040 return ret;
1041 }
1042
1043 cmd->payload_out[0] = count & 0xff;
1044 cmd->payload_out[1] = (count >> 8) & 0xff;
1045
1046 return ulink_append_queue(device, cmd);
1047 }
1048
1049 /**
1050 * Read JTAG signals.
1051 *
1052 * @param device pointer to struct ulink identifying ULINK driver instance.
1053 * @return on success: ERROR_OK
1054 * @return on failure: ERROR_FAIL
1055 */
1056 int ulink_append_get_signals_cmd(struct ulink *device)
1057 {
1058 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1059 int ret;
1060
1061 if (cmd == NULL)
1062 return ERROR_FAIL;
1063
1064 cmd->id = CMD_GET_SIGNALS;
1065 cmd->needs_postprocessing = true;
1066
1067 /* CMD_GET_SIGNALS has two IN payload bytes */
1068 ret = ulink_allocate_payload(cmd, 2, PAYLOAD_DIRECTION_IN);
1069
1070 if (ret != ERROR_OK) {
1071 free(cmd);
1072 return ret;
1073 }
1074
1075 return ulink_append_queue(device, cmd);
1076 }
1077
1078 /**
1079 * Arbitrarily set JTAG output signals.
1080 *
1081 * @param device pointer to struct ulink identifying ULINK driver instance.
1082 * @param low defines which signals will be de-asserted. Each bit corresponds
1083 * to a JTAG signal:
1084 * - SIGNAL_TDI
1085 * - SIGNAL_TMS
1086 * - SIGNAL_TCK
1087 * - SIGNAL_TRST
1088 * - SIGNAL_BRKIN
1089 * - SIGNAL_RESET
1090 * - SIGNAL_OCDSE
1091 * @param high defines which signals will be asserted.
1092 * @return on success: ERROR_OK
1093 * @return on failure: ERROR_FAIL
1094 */
1095 int ulink_append_set_signals_cmd(struct ulink *device, uint8_t low,
1096 uint8_t high)
1097 {
1098 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1099 int ret;
1100
1101 if (cmd == NULL)
1102 return ERROR_FAIL;
1103
1104 cmd->id = CMD_SET_SIGNALS;
1105
1106 /* CMD_SET_SIGNALS has two OUT payload bytes and zero IN payload bytes */
1107 ret = ulink_allocate_payload(cmd, 2, PAYLOAD_DIRECTION_OUT);
1108
1109 if (ret != ERROR_OK) {
1110 free(cmd);
1111 return ret;
1112 }
1113
1114 cmd->payload_out[0] = low;
1115 cmd->payload_out[1] = high;
1116
1117 return ulink_append_queue(device, cmd);
1118 }
1119
1120 /**
1121 * Sleep for a pre-defined number of microseconds
1122 *
1123 * @param device pointer to struct ulink identifying ULINK driver instance.
1124 * @param us the number microseconds to sleep.
1125 * @return on success: ERROR_OK
1126 * @return on failure: ERROR_FAIL
1127 */
1128 int ulink_append_sleep_cmd(struct ulink *device, uint32_t us)
1129 {
1130 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1131 int ret;
1132
1133 if (cmd == NULL)
1134 return ERROR_FAIL;
1135
1136 cmd->id = CMD_SLEEP_US;
1137
1138 /* CMD_SLEEP_US has two OUT payload bytes and zero IN payload bytes */
1139 ret = ulink_allocate_payload(cmd, 2, PAYLOAD_DIRECTION_OUT);
1140
1141 if (ret != ERROR_OK) {
1142 free(cmd);
1143 return ret;
1144 }
1145
1146 cmd->payload_out[0] = us & 0x00ff;
1147 cmd->payload_out[1] = (us >> 8) & 0x00ff;
1148
1149 return ulink_append_queue(device, cmd);
1150 }
1151
1152 /**
1153 * Set TCK delay counters
1154 *
1155 * @param device pointer to struct ulink identifying ULINK driver instance.
1156 * @param delay_scan_in delay count top value in jtag_slow_scan_in() function.
1157 * @param delay_scan_out delay count top value in jtag_slow_scan_out() function.
1158 * @param delay_scan_io delay count top value in jtag_slow_scan_io() function.
1159 * @param delay_tck delay count top value in jtag_clock_tck() function.
1160 * @param delay_tms delay count top value in jtag_slow_clock_tms() function.
1161 * @return on success: ERROR_OK
1162 * @return on failure: ERROR_FAIL
1163 */
1164 int ulink_append_configure_tck_cmd(struct ulink *device, int delay_scan_in,
1165 int delay_scan_out, int delay_scan_io, int delay_tck, int delay_tms)
1166 {
1167 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1168 int ret;
1169
1170 if (cmd == NULL)
1171 return ERROR_FAIL;
1172
1173 cmd->id = CMD_CONFIGURE_TCK_FREQ;
1174
1175 /* CMD_CONFIGURE_TCK_FREQ has five OUT payload bytes and zero
1176 * IN payload bytes */
1177 ret = ulink_allocate_payload(cmd, 5, PAYLOAD_DIRECTION_OUT);
1178 if (ret != ERROR_OK) {
1179 free(cmd);
1180 return ret;
1181 }
1182
1183 if (delay_scan_in < 0)
1184 cmd->payload_out[0] = 0;
1185 else
1186 cmd->payload_out[0] = (uint8_t)delay_scan_in;
1187
1188 if (delay_scan_out < 0)
1189 cmd->payload_out[1] = 0;
1190 else
1191 cmd->payload_out[1] = (uint8_t)delay_scan_out;
1192
1193 if (delay_scan_io < 0)
1194 cmd->payload_out[2] = 0;
1195 else
1196 cmd->payload_out[2] = (uint8_t)delay_scan_io;
1197
1198 if (delay_tck < 0)
1199 cmd->payload_out[3] = 0;
1200 else
1201 cmd->payload_out[3] = (uint8_t)delay_tck;
1202
1203 if (delay_tms < 0)
1204 cmd->payload_out[4] = 0;
1205 else
1206 cmd->payload_out[4] = (uint8_t)delay_tms;
1207
1208 return ulink_append_queue(device, cmd);
1209 }
1210
1211 /**
1212 * Turn on/off ULINK LEDs.
1213 *
1214 * @param device pointer to struct ulink identifying ULINK driver instance.
1215 * @param led_state which LED(s) to turn on or off. The following bits
1216 * influence the LEDS:
1217 * - Bit 0: Turn COM LED on
1218 * - Bit 1: Turn RUN LED on
1219 * - Bit 2: Turn COM LED off
1220 * - Bit 3: Turn RUN LED off
1221 * If both the on-bit and the off-bit for the same LED is set, the LED is
1222 * turned off.
1223 * @return on success: ERROR_OK
1224 * @return on failure: ERROR_FAIL
1225 */
1226 int ulink_append_led_cmd(struct ulink *device, uint8_t led_state)
1227 {
1228 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1229 int ret;
1230
1231 if (cmd == NULL)
1232 return ERROR_FAIL;
1233
1234 cmd->id = CMD_SET_LEDS;
1235
1236 /* CMD_SET_LEDS has one OUT payload byte and zero IN payload bytes */
1237 ret = ulink_allocate_payload(cmd, 1, PAYLOAD_DIRECTION_OUT);
1238 if (ret != ERROR_OK) {
1239 free(cmd);
1240 return ret;
1241 }
1242
1243 cmd->payload_out[0] = led_state;
1244
1245 return ulink_append_queue(device, cmd);
1246 }
1247
1248 /**
1249 * Test command. Used to check if the ULINK device is ready to accept new
1250 * commands.
1251 *
1252 * @param device pointer to struct ulink identifying ULINK driver instance.
1253 * @return on success: ERROR_OK
1254 * @return on failure: ERROR_FAIL
1255 */
1256 int ulink_append_test_cmd(struct ulink *device)
1257 {
1258 struct ulink_cmd *cmd = calloc(1, sizeof(struct ulink_cmd));
1259 int ret;
1260
1261 if (cmd == NULL)
1262 return ERROR_FAIL;
1263
1264 cmd->id = CMD_TEST;
1265
1266 /* CMD_TEST has one OUT payload byte and zero IN payload bytes */
1267 ret = ulink_allocate_payload(cmd, 1, PAYLOAD_DIRECTION_OUT);
1268 if (ret != ERROR_OK) {
1269 free(cmd);
1270 return ret;
1271 }
1272
1273 cmd->payload_out[0] = 0xAA;
1274
1275 return ulink_append_queue(device, cmd);
1276 }
1277
1278 /****************** OpenULINK TCK frequency helper functions ******************/
1279
1280 /**
1281 * Calculate delay values for a given TCK frequency.
1282 *
1283 * The OpenULINK firmware uses five different speed values for different
1284 * commands. These speed values are calculated in these functions.
1285 *
1286 * The five different commands which support variable TCK frequency are
1287 * implemented twice in the firmware:
1288 * 1. Maximum possible frequency without any artificial delay
1289 * 2. Variable frequency with artificial linear delay loop
1290 *
1291 * To set the ULINK to maximum frequency, it is only neccessary to use the
1292 * corresponding command IDs. To set the ULINK to a lower frequency, the
1293 * delay loop top values have to be calculated first. Then, a
1294 * CMD_CONFIGURE_TCK_FREQ command needs to be sent to the ULINK device.
1295 *
1296 * The delay values are described by linear equations:
1297 * t = k * x + d
1298 * (t = period, k = constant, x = delay value, d = constant)
1299 *
1300 * Thus, the delay can be calculated as in the following equation:
1301 * x = (t - d) / k
1302 *
1303 * The constants in these equations have been determined and validated by
1304 * measuring the frequency resulting from different delay values.
1305 *
1306 * @param type for which command to calculate the delay value.
1307 * @param f TCK frequency for which to calculate the delay value in Hz.
1308 * @param delay where to store resulting delay value.
1309 * @return on success: ERROR_OK
1310 * @return on failure: ERROR_FAIL
1311 */
1312 int ulink_calculate_delay(enum ulink_delay_type type, long f, int *delay)
1313 {
1314 float t, x, x_ceil;
1315
1316 /* Calculate period of requested TCK frequency */
1317 t = 1.0 / (float)(f);
1318
1319 switch (type) {
1320 case DELAY_CLOCK_TCK:
1321 x = (t - (float)(6E-6)) / (float)(4E-6);
1322 break;
1323 case DELAY_CLOCK_TMS:
1324 x = (t - (float)(8.5E-6)) / (float)(4E-6);
1325 break;
1326 case DELAY_SCAN_IN:
1327 x = (t - (float)(8.8308E-6)) / (float)(4E-6);
1328 break;
1329 case DELAY_SCAN_OUT:
1330 x = (t - (float)(1.0527E-5)) / (float)(4E-6);
1331 break;
1332 case DELAY_SCAN_IO:
1333 x = (t - (float)(1.3132E-5)) / (float)(4E-6);
1334 break;
1335 default:
1336 return ERROR_FAIL;
1337 break;
1338 }
1339
1340 /* Check if the delay value is negative. This happens when a frequency is
1341 * requested that is too high for the delay loop implementation. In this
1342 * case, set delay value to zero. */
1343 if (x < 0)
1344 x = 0;
1345
1346 /* We need to convert the exact delay value to an integer. Therefore, we
1347 * round the exact value UP to ensure that the resulting frequency is NOT
1348 * higher than the requested frequency. */
1349 x_ceil = ceilf(x);
1350
1351 /* Check if the value is within limits */
1352 if (x_ceil > 255)
1353 return ERROR_FAIL;
1354
1355 *delay = (int)x_ceil;
1356
1357 return ERROR_OK;
1358 }
1359
1360 /**
1361 * Calculate frequency for a given delay value.
1362 *
1363 * Similar to the #ulink_calculate_delay function, this function calculates the
1364 * TCK frequency for a given delay value by using linear equations of the form:
1365 * t = k * x + d
1366 * (t = period, k = constant, x = delay value, d = constant)
1367 *
1368 * @param type for which command to calculate the delay value.
1369 * @param delay delay value for which to calculate the resulting TCK frequency.
1370 * @return the resulting TCK frequency
1371 */
1372 static long ulink_calculate_frequency(enum ulink_delay_type type, int delay)
1373 {
1374 float t, f_float;
1375
1376 if (delay > 255)
1377 return 0;
1378
1379 switch (type) {
1380 case DELAY_CLOCK_TCK:
1381 if (delay < 0)
1382 t = (float)(2.666E-6);
1383 else
1384 t = (float)(4E-6) * (float)(delay) + (float)(6E-6);
1385 break;
1386 case DELAY_CLOCK_TMS:
1387 if (delay < 0)
1388 t = (float)(5.666E-6);
1389 else
1390 t = (float)(4E-6) * (float)(delay) + (float)(8.5E-6);
1391 break;
1392 case DELAY_SCAN_IN:
1393 if (delay < 0)
1394 t = (float)(5.5E-6);
1395 else
1396 t = (float)(4E-6) * (float)(delay) + (float)(8.8308E-6);
1397 break;
1398 case DELAY_SCAN_OUT:
1399 if (delay < 0)
1400 t = (float)(7.0E-6);
1401 else
1402 t = (float)(4E-6) * (float)(delay) + (float)(1.0527E-5);
1403 break;
1404 case DELAY_SCAN_IO:
1405 if (delay < 0)
1406 t = (float)(9.926E-6);
1407 else
1408 t = (float)(4E-6) * (float)(delay) + (float)(1.3132E-5);
1409 break;
1410 default:
1411 return 0;
1412 }
1413
1414 f_float = 1.0 / t;
1415 return roundf(f_float);
1416 }
1417
1418 /******************* Interface between OpenULINK and OpenOCD ******************/
1419
1420 /**
1421 * Sets the end state follower (see interface.h) if \a endstate is a stable
1422 * state.
1423 *
1424 * @param endstate the state the end state follower should be set to.
1425 */
1426 static void ulink_set_end_state(tap_state_t endstate)
1427 {
1428 if (tap_is_state_stable(endstate))
1429 tap_set_end_state(endstate);
1430 else {
1431 LOG_ERROR("BUG: %s is not a valid end state", tap_state_name(endstate));
1432 exit(EXIT_FAILURE);
1433 }
1434 }
1435
1436 /**
1437 * Move from the current TAP state to the current TAP end state.
1438 *
1439 * @param device pointer to struct ulink identifying ULINK driver instance.
1440 * @return on success: ERROR_OK
1441 * @return on failure: ERROR_FAIL
1442 */
1443 int ulink_queue_statemove(struct ulink *device)
1444 {
1445 uint8_t tms_sequence, tms_count;
1446 int ret;
1447
1448 if (tap_get_state() == tap_get_end_state()) {
1449 /* Do nothing if we are already there */
1450 return ERROR_OK;
1451 }
1452
1453 tms_sequence = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1454 tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1455
1456 ret = ulink_append_clock_tms_cmd(device, tms_count, tms_sequence);
1457
1458 if (ret == ERROR_OK)
1459 tap_set_state(tap_get_end_state());
1460
1461 return ret;
1462 }
1463
1464 /**
1465 * Perform a scan operation on a JTAG register.
1466 *
1467 * @param device pointer to struct ulink identifying ULINK driver instance.
1468 * @param cmd pointer to the command that shall be executed.
1469 * @return on success: ERROR_OK
1470 * @return on failure: ERROR_FAIL
1471 */
1472 int ulink_queue_scan(struct ulink *device, struct jtag_command *cmd)
1473 {
1474 uint32_t scan_size_bits, scan_size_bytes, bits_last_scan;
1475 uint32_t scans_max_payload, bytecount;
1476 uint8_t *tdi_buffer_start = NULL, *tdi_buffer = NULL;
1477 uint8_t *tdo_buffer_start = NULL, *tdo_buffer = NULL;
1478
1479 uint8_t first_tms_count, first_tms_sequence;
1480 uint8_t last_tms_count, last_tms_sequence;
1481
1482 uint8_t tms_count_pause, tms_sequence_pause;
1483 uint8_t tms_count_resume, tms_sequence_resume;
1484
1485 uint8_t tms_count_start, tms_sequence_start;
1486 uint8_t tms_count_end, tms_sequence_end;
1487
1488 enum scan_type type;
1489 int ret;
1490
1491 /* Determine scan size */
1492 scan_size_bits = jtag_scan_size(cmd->cmd.scan);
1493 scan_size_bytes = DIV_ROUND_UP(scan_size_bits, 8);
1494
1495 /* Determine scan type (IN/OUT/IO) */
1496 type = jtag_scan_type(cmd->cmd.scan);
1497
1498 /* Determine number of scan commands with maximum payload */
1499 scans_max_payload = scan_size_bytes / 58;
1500
1501 /* Determine size of last shift command */
1502 bits_last_scan = scan_size_bits - (scans_max_payload * 58 * 8);
1503
1504 /* Allocate TDO buffer if required */
1505 if ((type == SCAN_IN) || (type == SCAN_IO)) {
1506 tdo_buffer_start = calloc(sizeof(uint8_t), scan_size_bytes);
1507
1508 if (tdo_buffer_start == NULL)
1509 return ERROR_FAIL;
1510
1511 tdo_buffer = tdo_buffer_start;
1512 }
1513
1514 /* Fill TDI buffer if required */
1515 if ((type == SCAN_OUT) || (type == SCAN_IO)) {
1516 jtag_build_buffer(cmd->cmd.scan, &tdi_buffer_start);
1517 tdi_buffer = tdi_buffer_start;
1518 }
1519
1520 /* Get TAP state transitions */
1521 if (cmd->cmd.scan->ir_scan) {
1522 ulink_set_end_state(TAP_IRSHIFT);
1523 first_tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1524 first_tms_sequence = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1525
1526 tap_set_state(TAP_IRSHIFT);
1527 tap_set_end_state(cmd->cmd.scan->end_state);
1528 last_tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1529 last_tms_sequence = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1530
1531 /* TAP state transitions for split scans */
1532 tms_count_pause = tap_get_tms_path_len(TAP_IRSHIFT, TAP_IRPAUSE);
1533 tms_sequence_pause = tap_get_tms_path(TAP_IRSHIFT, TAP_IRPAUSE);
1534 tms_count_resume = tap_get_tms_path_len(TAP_IRPAUSE, TAP_IRSHIFT);
1535 tms_sequence_resume = tap_get_tms_path(TAP_IRPAUSE, TAP_IRSHIFT);
1536 } else {
1537 ulink_set_end_state(TAP_DRSHIFT);
1538 first_tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1539 first_tms_sequence = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1540
1541 tap_set_state(TAP_DRSHIFT);
1542 tap_set_end_state(cmd->cmd.scan->end_state);
1543 last_tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1544 last_tms_sequence = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1545
1546 /* TAP state transitions for split scans */
1547 tms_count_pause = tap_get_tms_path_len(TAP_DRSHIFT, TAP_DRPAUSE);
1548 tms_sequence_pause = tap_get_tms_path(TAP_DRSHIFT, TAP_DRPAUSE);
1549 tms_count_resume = tap_get_tms_path_len(TAP_DRPAUSE, TAP_DRSHIFT);
1550 tms_sequence_resume = tap_get_tms_path(TAP_DRPAUSE, TAP_DRSHIFT);
1551 }
1552
1553 /* Generate scan commands */
1554 bytecount = scan_size_bytes;
1555 while (bytecount > 0) {
1556 if (bytecount == scan_size_bytes) {
1557 /* This is the first scan */
1558 tms_count_start = first_tms_count;
1559 tms_sequence_start = first_tms_sequence;
1560 } else {
1561 /* Resume from previous scan */
1562 tms_count_start = tms_count_resume;
1563 tms_sequence_start = tms_sequence_resume;
1564 }
1565
1566 if (bytecount > 58) { /* Full scan, at least one scan will follow */
1567 tms_count_end = tms_count_pause;
1568 tms_sequence_end = tms_sequence_pause;
1569
1570 ret = ulink_append_scan_cmd(device,
1571 type,
1572 58 * 8,
1573 tdi_buffer,
1574 tdo_buffer_start,
1575 tdo_buffer,
1576 tms_count_start,
1577 tms_sequence_start,
1578 tms_count_end,
1579 tms_sequence_end,
1580 cmd,
1581 false);
1582
1583 bytecount -= 58;
1584
1585 /* Update TDI and TDO buffer pointers */
1586 if (tdi_buffer_start != NULL)
1587 tdi_buffer += 58;
1588 if (tdo_buffer_start != NULL)
1589 tdo_buffer += 58;
1590 } else if (bytecount == 58) { /* Full scan, no further scans */
1591 tms_count_end = last_tms_count;
1592 tms_sequence_end = last_tms_sequence;
1593
1594 ret = ulink_append_scan_cmd(device,
1595 type,
1596 58 * 8,
1597 tdi_buffer,
1598 tdo_buffer_start,
1599 tdo_buffer,
1600 tms_count_start,
1601 tms_sequence_start,
1602 tms_count_end,
1603 tms_sequence_end,
1604 cmd,
1605 true);
1606
1607 bytecount = 0;
1608 } else {/* Scan with less than maximum payload, no further scans */
1609 tms_count_end = last_tms_count;
1610 tms_sequence_end = last_tms_sequence;
1611
1612 ret = ulink_append_scan_cmd(device,
1613 type,
1614 bits_last_scan,
1615 tdi_buffer,
1616 tdo_buffer_start,
1617 tdo_buffer,
1618 tms_count_start,
1619 tms_sequence_start,
1620 tms_count_end,
1621 tms_sequence_end,
1622 cmd,
1623 true);
1624
1625 bytecount = 0;
1626 }
1627
1628 if (ret != ERROR_OK) {
1629 free(tdi_buffer_start);
1630 return ret;
1631 }
1632 }
1633
1634 free(tdi_buffer_start);
1635
1636 /* Set current state to the end state requested by the command */
1637 tap_set_state(cmd->cmd.scan->end_state);
1638
1639 return ERROR_OK;
1640 }
1641
1642 /**
1643 * Move the TAP into the Test Logic Reset state.
1644 *
1645 * @param device pointer to struct ulink identifying ULINK driver instance.
1646 * @param cmd pointer to the command that shall be executed.
1647 * @return on success: ERROR_OK
1648 * @return on failure: ERROR_FAIL
1649 */
1650 int ulink_queue_tlr_reset(struct ulink *device, struct jtag_command *cmd)
1651 {
1652 int ret;
1653
1654 ret = ulink_append_clock_tms_cmd(device, 5, 0xff);
1655
1656 if (ret == ERROR_OK)
1657 tap_set_state(TAP_RESET);
1658
1659 return ret;
1660 }
1661
1662 /**
1663 * Run Test.
1664 *
1665 * Generate TCK clock cycles while remaining
1666 * in the Run-Test/Idle state.
1667 *
1668 * @param device pointer to struct ulink identifying ULINK driver instance.
1669 * @param cmd pointer to the command that shall be executed.
1670 * @return on success: ERROR_OK
1671 * @return on failure: ERROR_FAIL
1672 */
1673 int ulink_queue_runtest(struct ulink *device, struct jtag_command *cmd)
1674 {
1675 int ret;
1676
1677 /* Only perform statemove if the TAP currently isn't in the TAP_IDLE state */
1678 if (tap_get_state() != TAP_IDLE) {
1679 ulink_set_end_state(TAP_IDLE);
1680 ulink_queue_statemove(device);
1681 }
1682
1683 /* Generate the clock cycles */
1684 ret = ulink_append_clock_tck_cmd(device, cmd->cmd.runtest->num_cycles);
1685 if (ret != ERROR_OK)
1686 return ret;
1687
1688 /* Move to end state specified in command */
1689 if (cmd->cmd.runtest->end_state != tap_get_state()) {
1690 tap_set_end_state(cmd->cmd.runtest->end_state);
1691 ulink_queue_statemove(device);
1692 }
1693
1694 return ERROR_OK;
1695 }
1696
1697 /**
1698 * Execute a JTAG_RESET command
1699 *
1700 * @param cmd pointer to the command that shall be executed.
1701 * @return on success: ERROR_OK
1702 * @return on failure: ERROR_FAIL
1703 */
1704 int ulink_queue_reset(struct ulink *device, struct jtag_command *cmd)
1705 {
1706 uint8_t low = 0, high = 0;
1707
1708 if (cmd->cmd.reset->trst) {
1709 tap_set_state(TAP_RESET);
1710 high |= SIGNAL_TRST;
1711 } else
1712 low |= SIGNAL_TRST;
1713
1714 if (cmd->cmd.reset->srst)
1715 high |= SIGNAL_RESET;
1716 else
1717 low |= SIGNAL_RESET;
1718
1719 return ulink_append_set_signals_cmd(device, low, high);
1720 }
1721
1722 /**
1723 * Move to one TAP state or several states in succession.
1724 *
1725 * @param device pointer to struct ulink identifying ULINK driver instance.
1726 * @param cmd pointer to the command that shall be executed.
1727 * @return on success: ERROR_OK
1728 * @return on failure: ERROR_FAIL
1729 */
1730 int ulink_queue_pathmove(struct ulink *device, struct jtag_command *cmd)
1731 {
1732 int ret, i, num_states, batch_size, state_count;
1733 tap_state_t *path;
1734 uint8_t tms_sequence;
1735
1736 num_states = cmd->cmd.pathmove->num_states;
1737 path = cmd->cmd.pathmove->path;
1738 state_count = 0;
1739
1740 while (num_states > 0) {
1741 tms_sequence = 0;
1742
1743 /* Determine batch size */
1744 if (num_states >= 8)
1745 batch_size = 8;
1746 else
1747 batch_size = num_states;
1748
1749 for (i = 0; i < batch_size; i++) {
1750 if (tap_state_transition(tap_get_state(), false) == path[state_count]) {
1751 /* Append '0' transition: clear bit 'i' in tms_sequence */
1752 buf_set_u32(&tms_sequence, i, 1, 0x0);
1753 } else if (tap_state_transition(tap_get_state(), true)
1754 == path[state_count]) {
1755 /* Append '1' transition: set bit 'i' in tms_sequence */
1756 buf_set_u32(&tms_sequence, i, 1, 0x1);
1757 } else {
1758 /* Invalid state transition */
1759 LOG_ERROR("BUG: %s -> %s isn't a valid TAP state transition",
1760 tap_state_name(tap_get_state()),
1761 tap_state_name(path[state_count]));
1762 return ERROR_FAIL;
1763 }
1764
1765 tap_set_state(path[state_count]);
1766 state_count++;
1767 num_states--;
1768 }
1769
1770 /* Append CLOCK_TMS command to OpenULINK command queue */
1771 LOG_INFO(
1772 "pathmove batch: count = %i, sequence = 0x%x", batch_size, tms_sequence);
1773 ret = ulink_append_clock_tms_cmd(ulink_handle, batch_size, tms_sequence);
1774 if (ret != ERROR_OK)
1775 return ret;
1776 }
1777
1778 return ERROR_OK;
1779 }
1780
1781 /**
1782 * Sleep for a specific amount of time.
1783 *
1784 * @param device pointer to struct ulink identifying ULINK driver instance.
1785 * @param cmd pointer to the command that shall be executed.
1786 * @return on success: ERROR_OK
1787 * @return on failure: ERROR_FAIL
1788 */
1789 int ulink_queue_sleep(struct ulink *device, struct jtag_command *cmd)
1790 {
1791 /* IMPORTANT! Due to the time offset in command execution introduced by
1792 * command queueing, this needs to be implemented in the ULINK device */
1793 return ulink_append_sleep_cmd(device, cmd->cmd.sleep->us);
1794 }
1795
1796 /**
1797 * Generate TCK cycles while remaining in a stable state.
1798 *
1799 * @param device pointer to struct ulink identifying ULINK driver instance.
1800 * @param cmd pointer to the command that shall be executed.
1801 */
1802 int ulink_queue_stableclocks(struct ulink *device, struct jtag_command *cmd)
1803 {
1804 int ret;
1805 unsigned num_cycles;
1806
1807 if (!tap_is_state_stable(tap_get_state())) {
1808 LOG_ERROR("JTAG_STABLECLOCKS: state not stable");
1809 return ERROR_FAIL;
1810 }
1811
1812 num_cycles = cmd->cmd.stableclocks->num_cycles;
1813
1814 /* TMS stays either high (Test Logic Reset state) or low (all other states) */
1815 if (tap_get_state() == TAP_RESET)
1816 ret = ulink_append_set_signals_cmd(device, 0, SIGNAL_TMS);
1817 else
1818 ret = ulink_append_set_signals_cmd(device, SIGNAL_TMS, 0);
1819
1820 if (ret != ERROR_OK)
1821 return ret;
1822
1823 while (num_cycles > 0) {
1824 if (num_cycles > 0xFFFF) {
1825 /* OpenULINK CMD_CLOCK_TCK can generate up to 0xFFFF (uint16_t) cycles */
1826 ret = ulink_append_clock_tck_cmd(device, 0xFFFF);
1827 num_cycles -= 0xFFFF;
1828 } else {
1829 ret = ulink_append_clock_tck_cmd(device, num_cycles);
1830 num_cycles = 0;
1831 }
1832
1833 if (ret != ERROR_OK)
1834 return ret;
1835 }
1836
1837 return ERROR_OK;
1838 }
1839
1840 /**
1841 * Post-process JTAG_SCAN command
1842 *
1843 * @param ulink_cmd pointer to OpenULINK command that shall be processed.
1844 * @return on success: ERROR_OK
1845 * @return on failure: ERROR_FAIL
1846 */
1847 int ulink_post_process_scan(struct ulink_cmd *ulink_cmd)
1848 {
1849 struct jtag_command *cmd = ulink_cmd->cmd_origin;
1850 int ret;
1851
1852 switch (jtag_scan_type(cmd->cmd.scan)) {
1853 case SCAN_IN:
1854 case SCAN_IO:
1855 ret = jtag_read_buffer(ulink_cmd->payload_in_start, cmd->cmd.scan);
1856 break;
1857 case SCAN_OUT:
1858 /* Nothing to do for OUT scans */
1859 ret = ERROR_OK;
1860 break;
1861 default:
1862 LOG_ERROR("BUG: ulink_post_process_scan() encountered an unknown"
1863 " JTAG scan type");
1864 ret = ERROR_FAIL;
1865 break;
1866 }
1867
1868 return ret;
1869 }
1870
1871 /**
1872 * Perform post-processing of commands after OpenULINK queue has been executed.
1873 *
1874 * @param device pointer to struct ulink identifying ULINK driver instance.
1875 * @return on success: ERROR_OK
1876 * @return on failure: ERROR_FAIL
1877 */
1878 int ulink_post_process_queue(struct ulink *device)
1879 {
1880 struct ulink_cmd *current;
1881 struct jtag_command *openocd_cmd;
1882 int ret;
1883
1884 current = device->queue_start;
1885
1886 while (current != NULL) {
1887 openocd_cmd = current->cmd_origin;
1888
1889 /* Check if a corresponding OpenOCD command is stored for this
1890 * OpenULINK command */
1891 if ((current->needs_postprocessing == true) && (openocd_cmd != NULL)) {
1892 switch (openocd_cmd->type) {
1893 case JTAG_SCAN:
1894 ret = ulink_post_process_scan(current);
1895 break;
1896 case JTAG_TLR_RESET:
1897 case JTAG_RUNTEST:
1898 case JTAG_RESET:
1899 case JTAG_PATHMOVE:
1900 case JTAG_SLEEP:
1901 case JTAG_STABLECLOCKS:
1902 /* Nothing to do for these commands */
1903 ret = ERROR_OK;
1904 break;
1905 default:
1906 ret = ERROR_FAIL;
1907 LOG_ERROR("BUG: ulink_post_process_queue() encountered unknown JTAG "
1908 "command type");
1909 break;
1910 }
1911
1912 if (ret != ERROR_OK)
1913 return ret;
1914 }
1915
1916 current = current->next;
1917 }
1918
1919 return ERROR_OK;
1920 }
1921
1922 /**************************** JTAG driver functions ***************************/
1923
1924 /**
1925 * Executes the JTAG Command Queue.
1926 *
1927 * This is done in three stages: First, all OpenOCD commands are processed into
1928 * queued OpenULINK commands. Next, the OpenULINK command queue is sent to the
1929 * ULINK device and data received from the ULINK device is cached. Finally,
1930 * the post-processing function writes back data to the corresponding OpenOCD
1931 * commands.
1932 *
1933 * @return on success: ERROR_OK
1934 * @return on failure: ERROR_FAIL
1935 */
1936 static int ulink_execute_queue(void)
1937 {
1938 struct jtag_command *cmd = jtag_command_queue;
1939 int ret;
1940
1941 while (cmd) {
1942 switch (cmd->type) {
1943 case JTAG_SCAN:
1944 ret = ulink_queue_scan(ulink_handle, cmd);
1945 break;
1946 case JTAG_TLR_RESET:
1947 ret = ulink_queue_tlr_reset(ulink_handle, cmd);
1948 break;
1949 case JTAG_RUNTEST:
1950 ret = ulink_queue_runtest(ulink_handle, cmd);
1951 break;
1952 case JTAG_RESET:
1953 ret = ulink_queue_reset(ulink_handle, cmd);
1954 break;
1955 case JTAG_PATHMOVE:
1956 ret = ulink_queue_pathmove(ulink_handle, cmd);
1957 break;
1958 case JTAG_SLEEP:
1959 ret = ulink_queue_sleep(ulink_handle, cmd);
1960 break;
1961 case JTAG_STABLECLOCKS:
1962 ret = ulink_queue_stableclocks(ulink_handle, cmd);
1963 break;
1964 default:
1965 ret = ERROR_FAIL;
1966 LOG_ERROR("BUG: encountered unknown JTAG command type");
1967 break;
1968 }
1969
1970 if (ret != ERROR_OK)
1971 return ret;
1972
1973 cmd = cmd->next;
1974 }
1975
1976 if (ulink_handle->commands_in_queue > 0) {
1977 ret = ulink_execute_queued_commands(ulink_handle, USB_TIMEOUT);
1978 if (ret != ERROR_OK)
1979 return ret;
1980
1981 ret = ulink_post_process_queue(ulink_handle);
1982 if (ret != ERROR_OK)
1983 return ret;
1984
1985 ulink_clear_queue(ulink_handle);
1986 }
1987
1988 return ERROR_OK;
1989 }
1990
1991 /**
1992 * Set the TCK frequency of the ULINK adapter.
1993 *
1994 * @param khz desired JTAG TCK frequency.
1995 * @param jtag_speed where to store corresponding adapter-specific speed value.
1996 * @return on success: ERROR_OK
1997 * @return on failure: ERROR_FAIL
1998 */
1999 static int ulink_khz(int khz, int *jtag_speed)
2000 {
2001 int ret;
2002
2003 if (khz == 0) {
2004 LOG_ERROR("RCLK not supported");
2005 return ERROR_FAIL;
2006 }
2007
2008 /* CLOCK_TCK commands are decoupled from others. Therefore, the frequency
2009 * setting can be done independently from all other commands. */
2010 if (khz >= 375)
2011 ulink_handle->delay_clock_tck = -1;
2012 else {
2013 ret = ulink_calculate_delay(DELAY_CLOCK_TCK, khz * 1000,
2014 &ulink_handle->delay_clock_tck);
2015 if (ret != ERROR_OK)
2016 return ret;
2017 }
2018
2019 /* SCAN_{IN,OUT,IO} commands invoke CLOCK_TMS commands. Therefore, if the
2020 * requested frequency goes below the maximum frequency for SLOW_CLOCK_TMS
2021 * commands, all SCAN commands MUST also use the variable frequency
2022 * implementation! */
2023 if (khz >= 176) {
2024 ulink_handle->delay_clock_tms = -1;
2025 ulink_handle->delay_scan_in = -1;
2026 ulink_handle->delay_scan_out = -1;
2027 ulink_handle->delay_scan_io = -1;
2028 } else {
2029 ret = ulink_calculate_delay(DELAY_CLOCK_TMS, khz * 1000,
2030 &ulink_handle->delay_clock_tms);
2031 if (ret != ERROR_OK)
2032 return ret;
2033
2034 ret = ulink_calculate_delay(DELAY_SCAN_IN, khz * 1000,
2035 &ulink_handle->delay_scan_in);
2036 if (ret != ERROR_OK)
2037 return ret;
2038
2039 ret = ulink_calculate_delay(DELAY_SCAN_OUT, khz * 1000,
2040 &ulink_handle->delay_scan_out);
2041 if (ret != ERROR_OK)
2042 return ret;
2043
2044 ret = ulink_calculate_delay(DELAY_SCAN_IO, khz * 1000,
2045 &ulink_handle->delay_scan_io);
2046 if (ret != ERROR_OK)
2047 return ret;
2048 }
2049
2050 LOG_DEBUG_IO("ULINK TCK setup: delay_tck = %i (%li Hz),",
2051 ulink_handle->delay_clock_tck,
2052 ulink_calculate_frequency(DELAY_CLOCK_TCK, ulink_handle->delay_clock_tck));
2053 LOG_DEBUG_IO(" delay_tms = %i (%li Hz),",
2054 ulink_handle->delay_clock_tms,
2055 ulink_calculate_frequency(DELAY_CLOCK_TMS, ulink_handle->delay_clock_tms));
2056 LOG_DEBUG_IO(" delay_scan_in = %i (%li Hz),",
2057 ulink_handle->delay_scan_in,
2058 ulink_calculate_frequency(DELAY_SCAN_IN, ulink_handle->delay_scan_in));
2059 LOG_DEBUG_IO(" delay_scan_out = %i (%li Hz),",
2060 ulink_handle->delay_scan_out,
2061 ulink_calculate_frequency(DELAY_SCAN_OUT, ulink_handle->delay_scan_out));
2062 LOG_DEBUG_IO(" delay_scan_io = %i (%li Hz),",
2063 ulink_handle->delay_scan_io,
2064 ulink_calculate_frequency(DELAY_SCAN_IO, ulink_handle->delay_scan_io));
2065
2066 /* Configure the ULINK device with the new delay values */
2067 ret = ulink_append_configure_tck_cmd(ulink_handle,
2068 ulink_handle->delay_scan_in,
2069 ulink_handle->delay_scan_out,
2070 ulink_handle->delay_scan_io,
2071 ulink_handle->delay_clock_tck,
2072 ulink_handle->delay_clock_tms);
2073
2074 if (ret != ERROR_OK)
2075 return ret;
2076
2077 *jtag_speed = khz;
2078
2079 return ERROR_OK;
2080 }
2081
2082 /**
2083 * Set the TCK frequency of the ULINK adapter.
2084 *
2085 * Because of the way the TCK frequency is set up in the OpenULINK firmware,
2086 * there are five different speed settings. To simplify things, the
2087 * adapter-specific speed setting value is identical to the TCK frequency in
2088 * khz.
2089 *
2090 * @param speed desired adapter-specific speed value.
2091 * @return on success: ERROR_OK
2092 * @return on failure: ERROR_FAIL
2093 */
2094 static int ulink_speed(int speed)
2095 {
2096 int dummy;
2097
2098 return ulink_khz(speed, &dummy);
2099 }
2100
2101 /**
2102 * Convert adapter-specific speed value to corresponding TCK frequency in kHz.
2103 *
2104 * Because of the way the TCK frequency is set up in the OpenULINK firmware,
2105 * there are five different speed settings. To simplify things, the
2106 * adapter-specific speed setting value is identical to the TCK frequency in
2107 * khz.
2108 *
2109 * @param speed adapter-specific speed value.
2110 * @param khz where to store corresponding TCK frequency in kHz.
2111 * @return on success: ERROR_OK
2112 * @return on failure: ERROR_FAIL
2113 */
2114 static int ulink_speed_div(int speed, int *khz)
2115 {
2116 *khz = speed;
2117
2118 return ERROR_OK;
2119 }
2120
2121 /**
2122 * Initiates the firmware download to the ULINK adapter and prepares
2123 * the USB handle.
2124 *
2125 * @return on success: ERROR_OK
2126 * @return on failure: ERROR_FAIL
2127 */
2128 static int ulink_init(void)
2129 {
2130 int ret, transferred;
2131 char str_manufacturer[20];
2132 bool download_firmware = false;
2133 unsigned char *dummy;
2134 uint8_t input_signals, output_signals;
2135
2136 ulink_handle = calloc(1, sizeof(struct ulink));
2137 if (ulink_handle == NULL)
2138 return ERROR_FAIL;
2139
2140 libusb_init(&ulink_handle->libusb_ctx);
2141
2142 ret = ulink_usb_open(&ulink_handle);
2143 if (ret != ERROR_OK) {
2144 LOG_ERROR("Could not open ULINK device");
2145 free(ulink_handle);
2146 ulink_handle = NULL;
2147 return ret;
2148 }
2149
2150 /* Get String Descriptor to determine if firmware needs to be loaded */
2151 ret = libusb_get_string_descriptor_ascii(ulink_handle->usb_device_handle, 1, (unsigned char *)str_manufacturer, 20);
2152 if (ret < 0) {
2153 /* Could not get descriptor -> Unconfigured or original Keil firmware */
2154 download_firmware = true;
2155 } else {
2156 /* We got a String Descriptor, check if it is the correct one */
2157 if (strncmp(str_manufacturer, "OpenULINK", 9) != 0)
2158 download_firmware = true;
2159 }
2160
2161 if (download_firmware == true) {
2162 LOG_INFO("Loading OpenULINK firmware. This is reversible by power-cycling"
2163 " ULINK device.");
2164 ret = ulink_load_firmware_and_renumerate(&ulink_handle,
2165 ULINK_FIRMWARE_FILE, ULINK_RENUMERATION_DELAY);
2166 if (ret != ERROR_OK) {
2167 LOG_ERROR("Could not download firmware and re-numerate ULINK");
2168 free(ulink_handle);
2169 ulink_handle = NULL;
2170 return ret;
2171 }
2172 } else
2173 LOG_INFO("ULINK device is already running OpenULINK firmware");
2174
2175 /* Initialize OpenULINK command queue */
2176 ulink_clear_queue(ulink_handle);
2177
2178 /* Issue one test command with short timeout */
2179 ret = ulink_append_test_cmd(ulink_handle);
2180 if (ret != ERROR_OK)
2181 return ret;
2182
2183 ret = ulink_execute_queued_commands(ulink_handle, 200);
2184 if (ret != ERROR_OK) {
2185 /* Sending test command failed. The ULINK device may be forever waiting for
2186 * the host to fetch an USB Bulk IN packet (e. g. OpenOCD crashed or was
2187 * shut down by the user via Ctrl-C. Try to retrieve this Bulk IN packet. */
2188 dummy = calloc(64, sizeof(uint8_t));
2189
2190 ret = libusb_bulk_transfer(ulink_handle->usb_device_handle, (2 | LIBUSB_ENDPOINT_IN),
2191 dummy, 64, &transferred, 200);
2192
2193 free(dummy);
2194
2195 if (ret != 0 || transferred == 0) {
2196 /* Bulk IN transfer failed -> unrecoverable error condition */
2197 LOG_ERROR("Cannot communicate with ULINK device. Disconnect ULINK from "
2198 "the USB port and re-connect, then re-run OpenOCD");
2199 free(ulink_handle);
2200 ulink_handle = NULL;
2201 return ERROR_FAIL;
2202 }
2203 #ifdef _DEBUG_USB_COMMS_
2204 else {
2205 /* Successfully received Bulk IN packet -> continue */
2206 LOG_INFO("Recovered from lost Bulk IN packet");
2207 }
2208 #endif
2209 }
2210 ulink_clear_queue(ulink_handle);
2211
2212 ulink_append_get_signals_cmd(ulink_handle);
2213 ulink_execute_queued_commands(ulink_handle, 200);
2214
2215 /* Post-process the single CMD_GET_SIGNALS command */
2216 input_signals = ulink_handle->queue_start->payload_in[0];
2217 output_signals = ulink_handle->queue_start->payload_in[1];
2218
2219 ulink_print_signal_states(input_signals, output_signals);
2220
2221 ulink_clear_queue(ulink_handle);
2222
2223 return ERROR_OK;
2224 }
2225
2226 /**
2227 * Closes the USB handle for the ULINK device.
2228 *
2229 * @return on success: ERROR_OK
2230 * @return on failure: ERROR_FAIL
2231 */
2232 static int ulink_quit(void)
2233 {
2234 int ret;
2235
2236 ret = ulink_usb_close(&ulink_handle);
2237 free(ulink_handle);
2238
2239 return ret;
2240 }
2241
2242 /**
2243 * Set a custom path to ULINK firmware image and force downloading to ULINK.
2244 */
2245 COMMAND_HANDLER(ulink_download_firmware_handler)
2246 {
2247 int ret;
2248
2249 if (CMD_ARGC != 1)
2250 return ERROR_COMMAND_SYNTAX_ERROR;
2251
2252
2253 LOG_INFO("Downloading ULINK firmware image %s", CMD_ARGV[0]);
2254
2255 /* Download firmware image in CMD_ARGV[0] */
2256 ret = ulink_load_firmware_and_renumerate(&ulink_handle, CMD_ARGV[0],
2257 ULINK_RENUMERATION_DELAY);
2258
2259 return ret;
2260 }
2261
2262 /*************************** Command Registration **************************/
2263
2264 static const struct command_registration ulink_command_handlers[] = {
2265 {
2266 .name = "ulink_download_firmware",
2267 .handler = &ulink_download_firmware_handler,
2268 .mode = COMMAND_EXEC,
2269 .help = "download firmware image to ULINK device",
2270 .usage = "path/to/ulink_firmware.hex",
2271 },
2272 COMMAND_REGISTRATION_DONE,
2273 };
2274
2275 static struct jtag_interface ulink_interface = {
2276 .execute_queue = ulink_execute_queue,
2277 };
2278
2279 struct adapter_driver ulink_adapter_driver = {
2280 .name = "ulink",
2281 .transports = jtag_only,
2282 .commands = ulink_command_handlers,
2283
2284 .init = ulink_init,
2285 .quit = ulink_quit,
2286 .speed = ulink_speed,
2287 .khz = ulink_khz,
2288 .speed_div = ulink_speed_div,
2289
2290 .jtag_ops = &ulink_interface,
2291 };

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)