1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * Copyright (C) 2007,2008 Øyvind Harboe *
6 * oyvind.harboe@zylin.com *
8 * Copyright (C) 2008 Rob Brown, Lou Deluxe *
9 * rob@cobbleware.com, lou.openocd012@fixit.nospammail.net *
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. *
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. *
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 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
35 /* project specific includes */
39 #include "configuration.h"
46 /* This feature is made useless by running the DTC all the time. When automatic, the LED is on whenever the DTC is running. Otherwise, USB messages are sent to turn it on and off. */
47 #undef AUTOMATIC_BUSY_LED
49 /* This feature may require derating the speed due to reduced hold time. */
50 #undef USE_HARDWARE_SHIFTER_FOR_TMS
53 #define INTERFACE_NAME "RLink"
55 #define USB_IDVENDOR (0x138e)
56 #define USB_IDPRODUCT (0x9000)
58 #define USB_EP1OUT_ADDR (0x01)
59 #define USB_EP1OUT_SIZE (16)
60 #define USB_EP1IN_ADDR (USB_EP1OUT_ADDR | 0x80)
61 #define USB_EP1IN_SIZE (USB_EP1OUT_SIZE)
63 #define USB_EP2OUT_ADDR (0x02)
64 #define USB_EP2OUT_SIZE (64)
65 #define USB_EP2IN_ADDR (USB_EP2OUT_ADDR | 0x80)
66 #define USB_EP2IN_SIZE (USB_EP2OUT_SIZE)
67 #define USB_EP2BANK_SIZE (512)
69 #define USB_TIMEOUT_MS (3 * 1000)
71 #define DTC_STATUS_POLL_BYTE (ST7_USB_BUF_EP0OUT + 0xff)
74 /* Symbolic names for some pins */
75 #define ST7_PA_NJTAG_TRST ST7_PA1
76 #define ST7_PA_NRLINK_RST ST7_PA3
77 #define ST7_PA_NLINE_DRIVER_ENABLE ST7_PA5
79 /* mask for negative-logic pins */
80 #define ST7_PA_NUNASSERTED (0 \
83 | ST7_PA_NLINE_DRIVER_ENABLE \
86 #define ST7_PD_NBUSY_LED ST7_PD0
87 #define ST7_PD_NERROR_LED ST7_PD1
88 #define ST7_PD_NRUN_LED ST7_PD7
90 #define ST7_PE_ADAPTER_SENSE_IN ST7_PE3
91 #define ST7_PE_ADAPTER_SENSE_OUT ST7_PE4
93 static usb_dev_handle *pHDev;
97 * ep1 commands are up to USB_EP1OUT_SIZE bytes in length.
98 * This function takes care of zeroing the unused bytes before sending the packet.
99 * Any reply packet is not handled by this function.
103 ep1_generic_commandl(
104 usb_dev_handle *pHDev,
108 uint8_t usb_buffer[USB_EP1OUT_SIZE];
109 uint8_t *usb_buffer_p;
113 if(length > sizeof(usb_buffer)) {
114 length = sizeof(usb_buffer);
117 usb_buffer_p = usb_buffer;
119 va_start(ap, length);
121 *usb_buffer_p++ = va_arg(ap, int);
128 sizeof(usb_buffer) - (usb_buffer_p - usb_buffer)
131 usb_ret = usb_bulk_write(
134 usb_buffer, sizeof(usb_buffer),
147 usb_dev_handle *pHDev,
152 uint8_t usb_buffer[USB_EP1OUT_SIZE];
157 usb_buffer[0] = EP1_CMD_MEMORY_READ;
161 sizeof(usb_buffer) - 4
168 if(remain > sizeof(usb_buffer)) {
169 length = sizeof(usb_buffer);
174 usb_buffer[1] = addr >> 8;
175 usb_buffer[2] = addr;
176 usb_buffer[3] = length;
178 usb_ret = usb_bulk_write(
179 pHDev, USB_EP1OUT_ADDR,
180 usb_buffer, sizeof(usb_buffer),
184 if(usb_ret < sizeof(usb_buffer)) {
188 usb_ret = usb_bulk_read(
189 pHDev, USB_EP1IN_ADDR,
194 if(usb_ret < length) {
213 usb_dev_handle *pHDev,
216 uint8_t const *buffer
218 uint8_t usb_buffer[USB_EP1OUT_SIZE];
223 usb_buffer[0] = EP1_CMD_MEMORY_WRITE;
229 if(remain > (sizeof(usb_buffer) - 4)) {
230 length = (sizeof(usb_buffer) - 4);
235 usb_buffer[1] = addr >> 8;
236 usb_buffer[2] = addr;
237 usb_buffer[3] = length;
244 usb_buffer + 4 + length,
246 sizeof(usb_buffer) - 4 - length
249 usb_ret = usb_bulk_write(
250 pHDev, USB_EP1OUT_ADDR,
251 usb_buffer, sizeof(usb_buffer),
255 if(usb_ret < sizeof(usb_buffer)) {
273 usb_dev_handle *pHDev,
278 uint8_t buffer[USB_EP1OUT_SIZE - 4];
283 if(length > sizeof(buffer)) {
284 length = sizeof(buffer);
290 va_start(ap, length);
292 *buffer_p++ = va_arg(ap, int);
296 return(ep1_memory_write(pHDev, addr, length, buffer));
301 #define DTCLOAD_COMMENT (0)
302 #define DTCLOAD_ENTRY (1)
303 #define DTCLOAD_LOAD (2)
304 #define DTCLOAD_RUN (3)
305 #define DTCLOAD_LUT_START (4)
306 #define DTCLOAD_LUT (5)
308 #define DTC_LOAD_BUFFER ST7_USB_BUF_EP2UIDO
310 /* This gets set by the DTC loader */
311 static uint8_t dtc_entry_download;
314 /* The buffer is specially formatted to represent a valid image to load into the DTC. */
317 dtc_load_from_buffer(
318 usb_dev_handle *pHDev,
328 struct header_s *header;
331 dtc_entry_download = 0;
333 /* Stop the DTC before loading anything. */
334 usb_err = ep1_generic_commandl(
338 if(usb_err < 0) return(usb_err);
341 if(length < sizeof(*header)) {
342 LOG_ERROR("Malformed DTC image\n");
346 header = (struct header_s *)buffer;
347 buffer += sizeof(*header);
348 length -= sizeof(*header);
350 if(length < header->length + 1) {
351 LOG_ERROR("Malformed DTC image\n");
355 switch(header->type) {
356 case DTCLOAD_COMMENT:
360 /* store entry addresses somewhere */
361 if(!strncmp("download", buffer + 1, 8)) {
362 dtc_entry_download = buffer[0];
367 /* Send the DTC program to ST7 RAM. */
368 usb_err = ep1_memory_write(
371 header->length + 1, buffer
373 if(usb_err < 0) return(usb_err);
375 /* Load it into the DTC. */
376 usb_err = ep1_generic_commandl(
379 (DTC_LOAD_BUFFER >> 8),
382 if(usb_err < 0) return(usb_err);
387 usb_err = ep1_generic_commandl(
393 if(usb_err < 0) return(usb_err);
397 case DTCLOAD_LUT_START:
398 lut_start = buffer[0];
402 usb_err = ep1_memory_write(
404 ST7_USB_BUF_EP0OUT + lut_start,
405 header->length + 1, buffer
407 if(usb_err < 0) return(usb_err);
411 LOG_ERROR("Invalid DTC image record type: 0x%02x\n", header->type);
416 buffer += (header->length + 1);
417 length -= (header->length + 1);
425 * Start the DTC running in download mode (waiting for 512 byte command packets on ep2).
434 /* set up for download mode and make sure EP2 is set up to transmit */
435 usb_err = ep1_generic_commandl(
440 EP1_CMD_SET_DOWNLOAD,
441 EP1_CMD_MEMORY_READ, /* read EP2TXR for its data toggle */
446 if(usb_err < 0) return(usb_err);
448 /* read back ep2txr */
449 usb_err = usb_bulk_read(
450 pHDev, USB_EP1IN_ADDR,
454 if(usb_err < 0) return(usb_err);
456 usb_err = ep1_generic_commandl(
459 EP1_CMD_MEMORY_WRITE, /* preinitialize poll byte */
460 DTC_STATUS_POLL_BYTE >> 8,
461 DTC_STATUS_POLL_BYTE,
464 EP1_CMD_MEMORY_WRITE, /* set EP2IN to return data */
468 (ep2txr & ST7_EP2TXR_DTOG_TX) | ST7_EP2TXR_STAT_VALID,
469 EP1_CMD_DTC_CALL, /* start running the DTC */
471 EP1_CMD_DTC_GET_CACHED_STATUS
473 if(usb_err < 0) return(usb_err);
475 /* wait for completion */
476 usb_err = usb_bulk_read(
477 pHDev, USB_EP1IN_ADDR,
489 usb_dev_handle *pHDev,
491 int command_buffer_size,
493 int reply_buffer_size
495 u8 ep2_buffer[USB_EP2IN_SIZE];
499 LOG_DEBUG(": %d/%d\n", command_buffer_size, reply_buffer_size);
501 usb_err = usb_bulk_write(
504 command_buffer, USB_EP2BANK_SIZE,
507 if(usb_err < 0) return(usb_err);
510 /* Wait for DTC to finish running command buffer */
512 usb_err = ep1_generic_commandl(
516 DTC_STATUS_POLL_BYTE >> 8,
517 DTC_STATUS_POLL_BYTE,
520 if(usb_err < 0) return(usb_err);
522 usb_err = usb_bulk_read(
528 if(usb_err < 0) return(usb_err);
530 if(ep2_buffer[0] & 0x01) break;
533 LOG_ERROR("%s, %d: too many retries waiting for DTC status\n",
541 if(!reply_buffer) reply_buffer_size = 0;
542 if(reply_buffer_size) {
543 usb_err = usb_bulk_read(
546 ep2_buffer, sizeof(ep2_buffer),
550 if(usb_err < (int)sizeof(ep2_buffer)) {
551 LOG_ERROR("%s, %d: Read of endpoint 2 returned %d\n",
552 __FILE__, __LINE__, usb_err
557 memcpy(reply_buffer, ep2_buffer, reply_buffer_size);
566 * The dtc reply queue is a singly linked list that describes what to do with the reply packet that comes from the DTC. Only SCAN_IN and SCAN_IO generate these entries.
570 struct dtc_reply_queue_entry_s {
571 struct dtc_reply_queue_entry_s *next;
572 jtag_command_t *cmd; /* the command that resulted in this entry */
575 u8 *buffer; /* the scan buffer */
576 int size; /* size of the scan buffer in bits */
577 int offset; /* how many bits were already done before this? */
578 int length; /* how many bits are processed in this operation? */
579 enum scan_type type; /* SCAN_IN/SCAN_OUT/SCAN_IO */
581 } dtc_reply_queue_entry_t;
585 * The dtc_queue consists of a buffer of pending commands and a reply queue.
586 * rlink_scan and tap_state_run add to the command buffer and maybe to the reply queue.
591 dtc_reply_queue_entry_t *rq_head;
592 dtc_reply_queue_entry_t *rq_tail;
595 u8 cmd_buffer[USB_EP2BANK_SIZE];
600 * The tap state queue is for accumulating TAP state changes wiithout needlessly flushing the dtc_queue. When it fills or is run, it adds the accumulated bytes to the dtc_queue.
615 dtc_queue.rq_head = NULL;
616 dtc_queue.rq_tail = NULL;
617 dtc_queue.cmd_index = 0;
618 dtc_queue.reply_index = 0;
625 dtc_reply_queue_entry_t *
626 dtc_queue_enqueue_reply(
634 dtc_reply_queue_entry_t *rq_entry;
636 rq_entry = malloc(sizeof(dtc_reply_queue_entry_t));
637 if(rq_entry != NULL) {
638 rq_entry->scan.type = type;
639 rq_entry->scan.buffer = buffer;
640 rq_entry->scan.size = size;
641 rq_entry->scan.offset = offset;
642 rq_entry->scan.length = length;
644 rq_entry->next = NULL;
646 if(dtc_queue.rq_head == NULL)
647 dtc_queue.rq_head = rq_entry;
649 dtc_queue.rq_tail->next = rq_entry;
651 dtc_queue.rq_tail = rq_entry;
659 * Running the queue means that any pending command buffer is run and any reply data dealt with. The command buffer is then cleared for subsequent processing.
660 * The queue is automatically run by append when it is necessary to get space for the append.
667 dtc_reply_queue_entry_t *rq_p, *rq_next;
673 u8 dtc_mask, tdo_mask;
674 u8 reply_buffer[USB_EP2IN_SIZE];
678 if(dtc_queue.cmd_index < 1) return(retval);
680 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = DTC_CMD_STOP;
683 if(dtc_queue.rq_head == NULL) {
684 usb_err = dtc_run_download(pHDev,
685 dtc_queue.cmd_buffer, dtc_queue.cmd_index,
689 LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
693 usb_err = dtc_run_download(pHDev,
694 dtc_queue.cmd_buffer, dtc_queue.cmd_index,
695 reply_buffer, dtc_queue.reply_index
698 LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
701 /* process the reply, which empties the reply queue and frees its entries */
702 dtc_p = reply_buffer;
704 /* The rigamarole with the masks and doing it bit-by-bit is due to the fact that the scan buffer is LSb-first and the DTC code is MSb-first for hardware reasons. It was that or craft a function to do the reversal, and that wouldn't work with bit-stuffing (supplying extra bits to use mostly byte operations), or any other scheme which would throw the byte alignment off. */
707 rq_p = dtc_queue.rq_head;
711 tdo_p = rq_p->scan.buffer + (rq_p->scan.offset / 8);
712 tdo_mask = 1 << (rq_p->scan.offset % 8);
715 bit_cnt = rq_p->scan.length;
719 dtc_mask = 1 << (8 - 1);
726 if(*dtc_p & dtc_mask) {
735 dtc_mask = 1 << (8 - 1);
745 /* extra bits or last bit */
749 rq_p->scan.type == SCAN_IN
751 rq_p->scan.offset != rq_p->scan.size - 1
753 /* extra bits were sent as a full byte with padding on the end */
754 dtc_mask = 1 << (8 - 1);
756 dtc_mask = 1 << (bit_cnt - 1);
781 if((rq_p->scan.offset + rq_p->scan.length) >= rq_p->scan.size) {
782 /* feed scan buffer back into openocd and free it */
783 if(jtag_read_buffer(rq_p->scan.buffer, rq_p->cmd->cmd.scan) != ERROR_OK) {
784 retval = ERROR_JTAG_QUEUE_FAILED;
786 free(rq_p->scan.buffer);
789 rq_next = rq_p->next;
792 dtc_queue.rq_head = NULL;
793 dtc_queue.rq_tail = NULL;
799 /* reset state for new appends */
800 dtc_queue.cmd_index = 0;
801 dtc_queue.reply_index = 0;
810 tap_state_queue_init(
812 tap_state_queue.length = 0;
813 tap_state_queue.buffer = 0;
828 if(!tap_state_queue.length) return(retval);
831 for(i = tap_state_queue.length; i--;) {
834 if(tap_state_queue.buffer & 1) {
837 if((bits >= 8) || !i) {
840 /* make sure there's room for stop, byte op, and one byte */
841 if(dtc_queue.cmd_index >= (sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))) {
842 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
847 #ifdef USE_HARDWARE_SHIFTER_FOR_TMS
849 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
850 DTC_CMD_SHIFT_TMS_BYTES(1);
853 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
854 DTC_CMD_SHIFT_TMS_BITS(bits);
855 #ifdef USE_HARDWARE_SHIFTER_FOR_TMS
859 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
868 tap_state_queue.buffer >>= 1;
870 retval = tap_state_queue_init();
877 tap_state_queue_append(
882 if(tap_state_queue.length >= sizeof(tap_state_queue.buffer) * 8) {
883 retval = tap_state_queue_run();
884 if(retval != 0) return(retval);
888 tap_state_queue.buffer |= (1 << tap_state_queue.length);
890 tap_state_queue.length++;
897 void rlink_end_state(enum tap_state state)
899 if (tap_move_map[state] != -1)
903 LOG_ERROR("BUG: %i is not a valid end state", state);
910 void rlink_state_move(void) {
913 u8 tms_scan = TAP_MOVE(cur_state, end_state);
915 for (i = 0; i < 7; i++)
917 tms = (tms_scan >> i) & 1;
918 tap_state_queue_append(tms);
921 cur_state = end_state;
925 void rlink_path_move(pathmove_command_t *cmd)
927 int num_states = cmd->num_states;
934 if (tap_transitions[cur_state].low == cmd->path[state_count])
938 else if (tap_transitions[cur_state].high == cmd->path[state_count])
944 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", jtag_state_name(cur_state), jtag_state_name(cmd->path[state_count]));
948 tap_state_queue_append(tms);
950 cur_state = cmd->path[state_count];
955 end_state = cur_state;
960 void rlink_runtest(int num_cycles)
964 enum tap_state saved_end_state = end_state;
966 /* only do a state_move when we're not already in RTI */
967 if (cur_state != TAP_IDLE)
969 rlink_end_state(TAP_IDLE);
973 /* execute num_cycles */
974 for (i = 0; i < num_cycles; i++)
976 tap_state_queue_append(0);
979 /* finish in end_state */
980 rlink_end_state(saved_end_state);
981 if (cur_state != end_state)
986 /* (1) assert or (0) deassert reset lines */
988 void rlink_reset(int trst, int srst)
993 bitmap = ((~(ST7_PA_NLINE_DRIVER_ENABLE)) & ST7_PA_NUNASSERTED);
996 bitmap &= ~ST7_PA_NJTAG_TRST;
999 bitmap &= ~ST7_PA_NRLINK_RST;
1002 usb_err = ep1_generic_commandl(
1005 EP1_CMD_MEMORY_WRITE,
1012 LOG_ERROR("%s: %s\n", __func__, usb_strerror());
1021 jtag_command_t *cmd,
1022 enum scan_type type,
1027 enum tap_state saved_end_state;
1035 u8 tdi_mask, *tdi_p;
1037 dtc_reply_queue_entry_t *rq_entry;
1040 LOG_ERROR("scan_size cannot be less than 1 bit\n");
1044 ir_scan = cmd->cmd.scan->ir_scan;
1046 /* Move to the proper state before starting to shift TDI/TDO. */
1048 (!ir_scan && (cur_state == TAP_DRSHIFT))
1050 (ir_scan && (cur_state == TAP_IRSHIFT))
1052 saved_end_state = end_state;
1053 rlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
1055 rlink_end_state(saved_end_state);
1058 tap_state_queue_run();
1062 printf("scan_size = %d, type=0x%x\n", scan_size, type);
1066 /* clear unused bits in scan buffer for ease of debugging */
1067 /* (it makes diffing output easier) */
1068 buffer[scan_size / 8] &= ((1 << ((scan_size - 1) % 8) + 1) - 1);
1070 printf("before scan:");
1071 for(i = 0; i < (scan_size + 7) / 8; i++) {
1072 printf(" %02x", buffer[i]);
1078 /* The number of bits that can be shifted as complete bytes */
1079 byte_bits = (int)(scan_size - 1) / 8 * 8;
1080 /* The number of bits left over, not counting the last bit */
1081 extra_bits = (scan_size - 1) - byte_bits;
1087 if(extra_bits && (type == SCAN_OUT)) {
1088 /* Schedule any extra bits into the DTC command buffer, padding as needed */
1089 /* For SCAN_OUT, this comes before the full bytes so the (leading) padding bits will fall off the end */
1090 /* make sure there's room for stop, byte op, and one byte */
1092 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
1098 dtc_mask = 1 << (extra_bits - 1);
1100 while(extra_bits--) {
1101 if(*tdi_p & tdi_mask) {
1114 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1115 DTC_CMD_SHIFT_TDI_BYTES(1);
1117 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1120 /* Loop scheduling full bytes into the DTC command buffer */
1122 if(type == SCAN_IN) {
1123 /* make sure there's room for stop and byte op */
1124 x = (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1));
1126 /* make sure there's room for stop, byte op, and at least one byte */
1127 x = (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1));
1130 if(type != SCAN_OUT) {
1131 /* make sure there's room for at least one reply byte */
1132 x |= (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1));
1139 chunk_bits = byte_bits;
1140 /* we can only use up to 16 bytes at a time */
1141 if(chunk_bits > (16 * 8)) chunk_bits = (16 * 8);
1143 if(type != SCAN_IN) {
1144 /* how much is there room for, considering stop and byte op? */
1145 x = (sizeof(dtc_queue.cmd_buffer) - (dtc_queue.cmd_index + 1 + 1)) * 8;
1146 if(chunk_bits > x) chunk_bits = x;
1149 if(type != SCAN_OUT) {
1150 /* how much is there room for in the reply buffer? */
1151 x = (USB_EP2IN_SIZE - dtc_queue.reply_index) * 8;
1152 if(chunk_bits > x) chunk_bits = x;
1155 /* so the loop will end */
1156 byte_bits -= chunk_bits;
1158 if(type != SCAN_OUT) {
1159 if(dtc_queue_enqueue_reply(
1160 type, buffer, scan_size, tdi_bit_offset,
1164 LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
1168 tdi_bit_offset += chunk_bits;
1171 /* chunk_bits is a multiple of 8, so there are no rounding issues. */
1172 chunk_bytes = chunk_bits / 8;
1176 x = DTC_CMD_SHIFT_TDO_BYTES(chunk_bytes);
1179 x = DTC_CMD_SHIFT_TDI_BYTES(chunk_bytes);
1182 x = DTC_CMD_SHIFT_TDIO_BYTES(chunk_bytes);
1185 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1187 if(type != SCAN_IN) {
1189 dtc_mask = 1 << (8 - 1);
1191 while(chunk_bits--) {
1192 if(*tdi_p & tdi_mask) {
1198 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1199 dtc_queue.reply_index++;
1201 dtc_mask = 1 << (8 - 1);
1213 if(extra_bits && (type != SCAN_OUT)) {
1214 /* Schedule any extra bits into the DTC command buffer */
1215 /* make sure there's room for stop, byte op, and one byte */
1217 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
1219 (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
1224 if(dtc_queue_enqueue_reply(
1225 type, buffer, scan_size, tdi_bit_offset,
1229 LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
1233 tdi_bit_offset += extra_bits;
1235 if(type == SCAN_IN) {
1236 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1237 DTC_CMD_SHIFT_TDO_BYTES(1);
1240 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1241 DTC_CMD_SHIFT_TDIO_BITS(extra_bits);
1244 dtc_mask = 1 << (8 - 1);
1246 while(extra_bits--) {
1247 if(*tdi_p & tdi_mask) {
1260 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1263 dtc_queue.reply_index++;
1266 /* Schedule the last bit into the DTC command buffer */
1268 /* make sure there's room for stop, and bit pair command */
1270 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1))
1272 (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
1277 if(type == SCAN_OUT) {
1278 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1279 DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 0);
1282 if(dtc_queue_enqueue_reply(
1283 type, buffer, scan_size, tdi_bit_offset,
1287 LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
1291 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1292 DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1);
1294 dtc_queue.reply_index++;
1298 /* Move to pause state */
1299 tap_state_queue_append(0);
1300 cur_state = ir_scan ? TAP_IRPAUSE : TAP_DRPAUSE;
1301 if (cur_state != end_state) rlink_state_move();
1308 int rlink_execute_queue(void)
1310 jtag_command_t *cmd = jtag_command_queue; /* currently processed command */
1312 enum scan_type type;
1314 int retval, tmp_retval;
1316 /* return ERROR_OK, unless something goes wrong */
1319 #ifndef AUTOMATIC_BUSY_LED
1321 ep1_generic_commandl(pHDev, 2,
1322 EP1_CMD_SET_PORTD_LEDS,
1331 case JTAG_END_STATE:
1333 case JTAG_STATEMOVE:
1339 /* some events, such as resets, need a queue flush to ensure consistency */
1340 tap_state_queue_run();
1347 case JTAG_END_STATE:
1348 #ifdef _DEBUG_JTAG_IO_
1349 LOG_DEBUG("end_state: %i", cmd->cmd.end_state->end_state);
1351 if (cmd->cmd.end_state->end_state != -1)
1352 rlink_end_state(cmd->cmd.end_state->end_state);
1355 #ifdef _DEBUG_JTAG_IO_
1356 LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
1358 if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_reset_config & RESET_SRST_PULLS_TRST)))
1360 cur_state = TAP_RESET;
1362 rlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
1365 #ifdef _DEBUG_JTAG_IO_
1366 LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state);
1368 if (cmd->cmd.runtest->end_state != -1)
1369 rlink_end_state(cmd->cmd.runtest->end_state);
1370 rlink_runtest(cmd->cmd.runtest->num_cycles);
1372 case JTAG_STATEMOVE:
1373 #ifdef _DEBUG_JTAG_IO_
1374 LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
1376 if (cmd->cmd.statemove->end_state != -1)
1377 rlink_end_state(cmd->cmd.statemove->end_state);
1381 #ifdef _DEBUG_JTAG_IO_
1382 LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
1384 rlink_path_move(cmd->cmd.pathmove);
1387 #ifdef _DEBUG_JTAG_IO_
1388 LOG_DEBUG("%s scan end in %i", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", cmd->cmd.scan->end_state);
1390 if (cmd->cmd.scan->end_state != -1)
1391 rlink_end_state(cmd->cmd.scan->end_state);
1392 scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
1393 type = jtag_scan_type(cmd->cmd.scan);
1394 if(rlink_scan(cmd, type, buffer, scan_size) != ERROR_OK) {
1395 retval = ERROR_FAIL;
1399 #ifdef _DEBUG_JTAG_IO_
1400 LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
1402 jtag_sleep(cmd->cmd.sleep->us);
1405 LOG_ERROR("BUG: unknown JTAG command type encountered");
1411 /* Flush the DTC queue to make sure any pending reads have been done before exiting this function */
1412 tap_state_queue_run();
1413 tmp_retval = dtc_queue_run();
1414 if(tmp_retval != ERROR_OK) {
1415 retval = tmp_retval;
1418 #ifndef AUTOMATIC_BUSY_LED
1420 ep1_generic_commandl(pHDev, 2,
1421 EP1_CMD_SET_PORTD_LEDS,
1430 /* Using an unindexed table because it is infrequently accessed and it is short. The table must be in order of ascending speed (and descending prescaler), as it is scanned in reverse. */
1433 int rlink_speed(int speed)
1439 speed = rlink_speed_table[rlink_speed_table_size - 1].prescaler;
1442 for(i = rlink_speed_table_size; i--; ) {
1443 if(rlink_speed_table[i].prescaler == speed) {
1444 if(dtc_load_from_buffer(pHDev, rlink_speed_table[i].dtc, rlink_speed_table[i].dtc_size) != 0) {
1445 LOG_ERROR("An error occurred while trying to load DTC code for speed \"%d\".\n", speed);
1449 if(dtc_start_download() < 0) {
1450 LOG_ERROR("%s, %d: starting DTC: %s",
1461 LOG_ERROR("%d is not a supported speed", speed);
1467 int rlink_speed_div(
1473 for(i = rlink_speed_table_size; i--; ) {
1474 if(rlink_speed_table[i].prescaler == speed) {
1475 *khz = rlink_speed_table[i].khz;
1480 LOG_ERROR("%d is not a supported speed", speed);
1493 LOG_ERROR("RCLK not supported");
1497 for(i = rlink_speed_table_size; i--; ) {
1498 if(rlink_speed_table[i].khz <= khz) {
1499 *speed = rlink_speed_table[i].prescaler;
1504 LOG_WARNING("The lowest supported JTAG speed is %d KHz", rlink_speed_table[0].khz);
1505 *speed = rlink_speed_table[0].prescaler;
1513 handle_dtc_directory_command(
1514 struct command_context_s *cmd_ctx,
1520 LOG_ERROR("expected exactly one argument to rlink_dtc_directory <directory-path>");
1521 return(ERROR_INVALID_ARGUMENTS);
1524 printf("handle_dtc_directory_command called with \"%s\"\n", args[0]);
1532 int rlink_register_commands(struct command_context_s *cmd_ctx)
1535 #ifdef _DEBUG_JTAG_IO_
1536 LOG_DEBUG("rlink_register_commands called with cmd_ctx=%p\n", cmd_ctx);
1542 "rlink_dtc_directory",
1543 handle_dtc_directory_command,
1545 "The directory in which to search for DTC load images"
1554 int rlink_init(void)
1556 struct usb_bus *busses;
1557 struct usb_bus *bus;
1558 int c, i, a, j, retries,len;
1561 u8 reply_buffer[USB_EP1IN_SIZE];
1567 busses = usb_get_busses();
1569 for(bus = busses; bus; bus = bus->next)
1571 struct usb_device *dev;
1573 for(dev = bus->devices; dev; dev = dev->next)
1575 if( (dev->descriptor.idVendor == USB_IDVENDOR) && (dev->descriptor.idProduct == USB_IDPRODUCT) )
1578 LOG_DEBUG("Found device on bus.\n");
1582 if( dev->descriptor.bNumConfigurations > 1 )
1584 LOG_ERROR("Whoops! NumConfigurations is not 1, don't know what to do...\n");
1587 if( dev->config->bNumInterfaces > 1 )
1589 LOG_ERROR("Whoops! NumInterfaces is not 1, don't know what to do...\n");
1593 pHDev=usb_open(dev);
1595 LOG_ERROR ("Failed to open device.\n");
1598 LOG_DEBUG("Opened device, pHDev = %p\n",pHDev);
1603 i = usb_claim_interface(pHDev,0);
1606 LOG_ERROR("usb_claim_interface: %s", usb_strerror());
1607 #ifdef LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP
1608 j = usb_detach_kernel_driver_np(pHDev, 0);
1610 LOG_ERROR("detach kernel driver: %s", usb_strerror());
1615 LOG_DEBUG("interface claimed!\n");
1622 if( usb_set_altinterface(pHDev,0) )
1624 LOG_ERROR("Failed to set interface.\n");
1638 LOG_ERROR("No device found on bus.\n");
1644 LOG_ERROR("Initialisation failed.");
1649 /* The device starts out in an unknown state on open. As such, result reads time out, and it's not even known whether the command was accepted. So, for this first command, we issue it repeatedly until its response doesn't time out. Also, if sending a command is going to time out, we'll find that out here. */
1650 /* It must be possible to open the device in such a way that this special magic isn't needed, but, so far, it escapes us. */
1651 for(i = 0; i < 5; i++) {
1652 j = ep1_generic_commandl(
1656 if(j < USB_EP1OUT_SIZE) {
1657 LOG_ERROR("USB write error: %s", usb_strerror());
1661 pHDev, USB_EP1IN_ADDR,
1662 reply_buffer, sizeof(reply_buffer),
1665 if(j != -ETIMEDOUT) break;
1668 if(j < (int)sizeof(reply_buffer)) {
1669 LOG_ERROR("USB read error: %s", usb_strerror());
1672 LOG_DEBUG(INTERFACE_NAME" firmware version: %d.%d.%d\n", reply_buffer[0], reply_buffer[1], reply_buffer[2]);
1674 if((reply_buffer[0] != 0) || (reply_buffer[1] != 0) || (reply_buffer[2] != 3)) {
1675 LOG_WARNING("The rlink device is not of the version that the developers have played with. It may or may not work.\n");
1678 /* Probe port E for adapter presence */
1679 ep1_generic_commandl(
1681 EP1_CMD_MEMORY_WRITE, /* Drive sense pin with 0 */
1686 ST7_PE_ADAPTER_SENSE_OUT,
1687 ST7_PE_ADAPTER_SENSE_OUT,
1688 EP1_CMD_MEMORY_READ, /* Read back */
1692 EP1_CMD_MEMORY_WRITE, /* Drive sense pin with 1 */
1696 ST7_PE_ADAPTER_SENSE_OUT
1700 pHDev, USB_EP1IN_ADDR,
1705 if((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) != 0) {
1706 LOG_WARNING("target detection problem\n");
1709 ep1_generic_commandl(
1711 EP1_CMD_MEMORY_READ, /* Read back */
1715 EP1_CMD_MEMORY_WRITE, /* float port E */
1725 pHDev, USB_EP1IN_ADDR,
1731 if((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) == 0) {
1732 LOG_WARNING("target not plugged in\n");
1735 /* float port A, make sure DTC is stopped, set upper 2 bits of port D, and set up port A */
1736 ep1_generic_commandl(
1738 EP1_CMD_MEMORY_WRITE,
1745 EP1_CMD_SET_PORTD_UPPER,
1747 EP1_CMD_MEMORY_WRITE,
1751 ((~(ST7_PA_NLINE_DRIVER_ENABLE)) & ST7_PA_NUNASSERTED),
1752 (ST7_PA_NLINE_DRIVER_ENABLE | ST7_PA_NRLINK_RST | ST7_PA_NJTAG_TRST)
1755 /* set LED updating mode and make sure they're unlit */
1756 ep1_generic_commandl(
1758 #ifdef AUTOMATIC_BUSY_LED
1763 EP1_CMD_SET_PORTD_LEDS,
1767 tap_state_queue_init();
1769 rlink_speed(jtag_speed);
1777 int rlink_quit(void)
1779 /* stop DTC and make sure LEDs are off */
1780 ep1_generic_commandl(
1784 EP1_CMD_SET_PORTD_LEDS,
1786 EP1_CMD_SET_PORTD_UPPER,
1790 usb_release_interface(pHDev,0);
1798 jtag_interface_t rlink_interface =
1803 .register_commands = rlink_register_commands,
1804 .speed = rlink_speed,
1805 .speed_div = rlink_speed_div,
1807 .execute_queue = rlink_execute_queue,