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

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)