]> git.sur5r.net Git - openocd/blob - src/jtag/drivers/ftdi.c
ftdi: allow selecting device by usb bus location
[openocd] / src / jtag / drivers / ftdi.c
1 /**************************************************************************
2 *   Copyright (C) 2012 by Andreas Fritiofson                              *
3 *   andreas.fritiofson@gmail.com                                          *
4 *                                                                         *
5 *   This program is free software; you can redistribute it and/or modify  *
6 *   it under the terms of the GNU General Public License as published by  *
7 *   the Free Software Foundation; either version 2 of the License, or     *
8 *   (at your option) any later version.                                   *
9 *                                                                         *
10 *   This program is distributed in the hope that it will be useful,       *
11 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13 *   GNU General Public License for more details.                          *
14 *                                                                         *
15 *   You should have received a copy of the GNU General Public License     *
16 *   along with this program; if not, write to the                         *
17 *   Free Software Foundation, Inc.,                                       *
18 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
19 ***************************************************************************/
20
21 /**
22  * @file
23  * JTAG adapters based on the FT2232 full and high speed USB parts are
24  * popular low cost JTAG debug solutions.  Many FT2232 based JTAG adapters
25  * are discrete, but development boards may integrate them as alternatives
26  * to more capable (and expensive) third party JTAG pods.
27  *
28  * JTAG uses only one of the two communications channels ("MPSSE engines")
29  * on these devices.  Adapters based on FT4232 parts have four ports/channels
30  * (A/B/C/D), instead of just two (A/B).
31  *
32  * Especially on development boards integrating one of these chips (as
33  * opposed to discrete pods/dongles), the additional channels can be used
34  * for a variety of purposes, but OpenOCD only uses one channel at a time.
35  *
36  *  - As a USB-to-serial adapter for the target's console UART ...
37  *    which may be able to support ROM boot loaders that load initial
38  *    firmware images to flash (or SRAM).
39  *
40  *  - On systems which support ARM's SWD in addition to JTAG, or instead
41  *    of it, that second port can be used for reading SWV/SWO trace data.
42  *
43  *  - Additional JTAG links, e.g. to a CPLD or * FPGA.
44  *
45  * FT2232 based JTAG adapters are "dumb" not "smart", because most JTAG
46  * request/response interactions involve round trips over the USB link.
47  * A "smart" JTAG adapter has intelligence close to the scan chain, so it
48  * can for example poll quickly for a status change (usually taking on the
49  * order of microseconds not milliseconds) before beginning a queued
50  * transaction which require the previous one to have completed.
51  *
52  * There are dozens of adapters of this type, differing in details which
53  * this driver needs to understand.  Those "layout" details are required
54  * as part of FT2232 driver configuration.
55  *
56  * This code uses information contained in the MPSSE specification which was
57  * found here:
58  * http://www.ftdichip.com/Documents/AppNotes/AN2232C-01_MPSSE_Cmnd.pdf
59  * Hereafter this is called the "MPSSE Spec".
60  *
61  * The datasheet for the ftdichip.com's FT2232D part is here:
62  * http://www.ftdichip.com/Documents/DataSheets/DS_FT2232D.pdf
63  *
64  * Also note the issue with code 0x4b (clock data to TMS) noted in
65  * http://developer.intra2net.com/mailarchive/html/libftdi/2009/msg00292.html
66  * which can affect longer JTAG state paths.
67  */
68
69 #ifdef HAVE_CONFIG_H
70 #include "config.h"
71 #endif
72
73 /* project specific includes */
74 #include <jtag/interface.h>
75 #include <jtag/swd.h>
76 #include <transport/transport.h>
77 #include <helper/time_support.h>
78
79 #if IS_CYGWIN == 1
80 #include <windows.h>
81 #endif
82
83 #include <assert.h>
84
85 /* FTDI access library includes */
86 #include "mpsse.h"
87
88 #define JTAG_MODE (LSB_FIRST | POS_EDGE_IN | NEG_EDGE_OUT)
89 #define JTAG_MODE_ALT (LSB_FIRST | NEG_EDGE_IN | NEG_EDGE_OUT)
90 #define SWD_MODE (LSB_FIRST | POS_EDGE_IN | NEG_EDGE_OUT)
91
92 static char *ftdi_device_desc;
93 static char *ftdi_serial;
94 static char *ftdi_location;
95 static uint8_t ftdi_channel;
96 static uint8_t ftdi_jtag_mode = JTAG_MODE;
97
98 static bool swd_mode;
99
100 #define MAX_USB_IDS 8
101 /* vid = pid = 0 marks the end of the list */
102 static uint16_t ftdi_vid[MAX_USB_IDS + 1] = { 0 };
103 static uint16_t ftdi_pid[MAX_USB_IDS + 1] = { 0 };
104
105 static struct mpsse_ctx *mpsse_ctx;
106
107 struct signal {
108         const char *name;
109         uint16_t data_mask;
110         uint16_t oe_mask;
111         bool invert_data;
112         bool invert_oe;
113         struct signal *next;
114 };
115
116 static struct signal *signals;
117
118 /* FIXME: Where to store per-instance data? We need an SWD context. */
119 static struct swd_cmd_queue_entry {
120         uint8_t cmd;
121         uint32_t *dst;
122         uint8_t trn_ack_data_parity_trn[DIV_ROUND_UP(4 + 3 + 32 + 1 + 4, 8)];
123 } *swd_cmd_queue;
124 static size_t swd_cmd_queue_length;
125 static size_t swd_cmd_queue_alloced;
126 static int queued_retval;
127 static int freq;
128
129 static uint16_t output;
130 static uint16_t direction;
131 static uint16_t jtag_output_init;
132 static uint16_t jtag_direction_init;
133
134 static int ftdi_swd_switch_seq(enum swd_special_seq seq);
135
136 static struct signal *find_signal_by_name(const char *name)
137 {
138         for (struct signal *sig = signals; sig; sig = sig->next) {
139                 if (strcmp(name, sig->name) == 0)
140                         return sig;
141         }
142         return NULL;
143 }
144
145 static struct signal *create_signal(const char *name)
146 {
147         struct signal **psig = &signals;
148         while (*psig)
149                 psig = &(*psig)->next;
150
151         *psig = calloc(1, sizeof(**psig));
152         if (*psig == NULL)
153                 return NULL;
154
155         (*psig)->name = strdup(name);
156         if ((*psig)->name == NULL) {
157                 free(*psig);
158                 *psig = NULL;
159         }
160         return *psig;
161 }
162
163 static int ftdi_set_signal(const struct signal *s, char value)
164 {
165         bool data;
166         bool oe;
167
168         if (s->data_mask == 0 && s->oe_mask == 0) {
169                 LOG_ERROR("interface doesn't provide signal '%s'", s->name);
170                 return ERROR_FAIL;
171         }
172         switch (value) {
173         case '0':
174                 data = s->invert_data;
175                 oe = !s->invert_oe;
176                 break;
177         case '1':
178                 if (s->data_mask == 0) {
179                         LOG_ERROR("interface can't drive '%s' high", s->name);
180                         return ERROR_FAIL;
181                 }
182                 data = !s->invert_data;
183                 oe = !s->invert_oe;
184                 break;
185         case 'z':
186         case 'Z':
187                 if (s->oe_mask == 0) {
188                         LOG_ERROR("interface can't tri-state '%s'", s->name);
189                         return ERROR_FAIL;
190                 }
191                 data = s->invert_data;
192                 oe = s->invert_oe;
193                 break;
194         default:
195                 assert(0 && "invalid signal level specifier");
196                 return ERROR_FAIL;
197         }
198
199         uint16_t old_output = output;
200         uint16_t old_direction = direction;
201
202         output = data ? output | s->data_mask : output & ~s->data_mask;
203         if (s->oe_mask == s->data_mask)
204                 direction = oe ? direction | s->oe_mask : direction & ~s->oe_mask;
205         else
206                 output = oe ? output | s->oe_mask : output & ~s->oe_mask;
207
208         if ((output & 0xff) != (old_output & 0xff) || (direction & 0xff) != (old_direction & 0xff))
209                 mpsse_set_data_bits_low_byte(mpsse_ctx, output & 0xff, direction & 0xff);
210         if ((output >> 8 != old_output >> 8) || (direction >> 8 != old_direction >> 8))
211                 mpsse_set_data_bits_high_byte(mpsse_ctx, output >> 8, direction >> 8);
212
213         return ERROR_OK;
214 }
215
216
217 /**
218  * Function move_to_state
219  * moves the TAP controller from the current state to a
220  * \a goal_state through a path given by tap_get_tms_path().  State transition
221  * logging is performed by delegation to clock_tms().
222  *
223  * @param goal_state is the destination state for the move.
224  */
225 static void move_to_state(tap_state_t goal_state)
226 {
227         tap_state_t start_state = tap_get_state();
228
229         /*      goal_state is 1/2 of a tuple/pair of states which allow convenient
230                 lookup of the required TMS pattern to move to this state from the
231                 start state.
232         */
233
234         /* do the 2 lookups */
235         uint8_t tms_bits  = tap_get_tms_path(start_state, goal_state);
236         int tms_count = tap_get_tms_path_len(start_state, goal_state);
237         assert(tms_count <= 8);
238
239         DEBUG_JTAG_IO("start=%s goal=%s", tap_state_name(start_state), tap_state_name(goal_state));
240
241         /* Track state transitions step by step */
242         for (int i = 0; i < tms_count; i++)
243                 tap_set_state(tap_state_transition(tap_get_state(), (tms_bits >> i) & 1));
244
245         mpsse_clock_tms_cs_out(mpsse_ctx,
246                 &tms_bits,
247                 0,
248                 tms_count,
249                 false,
250                 ftdi_jtag_mode);
251 }
252
253 static int ftdi_speed(int speed)
254 {
255         int retval;
256         retval = mpsse_set_frequency(mpsse_ctx, speed);
257
258         if (retval < 0) {
259                 LOG_ERROR("couldn't set FTDI TCK speed");
260                 return retval;
261         }
262
263         if (!swd_mode && speed >= 10000000 && ftdi_jtag_mode != JTAG_MODE_ALT)
264                 LOG_INFO("ftdi: if you experience problems at higher adapter clocks, try "
265                          "the command \"ftdi_tdo_sample_edge falling\"");
266         return ERROR_OK;
267 }
268
269 static int ftdi_speed_div(int speed, int *khz)
270 {
271         *khz = speed / 1000;
272         return ERROR_OK;
273 }
274
275 static int ftdi_khz(int khz, int *jtag_speed)
276 {
277         if (khz == 0 && !mpsse_is_high_speed(mpsse_ctx)) {
278                 LOG_DEBUG("RCLK not supported");
279                 return ERROR_FAIL;
280         }
281
282         *jtag_speed = khz * 1000;
283         return ERROR_OK;
284 }
285
286 static void ftdi_end_state(tap_state_t state)
287 {
288         if (tap_is_state_stable(state))
289                 tap_set_end_state(state);
290         else {
291                 LOG_ERROR("BUG: %s is not a stable end state", tap_state_name(state));
292                 exit(-1);
293         }
294 }
295
296 static void ftdi_execute_runtest(struct jtag_command *cmd)
297 {
298         int i;
299         uint8_t zero = 0;
300
301         DEBUG_JTAG_IO("runtest %i cycles, end in %s",
302                 cmd->cmd.runtest->num_cycles,
303                 tap_state_name(cmd->cmd.runtest->end_state));
304
305         if (tap_get_state() != TAP_IDLE)
306                 move_to_state(TAP_IDLE);
307
308         /* TODO: Reuse ftdi_execute_stableclocks */
309         i = cmd->cmd.runtest->num_cycles;
310         while (i > 0) {
311                 /* there are no state transitions in this code, so omit state tracking */
312                 unsigned this_len = i > 7 ? 7 : i;
313                 mpsse_clock_tms_cs_out(mpsse_ctx, &zero, 0, this_len, false, ftdi_jtag_mode);
314                 i -= this_len;
315         }
316
317         ftdi_end_state(cmd->cmd.runtest->end_state);
318
319         if (tap_get_state() != tap_get_end_state())
320                 move_to_state(tap_get_end_state());
321
322         DEBUG_JTAG_IO("runtest: %i, end in %s",
323                 cmd->cmd.runtest->num_cycles,
324                 tap_state_name(tap_get_end_state()));
325 }
326
327 static void ftdi_execute_statemove(struct jtag_command *cmd)
328 {
329         DEBUG_JTAG_IO("statemove end in %s",
330                 tap_state_name(cmd->cmd.statemove->end_state));
331
332         ftdi_end_state(cmd->cmd.statemove->end_state);
333
334         /* shortest-path move to desired end state */
335         if (tap_get_state() != tap_get_end_state() || tap_get_end_state() == TAP_RESET)
336                 move_to_state(tap_get_end_state());
337 }
338
339 /**
340  * Clock a bunch of TMS (or SWDIO) transitions, to change the JTAG
341  * (or SWD) state machine. REVISIT: Not the best method, perhaps.
342  */
343 static void ftdi_execute_tms(struct jtag_command *cmd)
344 {
345         DEBUG_JTAG_IO("TMS: %d bits", cmd->cmd.tms->num_bits);
346
347         /* TODO: Missing tap state tracking, also missing from ft2232.c! */
348         mpsse_clock_tms_cs_out(mpsse_ctx,
349                 cmd->cmd.tms->bits,
350                 0,
351                 cmd->cmd.tms->num_bits,
352                 false,
353                 ftdi_jtag_mode);
354 }
355
356 static void ftdi_execute_pathmove(struct jtag_command *cmd)
357 {
358         tap_state_t *path = cmd->cmd.pathmove->path;
359         int num_states  = cmd->cmd.pathmove->num_states;
360
361         DEBUG_JTAG_IO("pathmove: %i states, current: %s  end: %s", num_states,
362                 tap_state_name(tap_get_state()),
363                 tap_state_name(path[num_states-1]));
364
365         int state_count = 0;
366         unsigned bit_count = 0;
367         uint8_t tms_byte = 0;
368
369         DEBUG_JTAG_IO("-");
370
371         /* this loop verifies that the path is legal and logs each state in the path */
372         while (num_states--) {
373
374                 /* either TMS=0 or TMS=1 must work ... */
375                 if (tap_state_transition(tap_get_state(), false)
376                     == path[state_count])
377                         buf_set_u32(&tms_byte, bit_count++, 1, 0x0);
378                 else if (tap_state_transition(tap_get_state(), true)
379                          == path[state_count]) {
380                         buf_set_u32(&tms_byte, bit_count++, 1, 0x1);
381
382                         /* ... or else the caller goofed BADLY */
383                 } else {
384                         LOG_ERROR("BUG: %s -> %s isn't a valid "
385                                 "TAP state transition",
386                                 tap_state_name(tap_get_state()),
387                                 tap_state_name(path[state_count]));
388                         exit(-1);
389                 }
390
391                 tap_set_state(path[state_count]);
392                 state_count++;
393
394                 if (bit_count == 7 || num_states == 0) {
395                         mpsse_clock_tms_cs_out(mpsse_ctx,
396                                         &tms_byte,
397                                         0,
398                                         bit_count,
399                                         false,
400                                         ftdi_jtag_mode);
401                         bit_count = 0;
402                 }
403         }
404         tap_set_end_state(tap_get_state());
405 }
406
407 static void ftdi_execute_scan(struct jtag_command *cmd)
408 {
409         DEBUG_JTAG_IO("%s type:%d", cmd->cmd.scan->ir_scan ? "IRSCAN" : "DRSCAN",
410                 jtag_scan_type(cmd->cmd.scan));
411
412         /* Make sure there are no trailing fields with num_bits == 0, or the logic below will fail. */
413         while (cmd->cmd.scan->num_fields > 0
414                         && cmd->cmd.scan->fields[cmd->cmd.scan->num_fields - 1].num_bits == 0) {
415                 cmd->cmd.scan->num_fields--;
416                 LOG_DEBUG("discarding trailing empty field");
417         }
418
419         if (cmd->cmd.scan->num_fields == 0) {
420                 LOG_DEBUG("empty scan, doing nothing");
421                 return;
422         }
423
424         if (cmd->cmd.scan->ir_scan) {
425                 if (tap_get_state() != TAP_IRSHIFT)
426                         move_to_state(TAP_IRSHIFT);
427         } else {
428                 if (tap_get_state() != TAP_DRSHIFT)
429                         move_to_state(TAP_DRSHIFT);
430         }
431
432         ftdi_end_state(cmd->cmd.scan->end_state);
433
434         struct scan_field *field = cmd->cmd.scan->fields;
435         unsigned scan_size = 0;
436
437         for (int i = 0; i < cmd->cmd.scan->num_fields; i++, field++) {
438                 scan_size += field->num_bits;
439                 DEBUG_JTAG_IO("%s%s field %d/%d %d bits",
440                         field->in_value ? "in" : "",
441                         field->out_value ? "out" : "",
442                         i,
443                         cmd->cmd.scan->num_fields,
444                         field->num_bits);
445
446                 if (i == cmd->cmd.scan->num_fields - 1 && tap_get_state() != tap_get_end_state()) {
447                         /* Last field, and we're leaving IRSHIFT/DRSHIFT. Clock last bit during tap
448                          * movement. This last field can't have length zero, it was checked above. */
449                         mpsse_clock_data(mpsse_ctx,
450                                 field->out_value,
451                                 0,
452                                 field->in_value,
453                                 0,
454                                 field->num_bits - 1,
455                                 ftdi_jtag_mode);
456                         uint8_t last_bit = 0;
457                         if (field->out_value)
458                                 bit_copy(&last_bit, 0, field->out_value, field->num_bits - 1, 1);
459                         uint8_t tms_bits = 0x01;
460                         mpsse_clock_tms_cs(mpsse_ctx,
461                                         &tms_bits,
462                                         0,
463                                         field->in_value,
464                                         field->num_bits - 1,
465                                         1,
466                                         last_bit,
467                                         ftdi_jtag_mode);
468                         tap_set_state(tap_state_transition(tap_get_state(), 1));
469                         mpsse_clock_tms_cs_out(mpsse_ctx,
470                                         &tms_bits,
471                                         1,
472                                         1,
473                                         last_bit,
474                                         ftdi_jtag_mode);
475                         tap_set_state(tap_state_transition(tap_get_state(), 0));
476                 } else
477                         mpsse_clock_data(mpsse_ctx,
478                                 field->out_value,
479                                 0,
480                                 field->in_value,
481                                 0,
482                                 field->num_bits,
483                                 ftdi_jtag_mode);
484         }
485
486         if (tap_get_state() != tap_get_end_state())
487                 move_to_state(tap_get_end_state());
488
489         DEBUG_JTAG_IO("%s scan, %i bits, end in %s",
490                 (cmd->cmd.scan->ir_scan) ? "IR" : "DR", scan_size,
491                 tap_state_name(tap_get_end_state()));
492 }
493
494 static void ftdi_execute_reset(struct jtag_command *cmd)
495 {
496         DEBUG_JTAG_IO("reset trst: %i srst %i",
497                 cmd->cmd.reset->trst, cmd->cmd.reset->srst);
498
499         if (cmd->cmd.reset->trst == 1
500             || (cmd->cmd.reset->srst
501                 && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
502                 tap_set_state(TAP_RESET);
503
504         struct signal *trst = find_signal_by_name("nTRST");
505         if (cmd->cmd.reset->trst == 1) {
506                 if (trst)
507                         ftdi_set_signal(trst, '0');
508                 else
509                         LOG_ERROR("Can't assert TRST: nTRST signal is not defined");
510         } else if (trst && jtag_get_reset_config() & RESET_HAS_TRST &&
511                         cmd->cmd.reset->trst == 0) {
512                 if (jtag_get_reset_config() & RESET_TRST_OPEN_DRAIN)
513                         ftdi_set_signal(trst, 'z');
514                 else
515                         ftdi_set_signal(trst, '1');
516         }
517
518         struct signal *srst = find_signal_by_name("nSRST");
519         if (cmd->cmd.reset->srst == 1) {
520                 if (srst)
521                         ftdi_set_signal(srst, '0');
522                 else
523                         LOG_ERROR("Can't assert SRST: nSRST signal is not defined");
524         } else if (srst && jtag_get_reset_config() & RESET_HAS_SRST &&
525                         cmd->cmd.reset->srst == 0) {
526                 if (jtag_get_reset_config() & RESET_SRST_PUSH_PULL)
527                         ftdi_set_signal(srst, '1');
528                 else
529                         ftdi_set_signal(srst, 'z');
530         }
531
532         DEBUG_JTAG_IO("trst: %i, srst: %i",
533                 cmd->cmd.reset->trst, cmd->cmd.reset->srst);
534 }
535
536 static void ftdi_execute_sleep(struct jtag_command *cmd)
537 {
538         DEBUG_JTAG_IO("sleep %" PRIi32, cmd->cmd.sleep->us);
539
540         mpsse_flush(mpsse_ctx);
541         jtag_sleep(cmd->cmd.sleep->us);
542         DEBUG_JTAG_IO("sleep %" PRIi32 " usec while in %s",
543                 cmd->cmd.sleep->us,
544                 tap_state_name(tap_get_state()));
545 }
546
547 static void ftdi_execute_stableclocks(struct jtag_command *cmd)
548 {
549         /* this is only allowed while in a stable state.  A check for a stable
550          * state was done in jtag_add_clocks()
551          */
552         int num_cycles = cmd->cmd.stableclocks->num_cycles;
553
554         /* 7 bits of either ones or zeros. */
555         uint8_t tms = tap_get_state() == TAP_RESET ? 0x7f : 0x00;
556
557         /* TODO: Use mpsse_clock_data with in=out=0 for this, if TMS can be set to
558          * the correct level and remain there during the scan */
559         while (num_cycles > 0) {
560                 /* there are no state transitions in this code, so omit state tracking */
561                 unsigned this_len = num_cycles > 7 ? 7 : num_cycles;
562                 mpsse_clock_tms_cs_out(mpsse_ctx, &tms, 0, this_len, false, ftdi_jtag_mode);
563                 num_cycles -= this_len;
564         }
565
566         DEBUG_JTAG_IO("clocks %i while in %s",
567                 cmd->cmd.stableclocks->num_cycles,
568                 tap_state_name(tap_get_state()));
569 }
570
571 static void ftdi_execute_command(struct jtag_command *cmd)
572 {
573         switch (cmd->type) {
574                 case JTAG_RESET:
575                         ftdi_execute_reset(cmd);
576                         break;
577                 case JTAG_RUNTEST:
578                         ftdi_execute_runtest(cmd);
579                         break;
580                 case JTAG_TLR_RESET:
581                         ftdi_execute_statemove(cmd);
582                         break;
583                 case JTAG_PATHMOVE:
584                         ftdi_execute_pathmove(cmd);
585                         break;
586                 case JTAG_SCAN:
587                         ftdi_execute_scan(cmd);
588                         break;
589                 case JTAG_SLEEP:
590                         ftdi_execute_sleep(cmd);
591                         break;
592                 case JTAG_STABLECLOCKS:
593                         ftdi_execute_stableclocks(cmd);
594                         break;
595                 case JTAG_TMS:
596                         ftdi_execute_tms(cmd);
597                         break;
598                 default:
599                         LOG_ERROR("BUG: unknown JTAG command type encountered: %d", cmd->type);
600                         break;
601         }
602 }
603
604 static int ftdi_execute_queue(void)
605 {
606         /* blink, if the current layout has that feature */
607         struct signal *led = find_signal_by_name("LED");
608         if (led)
609                 ftdi_set_signal(led, '1');
610
611         for (struct jtag_command *cmd = jtag_command_queue; cmd; cmd = cmd->next) {
612                 /* fill the write buffer with the desired command */
613                 ftdi_execute_command(cmd);
614         }
615
616         if (led)
617                 ftdi_set_signal(led, '0');
618
619         int retval = mpsse_flush(mpsse_ctx);
620         if (retval != ERROR_OK)
621                 LOG_ERROR("error while flushing MPSSE queue: %d", retval);
622
623         return retval;
624 }
625
626 static int ftdi_initialize(void)
627 {
628         if (tap_get_tms_path_len(TAP_IRPAUSE, TAP_IRPAUSE) == 7)
629                 LOG_DEBUG("ftdi interface using 7 step jtag state transitions");
630         else
631                 LOG_DEBUG("ftdi interface using shortest path jtag state transitions");
632
633         for (int i = 0; ftdi_vid[i] || ftdi_pid[i]; i++) {
634                 mpsse_ctx = mpsse_open(&ftdi_vid[i], &ftdi_pid[i], ftdi_device_desc,
635                                 ftdi_serial, ftdi_location, ftdi_channel);
636                 if (mpsse_ctx)
637                         break;
638         }
639
640         if (!mpsse_ctx)
641                 return ERROR_JTAG_INIT_FAILED;
642
643         output = jtag_output_init;
644         direction = jtag_direction_init;
645
646         if (swd_mode) {
647                 struct signal *sig = find_signal_by_name("SWD_EN");
648                 if (!sig) {
649                         LOG_ERROR("SWD mode is active but SWD_EN signal is not defined");
650                         return ERROR_JTAG_INIT_FAILED;
651                 }
652                 /* A dummy SWD_EN would have zero mask */
653                 if (sig->data_mask)
654                         ftdi_set_signal(sig, '1');
655         }
656
657         mpsse_set_data_bits_low_byte(mpsse_ctx, output & 0xff, direction & 0xff);
658         mpsse_set_data_bits_high_byte(mpsse_ctx, output >> 8, direction >> 8);
659
660         mpsse_loopback_config(mpsse_ctx, false);
661
662         freq = mpsse_set_frequency(mpsse_ctx, jtag_get_speed_khz() * 1000);
663
664         return mpsse_flush(mpsse_ctx);
665 }
666
667 static int ftdi_quit(void)
668 {
669         mpsse_close(mpsse_ctx);
670
671         free(swd_cmd_queue);
672
673         return ERROR_OK;
674 }
675
676 COMMAND_HANDLER(ftdi_handle_device_desc_command)
677 {
678         if (CMD_ARGC == 1) {
679                 if (ftdi_device_desc)
680                         free(ftdi_device_desc);
681                 ftdi_device_desc = strdup(CMD_ARGV[0]);
682         } else {
683                 LOG_ERROR("expected exactly one argument to ftdi_device_desc <description>");
684         }
685
686         return ERROR_OK;
687 }
688
689 COMMAND_HANDLER(ftdi_handle_serial_command)
690 {
691         if (CMD_ARGC == 1) {
692                 if (ftdi_serial)
693                         free(ftdi_serial);
694                 ftdi_serial = strdup(CMD_ARGV[0]);
695         } else {
696                 return ERROR_COMMAND_SYNTAX_ERROR;
697         }
698
699         return ERROR_OK;
700 }
701
702 COMMAND_HANDLER(ftdi_handle_location_command)
703 {
704         if (CMD_ARGC == 1) {
705                 if (ftdi_location)
706                         free(ftdi_location);
707                 ftdi_location = strdup(CMD_ARGV[0]);
708         } else {
709                 return ERROR_COMMAND_SYNTAX_ERROR;
710         }
711
712         return ERROR_OK;
713 }
714
715 COMMAND_HANDLER(ftdi_handle_channel_command)
716 {
717         if (CMD_ARGC == 1)
718                 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[0], ftdi_channel);
719         else
720                 return ERROR_COMMAND_SYNTAX_ERROR;
721
722         return ERROR_OK;
723 }
724
725 COMMAND_HANDLER(ftdi_handle_layout_init_command)
726 {
727         if (CMD_ARGC != 2)
728                 return ERROR_COMMAND_SYNTAX_ERROR;
729
730         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], jtag_output_init);
731         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[1], jtag_direction_init);
732
733         return ERROR_OK;
734 }
735
736 COMMAND_HANDLER(ftdi_handle_layout_signal_command)
737 {
738         if (CMD_ARGC < 1)
739                 return ERROR_COMMAND_SYNTAX_ERROR;
740
741         bool invert_data = false;
742         uint16_t data_mask = 0;
743         bool invert_oe = false;
744         uint16_t oe_mask = 0;
745         for (unsigned i = 1; i < CMD_ARGC; i += 2) {
746                 if (strcmp("-data", CMD_ARGV[i]) == 0) {
747                         invert_data = false;
748                         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], data_mask);
749                 } else if (strcmp("-ndata", CMD_ARGV[i]) == 0) {
750                         invert_data = true;
751                         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], data_mask);
752                 } else if (strcmp("-oe", CMD_ARGV[i]) == 0) {
753                         invert_oe = false;
754                         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], oe_mask);
755                 } else if (strcmp("-noe", CMD_ARGV[i]) == 0) {
756                         invert_oe = true;
757                         COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], oe_mask);
758                 } else if (!strcmp("-alias", CMD_ARGV[i]) ||
759                            !strcmp("-nalias", CMD_ARGV[i])) {
760                         if (!strcmp("-nalias", CMD_ARGV[i]))
761                                 invert_data = true;
762                         struct signal *sig = find_signal_by_name(CMD_ARGV[i + 1]);
763                         if (!sig) {
764                                 LOG_ERROR("signal %s is not defined", CMD_ARGV[i + 1]);
765                                 return ERROR_FAIL;
766                         }
767                         data_mask = sig->data_mask;
768                         oe_mask = sig->oe_mask;
769                         invert_oe = sig->invert_oe;
770                         invert_data ^= sig->invert_data;
771                 } else {
772                         LOG_ERROR("unknown option '%s'", CMD_ARGV[i]);
773                         return ERROR_COMMAND_SYNTAX_ERROR;
774                 }
775         }
776
777         struct signal *sig;
778         sig = find_signal_by_name(CMD_ARGV[0]);
779         if (!sig)
780                 sig = create_signal(CMD_ARGV[0]);
781         if (!sig) {
782                 LOG_ERROR("failed to create signal %s", CMD_ARGV[0]);
783                 return ERROR_FAIL;
784         }
785
786         sig->invert_data = invert_data;
787         sig->data_mask = data_mask;
788         sig->invert_oe = invert_oe;
789         sig->oe_mask = oe_mask;
790
791         return ERROR_OK;
792 }
793
794 COMMAND_HANDLER(ftdi_handle_set_signal_command)
795 {
796         if (CMD_ARGC < 2)
797                 return ERROR_COMMAND_SYNTAX_ERROR;
798
799         struct signal *sig;
800         sig = find_signal_by_name(CMD_ARGV[0]);
801         if (!sig) {
802                 LOG_ERROR("interface configuration doesn't define signal '%s'", CMD_ARGV[0]);
803                 return ERROR_FAIL;
804         }
805
806         switch (*CMD_ARGV[1]) {
807         case '0':
808         case '1':
809         case 'z':
810         case 'Z':
811                 /* single character level specifier only */
812                 if (CMD_ARGV[1][1] == '\0') {
813                         ftdi_set_signal(sig, *CMD_ARGV[1]);
814                         break;
815                 }
816         default:
817                 LOG_ERROR("unknown signal level '%s', use 0, 1 or z", CMD_ARGV[1]);
818                 return ERROR_COMMAND_SYNTAX_ERROR;
819         }
820
821         return mpsse_flush(mpsse_ctx);
822 }
823
824 COMMAND_HANDLER(ftdi_handle_vid_pid_command)
825 {
826         if (CMD_ARGC > MAX_USB_IDS * 2) {
827                 LOG_WARNING("ignoring extra IDs in ftdi_vid_pid "
828                         "(maximum is %d pairs)", MAX_USB_IDS);
829                 CMD_ARGC = MAX_USB_IDS * 2;
830         }
831         if (CMD_ARGC < 2 || (CMD_ARGC & 1)) {
832                 LOG_WARNING("incomplete ftdi_vid_pid configuration directive");
833                 if (CMD_ARGC < 2)
834                         return ERROR_COMMAND_SYNTAX_ERROR;
835                 /* remove the incomplete trailing id */
836                 CMD_ARGC -= 1;
837         }
838
839         unsigned i;
840         for (i = 0; i < CMD_ARGC; i += 2) {
841                 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i], ftdi_vid[i >> 1]);
842                 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], ftdi_pid[i >> 1]);
843         }
844
845         /*
846          * Explicitly terminate, in case there are multiples instances of
847          * ftdi_vid_pid.
848          */
849         ftdi_vid[i >> 1] = ftdi_pid[i >> 1] = 0;
850
851         return ERROR_OK;
852 }
853
854 COMMAND_HANDLER(ftdi_handle_tdo_sample_edge_command)
855 {
856         Jim_Nvp *n;
857         static const Jim_Nvp nvp_ftdi_jtag_modes[] = {
858                 { .name = "rising", .value = JTAG_MODE },
859                 { .name = "falling", .value = JTAG_MODE_ALT },
860                 { .name = NULL, .value = -1 },
861         };
862
863         if (CMD_ARGC > 0) {
864                 n = Jim_Nvp_name2value_simple(nvp_ftdi_jtag_modes, CMD_ARGV[0]);
865                 if (n->name == NULL)
866                         return ERROR_COMMAND_SYNTAX_ERROR;
867                 ftdi_jtag_mode = n->value;
868
869         }
870
871         n = Jim_Nvp_value2name_simple(nvp_ftdi_jtag_modes, ftdi_jtag_mode);
872         command_print(CMD_CTX, "ftdi samples TDO on %s edge of TCK", n->name);
873
874         return ERROR_OK;
875 }
876
877 static const struct command_registration ftdi_command_handlers[] = {
878         {
879                 .name = "ftdi_device_desc",
880                 .handler = &ftdi_handle_device_desc_command,
881                 .mode = COMMAND_CONFIG,
882                 .help = "set the USB device description of the FTDI device",
883                 .usage = "description_string",
884         },
885         {
886                 .name = "ftdi_serial",
887                 .handler = &ftdi_handle_serial_command,
888                 .mode = COMMAND_CONFIG,
889                 .help = "set the serial number of the FTDI device",
890                 .usage = "serial_string",
891         },
892         {
893                 .name = "ftdi_location",
894                 .handler = &ftdi_handle_location_command,
895                 .mode = COMMAND_CONFIG,
896                 .help = "set the USB bus location of the FTDI device",
897                 .usage = "<bus>:port[,port]...",
898         },
899         {
900                 .name = "ftdi_channel",
901                 .handler = &ftdi_handle_channel_command,
902                 .mode = COMMAND_CONFIG,
903                 .help = "set the channel of the FTDI device that is used as JTAG",
904                 .usage = "(0-3)",
905         },
906         {
907                 .name = "ftdi_layout_init",
908                 .handler = &ftdi_handle_layout_init_command,
909                 .mode = COMMAND_CONFIG,
910                 .help = "initialize the FTDI GPIO signals used "
911                         "to control output-enables and reset signals",
912                 .usage = "data direction",
913         },
914         {
915                 .name = "ftdi_layout_signal",
916                 .handler = &ftdi_handle_layout_signal_command,
917                 .mode = COMMAND_ANY,
918                 .help = "define a signal controlled by one or more FTDI GPIO as data "
919                         "and/or output enable",
920                 .usage = "name [-data mask|-ndata mask] [-oe mask|-noe mask] [-alias|-nalias name]",
921         },
922         {
923                 .name = "ftdi_set_signal",
924                 .handler = &ftdi_handle_set_signal_command,
925                 .mode = COMMAND_EXEC,
926                 .help = "control a layout-specific signal",
927                 .usage = "name (1|0|z)",
928         },
929         {
930                 .name = "ftdi_vid_pid",
931                 .handler = &ftdi_handle_vid_pid_command,
932                 .mode = COMMAND_CONFIG,
933                 .help = "the vendor ID and product ID of the FTDI device",
934                 .usage = "(vid pid)* ",
935         },
936         {
937                 .name = "ftdi_tdo_sample_edge",
938                 .handler = &ftdi_handle_tdo_sample_edge_command,
939                 .mode = COMMAND_ANY,
940                 .help = "set which TCK clock edge is used for sampling TDO "
941                         "- default is rising-edge (Setting to falling-edge may "
942                         "allow signalling speed increase)",
943                 .usage = "(rising|falling)",
944         },
945         COMMAND_REGISTRATION_DONE
946 };
947
948 static int create_default_signal(const char *name, uint16_t data_mask)
949 {
950         struct signal *sig = create_signal(name);
951         if (!sig) {
952                 LOG_ERROR("failed to create signal %s", name);
953                 return ERROR_FAIL;
954         }
955         sig->invert_data = false;
956         sig->data_mask = data_mask;
957         sig->invert_oe = false;
958         sig->oe_mask = 0;
959
960         return ERROR_OK;
961 }
962
963 static int create_signals(void)
964 {
965         if (create_default_signal("TCK", 0x01) != ERROR_OK)
966                 return ERROR_FAIL;
967         if (create_default_signal("TDI", 0x02) != ERROR_OK)
968                 return ERROR_FAIL;
969         if (create_default_signal("TDO", 0x04) != ERROR_OK)
970                 return ERROR_FAIL;
971         if (create_default_signal("TMS", 0x08) != ERROR_OK)
972                 return ERROR_FAIL;
973         return ERROR_OK;
974 }
975
976 static int ftdi_swd_init(void)
977 {
978         LOG_INFO("FTDI SWD mode enabled");
979         swd_mode = true;
980
981         if (create_signals() != ERROR_OK)
982                 return ERROR_FAIL;
983
984         swd_cmd_queue_alloced = 10;
985         swd_cmd_queue = malloc(swd_cmd_queue_alloced * sizeof(*swd_cmd_queue));
986
987         return swd_cmd_queue != NULL ? ERROR_OK : ERROR_FAIL;
988 }
989
990 static void ftdi_swd_swdio_en(bool enable)
991 {
992         struct signal *oe = find_signal_by_name("SWDIO_OE");
993         if (oe)
994                 ftdi_set_signal(oe, enable ? '1' : '0');
995 }
996
997 /**
998  * Flush the MPSSE queue and process the SWD transaction queue
999  * @param dap
1000  * @return
1001  */
1002 static int ftdi_swd_run_queue(void)
1003 {
1004         LOG_DEBUG("Executing %zu queued transactions", swd_cmd_queue_length);
1005         int retval;
1006         struct signal *led = find_signal_by_name("LED");
1007
1008         if (queued_retval != ERROR_OK) {
1009                 LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
1010                 goto skip;
1011         }
1012
1013         /* A transaction must be followed by another transaction or at least 8 idle cycles to
1014          * ensure that data is clocked through the AP. */
1015         mpsse_clock_data_out(mpsse_ctx, NULL, 0, 8, SWD_MODE);
1016
1017         /* Terminate the "blink", if the current layout has that feature */
1018         if (led)
1019                 ftdi_set_signal(led, '0');
1020
1021         queued_retval = mpsse_flush(mpsse_ctx);
1022         if (queued_retval != ERROR_OK) {
1023                 LOG_ERROR("MPSSE failed");
1024                 goto skip;
1025         }
1026
1027         for (size_t i = 0; i < swd_cmd_queue_length; i++) {
1028                 int ack = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1, 3);
1029
1030                 LOG_DEBUG("%s %s %s reg %X = %08"PRIx32,
1031                                 ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK",
1032                                 swd_cmd_queue[i].cmd & SWD_CMD_APnDP ? "AP" : "DP",
1033                                 swd_cmd_queue[i].cmd & SWD_CMD_RnW ? "read" : "write",
1034                                 (swd_cmd_queue[i].cmd & SWD_CMD_A32) >> 1,
1035                                 buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn,
1036                                                 1 + 3 + (swd_cmd_queue[i].cmd & SWD_CMD_RnW ? 0 : 1), 32));
1037
1038                 if (ack != SWD_ACK_OK) {
1039                         queued_retval = ack == SWD_ACK_WAIT ? ERROR_WAIT : ERROR_FAIL;
1040                         goto skip;
1041
1042                 } else if (swd_cmd_queue[i].cmd & SWD_CMD_RnW) {
1043                         uint32_t data = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1 + 3, 32);
1044                         int parity = buf_get_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1 + 3 + 32, 1);
1045
1046                         if (parity != parity_u32(data)) {
1047                                 LOG_ERROR("SWD Read data parity mismatch");
1048                                 queued_retval = ERROR_FAIL;
1049                                 goto skip;
1050                         }
1051
1052                         if (swd_cmd_queue[i].dst != NULL)
1053                                 *swd_cmd_queue[i].dst = data;
1054                 }
1055         }
1056
1057 skip:
1058         swd_cmd_queue_length = 0;
1059         retval = queued_retval;
1060         queued_retval = ERROR_OK;
1061
1062         /* Queue a new "blink" */
1063         if (led && retval == ERROR_OK)
1064                 ftdi_set_signal(led, '1');
1065
1066         return retval;
1067 }
1068
1069 static void ftdi_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data, uint32_t ap_delay_clk)
1070 {
1071         if (swd_cmd_queue_length >= swd_cmd_queue_alloced) {
1072                 /* Not enough room in the queue. Run the queue and increase its size for next time.
1073                  * Note that it's not possible to avoid running the queue here, because mpsse contains
1074                  * pointers into the queue which may be invalid after the realloc. */
1075                 queued_retval = ftdi_swd_run_queue();
1076                 struct swd_cmd_queue_entry *q = realloc(swd_cmd_queue, swd_cmd_queue_alloced * 2 * sizeof(*swd_cmd_queue));
1077                 if (q != NULL) {
1078                         swd_cmd_queue = q;
1079                         swd_cmd_queue_alloced *= 2;
1080                         LOG_DEBUG("Increased SWD command queue to %zu elements", swd_cmd_queue_alloced);
1081                 }
1082         }
1083
1084         if (queued_retval != ERROR_OK)
1085                 return;
1086
1087         size_t i = swd_cmd_queue_length++;
1088         swd_cmd_queue[i].cmd = cmd | SWD_CMD_START | SWD_CMD_PARK;
1089
1090         mpsse_clock_data_out(mpsse_ctx, &swd_cmd_queue[i].cmd, 0, 8, SWD_MODE);
1091
1092         if (swd_cmd_queue[i].cmd & SWD_CMD_RnW) {
1093                 /* Queue a read transaction */
1094                 swd_cmd_queue[i].dst = dst;
1095
1096                 ftdi_swd_swdio_en(false);
1097                 mpsse_clock_data_in(mpsse_ctx, swd_cmd_queue[i].trn_ack_data_parity_trn,
1098                                 0, 1 + 3 + 32 + 1 + 1, SWD_MODE);
1099                 ftdi_swd_swdio_en(true);
1100         } else {
1101                 /* Queue a write transaction */
1102                 ftdi_swd_swdio_en(false);
1103
1104                 mpsse_clock_data_in(mpsse_ctx, swd_cmd_queue[i].trn_ack_data_parity_trn,
1105                                 0, 1 + 3 + 1, SWD_MODE);
1106
1107                 ftdi_swd_swdio_en(true);
1108
1109                 buf_set_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1 + 3 + 1, 32, data);
1110                 buf_set_u32(swd_cmd_queue[i].trn_ack_data_parity_trn, 1 + 3 + 1 + 32, 1, parity_u32(data));
1111
1112                 mpsse_clock_data_out(mpsse_ctx, swd_cmd_queue[i].trn_ack_data_parity_trn,
1113                                 1 + 3 + 1, 32 + 1, SWD_MODE);
1114         }
1115
1116         /* Insert idle cycles after AP accesses to avoid WAIT */
1117         if (cmd & SWD_CMD_APnDP)
1118                 mpsse_clock_data_out(mpsse_ctx, NULL, 0, ap_delay_clk, SWD_MODE);
1119
1120 }
1121
1122 static void ftdi_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
1123 {
1124         assert(cmd & SWD_CMD_RnW);
1125         ftdi_swd_queue_cmd(cmd, value, 0, ap_delay_clk);
1126 }
1127
1128 static void ftdi_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
1129 {
1130         assert(!(cmd & SWD_CMD_RnW));
1131         ftdi_swd_queue_cmd(cmd, NULL, value, ap_delay_clk);
1132 }
1133
1134 static int_least32_t ftdi_swd_frequency(int_least32_t hz)
1135 {
1136         if (hz > 0)
1137                 freq = mpsse_set_frequency(mpsse_ctx, hz);
1138
1139         return freq;
1140 }
1141
1142 static int ftdi_swd_switch_seq(enum swd_special_seq seq)
1143 {
1144         switch (seq) {
1145         case LINE_RESET:
1146                 LOG_DEBUG("SWD line reset");
1147                 mpsse_clock_data_out(mpsse_ctx, swd_seq_line_reset, 0, swd_seq_line_reset_len, SWD_MODE);
1148                 break;
1149         case JTAG_TO_SWD:
1150                 LOG_DEBUG("JTAG-to-SWD");
1151                 mpsse_clock_data_out(mpsse_ctx, swd_seq_jtag_to_swd, 0, swd_seq_jtag_to_swd_len, SWD_MODE);
1152                 break;
1153         case SWD_TO_JTAG:
1154                 LOG_DEBUG("SWD-to-JTAG");
1155                 mpsse_clock_data_out(mpsse_ctx, swd_seq_swd_to_jtag, 0, swd_seq_swd_to_jtag_len, SWD_MODE);
1156                 break;
1157         default:
1158                 LOG_ERROR("Sequence %d not supported", seq);
1159                 return ERROR_FAIL;
1160         }
1161
1162         return ERROR_OK;
1163 }
1164
1165 static const struct swd_driver ftdi_swd = {
1166         .init = ftdi_swd_init,
1167         .frequency = ftdi_swd_frequency,
1168         .switch_seq = ftdi_swd_switch_seq,
1169         .read_reg = ftdi_swd_read_reg,
1170         .write_reg = ftdi_swd_write_reg,
1171         .run = ftdi_swd_run_queue,
1172 };
1173
1174 static const char * const ftdi_transports[] = { "jtag", "swd", NULL };
1175
1176 struct jtag_interface ftdi_interface = {
1177         .name = "ftdi",
1178         .supported = DEBUG_CAP_TMS_SEQ,
1179         .commands = ftdi_command_handlers,
1180         .transports = ftdi_transports,
1181         .swd = &ftdi_swd,
1182
1183         .init = ftdi_initialize,
1184         .quit = ftdi_quit,
1185         .speed = ftdi_speed,
1186         .speed_div = ftdi_speed_div,
1187         .khz = ftdi_khz,
1188         .execute_queue = ftdi_execute_queue,
1189 };