jtag: jtag_vpi: Add missing 'default' to switch statement
[openocd.git] / src / jtag / drivers / usb_blaster / usb_blaster.c
1 /*
2 * Driver for USB-JTAG, Altera USB-Blaster and compatibles
3 *
4 * Inspired from original code from Kolja Waschk's USB-JTAG project
5 * (http://www.ixo.de/info/usb_jtag/), and from openocd project.
6 *
7 * Copyright (C) 2013 Franck Jullien franck.jullien@gmail.com
8 * Copyright (C) 2012 Robert Jarzmik robert.jarzmik@free.fr
9 * Copyright (C) 2011 Ali Lown ali@lown.me.uk
10 * Copyright (C) 2009 Catalin Patulea cat@vv.carleton.ca
11 * Copyright (C) 2006 Kolja Waschk usbjtag@ixo.de
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 *
26 */
27
28 /*
29 * The following information is originally from Kolja Waschk's USB-JTAG,
30 * where it was obtained by reverse engineering an Altera USB-Blaster.
31 * See http://www.ixo.de/info/usb_jtag/ for USB-Blaster block diagram and
32 * usb_jtag-20080705-1200.zip#usb_jtag/host/openocd for protocol.
33 *
34 * The same information is also on the UrJTAG mediawiki, with some additional
35 * notes on bits marked as "unknown" by usb_jtag.
36 * (http://sourceforge.net/apps/mediawiki/urjtag/index.php?
37 * title=Cable_Altera_USB-Blaster)
38 *
39 * USB-JTAG, Altera USB-Blaster and compatibles are typically implemented as
40 * an FTDIChip FT245 followed by a CPLD which handles a two-mode protocol:
41 *
42 * _________
43 * | |
44 * | AT93C46 |
45 * |_________|
46 * __|__________ _________
47 * | | | |
48 * USB__| FTDI 245BM |__| EPM7064 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
49 * |_____________| |_________|
50 * __|__________ _|___________
51 * | | | |
52 * | 6 MHz XTAL | | 24 MHz Osc. |
53 * |_____________| |_____________|
54 *
55 * USB-JTAG, Altera USB-Blaster II are typically implemented as a Cypress
56 * EZ-USB FX2LP followed by a CPLD.
57 * _____________ _________
58 * | | | |
59 * USB__| EZ-USB FX2 |__| EPM570 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
60 * |_____________| |_________|
61 * __|__________
62 * | |
63 * | 24 MHz XTAL |
64 * |_____________|
65 */
66
67 #ifdef HAVE_CONFIG_H
68 #include "config.h"
69 #endif
70
71 #if IS_CYGWIN == 1
72 #include "windows.h"
73 #undef LOG_ERROR
74 #endif
75
76 /* project specific includes */
77 #include <jtag/interface.h>
78 #include <jtag/commands.h>
79 #include <helper/time_support.h>
80 #include "ublast_access.h"
81
82 /* system includes */
83 #include <string.h>
84 #include <stdlib.h>
85 #include <unistd.h>
86 #include <sys/time.h>
87 #include <time.h>
88
89 /* Size of USB endpoint max packet size, ie. 64 bytes */
90 #define MAX_PACKET_SIZE 64
91 /*
92 * Size of data buffer that holds bytes in byte-shift mode.
93 * This buffer can hold multiple USB packets aligned to
94 * MAX_PACKET_SIZE bytes boundaries.
95 * BUF_LEN must be grater than or equal MAX_PACKET_SIZE.
96 */
97 #define BUF_LEN 4096
98
99 /* USB-Blaster II specific command */
100 #define CMD_COPY_TDO_BUFFER 0x5F
101
102 enum gpio_steer {
103 FIXED_0 = 0,
104 FIXED_1,
105 SRST,
106 TRST,
107 };
108
109 struct ublast_info {
110 enum gpio_steer pin6;
111 enum gpio_steer pin8;
112 int tms;
113 int tdi;
114 bool trst_asserted;
115 bool srst_asserted;
116 uint8_t buf[BUF_LEN];
117 int bufidx;
118
119 char *lowlevel_name;
120 struct ublast_lowlevel *drv;
121 char *ublast_device_desc;
122 uint16_t ublast_vid, ublast_pid;
123 uint16_t ublast_vid_uninit, ublast_pid_uninit;
124 int flags;
125 char *firmware_path;
126 };
127
128 /*
129 * Global device control
130 */
131 static struct ublast_info info = {
132 .ublast_vid = 0x09fb, /* Altera */
133 .ublast_pid = 0x6001, /* USB-Blaster */
134 .lowlevel_name = NULL,
135 .srst_asserted = false,
136 .trst_asserted = false,
137 .pin6 = FIXED_1,
138 .pin8 = FIXED_1,
139 };
140
141 /*
142 * Available lowlevel drivers (FTDI, FTD2xx, ...)
143 */
144 struct drvs_map {
145 char *name;
146 struct ublast_lowlevel *(*drv_register)(void);
147 };
148
149 static struct drvs_map lowlevel_drivers_map[] = {
150 #if BUILD_USB_BLASTER
151 { .name = "ftdi", .drv_register = ublast_register_ftdi },
152 #endif
153 #if BUILD_USB_BLASTER_2
154 { .name = "ublast2", .drv_register = ublast2_register_libusb },
155 #endif
156 { NULL, NULL },
157 };
158
159 /*
160 * Access functions to lowlevel driver, agnostic of libftdi/libftdxx
161 */
162 static char *hexdump(uint8_t *buf, unsigned int size)
163 {
164 unsigned int i;
165 char *str = calloc(size * 2 + 1, 1);
166
167 for (i = 0; i < size; i++)
168 sprintf(str + 2*i, "%02x", buf[i]);
169 return str;
170 }
171
172 static int ublast_buf_read(uint8_t *buf, unsigned size, uint32_t *bytes_read)
173 {
174 int ret = info.drv->read(info.drv, buf, size, bytes_read);
175 char *str = hexdump(buf, *bytes_read);
176
177 LOG_DEBUG_IO("(size=%d, buf=[%s]) -> %u", size, str,
178 *bytes_read);
179 free(str);
180 return ret;
181 }
182
183 static int ublast_buf_write(uint8_t *buf, int size, uint32_t *bytes_written)
184 {
185 int ret = info.drv->write(info.drv, buf, size, bytes_written);
186 char *str = hexdump(buf, *bytes_written);
187
188 LOG_DEBUG_IO("(size=%d, buf=[%s]) -> %u", size, str,
189 *bytes_written);
190 free(str);
191 return ret;
192 }
193
194 static int nb_buf_remaining(void)
195 {
196 return BUF_LEN - info.bufidx;
197 }
198
199 static void ublast_flush_buffer(void)
200 {
201 unsigned int retlen;
202 int nb = info.bufidx, ret = ERROR_OK;
203
204 while (ret == ERROR_OK && nb > 0) {
205 ret = ublast_buf_write(info.buf, nb, &retlen);
206 nb -= retlen;
207 }
208 info.bufidx = 0;
209 }
210
211 /*
212 * Actually, the USB-Blaster offers a byte-shift mode to transmit up to 504 data
213 * bits (bidirectional) in a single USB packet. A header byte has to be sent as
214 * the first byte in a packet with the following meaning:
215 *
216 * Bit 7 (0x80): Must be set to indicate byte-shift mode.
217 * Bit 6 (0x40): If set, the USB-Blaster will also read data, not just write.
218 * Bit 5..0: Define the number N of following bytes
219 *
220 * All N following bytes will then be clocked out serially on TDI. If Bit 6 was
221 * set, it will afterwards return N bytes with TDO data read while clocking out
222 * the TDI data. LSB of the first byte after the header byte will appear first
223 * on TDI.
224 */
225
226 /* Simple bit banging mode:
227 *
228 * Bit 7 (0x80): Must be zero (see byte-shift mode above)
229 * Bit 6 (0x40): If set, you will receive a byte indicating the state of TDO
230 * in return.
231 * Bit 5 (0x20): Output Enable/LED.
232 * Bit 4 (0x10): TDI Output.
233 * Bit 3 (0x08): nCS Output (not used in JTAG mode).
234 * Bit 2 (0x04): nCE Output (not used in JTAG mode).
235 * Bit 1 (0x02): TMS Output.
236 * Bit 0 (0x01): TCK Output.
237 *
238 * For transmitting a single data bit, you need to write two bytes (one for
239 * setting up TDI/TMS/TCK=0, and one to trigger TCK high with same TDI/TMS
240 * held). Up to 64 bytes can be combined in a single USB packet.
241 * It isn't possible to read a data without transmitting data.
242 */
243
244 #define TCK (1 << 0)
245 #define TMS (1 << 1)
246 #define NCE (1 << 2)
247 #define NCS (1 << 3)
248 #define TDI (1 << 4)
249 #define LED (1 << 5)
250 #define READ (1 << 6)
251 #define SHMODE (1 << 7)
252 #define READ_TDO (1 << 0)
253
254 /**
255 * ublast_queue_byte - queue one 'bitbang mode' byte for USB Blaster
256 * @abyte: the byte to queue
257 *
258 * Queues one byte in 'bitbang mode' to the USB Blaster. The byte is not
259 * actually sent, but stored in a buffer. The write is performed once
260 * the buffer is filled, or if an explicit ublast_flush_buffer() is called.
261 */
262 static void ublast_queue_byte(uint8_t abyte)
263 {
264 if (nb_buf_remaining() < 1)
265 ublast_flush_buffer();
266 info.buf[info.bufidx++] = abyte;
267 if (nb_buf_remaining() == 0)
268 ublast_flush_buffer();
269 LOG_DEBUG_IO("(byte=0x%02x)", abyte);
270 }
271
272 /**
273 * ublast_compute_pin - compute if gpio should be asserted
274 * @steer: control (ie. TRST driven, SRST driven, of fixed)
275 *
276 * Returns pin value (1 means driven high, 0 mean driven low)
277 */
278 bool ublast_compute_pin(enum gpio_steer steer)
279 {
280 switch (steer) {
281 case FIXED_0:
282 return 0;
283 case FIXED_1:
284 return 1;
285 case SRST:
286 return !info.srst_asserted;
287 case TRST:
288 return !info.trst_asserted;
289 default:
290 return 1;
291 }
292 }
293
294 /**
295 * ublast_build_out - build bitbang mode output byte
296 * @type: says if reading back TDO is required
297 *
298 * Returns the compute bitbang mode byte
299 */
300 static uint8_t ublast_build_out(enum scan_type type)
301 {
302 uint8_t abyte = 0;
303
304 abyte |= info.tms ? TMS : 0;
305 abyte |= ublast_compute_pin(info.pin6) ? NCE : 0;
306 abyte |= ublast_compute_pin(info.pin8) ? NCS : 0;
307 abyte |= info.tdi ? TDI : 0;
308 abyte |= LED;
309 if (type == SCAN_IN || type == SCAN_IO)
310 abyte |= READ;
311 return abyte;
312 }
313
314 /**
315 * ublast_reset - reset the JTAG device is possible
316 * @trst: 1 if TRST is to be asserted
317 * @srst: 1 if SRST is to be asserted
318 */
319 static void ublast_reset(int trst, int srst)
320 {
321 uint8_t out_value;
322
323 info.trst_asserted = trst;
324 info.srst_asserted = srst;
325 out_value = ublast_build_out(SCAN_OUT);
326 ublast_queue_byte(out_value);
327 ublast_flush_buffer();
328 }
329
330 /**
331 * ublast_clock_tms - clock a TMS transition
332 * @tms: the TMS to be sent
333 *
334 * Triggers a TMS transition (ie. one JTAG TAP state move).
335 */
336 static void ublast_clock_tms(int tms)
337 {
338 uint8_t out;
339
340 LOG_DEBUG_IO("(tms=%d)", !!tms);
341 info.tms = !!tms;
342 info.tdi = 0;
343 out = ublast_build_out(SCAN_OUT);
344 ublast_queue_byte(out);
345 ublast_queue_byte(out | TCK);
346 }
347
348 /**
349 * ublast_idle_clock - put back TCK to low level
350 *
351 * See ublast_queue_tdi() comment for the usage of this function.
352 */
353 static void ublast_idle_clock(void)
354 {
355 uint8_t out = ublast_build_out(SCAN_OUT);
356
357 LOG_DEBUG_IO(".");
358 ublast_queue_byte(out);
359 }
360
361 /**
362 * ublast_clock_tdi - Output a TDI with bitbang mode
363 * @tdi: the TDI bit to be shifted out
364 * @type: scan type (ie. does a readback of TDO is required)
365 *
366 * Output a TDI bit and assert clock to push it into the JTAG device :
367 * - writing out TCK=0, TMS=<old_state>=0, TDI=<tdi>
368 * - writing out TCK=1, TMS=<new_state>, TDI=<tdi> which triggers the JTAG
369 * device aquiring the data.
370 *
371 * If a TDO is to be read back, the required read is requested (bitbang mode),
372 * and the USB Blaster will send back a byte with bit0 reprensenting the TDO.
373 */
374 static void ublast_clock_tdi(int tdi, enum scan_type type)
375 {
376 uint8_t out;
377
378 LOG_DEBUG_IO("(tdi=%d)", !!tdi);
379 info.tdi = !!tdi;
380
381 out = ublast_build_out(SCAN_OUT);
382 ublast_queue_byte(out);
383
384 out = ublast_build_out(type);
385 ublast_queue_byte(out | TCK);
386 }
387
388 /**
389 * ublast_clock_tdi_flip_tms - Output a TDI with bitbang mode, change JTAG state
390 * @tdi: the TDI bit to be shifted out
391 * @type: scan type (ie. does a readback of TDO is required)
392 *
393 * This function is the same as ublast_clock_tdi(), but it changes also the TMS
394 * while outputing the TDI. This should be the last TDI output of a TDI
395 * sequence, which will change state from :
396 * - IRSHIFT -> IREXIT1
397 * - or DRSHIFT -> DREXIT1
398 */
399 static void ublast_clock_tdi_flip_tms(int tdi, enum scan_type type)
400 {
401 uint8_t out;
402
403 LOG_DEBUG_IO("(tdi=%d)", !!tdi);
404 info.tdi = !!tdi;
405 info.tms = !info.tms;
406
407 out = ublast_build_out(SCAN_OUT);
408 ublast_queue_byte(out);
409
410 out = ublast_build_out(type);
411 ublast_queue_byte(out | TCK);
412
413 out = ublast_build_out(SCAN_OUT);
414 ublast_queue_byte(out);
415 }
416
417 /**
418 * ublast_queue_bytes - queue bytes for the USB Blaster
419 * @bytes: byte array
420 * @nb_bytes: number of bytes
421 *
422 * Queues bytes to be sent to the USB Blaster. The bytes are not
423 * actually sent, but stored in a buffer. The write is performed once
424 * the buffer is filled, or if an explicit ublast_flush_buffer() is called.
425 */
426 static void ublast_queue_bytes(uint8_t *bytes, int nb_bytes)
427 {
428 if (info.bufidx + nb_bytes > BUF_LEN) {
429 LOG_ERROR("buggy code, should never queue more that %d bytes",
430 info.bufidx + nb_bytes);
431 exit(-1);
432 }
433 LOG_DEBUG_IO("(nb_bytes=%d, bytes=[0x%02x, ...])", nb_bytes,
434 bytes ? bytes[0] : 0);
435 if (bytes)
436 memcpy(&info.buf[info.bufidx], bytes, nb_bytes);
437 else
438 memset(&info.buf[info.bufidx], 0, nb_bytes);
439 info.bufidx += nb_bytes;
440 if (nb_buf_remaining() == 0)
441 ublast_flush_buffer();
442 }
443
444 /**
445 * ublast_tms_seq - write a TMS sequence transition to JTAG
446 * @bits: TMS bits to be written (bit0, bit1 .. bitN)
447 * @nb_bits: number of TMS bits (between 1 and 8)
448 * @skip: number of TMS bits to skip at the beginning of the series
449 *
450 * Write a serie of TMS transitions, where each transition consists in :
451 * - writing out TCK=0, TMS=<new_state>, TDI=<???>
452 * - writing out TCK=1, TMS=<new_state>, TDI=<???> which triggers the transition
453 * The function ensures that at the end of the sequence, the clock (TCK) is put
454 * low.
455 */
456 static void ublast_tms_seq(const uint8_t *bits, int nb_bits, int skip)
457 {
458 int i;
459
460 LOG_DEBUG_IO("(bits=%02x..., nb_bits=%d)", bits[0], nb_bits);
461 for (i = skip; i < nb_bits; i++)
462 ublast_clock_tms((bits[i / 8] >> (i % 8)) & 0x01);
463 ublast_idle_clock();
464 }
465
466 /**
467 * ublast_tms - write a tms command
468 * @cmd: tms command
469 */
470 static void ublast_tms(struct tms_command *cmd)
471 {
472 LOG_DEBUG_IO("(num_bits=%d)", cmd->num_bits);
473 ublast_tms_seq(cmd->bits, cmd->num_bits, 0);
474 }
475
476 /**
477 * ublast_path_move - write a TMS sequence transition to JTAG
478 * @cmd: path transition
479 *
480 * Write a serie of TMS transitions, where each transition consists in :
481 * - writing out TCK=0, TMS=<new_state>, TDI=<???>
482 * - writing out TCK=1, TMS=<new_state>, TDI=<???> which triggers the transition
483 * The function ensures that at the end of the sequence, the clock (TCK) is put
484 * low.
485 */
486 static void ublast_path_move(struct pathmove_command *cmd)
487 {
488 int i;
489
490 LOG_DEBUG_IO("(num_states=%d, last_state=%d)",
491 cmd->num_states, cmd->path[cmd->num_states - 1]);
492 for (i = 0; i < cmd->num_states; i++) {
493 if (tap_state_transition(tap_get_state(), false) == cmd->path[i])
494 ublast_clock_tms(0);
495 if (tap_state_transition(tap_get_state(), true) == cmd->path[i])
496 ublast_clock_tms(1);
497 tap_set_state(cmd->path[i]);
498 }
499 ublast_idle_clock();
500 }
501
502 /**
503 * ublast_state_move - move JTAG state to the target state
504 * @state: the target state
505 * @skip: number of bits to skip at the beginning of the path
506 *
507 * Input the correct TMS sequence to the JTAG TAP so that we end up in the
508 * target state. This assumes the current state (tap_get_state()) is correct.
509 */
510 static void ublast_state_move(tap_state_t state, int skip)
511 {
512 uint8_t tms_scan;
513 int tms_len;
514
515 LOG_DEBUG_IO("(from %s to %s)", tap_state_name(tap_get_state()),
516 tap_state_name(state));
517 if (tap_get_state() == state)
518 return;
519 tms_scan = tap_get_tms_path(tap_get_state(), state);
520 tms_len = tap_get_tms_path_len(tap_get_state(), state);
521 ublast_tms_seq(&tms_scan, tms_len, skip);
522 tap_set_state(state);
523 }
524
525 /**
526 * ublast_read_byteshifted_tdos - read TDO of byteshift writes
527 * @buf: the buffer to store the bits
528 * @nb_bits: the number of bits
529 *
530 * Reads back from USB Blaster TDO bits, triggered by a 'byteshift write', ie. eight
531 * bits per received byte from USB interface, and store them in buffer.
532 *
533 * As the USB blaster stores the TDO bits in LSB (ie. first bit in (byte0,
534 * bit0), second bit in (byte0, bit1), ...), which is what we want to return,
535 * simply read bytes from USB interface and store them.
536 *
537 * Returns ERROR_OK if OK, ERROR_xxx if a read error occured
538 */
539 static int ublast_read_byteshifted_tdos(uint8_t *buf, int nb_bytes)
540 {
541 unsigned int retlen;
542 int ret = ERROR_OK;
543
544 LOG_DEBUG_IO("%s(buf=%p, num_bits=%d)", __func__, buf, nb_bytes * 8);
545 ublast_flush_buffer();
546 while (ret == ERROR_OK && nb_bytes > 0) {
547 ret = ublast_buf_read(buf, nb_bytes, &retlen);
548 nb_bytes -= retlen;
549 }
550 return ret;
551 }
552
553 /**
554 * ublast_read_bitbang_tdos - read TDO of bitbang writes
555 * @buf: the buffer to store the bits
556 * @nb_bits: the number of bits
557 *
558 * Reads back from USB Blaster TDO bits, triggered by a 'bitbang write', ie. one
559 * bit per received byte from USB interface, and store them in buffer, where :
560 * - first bit is stored in byte0, bit0 (LSB)
561 * - second bit is stored in byte0, bit 1
562 * ...
563 * - eight bit is sotred in byte0, bit 7
564 * - ninth bit is sotred in byte1, bit 0
565 * - etc ...
566 *
567 * Returns ERROR_OK if OK, ERROR_xxx if a read error occured
568 */
569 static int ublast_read_bitbang_tdos(uint8_t *buf, int nb_bits)
570 {
571 int nb1 = nb_bits;
572 int i, ret = ERROR_OK;
573 unsigned int retlen;
574 uint8_t tmp[8];
575
576 LOG_DEBUG_IO("%s(buf=%p, num_bits=%d)", __func__, buf, nb_bits);
577
578 /*
579 * Ensure all previous bitbang writes were issued to the dongle, so that
580 * it returns back the read values.
581 */
582 ublast_flush_buffer();
583
584 ret = ublast_buf_read(tmp, nb1, &retlen);
585 for (i = 0; ret == ERROR_OK && i < nb1; i++)
586 if (tmp[i] & READ_TDO)
587 *buf |= (1 << i);
588 else
589 *buf &= ~(1 << i);
590 return ret;
591 }
592
593 /**
594 * ublast_queue_tdi - short description
595 * @bits: bits to be queued on TDI (or NULL if 0 are to be queued)
596 * @nb_bits: number of bits
597 * @scan: scan type (ie. if TDO read back is required or not)
598 *
599 * Outputs a serie of TDI bits on TDI.
600 * As a side effect, the last TDI bit is sent along a TMS=1, and triggers a JTAG
601 * TAP state shift if input bits were non NULL.
602 *
603 * In order to not saturate the USB Blaster queues, this method reads back TDO
604 * if the scan type requests it, and stores them back in bits.
605 *
606 * As a side note, the state of TCK when entering this function *must* be
607 * low. This is because byteshift mode outputs TDI on rising TCK and reads TDO
608 * on falling TCK if and only if TCK is low before queuing byteshift mode bytes.
609 * If TCK was high, the USB blaster will queue TDI on falling edge, and read TDO
610 * on rising edge !!!
611 */
612 static void ublast_queue_tdi(uint8_t *bits, int nb_bits, enum scan_type scan)
613 {
614 int nb8 = nb_bits / 8;
615 int nb1 = nb_bits % 8;
616 int nbfree_in_packet, i, trans = 0, read_tdos;
617 uint8_t *tdos = calloc(1, nb_bits / 8 + 1);
618 static uint8_t byte0[BUF_LEN];
619
620 /*
621 * As the last TDI bit should always be output in bitbang mode in order
622 * to activate the TMS=1 transition to EXIT_?R state. Therefore a
623 * situation where nb_bits is a multiple of 8 is handled as follows:
624 * - the number of TDI shifted out in "byteshift mode" is 8 less than
625 * nb_bits
626 * - nb1 = 8
627 * This ensures that nb1 is never 0, and allows the TMS transition.
628 */
629 if (nb8 > 0 && nb1 == 0) {
630 nb8--;
631 nb1 = 8;
632 }
633
634 read_tdos = (scan == SCAN_IN || scan == SCAN_IO);
635 for (i = 0; i < nb8; i += trans) {
636 /*
637 * Calculate number of bytes to fill USB packet of size MAX_PACKET_SIZE
638 */
639 nbfree_in_packet = (MAX_PACKET_SIZE - (info.bufidx%MAX_PACKET_SIZE));
640 trans = MIN(nbfree_in_packet - 1, nb8 - i);
641
642 /*
643 * Queue a byte-shift mode transmission, with as many bytes as
644 * is possible with regard to :
645 * - current filling level of write buffer
646 * - remaining bytes to write in byte-shift mode
647 */
648 if (read_tdos)
649 ublast_queue_byte(SHMODE | READ | trans);
650 else
651 ublast_queue_byte(SHMODE | trans);
652 if (bits)
653 ublast_queue_bytes(&bits[i], trans);
654 else
655 ublast_queue_bytes(byte0, trans);
656 if (read_tdos) {
657 if (info.flags & COPY_TDO_BUFFER)
658 ublast_queue_byte(CMD_COPY_TDO_BUFFER);
659 ublast_read_byteshifted_tdos(&tdos[i], trans);
660 }
661 }
662
663 /*
664 * Queue the remaining TDI bits in bitbang mode.
665 */
666 for (i = 0; i < nb1; i++) {
667 int tdi = bits ? bits[nb8 + i / 8] & (1 << i) : 0;
668 if (bits && i == nb1 - 1)
669 ublast_clock_tdi_flip_tms(tdi, scan);
670 else
671 ublast_clock_tdi(tdi, scan);
672 }
673 if (nb1 && read_tdos) {
674 if (info.flags & COPY_TDO_BUFFER)
675 ublast_queue_byte(CMD_COPY_TDO_BUFFER);
676 ublast_read_bitbang_tdos(&tdos[nb8], nb1);
677 }
678
679 if (bits)
680 memcpy(bits, tdos, DIV_ROUND_UP(nb_bits, 8));
681 free(tdos);
682
683 /*
684 * Ensure clock is in lower state
685 */
686 ublast_idle_clock();
687 }
688
689 static void ublast_runtest(int cycles, tap_state_t state)
690 {
691 LOG_DEBUG_IO("%s(cycles=%i, end_state=%d)", __func__, cycles, state);
692
693 ublast_state_move(TAP_IDLE, 0);
694 ublast_queue_tdi(NULL, cycles, SCAN_OUT);
695 ublast_state_move(state, 0);
696 }
697
698 static void ublast_stableclocks(int cycles)
699 {
700 LOG_DEBUG_IO("%s(cycles=%i)", __func__, cycles);
701 ublast_queue_tdi(NULL, cycles, SCAN_OUT);
702 }
703
704 /**
705 * ublast_scan - launches a DR-scan or IR-scan
706 * @cmd: the command to launch
707 *
708 * Launch a JTAG IR-scan or DR-scan
709 *
710 * Returns ERROR_OK if OK, ERROR_xxx if a read/write error occured.
711 */
712 static int ublast_scan(struct scan_command *cmd)
713 {
714 int scan_bits;
715 uint8_t *buf = NULL;
716 enum scan_type type;
717 int ret = ERROR_OK;
718 static const char * const type2str[] = { "", "SCAN_IN", "SCAN_OUT", "SCAN_IO" };
719 char *log_buf = NULL;
720
721 type = jtag_scan_type(cmd);
722 scan_bits = jtag_build_buffer(cmd, &buf);
723
724 if (cmd->ir_scan)
725 ublast_state_move(TAP_IRSHIFT, 0);
726 else
727 ublast_state_move(TAP_DRSHIFT, 0);
728
729 log_buf = hexdump(buf, DIV_ROUND_UP(scan_bits, 8));
730 LOG_DEBUG_IO("%s(scan=%s, type=%s, bits=%d, buf=[%s], end_state=%d)", __func__,
731 cmd->ir_scan ? "IRSCAN" : "DRSCAN",
732 type2str[type],
733 scan_bits, log_buf, cmd->end_state);
734 free(log_buf);
735
736 ublast_queue_tdi(buf, scan_bits, type);
737
738 ret = jtag_read_buffer(buf, cmd);
739 if (buf)
740 free(buf);
741 /*
742 * ublast_queue_tdi sends the last bit with TMS=1. We are therefore
743 * already in Exit1-DR/IR and have to skip the first step on our way
744 * to end_state.
745 */
746 ublast_state_move(cmd->end_state, 1);
747 return ret;
748 }
749
750 static void ublast_usleep(int us)
751 {
752 LOG_DEBUG_IO("%s(us=%d)", __func__, us);
753 jtag_sleep(us);
754 }
755
756 static void ublast_initial_wipeout(void)
757 {
758 static uint8_t tms_reset = 0xff;
759 uint8_t out_value;
760 uint32_t retlen;
761 int i;
762
763 out_value = ublast_build_out(SCAN_OUT);
764 for (i = 0; i < BUF_LEN; i++)
765 info.buf[i] = out_value | ((i % 2) ? TCK : 0);
766
767 /*
768 * Flush USB-Blaster queue fifos
769 * - empty the write FIFO (128 bytes)
770 * - empty the read FIFO (384 bytes)
771 */
772 ublast_buf_write(info.buf, BUF_LEN, &retlen);
773 /*
774 * Put JTAG in RESET state (five 1 on TMS)
775 */
776 ublast_tms_seq(&tms_reset, 5, 0);
777 tap_set_state(TAP_RESET);
778 }
779
780 static int ublast_execute_queue(void)
781 {
782 struct jtag_command *cmd;
783 static int first_call = 1;
784 int ret = ERROR_OK;
785
786 if (first_call) {
787 first_call--;
788 ublast_initial_wipeout();
789 }
790
791 for (cmd = jtag_command_queue; ret == ERROR_OK && cmd != NULL;
792 cmd = cmd->next) {
793 switch (cmd->type) {
794 case JTAG_RESET:
795 ublast_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
796 break;
797 case JTAG_RUNTEST:
798 ublast_runtest(cmd->cmd.runtest->num_cycles,
799 cmd->cmd.runtest->end_state);
800 break;
801 case JTAG_STABLECLOCKS:
802 ublast_stableclocks(cmd->cmd.stableclocks->num_cycles);
803 break;
804 case JTAG_TLR_RESET:
805 ublast_state_move(cmd->cmd.statemove->end_state, 0);
806 break;
807 case JTAG_PATHMOVE:
808 ublast_path_move(cmd->cmd.pathmove);
809 break;
810 case JTAG_TMS:
811 ublast_tms(cmd->cmd.tms);
812 break;
813 case JTAG_SLEEP:
814 ublast_usleep(cmd->cmd.sleep->us);
815 break;
816 case JTAG_SCAN:
817 ret = ublast_scan(cmd->cmd.scan);
818 break;
819 }
820 }
821
822 ublast_flush_buffer();
823 return ret;
824 }
825
826 /**
827 * ublast_init - Initialize the Altera device
828 *
829 * Initialize the device :
830 * - open the USB device
831 * - pretend it's initialized while actual init is delayed until first jtag command
832 *
833 * Returns ERROR_OK if USB device found, error if not.
834 */
835 static int ublast_init(void)
836 {
837 int ret, i;
838
839 for (i = 0; lowlevel_drivers_map[i].name; i++) {
840 if (info.lowlevel_name) {
841 if (!strcmp(lowlevel_drivers_map[i].name, info.lowlevel_name)) {
842 info.drv = lowlevel_drivers_map[i].drv_register();
843 if (!info.drv) {
844 LOG_ERROR("Error registering lowlevel driver \"%s\"",
845 info.lowlevel_name);
846 return ERROR_JTAG_DEVICE_ERROR;
847 }
848 break;
849 }
850 } else {
851 info.drv = lowlevel_drivers_map[i].drv_register();
852 if (info.drv) {
853 info.lowlevel_name = strdup(lowlevel_drivers_map[i].name);
854 LOG_INFO("No lowlevel driver configured, using %s", info.lowlevel_name);
855 break;
856 }
857 }
858 }
859
860 if (!info.drv) {
861 LOG_ERROR("No lowlevel driver available");
862 return ERROR_JTAG_DEVICE_ERROR;
863 }
864
865 /*
866 * Register the lowlevel driver
867 */
868 info.drv->ublast_vid = info.ublast_vid;
869 info.drv->ublast_pid = info.ublast_pid;
870 info.drv->ublast_vid_uninit = info.ublast_vid_uninit;
871 info.drv->ublast_pid_uninit = info.ublast_pid_uninit;
872 info.drv->ublast_device_desc = info.ublast_device_desc;
873 info.drv->firmware_path = info.firmware_path;
874
875 info.flags |= info.drv->flags;
876
877 ret = info.drv->open(info.drv);
878
879 /*
880 * Let lie here : the TAP is in an unknown state, but the first
881 * execute_queue() will trigger a ublast_initial_wipeout(), which will
882 * put the TAP in RESET.
883 */
884 tap_set_state(TAP_RESET);
885 return ret;
886 }
887
888 /**
889 * ublast_quit - Release the Altera device
890 *
891 * Releases the device :
892 * - put the device pins in 'high impedance' mode
893 * - close the USB device
894 *
895 * Returns always ERROR_OK
896 */
897 static int ublast_quit(void)
898 {
899 uint8_t byte0 = 0;
900 unsigned int retlen;
901
902 ublast_buf_write(&byte0, 1, &retlen);
903 return info.drv->close(info.drv);
904 }
905
906 COMMAND_HANDLER(ublast_handle_device_desc_command)
907 {
908 if (CMD_ARGC != 1)
909 return ERROR_COMMAND_SYNTAX_ERROR;
910
911 info.ublast_device_desc = strdup(CMD_ARGV[0]);
912
913 return ERROR_OK;
914 }
915
916 COMMAND_HANDLER(ublast_handle_vid_pid_command)
917 {
918 if (CMD_ARGC > 4) {
919 LOG_WARNING("ignoring extra IDs in ublast_vid_pid "
920 "(maximum is 2 pairs)");
921 CMD_ARGC = 4;
922 }
923
924 if (CMD_ARGC >= 2) {
925 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], info.ublast_vid);
926 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[1], info.ublast_pid);
927 } else {
928 LOG_WARNING("incomplete ublast_vid_pid configuration");
929 }
930
931 if (CMD_ARGC == 4) {
932 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[2], info.ublast_vid_uninit);
933 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[3], info.ublast_pid_uninit);
934 } else {
935 LOG_WARNING("incomplete ublast_vid_pid configuration");
936 }
937
938 return ERROR_OK;
939 }
940
941 COMMAND_HANDLER(ublast_handle_pin_command)
942 {
943 uint8_t out_value;
944 const char * const pin_name = CMD_ARGV[0];
945 enum gpio_steer *steer = NULL;
946 static const char * const pin_val_str[] = {
947 [FIXED_0] = "0",
948 [FIXED_1] = "1",
949 [SRST] = "SRST driven",
950 [TRST] = "TRST driven",
951 };
952
953 if (CMD_ARGC > 2) {
954 LOG_ERROR("%s takes exactly one or two arguments", CMD_NAME);
955 return ERROR_COMMAND_SYNTAX_ERROR;
956 }
957
958 if (!strcmp(pin_name, "pin6"))
959 steer = &info.pin6;
960 if (!strcmp(pin_name, "pin8"))
961 steer = &info.pin8;
962 if (!steer) {
963 LOG_ERROR("%s: pin name must be \"pin6\" or \"pin8\"",
964 CMD_NAME);
965 return ERROR_COMMAND_SYNTAX_ERROR;
966 }
967
968 if (CMD_ARGC == 1) {
969 LOG_INFO("%s: %s is set as %s\n", CMD_NAME, pin_name,
970 pin_val_str[*steer]);
971 }
972
973 if (CMD_ARGC == 2) {
974 const char * const pin_value = CMD_ARGV[1];
975 char val = pin_value[0];
976
977 if (strlen(pin_value) > 1)
978 val = '?';
979 switch (tolower((unsigned char)val)) {
980 case '0':
981 *steer = FIXED_0;
982 break;
983 case '1':
984 *steer = FIXED_1;
985 break;
986 case 't':
987 *steer = TRST;
988 break;
989 case 's':
990 *steer = SRST;
991 break;
992 default:
993 LOG_ERROR("%s: pin value must be 0, 1, s (SRST) or t (TRST)",
994 pin_value);
995 return ERROR_COMMAND_SYNTAX_ERROR;
996 }
997
998 if (info.drv) {
999 out_value = ublast_build_out(SCAN_OUT);
1000 ublast_queue_byte(out_value);
1001 ublast_flush_buffer();
1002 }
1003 }
1004 return ERROR_OK;
1005 }
1006
1007 COMMAND_HANDLER(ublast_handle_lowlevel_drv_command)
1008 {
1009 if (CMD_ARGC != 1)
1010 return ERROR_COMMAND_SYNTAX_ERROR;
1011
1012 info.lowlevel_name = strdup(CMD_ARGV[0]);
1013
1014 return ERROR_OK;
1015 }
1016
1017 COMMAND_HANDLER(ublast_firmware_command)
1018 {
1019 if (CMD_ARGC != 1)
1020 return ERROR_COMMAND_SYNTAX_ERROR;
1021
1022 info.firmware_path = strdup(CMD_ARGV[0]);
1023
1024 return ERROR_OK;
1025 }
1026
1027
1028 static const struct command_registration ublast_command_handlers[] = {
1029 {
1030 .name = "usb_blaster_device_desc",
1031 .handler = ublast_handle_device_desc_command,
1032 .mode = COMMAND_CONFIG,
1033 .help = "set the USB device description of the USB-Blaster",
1034 .usage = "description-string",
1035 },
1036 {
1037 .name = "usb_blaster_vid_pid",
1038 .handler = ublast_handle_vid_pid_command,
1039 .mode = COMMAND_CONFIG,
1040 .help = "the vendor ID and product ID of the USB-Blaster and " \
1041 "vendor ID and product ID of the uninitialized device " \
1042 "for USB-Blaster II",
1043 .usage = "vid pid vid_uninit pid_uninit",
1044 },
1045 {
1046 .name = "usb_blaster_lowlevel_driver",
1047 .handler = ublast_handle_lowlevel_drv_command,
1048 .mode = COMMAND_CONFIG,
1049 .help = "set the lowlevel access for the USB Blaster (ftdi, ublast2)",
1050 .usage = "(ftdi|ublast2)",
1051 },
1052 {
1053 .name = "usb_blaster_pin",
1054 .handler = ublast_handle_pin_command,
1055 .mode = COMMAND_ANY,
1056 .help = "show or set pin state for the unused GPIO pins",
1057 .usage = "(pin6|pin8) (0|1|s|t)",
1058 },
1059 {
1060 .name = "usb_blaster_firmware",
1061 .handler = &ublast_firmware_command,
1062 .mode = COMMAND_CONFIG,
1063 .help = "configure the USB-Blaster II firmware location",
1064 .usage = "path/to/blaster_xxxx.hex",
1065 },
1066 COMMAND_REGISTRATION_DONE
1067 };
1068
1069 struct jtag_interface usb_blaster_interface = {
1070 .name = "usb_blaster",
1071 .transports = jtag_only,
1072 .commands = ublast_command_handlers,
1073 .supported = DEBUG_CAP_TMS_SEQ,
1074
1075 .execute_queue = ublast_execute_queue,
1076 .init = ublast_init,
1077 .quit = ublast_quit,
1078 };

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)