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 ***************************************************************************/
30 /* project specific includes */
31 #include <jtag/interface.h>
32 #include <jtag/commands.h>
34 #include "rlink_st7.h"
35 #include "rlink_ep1_cmd.h"
36 #include "rlink_dtc_cmd.h"
37 #include "usb_common.h"
40 /* 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. */
41 #undef AUTOMATIC_BUSY_LED
43 /* This feature may require derating the speed due to reduced hold time. */
44 #undef USE_HARDWARE_SHIFTER_FOR_TMS
47 #define INTERFACE_NAME "RLink"
49 #define USB_IDVENDOR (0x138e)
50 #define USB_IDPRODUCT (0x9000)
52 #define USB_EP1OUT_ADDR (0x01)
53 #define USB_EP1OUT_SIZE (16)
54 #define USB_EP1IN_ADDR (USB_EP1OUT_ADDR | 0x80)
55 #define USB_EP1IN_SIZE (USB_EP1OUT_SIZE)
57 #define USB_EP2OUT_ADDR (0x02)
58 #define USB_EP2OUT_SIZE (64)
59 #define USB_EP2IN_ADDR (USB_EP2OUT_ADDR | 0x80)
60 #define USB_EP2IN_SIZE (USB_EP2OUT_SIZE)
61 #define USB_EP2BANK_SIZE (512)
63 #define USB_TIMEOUT_MS (3 * 1000)
65 #define DTC_STATUS_POLL_BYTE (ST7_USB_BUF_EP0OUT + 0xff)
68 #define ST7_PD_NBUSY_LED ST7_PD0
69 #define ST7_PD_NRUN_LED ST7_PD1
70 /* low enables VPP at adapter header, high connects it to GND instead */
71 #define ST7_PD_VPP_SEL ST7_PD6
72 /* low: VPP = 12v, high: VPP <= 5v */
73 #define ST7_PD_VPP_SHDN ST7_PD7
75 /* These pins are connected together */
76 #define ST7_PE_ADAPTER_SENSE_IN ST7_PE3
77 #define ST7_PE_ADAPTER_SENSE_OUT ST7_PE4
79 /* Symbolic mapping between port pins and numbered IO lines */
80 #define ST7_PA_IO1 ST7_PA1
81 #define ST7_PA_IO2 ST7_PA2
82 #define ST7_PA_IO4 ST7_PA4
83 #define ST7_PA_IO8 ST7_PA6
84 #define ST7_PA_IO10 ST7_PA7
85 #define ST7_PB_IO5 ST7_PB5
86 #define ST7_PC_IO9 ST7_PC1
87 #define ST7_PC_IO3 ST7_PC2
88 #define ST7_PC_IO7 ST7_PC3
89 #define ST7_PE_IO6 ST7_PE5
91 /* Symbolic mapping between numbered IO lines and adapter signals */
92 #define ST7_PA_RTCK ST7_PA_IO0
93 #define ST7_PA_NTRST ST7_PA_IO1
94 #define ST7_PC_TDI ST7_PC_IO3
95 #define ST7_PA_DBGRQ ST7_PA_IO4
96 #define ST7_PB_NSRST ST7_PB_IO5
97 #define ST7_PE_TMS ST7_PE_IO6
98 #define ST7_PC_TCK ST7_PC_IO7
99 #define ST7_PC_TDO ST7_PC_IO9
100 #define ST7_PA_DBGACK ST7_PA_IO10
102 static usb_dev_handle *pHDev;
106 * ep1 commands are up to USB_EP1OUT_SIZE bytes in length.
107 * This function takes care of zeroing the unused bytes before sending the packet.
108 * Any reply packet is not handled by this function.
112 ep1_generic_commandl(
113 usb_dev_handle *pHDev_param,
117 uint8_t usb_buffer[USB_EP1OUT_SIZE];
118 uint8_t *usb_buffer_p;
122 if (length > sizeof(usb_buffer)) {
123 length = sizeof(usb_buffer);
126 usb_buffer_p = usb_buffer;
128 va_start(ap, length);
130 *usb_buffer_p++ = va_arg(ap, int);
137 sizeof(usb_buffer) - (usb_buffer_p - usb_buffer)
140 usb_ret = usb_bulk_write(
143 (char *)usb_buffer, sizeof(usb_buffer),
156 usb_dev_handle *pHDev,
161 uint8_t usb_buffer[USB_EP1OUT_SIZE];
166 usb_buffer[0] = EP1_CMD_MEMORY_READ;
170 sizeof(usb_buffer) - 4
177 if (remain > sizeof(usb_buffer)) {
178 length = sizeof(usb_buffer);
183 usb_buffer[1] = addr >> 8;
184 usb_buffer[2] = addr;
185 usb_buffer[3] = length;
187 usb_ret = usb_bulk_write(
188 pHDev, USB_EP1OUT_ADDR,
189 usb_buffer, sizeof(usb_buffer),
193 if (usb_ret < sizeof(usb_buffer)) {
197 usb_ret = usb_bulk_read(
198 pHDev, USB_EP1IN_ADDR,
203 if (usb_ret < length) {
222 usb_dev_handle *pHDev_param,
225 uint8_t const *buffer
227 uint8_t usb_buffer[USB_EP1OUT_SIZE];
232 usb_buffer[0] = EP1_CMD_MEMORY_WRITE;
238 if (remain > (sizeof(usb_buffer) - 4)) {
239 length = (sizeof(usb_buffer) - 4);
244 usb_buffer[1] = addr >> 8;
245 usb_buffer[2] = addr;
246 usb_buffer[3] = length;
253 usb_buffer + 4 + length,
255 sizeof(usb_buffer) - 4 - length
258 usb_ret = usb_bulk_write(
259 pHDev_param, USB_EP1OUT_ADDR,
260 (char *)usb_buffer, sizeof(usb_buffer),
264 if ((size_t)usb_ret < sizeof(usb_buffer)) {
282 usb_dev_handle *pHDev,
287 uint8_t buffer[USB_EP1OUT_SIZE - 4];
292 if (length > sizeof(buffer)) {
293 length = sizeof(buffer);
299 va_start(ap, length);
301 *buffer_p++ = va_arg(ap, int);
305 return(ep1_memory_write(pHDev, addr, length, buffer));
310 #define DTCLOAD_COMMENT (0)
311 #define DTCLOAD_ENTRY (1)
312 #define DTCLOAD_LOAD (2)
313 #define DTCLOAD_RUN (3)
314 #define DTCLOAD_LUT_START (4)
315 #define DTCLOAD_LUT (5)
317 #define DTC_LOAD_BUFFER ST7_USB_BUF_EP2UIDO
319 /* This gets set by the DTC loader */
320 static uint8_t dtc_entry_download;
323 /* The buffer is specially formatted to represent a valid image to load into the DTC. */
326 dtc_load_from_buffer(
327 usb_dev_handle *pHDev_param,
328 const uint8_t *buffer,
337 struct header_s *header;
338 uint8_t lut_start = 0xc0;
340 dtc_entry_download = 0;
342 /* Stop the DTC before loading anything. */
343 usb_err = ep1_generic_commandl(
347 if (usb_err < 0) return(usb_err);
350 if (length < sizeof(*header)) {
351 LOG_ERROR("Malformed DTC image");
355 header = (struct header_s *)buffer;
356 buffer += sizeof(*header);
357 length -= sizeof(*header);
359 if (length < (size_t)header->length + 1) {
360 LOG_ERROR("Malformed DTC image");
364 switch (header->type) {
365 case DTCLOAD_COMMENT:
369 /* store entry addresses somewhere */
370 if (!strncmp("download", (char *)buffer + 1, 8)) {
371 dtc_entry_download = buffer[0];
376 /* Send the DTC program to ST7 RAM. */
377 usb_err = ep1_memory_write(
380 header->length + 1, buffer
382 if (usb_err < 0) return(usb_err);
384 /* Load it into the DTC. */
385 usb_err = ep1_generic_commandl(
388 (DTC_LOAD_BUFFER >> 8),
391 if (usb_err < 0) return(usb_err);
396 usb_err = ep1_generic_commandl(
402 if (usb_err < 0) return(usb_err);
406 case DTCLOAD_LUT_START:
407 lut_start = buffer[0];
411 usb_err = ep1_memory_write(
413 ST7_USB_BUF_EP0OUT + lut_start,
414 header->length + 1, buffer
416 if (usb_err < 0) return(usb_err);
420 LOG_ERROR("Invalid DTC image record type: 0x%02x", header->type);
425 buffer += (header->length + 1);
426 length -= (header->length + 1);
434 * Start the DTC running in download mode (waiting for 512 byte command packets on ep2).
438 dtc_start_download(void) {
442 /* set up for download mode and make sure EP2 is set up to transmit */
443 usb_err = ep1_generic_commandl(
448 EP1_CMD_SET_DOWNLOAD,
449 EP1_CMD_MEMORY_READ, /* read EP2TXR for its data toggle */
454 if (usb_err < 0) return(usb_err);
456 /* read back ep2txr */
457 usb_err = usb_bulk_read(
458 pHDev, USB_EP1IN_ADDR,
462 if (usb_err < 0) return(usb_err);
464 usb_err = ep1_generic_commandl(
467 EP1_CMD_MEMORY_WRITE, /* preinitialize poll byte */
468 DTC_STATUS_POLL_BYTE >> 8,
469 DTC_STATUS_POLL_BYTE,
472 EP1_CMD_MEMORY_WRITE, /* set EP2IN to return data */
476 (ep2txr & ST7_EP2TXR_DTOG_TX) | ST7_EP2TXR_STAT_VALID,
477 EP1_CMD_DTC_CALL, /* start running the DTC */
479 EP1_CMD_DTC_GET_CACHED_STATUS
481 if (usb_err < 0) return(usb_err);
483 /* wait for completion */
484 usb_err = usb_bulk_read(
485 pHDev, USB_EP1IN_ADDR,
497 usb_dev_handle *pHDev_param,
498 uint8_t *command_buffer,
499 int command_buffer_size,
500 uint8_t *reply_buffer,
501 int reply_buffer_size
503 uint8_t ep2_buffer[USB_EP2IN_SIZE];
507 LOG_DEBUG(": %d/%d", command_buffer_size, reply_buffer_size);
509 usb_err = usb_bulk_write(
512 (char *)command_buffer, USB_EP2BANK_SIZE,
515 if (usb_err < 0) return(usb_err);
518 /* Wait for DTC to finish running command buffer */
520 usb_err = ep1_generic_commandl(
524 DTC_STATUS_POLL_BYTE >> 8,
525 DTC_STATUS_POLL_BYTE,
528 if (usb_err < 0) return(usb_err);
530 usb_err = usb_bulk_read(
533 (char *)ep2_buffer, 1,
536 if (usb_err < 0) return(usb_err);
538 if (ep2_buffer[0] & 0x01) break;
541 LOG_ERROR("%s, %d: too many retries waiting for DTC status",
549 if (!reply_buffer) reply_buffer_size = 0;
550 if (reply_buffer_size) {
551 usb_err = usb_bulk_read(
554 (char *)ep2_buffer, sizeof(ep2_buffer),
558 if (usb_err < (int)sizeof(ep2_buffer)) {
559 LOG_ERROR("%s, %d: Read of endpoint 2 returned %d",
560 __FILE__, __LINE__, usb_err
565 memcpy(reply_buffer, ep2_buffer, reply_buffer_size);
574 * 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.
577 struct dtc_reply_queue_entry {
578 struct dtc_reply_queue_entry *next;
579 struct jtag_command *cmd; /* the command that resulted in this entry */
582 uint8_t *buffer; /* the scan buffer */
583 int size; /* size of the scan buffer in bits */
584 int offset; /* how many bits were already done before this? */
585 int length; /* how many bits are processed in this operation? */
586 enum scan_type type; /* SCAN_IN/SCAN_OUT/SCAN_IO */
592 * The dtc_queue consists of a buffer of pending commands and a reply queue.
593 * rlink_scan and tap_state_run add to the command buffer and maybe to the reply queue.
598 struct dtc_reply_queue_entry *rq_head;
599 struct dtc_reply_queue_entry *rq_tail;
601 uint32_t reply_index;
602 uint8_t cmd_buffer[USB_EP2BANK_SIZE];
607 * 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.
620 dtc_queue_init(void) {
621 dtc_queue.rq_head = NULL;
622 dtc_queue.rq_tail = NULL;
623 dtc_queue.cmd_index = 0;
624 dtc_queue.reply_index = 0;
631 struct dtc_reply_queue_entry *
632 dtc_queue_enqueue_reply(
638 struct jtag_command *cmd
640 struct dtc_reply_queue_entry *rq_entry;
642 rq_entry = malloc(sizeof(struct dtc_reply_queue_entry));
643 if (rq_entry != NULL) {
644 rq_entry->scan.type = type;
645 rq_entry->scan.buffer = buffer;
646 rq_entry->scan.size = size;
647 rq_entry->scan.offset = offset;
648 rq_entry->scan.length = length;
650 rq_entry->next = NULL;
652 if (dtc_queue.rq_head == NULL)
653 dtc_queue.rq_head = rq_entry;
655 dtc_queue.rq_tail->next = rq_entry;
657 dtc_queue.rq_tail = rq_entry;
665 * 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.
666 * The queue is automatically run by append when it is necessary to get space for the append.
671 dtc_queue_run(void) {
672 struct dtc_reply_queue_entry *rq_p, *rq_next;
677 uint8_t *dtc_p, *tdo_p;
678 uint8_t dtc_mask, tdo_mask;
679 uint8_t reply_buffer[USB_EP2IN_SIZE];
681 assert((dtc_queue.rq_head != 0) == (dtc_queue.reply_index > 0));
682 assert(dtc_queue.cmd_index < USB_EP2BANK_SIZE);
683 assert(dtc_queue.reply_index <= USB_EP2IN_SIZE);
687 if (dtc_queue.cmd_index < 1) return(retval);
689 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = DTC_CMD_STOP;
691 usb_err = dtc_run_download(pHDev,
692 dtc_queue.cmd_buffer, dtc_queue.cmd_index,
693 reply_buffer, dtc_queue.reply_index
696 LOG_ERROR("dtc_run_download: %s", usb_strerror());
700 if (dtc_queue.rq_head != NULL) {
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;
797 /* reset state for new appends */
798 dtc_queue.cmd_index = 0;
799 dtc_queue.reply_index = 0;
806 tap_state_queue_init(void) {
807 tap_state_queue.length = 0;
808 tap_state_queue.buffer = 0;
815 tap_state_queue_run(void) {
822 if (!tap_state_queue.length) return(retval);
825 for (i = tap_state_queue.length; i--;) {
828 if (tap_state_queue.buffer & 1) {
831 if ((bits >= 8) || !i) {
832 byte_param <<= (8 - bits);
834 /* make sure there's room for stop, byte op, and one byte */
835 if (dtc_queue.cmd_index >= (sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))) {
836 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
841 #ifdef USE_HARDWARE_SHIFTER_FOR_TMS
843 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
844 DTC_CMD_SHIFT_TMS_BYTES(1);
847 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
848 DTC_CMD_SHIFT_TMS_BITS(bits);
849 #ifdef USE_HARDWARE_SHIFTER_FOR_TMS
853 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
862 tap_state_queue.buffer >>= 1;
864 retval = tap_state_queue_init();
871 tap_state_queue_append(
876 if (tap_state_queue.length >= sizeof(tap_state_queue.buffer) * 8) {
877 retval = tap_state_queue_run();
878 if (retval != 0) return(retval);
882 tap_state_queue.buffer |= (1 << tap_state_queue.length);
884 tap_state_queue.length++;
891 void rlink_end_state(tap_state_t state)
893 if (tap_is_state_stable(state))
894 tap_set_end_state(state);
897 LOG_ERROR("BUG: %i is not a valid end state", state);
904 void rlink_state_move(void) {
907 uint8_t tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
908 int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
910 for (i = 0; i < tms_count; i++)
912 tms = (tms_scan >> i) & 1;
913 tap_state_queue_append(tms);
916 tap_set_state(tap_get_end_state());
920 void rlink_path_move(struct pathmove_command *cmd)
922 int num_states = cmd->num_states;
929 if (tap_state_transition(tap_get_state(), false) == cmd->path[state_count])
933 else if (tap_state_transition(tap_get_state(), true) == cmd->path[state_count])
939 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(tap_get_state()), tap_state_name(cmd->path[state_count]));
943 tap_state_queue_append(tms);
945 tap_set_state(cmd->path[state_count]);
950 tap_set_end_state(tap_get_state());
955 void rlink_runtest(int num_cycles)
959 tap_state_t saved_end_state = tap_get_end_state();
961 /* only do a state_move when we're not already in RTI */
962 if (tap_get_state() != TAP_IDLE)
964 rlink_end_state(TAP_IDLE);
968 /* execute num_cycles */
969 for (i = 0; i < num_cycles; i++)
971 tap_state_queue_append(0);
974 /* finish in end_state */
975 rlink_end_state(saved_end_state);
976 if (tap_get_state() != tap_get_end_state())
981 /* (1) assert or (0) deassert reset lines */
983 void rlink_reset(int trst, int srst)
988 /* Read port A for bit op */
989 usb_err = ep1_generic_commandl(
997 LOG_ERROR("%s", usb_strerror());
1001 usb_err = usb_bulk_read(
1002 pHDev, USB_EP1IN_ADDR,
1007 LOG_ERROR("%s", usb_strerror());
1012 bitmap &= ~ST7_PA_NTRST;
1014 bitmap |= ST7_PA_NTRST;
1017 /* Write port A and read port B for bit op */
1018 /* port B has no OR, and we want to emulate open drain on NSRST, so we initialize DR to 0 and assert NSRST by setting DDR to 1. */
1019 usb_err = ep1_generic_commandl(
1021 EP1_CMD_MEMORY_WRITE,
1026 EP1_CMD_MEMORY_READ,
1032 LOG_ERROR("%s", usb_strerror());
1036 usb_err = usb_bulk_read(
1037 pHDev, USB_EP1IN_ADDR,
1042 LOG_ERROR("%s", usb_strerror());
1047 bitmap |= ST7_PB_NSRST;
1049 bitmap &= ~ST7_PB_NSRST;
1052 /* write port B and read dummy to ensure completion before returning */
1053 usb_err = ep1_generic_commandl(
1055 EP1_CMD_MEMORY_WRITE,
1060 EP1_CMD_DTC_GET_CACHED_STATUS
1063 LOG_ERROR("%s", usb_strerror());
1067 usb_err = usb_bulk_read(
1068 pHDev, USB_EP1IN_ADDR,
1073 LOG_ERROR("%s", usb_strerror());
1082 struct jtag_command *cmd,
1083 enum scan_type type,
1088 tap_state_t saved_end_state;
1096 uint8_t tdi_mask, *tdi_p;
1099 if (scan_size < 1) {
1100 LOG_ERROR("scan_size cannot be less than 1 bit");
1104 ir_scan = cmd->cmd.scan->ir_scan;
1106 /* Move to the proper state before starting to shift TDI/TDO. */
1108 (!ir_scan && (tap_get_state() == TAP_DRSHIFT))
1110 (ir_scan && (tap_get_state() == TAP_IRSHIFT))
1112 saved_end_state = tap_get_end_state();
1113 rlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
1115 rlink_end_state(saved_end_state);
1118 tap_state_queue_run();
1122 printf("scan_size = %d, type = 0x%x\n", scan_size, type);
1126 /* clear unused bits in scan buffer for ease of debugging */
1127 /* (it makes diffing output easier) */
1128 buffer[scan_size / 8] &= ((1 << ((scan_size - 1) % 8) + 1) - 1);
1130 printf("before scan:");
1131 for (i = 0; i < (scan_size + 7) / 8; i++) {
1132 printf(" %02x", buffer[i]);
1138 /* The number of bits that can be shifted as complete bytes */
1139 byte_bits = (int)(scan_size - 1) / 8 * 8;
1140 /* The number of bits left over, not counting the last bit */
1141 extra_bits = (scan_size - 1) - byte_bits;
1147 if (extra_bits && (type == SCAN_OUT)) {
1148 /* Schedule any extra bits into the DTC command buffer, padding as needed */
1149 /* For SCAN_OUT, this comes before the full bytes so the (leading) padding bits will fall off the end */
1150 /* make sure there's room for stop, byte op, and one byte */
1152 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
1158 dtc_mask = 1 << (extra_bits - 1);
1160 while (extra_bits--) {
1161 if (*tdi_p & tdi_mask) {
1168 if (tdi_mask == 0) {
1174 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1175 DTC_CMD_SHIFT_TDI_BYTES(1);
1177 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1180 /* Loop scheduling full bytes into the DTC command buffer */
1182 if (type == SCAN_IN) {
1183 /* make sure there's room for stop and byte op */
1184 x = (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1));
1186 /* make sure there's room for stop, byte op, and at least one byte */
1187 x = (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1));
1190 if (type != SCAN_OUT) {
1191 /* make sure there's room for at least one reply byte */
1192 x |= (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1));
1199 chunk_bits = byte_bits;
1200 /* we can only use up to 16 bytes at a time */
1201 if (chunk_bits > (16 * 8)) chunk_bits = (16 * 8);
1203 if (type != SCAN_IN) {
1204 /* how much is there room for, considering stop and byte op? */
1205 x = (sizeof(dtc_queue.cmd_buffer) - (dtc_queue.cmd_index + 1 + 1)) * 8;
1206 if (chunk_bits > x) chunk_bits = x;
1209 if (type != SCAN_OUT) {
1210 /* how much is there room for in the reply buffer? */
1211 x = (USB_EP2IN_SIZE - dtc_queue.reply_index) * 8;
1212 if (chunk_bits > x) chunk_bits = x;
1215 /* so the loop will end */
1216 byte_bits -= chunk_bits;
1218 if (type != SCAN_OUT) {
1219 if (dtc_queue_enqueue_reply(
1220 type, buffer, scan_size, tdi_bit_offset,
1224 LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno));
1227 dtc_queue.reply_index += (chunk_bits + 7) / 8;
1229 tdi_bit_offset += chunk_bits;
1232 /* chunk_bits is a multiple of 8, so there are no rounding issues. */
1233 chunk_bytes = chunk_bits / 8;
1237 x = DTC_CMD_SHIFT_TDO_BYTES(chunk_bytes);
1240 x = DTC_CMD_SHIFT_TDI_BYTES(chunk_bytes);
1243 x = DTC_CMD_SHIFT_TDIO_BYTES(chunk_bytes);
1246 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1248 if (type != SCAN_IN) {
1250 dtc_mask = 1 << (8 - 1);
1252 while (chunk_bits--) {
1253 if (*tdi_p & tdi_mask) {
1258 if (dtc_mask == 0) {
1259 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1261 dtc_mask = 1 << (8 - 1);
1265 if (tdi_mask == 0) {
1273 if (extra_bits && (type != SCAN_OUT)) {
1274 /* Schedule any extra bits into the DTC command buffer */
1275 /* make sure there's room for stop, byte op, and one byte */
1277 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
1279 (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
1284 if (dtc_queue_enqueue_reply(
1285 type, buffer, scan_size, tdi_bit_offset,
1289 LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno));
1293 dtc_queue.reply_index++;
1295 tdi_bit_offset += extra_bits;
1297 if (type == SCAN_IN) {
1298 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1299 DTC_CMD_SHIFT_TDO_BYTES(1);
1302 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1303 DTC_CMD_SHIFT_TDIO_BITS(extra_bits);
1306 dtc_mask = 1 << (8 - 1);
1308 while (extra_bits--) {
1309 if (*tdi_p & tdi_mask) {
1316 if (tdi_mask == 0) {
1322 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
1326 /* Schedule the last bit into the DTC command buffer */
1327 /* make sure there's room for stop, and bit pair command */
1329 (dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1))
1331 (dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
1336 if (type == SCAN_OUT) {
1337 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1338 DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 0);
1341 if (dtc_queue_enqueue_reply(
1342 type, buffer, scan_size, tdi_bit_offset,
1346 LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno));
1350 dtc_queue.reply_index++;
1352 dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
1353 DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1);
1356 /* Move to pause state */
1357 tap_state_queue_append(0);
1358 tap_set_state(ir_scan ? TAP_IRPAUSE : TAP_DRPAUSE);
1359 if (tap_get_state() != tap_get_end_state()) rlink_state_move();
1366 int rlink_execute_queue(void)
1368 struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
1370 enum scan_type type;
1372 int retval, tmp_retval;
1374 /* return ERROR_OK, unless something goes wrong */
1377 #ifndef AUTOMATIC_BUSY_LED
1379 ep1_generic_commandl(pHDev, 2,
1380 EP1_CMD_SET_PORTD_LEDS,
1390 case JTAG_TLR_RESET:
1396 /* some events, such as resets, need a queue flush to ensure consistency */
1397 tap_state_queue_run();
1405 #ifdef _DEBUG_JTAG_IO_
1406 LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
1408 if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
1410 tap_set_state(TAP_RESET);
1412 rlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
1415 #ifdef _DEBUG_JTAG_IO_
1416 LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state);
1418 if (cmd->cmd.runtest->end_state != -1)
1419 rlink_end_state(cmd->cmd.runtest->end_state);
1420 rlink_runtest(cmd->cmd.runtest->num_cycles);
1422 case JTAG_TLR_RESET:
1423 #ifdef _DEBUG_JTAG_IO_
1424 LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
1426 if (cmd->cmd.statemove->end_state != -1)
1427 rlink_end_state(cmd->cmd.statemove->end_state);
1431 #ifdef _DEBUG_JTAG_IO_
1432 LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
1434 rlink_path_move(cmd->cmd.pathmove);
1437 #ifdef _DEBUG_JTAG_IO_
1438 LOG_DEBUG("%s scan end in %i", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", cmd->cmd.scan->end_state);
1440 if (cmd->cmd.scan->end_state != -1)
1441 rlink_end_state(cmd->cmd.scan->end_state);
1442 scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
1443 type = jtag_scan_type(cmd->cmd.scan);
1444 if (rlink_scan(cmd, type, buffer, scan_size) != ERROR_OK) {
1445 retval = ERROR_FAIL;
1449 #ifdef _DEBUG_JTAG_IO_
1450 LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
1452 jtag_sleep(cmd->cmd.sleep->us);
1455 LOG_ERROR("BUG: unknown JTAG command type encountered");
1461 /* Flush the DTC queue to make sure any pending reads have been done before exiting this function */
1462 tap_state_queue_run();
1463 tmp_retval = dtc_queue_run();
1464 if (tmp_retval != ERROR_OK) {
1465 retval = tmp_retval;
1468 #ifndef AUTOMATIC_BUSY_LED
1470 ep1_generic_commandl(pHDev, 2,
1471 EP1_CMD_SET_PORTD_LEDS,
1480 /* 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. */
1483 int rlink_speed(int speed)
1489 speed = rlink_speed_table[rlink_speed_table_size - 1].prescaler;
1492 for (i = rlink_speed_table_size; i--;) {
1493 if (rlink_speed_table[i].prescaler == speed) {
1494 if (dtc_load_from_buffer(pHDev, rlink_speed_table[i].dtc, rlink_speed_table[i].dtc_size) != 0) {
1495 LOG_ERROR("An error occurred while trying to load DTC code for speed \"%d\".", speed);
1499 if (dtc_start_download() < 0) {
1500 LOG_ERROR("%s, %d: starting DTC: %s",
1511 LOG_ERROR("%d is not a supported speed", speed);
1517 int rlink_speed_div(
1523 for (i = rlink_speed_table_size; i--;) {
1524 if (rlink_speed_table[i].prescaler == speed) {
1525 *khz = rlink_speed_table[i].khz;
1530 LOG_ERROR("%d is not a supported speed", speed);
1543 LOG_ERROR("RCLK not supported");
1547 for (i = rlink_speed_table_size; i--;) {
1548 if (rlink_speed_table[i].khz <= khz) {
1549 *speed = rlink_speed_table[i].prescaler;
1554 LOG_WARNING("The lowest supported JTAG speed is %d KHz", rlink_speed_table[0].khz);
1555 *speed = rlink_speed_table[0].prescaler;
1561 int rlink_init(void)
1564 uint8_t reply_buffer[USB_EP1IN_SIZE];
1567 const uint16_t vids[] = { USB_IDVENDOR, 0 };
1568 const uint16_t pids[] = { USB_IDPRODUCT, 0 };
1569 if (jtag_usb_open(vids, pids, &pHDev) != ERROR_OK)
1572 struct usb_device *dev = usb_device(pHDev);
1573 if (dev->descriptor.bNumConfigurations > 1)
1575 LOG_ERROR("Whoops! NumConfigurations is not 1, don't know what to do...");
1578 if (dev->config->bNumInterfaces > 1)
1580 LOG_ERROR("Whoops! NumInterfaces is not 1, don't know what to do...");
1584 LOG_DEBUG("Opened device, pHDev = %p", pHDev);
1586 /* usb_set_configuration required under win32 */
1587 usb_set_configuration(pHDev, dev->config[0].bConfigurationValue);
1592 i = usb_claim_interface(pHDev,0);
1595 LOG_ERROR("usb_claim_interface: %s", usb_strerror());
1596 #ifdef LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP
1597 j = usb_detach_kernel_driver_np(pHDev, 0);
1599 LOG_ERROR("detach kernel driver: %s", usb_strerror());
1604 LOG_DEBUG("interface claimed!");
1607 } while (--retries);
1611 LOG_ERROR("Initialisation failed.");
1614 if (usb_set_altinterface(pHDev,0) != 0)
1616 LOG_ERROR("Failed to set interface.");
1620 /* The device starts out in an unknown state on open. As such,
1621 * result reads time out, and it's not even known whether the
1622 * command was accepted. So, for this first command, we issue
1623 * it repeatedly until its response doesn't time out. Also, if
1624 * sending a command is going to time out, we find that out here.
1626 * It must be possible to open the device in such a way that
1627 * this special magic isn't needed, but, so far, it escapes us.
1629 for (i = 0; i < 5; i++) {
1630 j = ep1_generic_commandl(
1634 if (j < USB_EP1OUT_SIZE) {
1635 LOG_ERROR("USB write error: %s", usb_strerror());
1639 pHDev, USB_EP1IN_ADDR,
1640 (char *)reply_buffer, sizeof(reply_buffer),
1643 if (j != -ETIMEDOUT) break;
1646 if (j < (int)sizeof(reply_buffer)) {
1647 LOG_ERROR("USB read error: %s", usb_strerror());
1650 LOG_DEBUG(INTERFACE_NAME" firmware version: %d.%d.%d", reply_buffer[0], reply_buffer[1], reply_buffer[2]);
1652 if ((reply_buffer[0] != 0) || (reply_buffer[1] != 0) || (reply_buffer[2] != 3)) {
1653 LOG_WARNING("The rlink device is not of the version that the developers have played with. It may or may not work.");
1656 /* Probe port E for adapter presence */
1657 ep1_generic_commandl(
1659 EP1_CMD_MEMORY_WRITE, /* Drive sense pin with 0 */
1664 ST7_PE_ADAPTER_SENSE_OUT, /* DDR */
1665 ST7_PE_ADAPTER_SENSE_OUT, /* OR */
1666 EP1_CMD_MEMORY_READ, /* Read back */
1670 EP1_CMD_MEMORY_WRITE, /* Drive sense pin with 1 */
1674 ST7_PE_ADAPTER_SENSE_OUT
1678 pHDev, USB_EP1IN_ADDR,
1679 (char *)reply_buffer, 1,
1683 if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) != 0) {
1684 LOG_WARNING("target detection problem");
1687 ep1_generic_commandl(
1689 EP1_CMD_MEMORY_READ, /* Read back */
1693 EP1_CMD_MEMORY_WRITE, /* float port E */
1703 pHDev, USB_EP1IN_ADDR,
1704 (char *)reply_buffer, 1,
1709 if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) == 0) {
1710 LOG_WARNING("target not plugged in");
1713 /* float ports A and B */
1714 ep1_generic_commandl(
1716 EP1_CMD_MEMORY_WRITE,
1722 EP1_CMD_MEMORY_WRITE,
1729 /* make sure DTC is stopped, set VPP control, set up ports A and B */
1730 ep1_generic_commandl(
1733 EP1_CMD_SET_PORTD_VPP,
1735 EP1_CMD_MEMORY_WRITE,
1739 ((~(0)) & (ST7_PA_NTRST)),
1741 /* port B has no OR, and we want to emulate open drain on NSRST, so we set DR to 0 here and later assert NSRST by setting DDR bit to 1. */
1742 EP1_CMD_MEMORY_WRITE,
1749 /* set LED updating mode and make sure they're unlit */
1750 ep1_generic_commandl(
1752 #ifdef AUTOMATIC_BUSY_LED
1757 EP1_CMD_SET_PORTD_LEDS,
1761 tap_state_queue_init();
1770 int rlink_quit(void)
1772 /* stop DTC and make sure LEDs are off */
1773 ep1_generic_commandl(
1777 EP1_CMD_SET_PORTD_LEDS,
1779 EP1_CMD_SET_PORTD_VPP,
1783 usb_release_interface(pHDev,0);
1791 struct jtag_interface rlink_interface =
1796 .speed = rlink_speed,
1797 .speed_div = rlink_speed_div,
1799 .execute_queue = rlink_execute_queue,