openocd: src/jtag: replace the GPL-2.0-or-later license tag
[fw/openocd] / src / jtag / drivers / cmsis_dap.c
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /***************************************************************************
4  *   Copyright (C) 2021 by Adrian Negreanu                                 *
5  *   groleo@gmail.com                                                      *
6  *                                                                         *
7  *   Copyright (C) 2018 by MickaĆ«l Thomas                                  *
8  *   mickael9@gmail.com                                                    *
9  *                                                                         *
10  *   Copyright (C) 2016 by Maksym Hilliaka                                 *
11  *   oter@frozen-team.com                                                  *
12  *                                                                         *
13  *   Copyright (C) 2016 by Phillip Pearson                                 *
14  *   pp@myelin.co.nz                                                       *
15  *                                                                         *
16  *   Copyright (C) 2014 by Paul Fertser                                    *
17  *   fercerpav@gmail.com                                                   *
18  *                                                                         *
19  *   Copyright (C) 2013 by mike brown                                      *
20  *   mike@theshedworks.org.uk                                              *
21  *                                                                         *
22  *   Copyright (C) 2013 by Spencer Oliver                                  *
23  *   spen@spen-soft.co.uk                                                  *
24  ***************************************************************************/
25
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29
30 #include <transport/transport.h>
31 #include "helper/replacements.h"
32 #include <jtag/adapter.h>
33 #include <jtag/swd.h>
34 #include <jtag/interface.h>
35 #include <jtag/commands.h>
36 #include <jtag/tcl.h>
37 #include <target/cortex_m.h>
38
39 #include "cmsis_dap.h"
40 #include "libusb_helper.h"
41
42 static const struct cmsis_dap_backend *const cmsis_dap_backends[] = {
43 #if BUILD_CMSIS_DAP_USB == 1
44         &cmsis_dap_usb_backend,
45 #endif
46
47 #if BUILD_CMSIS_DAP_HID == 1
48         &cmsis_dap_hid_backend,
49 #endif
50 };
51
52 /* USB Config */
53
54 /* Known vid/pid pairs:
55  * VID 0xc251: Keil Software
56  * PID 0xf001: LPC-Link-II CMSIS_DAP
57  * PID 0xf002: OPEN-SDA CMSIS_DAP (Freedom Board)
58  * PID 0x2722: Keil ULINK2 CMSIS-DAP
59  * PID 0x2750: Keil ULINKplus CMSIS-DAP
60  *
61  * VID 0x0d28: mbed Software
62  * PID 0x0204: MBED CMSIS-DAP
63  */
64
65 #define MAX_USB_IDS 8
66 /* vid = pid = 0 marks the end of the list */
67 static uint16_t cmsis_dap_vid[MAX_USB_IDS + 1] = { 0 };
68 static uint16_t cmsis_dap_pid[MAX_USB_IDS + 1] = { 0 };
69 static int cmsis_dap_backend = -1;
70 static bool swd_mode;
71
72 /* CMSIS-DAP General Commands */
73 #define CMD_DAP_INFO              0x00
74 #define CMD_DAP_LED               0x01
75 #define CMD_DAP_CONNECT           0x02
76 #define CMD_DAP_DISCONNECT        0x03
77 #define CMD_DAP_WRITE_ABORT       0x08
78 #define CMD_DAP_DELAY             0x09
79 #define CMD_DAP_RESET_TARGET      0x0A
80
81 /* CMD_INFO */
82 #define INFO_ID_VENDOR            0x01      /* string */
83 #define INFO_ID_PRODUCT           0x02      /* string */
84 #define INFO_ID_SERNUM            0x03      /* string */
85 #define INFO_ID_FW_VER            0x04      /* string */
86 #define INFO_ID_TD_VEND           0x05      /* string */
87 #define INFO_ID_TD_NAME           0x06      /* string */
88 #define INFO_ID_CAPS              0xf0      /* byte */
89 #define INFO_ID_PKT_CNT           0xfe      /* byte */
90 #define INFO_ID_PKT_SZ            0xff      /* short */
91 #define INFO_ID_SWO_BUF_SZ        0xfd      /* word */
92
93 #define INFO_CAPS_SWD                 BIT(0)
94 #define INFO_CAPS_JTAG                BIT(1)
95 #define INFO_CAPS_SWO_UART            BIT(2)
96 #define INFO_CAPS_SWO_MANCHESTER      BIT(3)
97 #define INFO_CAPS_ATOMIC_CMDS         BIT(4)
98 #define INFO_CAPS_TEST_DOMAIN_TIMER   BIT(5)
99 #define INFO_CAPS_SWO_STREAMING_TRACE BIT(6)
100 #define INFO_CAPS_UART_PORT           BIT(7)
101 #define INFO_CAPS_USB_COM_PORT        BIT(8)
102 #define INFO_CAPS__NUM_CAPS               9
103
104 /* CMD_LED */
105 #define LED_ID_CONNECT            0x00
106 #define LED_ID_RUN                0x01
107
108 #define LED_OFF                   0x00
109 #define LED_ON                    0x01
110
111 /* CMD_CONNECT */
112 #define CONNECT_DEFAULT           0x00
113 #define CONNECT_SWD               0x01
114 #define CONNECT_JTAG              0x02
115
116 /* CMSIS-DAP Common SWD/JTAG Commands */
117 #define CMD_DAP_DELAY             0x09
118 #define CMD_DAP_SWJ_PINS          0x10
119 #define CMD_DAP_SWJ_CLOCK         0x11
120 #define CMD_DAP_SWJ_SEQ           0x12
121
122 /*
123  * PINS
124  * Bit 0: SWCLK/TCK
125  * Bit 1: SWDIO/TMS
126  * Bit 2: TDI
127  * Bit 3: TDO
128  * Bit 5: nTRST
129  * Bit 7: nRESET
130  */
131
132 #define SWJ_PIN_TCK               (1<<0)
133 #define SWJ_PIN_TMS               (1<<1)
134 #define SWJ_PIN_TDI               (1<<2)
135 #define SWJ_PIN_TDO               (1<<3)
136 #define SWJ_PIN_TRST              (1<<5)
137 #define SWJ_PIN_SRST              (1<<7)
138
139 /* CMSIS-DAP SWD Commands */
140 #define CMD_DAP_SWD_CONFIGURE     0x13
141 #define CMD_DAP_SWD_SEQUENCE      0x1D
142
143 /* CMSIS-DAP JTAG Commands */
144 #define CMD_DAP_JTAG_SEQ          0x14
145 #define CMD_DAP_JTAG_CONFIGURE    0x15
146 #define CMD_DAP_JTAG_IDCODE       0x16
147
148 /* CMSIS-DAP JTAG sequence info masks */
149 /* Number of bits to clock through (0 means 64) */
150 #define DAP_JTAG_SEQ_TCK          0x3F
151 /* TMS will be set during the sequence if this bit is set */
152 #define DAP_JTAG_SEQ_TMS          0x40
153 /* TDO output will be captured if this bit is set */
154 #define DAP_JTAG_SEQ_TDO          0x80
155
156
157 /* CMSIS-DAP Transfer Commands */
158 #define CMD_DAP_TFER_CONFIGURE    0x04
159 #define CMD_DAP_TFER              0x05
160 #define CMD_DAP_TFER_BLOCK        0x06
161 #define CMD_DAP_TFER_ABORT        0x07
162
163 /* DAP Status Code */
164 #define DAP_OK                    0
165 #define DAP_ERROR                 0xFF
166
167 /* CMSIS-DAP SWO Commands */
168 #define CMD_DAP_SWO_TRANSPORT     0x17
169 #define CMD_DAP_SWO_MODE          0x18
170 #define CMD_DAP_SWO_BAUDRATE      0x19
171 #define CMD_DAP_SWO_CONTROL       0x1A
172 #define CMD_DAP_SWO_STATUS        0x1B
173 #define CMD_DAP_SWO_DATA          0x1C
174 #define CMD_DAP_SWO_EX_STATUS     0x1E
175
176 /* SWO transport mode for reading trace data */
177 #define DAP_SWO_TRANSPORT_NONE    0
178 #define DAP_SWO_TRANSPORT_DATA    1
179 #define DAP_SWO_TRANSPORT_WINUSB  2
180
181 /* SWO trace capture mode */
182 #define DAP_SWO_MODE_OFF          0
183 #define DAP_SWO_MODE_UART         1
184 #define DAP_SWO_MODE_MANCHESTER   2
185
186 /* SWO trace data capture */
187 #define DAP_SWO_CONTROL_STOP      0
188 #define DAP_SWO_CONTROL_START     1
189
190 /* SWO trace status */
191 #define DAP_SWO_STATUS_CAPTURE_INACTIVE      0
192 #define DAP_SWO_STATUS_CAPTURE_ACTIVE        1
193 #define DAP_SWO_STATUS_CAPTURE_MASK          BIT(0)
194 #define DAP_SWO_STATUS_STREAM_ERROR_MASK     BIT(6)
195 #define DAP_SWO_STATUS_BUFFER_OVERRUN_MASK   BIT(7)
196
197 /* CMSIS-DAP Vendor Commands
198  * None as yet... */
199
200 static const char * const info_caps_str[INFO_CAPS__NUM_CAPS] = {
201         "SWD supported",
202         "JTAG supported",
203         "SWO-UART supported",
204         "SWO-MANCHESTER supported",
205         "Atomic commands supported",
206         "Test domain timer supported",
207         "SWO streaming trace supported",
208         "UART communication port supported",
209         "UART via USB COM port supported",
210 };
211
212 struct pending_transfer_result {
213         uint8_t cmd;
214         uint32_t data;
215         void *buffer;
216 };
217
218 struct pending_request_block {
219         struct pending_transfer_result *transfers;
220         int transfer_count;
221 };
222
223 struct pending_scan_result {
224         /** Offset in bytes in the CMD_DAP_JTAG_SEQ response buffer. */
225         unsigned first;
226         /** Number of bits to read. */
227         unsigned length;
228         /** Location to store the result */
229         uint8_t *buffer;
230         /** Offset in the destination buffer */
231         unsigned buffer_offset;
232 };
233
234 /* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
235  * until the first response arrives */
236 #define MAX_PENDING_REQUESTS 3
237
238 /* Pending requests are organized as a FIFO - circular buffer */
239 /* Each block in FIFO can contain up to pending_queue_len transfers */
240 static int pending_queue_len;
241 static struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS];
242 static int pending_fifo_put_idx, pending_fifo_get_idx;
243 static int pending_fifo_block_count;
244
245 /* pointers to buffers that will receive jtag scan results on the next flush */
246 #define MAX_PENDING_SCAN_RESULTS 256
247 static int pending_scan_result_count;
248 static struct pending_scan_result pending_scan_results[MAX_PENDING_SCAN_RESULTS];
249
250 /* queued JTAG sequences that will be executed on the next flush */
251 #define QUEUED_SEQ_BUF_LEN (cmsis_dap_handle->packet_size - 3)
252 static int queued_seq_count;
253 static int queued_seq_buf_end;
254 static int queued_seq_tdo_ptr;
255 static uint8_t queued_seq_buf[1024]; /* TODO: make dynamic / move into cmsis object */
256
257 static int queued_retval;
258
259 static uint8_t output_pins = SWJ_PIN_SRST | SWJ_PIN_TRST;
260
261 static struct cmsis_dap *cmsis_dap_handle;
262
263
264 static int cmsis_dap_quit(void);
265
266 static int cmsis_dap_open(void)
267 {
268         const struct cmsis_dap_backend *backend = NULL;
269
270         struct cmsis_dap *dap = calloc(1, sizeof(struct cmsis_dap));
271         if (!dap) {
272                 LOG_ERROR("unable to allocate memory");
273                 return ERROR_FAIL;
274         }
275
276         if (cmsis_dap_backend >= 0) {
277                 /* Use forced backend */
278                 backend = cmsis_dap_backends[cmsis_dap_backend];
279                 if (backend->open(dap, cmsis_dap_vid, cmsis_dap_pid, adapter_get_required_serial()) != ERROR_OK)
280                         backend = NULL;
281         } else {
282                 /* Try all backends */
283                 for (unsigned int i = 0; i < ARRAY_SIZE(cmsis_dap_backends); i++) {
284                         backend = cmsis_dap_backends[i];
285                         if (backend->open(dap, cmsis_dap_vid, cmsis_dap_pid, adapter_get_required_serial()) == ERROR_OK)
286                                 break;
287                         else
288                                 backend = NULL;
289                 }
290         }
291
292         if (!backend) {
293                 LOG_ERROR("unable to find a matching CMSIS-DAP device");
294                 free(dap);
295                 return ERROR_FAIL;
296         }
297
298         dap->backend = backend;
299
300         cmsis_dap_handle = dap;
301
302         return ERROR_OK;
303 }
304
305 static void cmsis_dap_close(struct cmsis_dap *dap)
306 {
307         if (dap->backend) {
308                 dap->backend->close(dap);
309                 dap->backend = NULL;
310         }
311
312         free(cmsis_dap_handle->packet_buffer);
313         free(cmsis_dap_handle);
314         cmsis_dap_handle = NULL;
315
316         for (int i = 0; i < MAX_PENDING_REQUESTS; i++) {
317                 free(pending_fifo[i].transfers);
318                 pending_fifo[i].transfers = NULL;
319         }
320 }
321
322 static void cmsis_dap_flush_read(struct cmsis_dap *dap)
323 {
324         unsigned int i;
325         /* Some CMSIS-DAP adapters keep buffered packets over
326          * USB close/open so we need to flush up to 64 old packets
327          * to be sure all buffers are empty */
328         for (i = 0; i < 64; i++) {
329                 int retval = dap->backend->read(dap, 10);
330                 if (retval == ERROR_TIMEOUT_REACHED)
331                         break;
332         }
333         if (i)
334                 LOG_DEBUG("Flushed %u packets", i);
335 }
336
337 /* Send a message and receive the reply */
338 static int cmsis_dap_xfer(struct cmsis_dap *dap, int txlen)
339 {
340         if (pending_fifo_block_count) {
341                 LOG_ERROR("pending %d blocks, flushing", pending_fifo_block_count);
342                 while (pending_fifo_block_count) {
343                         dap->backend->read(dap, 10);
344                         pending_fifo_block_count--;
345                 }
346                 pending_fifo_put_idx = 0;
347                 pending_fifo_get_idx = 0;
348         }
349
350         uint8_t current_cmd = cmsis_dap_handle->command[0];
351         int retval = dap->backend->write(dap, txlen, LIBUSB_TIMEOUT_MS);
352         if (retval < 0)
353                 return retval;
354
355         /* get reply */
356         retval = dap->backend->read(dap, LIBUSB_TIMEOUT_MS);
357         if (retval < 0)
358                 return retval;
359
360         uint8_t *resp = cmsis_dap_handle->response;
361         if (resp[0] == DAP_ERROR) {
362                 LOG_ERROR("CMSIS-DAP command 0x%" PRIx8 " not implemented", current_cmd);
363                 return ERROR_NOT_IMPLEMENTED;
364         }
365
366         if (resp[0] != current_cmd) {
367                 LOG_ERROR("CMSIS-DAP command mismatch. Sent 0x%" PRIx8
368                          " received 0x%" PRIx8, current_cmd, resp[0]);
369
370                 cmsis_dap_flush_read(dap);
371                 return ERROR_FAIL;
372         }
373
374         return ERROR_OK;
375 }
376
377 static int cmsis_dap_cmd_dap_swj_pins(uint8_t pins, uint8_t mask, uint32_t delay, uint8_t *input)
378 {
379         uint8_t *command = cmsis_dap_handle->command;
380
381         command[0] = CMD_DAP_SWJ_PINS;
382         command[1] = pins;
383         command[2] = mask;
384         h_u32_to_le(&command[3], delay);
385
386         int retval = cmsis_dap_xfer(cmsis_dap_handle, 7);
387         if (retval != ERROR_OK) {
388                 LOG_ERROR("CMSIS-DAP command CMD_DAP_SWJ_PINS failed.");
389                 return ERROR_JTAG_DEVICE_ERROR;
390         }
391
392         if (input)
393                 *input = cmsis_dap_handle->response[1];
394
395         return ERROR_OK;
396 }
397
398 static int cmsis_dap_cmd_dap_swj_clock(uint32_t swj_clock)
399 {
400         uint8_t *command = cmsis_dap_handle->command;
401
402         /* set clock in Hz */
403         swj_clock *= 1000;
404
405         command[0] = CMD_DAP_SWJ_CLOCK;
406         h_u32_to_le(&command[1], swj_clock);
407
408         int retval = cmsis_dap_xfer(cmsis_dap_handle, 5);
409         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
410                 LOG_ERROR("CMSIS-DAP command CMD_DAP_SWJ_CLOCK failed.");
411                 return ERROR_JTAG_DEVICE_ERROR;
412         }
413
414         return ERROR_OK;
415 }
416
417 /* clock a sequence of bits out on TMS, to change JTAG states */
418 static int cmsis_dap_cmd_dap_swj_sequence(uint8_t s_len, const uint8_t *sequence)
419 {
420         uint8_t *command = cmsis_dap_handle->command;
421
422 #ifdef CMSIS_DAP_JTAG_DEBUG
423         LOG_DEBUG("cmsis-dap TMS sequence: len=%d", s_len);
424         for (int i = 0; i < DIV_ROUND_UP(s_len, 8); ++i)
425                 printf("%02X ", sequence[i]);
426
427         printf("\n");
428 #endif
429
430         command[0] = CMD_DAP_SWJ_SEQ;
431         command[1] = s_len;
432         bit_copy(&command[2], 0, sequence, 0, s_len);
433
434         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2 + DIV_ROUND_UP(s_len, 8));
435         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK)
436                 return ERROR_FAIL;
437
438         return ERROR_OK;
439 }
440
441 static int cmsis_dap_cmd_dap_info(uint8_t info, uint8_t **data)
442 {
443         uint8_t *command = cmsis_dap_handle->command;
444
445         command[0] = CMD_DAP_INFO;
446         command[1] = info;
447
448         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
449         if (retval != ERROR_OK) {
450                 LOG_ERROR("CMSIS-DAP command CMD_INFO failed.");
451                 return ERROR_JTAG_DEVICE_ERROR;
452         }
453
454         *data = &cmsis_dap_handle->response[1];
455
456         return ERROR_OK;
457 }
458
459 static int cmsis_dap_cmd_dap_led(uint8_t led, uint8_t state)
460 {
461         uint8_t *command = cmsis_dap_handle->command;
462
463         command[0] = CMD_DAP_LED;
464         command[1] = led;
465         command[2] = state;
466
467         int retval = cmsis_dap_xfer(cmsis_dap_handle, 3);
468         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
469                 LOG_ERROR("CMSIS-DAP command CMD_LED failed.");
470                 return ERROR_JTAG_DEVICE_ERROR;
471         }
472
473         return ERROR_OK;
474 }
475
476 static int cmsis_dap_cmd_dap_connect(uint8_t mode)
477 {
478         uint8_t *command = cmsis_dap_handle->command;
479
480         command[0] = CMD_DAP_CONNECT;
481         command[1] = mode;
482
483         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
484         if (retval != ERROR_OK) {
485                 LOG_ERROR("CMSIS-DAP command CMD_CONNECT failed.");
486                 return ERROR_JTAG_DEVICE_ERROR;
487         }
488
489         if (cmsis_dap_handle->response[1] != mode) {
490                 LOG_ERROR("CMSIS-DAP failed to connect in mode (%d)", mode);
491                 return ERROR_JTAG_DEVICE_ERROR;
492         }
493
494         return ERROR_OK;
495 }
496
497 static int cmsis_dap_cmd_dap_disconnect(void)
498 {
499         uint8_t *command = cmsis_dap_handle->command;
500
501         command[0] = CMD_DAP_DISCONNECT;
502
503         int retval = cmsis_dap_xfer(cmsis_dap_handle, 1);
504         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
505                 LOG_ERROR("CMSIS-DAP command CMD_DISCONNECT failed.");
506                 return ERROR_JTAG_DEVICE_ERROR;
507         }
508
509         return ERROR_OK;
510 }
511
512 static int cmsis_dap_cmd_dap_tfer_configure(uint8_t idle, uint16_t retry_count, uint16_t match_retry)
513 {
514         uint8_t *command = cmsis_dap_handle->command;
515
516         command[0] = CMD_DAP_TFER_CONFIGURE;
517         command[1] = idle;
518         h_u16_to_le(&command[2], retry_count);
519         h_u16_to_le(&command[4], match_retry);
520
521         int retval = cmsis_dap_xfer(cmsis_dap_handle, 6);
522         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
523                 LOG_ERROR("CMSIS-DAP command CMD_TFER_Configure failed.");
524                 return ERROR_JTAG_DEVICE_ERROR;
525         }
526
527         return ERROR_OK;
528 }
529
530 static int cmsis_dap_cmd_dap_swd_configure(uint8_t cfg)
531 {
532         uint8_t *command = cmsis_dap_handle->command;
533
534         command[0] = CMD_DAP_SWD_CONFIGURE;
535         command[1] = cfg;
536
537         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
538         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
539                 LOG_ERROR("CMSIS-DAP command CMD_SWD_Configure failed.");
540                 return ERROR_JTAG_DEVICE_ERROR;
541         }
542
543         return ERROR_OK;
544 }
545
546 #if 0
547 static int cmsis_dap_cmd_dap_delay(uint16_t delay_us)
548 {
549         uint8_t *command = cmsis_dap_handle->command;
550
551         command[0] = CMD_DAP_DELAY;
552         h_u16_to_le(&command[1], delay_us);
553
554         int retval = cmsis_dap_xfer(cmsis_dap_handle, 3);
555         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
556                 LOG_ERROR("CMSIS-DAP command CMD_Delay failed.");
557                 return ERROR_JTAG_DEVICE_ERROR;
558         }
559
560         return ERROR_OK;
561 }
562 #endif
563
564 static int cmsis_dap_metacmd_targetsel(uint32_t instance_id)
565 {
566         uint8_t *command = cmsis_dap_handle->command;
567         const uint32_t SEQ_RD = 0x80, SEQ_WR = 0x00;
568
569         /* SWD multi-drop requires a transfer ala CMD_DAP_TFER,
570         but with no expectation of an SWD ACK response.  In
571         CMSIS-DAP v1.20 and v2.00, CMD_DAP_SWD_SEQUENCE was
572         added to allow this special sequence to be generated.
573         The purpose of this operation is to select the target
574         corresponding to the instance_id that is written */
575
576         size_t idx = 0;
577         command[idx++] = CMD_DAP_SWD_SEQUENCE;
578         command[idx++] = 3;     /* sequence count */
579
580         /* sequence 0: packet request for TARGETSEL */
581         command[idx++] = SEQ_WR | 8;
582         command[idx++] = SWD_CMD_START | swd_cmd(false, false, DP_TARGETSEL) | SWD_CMD_STOP | SWD_CMD_PARK;
583
584         /* sequence 1: read Trn ACK Trn, no expectation for target to ACK  */
585         command[idx++] = SEQ_RD | 5;
586
587         /* sequence 2: WDATA plus parity */
588         command[idx++] = SEQ_WR | (32 + 1);
589         h_u32_to_le(command + idx, instance_id);
590         idx += 4;
591         command[idx++] = parity_u32(instance_id);
592
593         int retval = cmsis_dap_xfer(cmsis_dap_handle, idx);
594         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
595                 LOG_ERROR("CMSIS-DAP command SWD_Sequence failed.");
596                 return ERROR_JTAG_DEVICE_ERROR;
597         }
598
599         return ERROR_OK;
600 }
601
602 /**
603  * Sets the SWO transport mode.
604  * @param[in] transport     The transport mode. Can be None, SWO_Data or
605  *                          WinUSB (requires CMSIS-DAP v2).
606  */
607 static int cmsis_dap_cmd_dap_swo_transport(uint8_t transport)
608 {
609         uint8_t *command = cmsis_dap_handle->command;
610
611         command[0] = CMD_DAP_SWO_TRANSPORT;
612         command[1] = transport;
613
614         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
615         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
616                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Transport(%d) failed.", transport);
617                 return ERROR_JTAG_DEVICE_ERROR;
618         }
619
620         return ERROR_OK;
621 }
622
623 /**
624  * Sets the SWO trace capture mode.
625  * @param[in] mode          Trace capture mode. Can be UART or MANCHESTER.
626  */
627 static int cmsis_dap_cmd_dap_swo_mode(uint8_t mode)
628 {
629         uint8_t *command = cmsis_dap_handle->command;
630
631         command[0] = CMD_DAP_SWO_MODE;
632         command[1] = mode;
633
634         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
635         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
636                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Mode(%d) failed.", mode);
637                 return ERROR_JTAG_DEVICE_ERROR;
638         }
639
640         return ERROR_OK;
641 }
642
643 /**
644  * Sets the baudrate for capturing SWO trace data.
645  * Can be called iteratively to determine supported baudrates.
646  * @param[in]  in_baudrate  Requested baudrate.
647  * @param[out] dev_baudrate Actual baudrate or 0 (baudrate not configured).
648  *                          When requested baudrate is not achievable the
649  *                          closest configured baudrate can be returned or
650  *                          0 which indicates that baudrate was not configured.
651  */
652 static int cmsis_dap_cmd_dap_swo_baudrate(
653                                         uint32_t in_baudrate,
654                                         uint32_t *dev_baudrate)
655 {
656         uint8_t *command = cmsis_dap_handle->command;
657
658         command[0] = CMD_DAP_SWO_BAUDRATE;
659         h_u32_to_le(&command[1], in_baudrate);
660
661         int retval = cmsis_dap_xfer(cmsis_dap_handle, 4);
662         uint32_t rvbr = le_to_h_u32(&cmsis_dap_handle->response[1]);
663         if (retval != ERROR_OK || rvbr == 0) {
664                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Baudrate(%u) -> %u failed.", in_baudrate, rvbr);
665                 if (dev_baudrate)
666                         *dev_baudrate = 0;
667                 return ERROR_JTAG_DEVICE_ERROR;
668         }
669
670         if (dev_baudrate)
671                 *dev_baudrate = rvbr;
672
673         return ERROR_OK;
674 }
675
676 /**
677  * Controls the SWO trace data capture.
678  * @param[in] control       Start or stop a trace. Starting capture automatically
679  *                          flushes any existing trace data in buffers which has
680  *                          not yet been read.
681  */
682 static int cmsis_dap_cmd_dap_swo_control(uint8_t control)
683 {
684         uint8_t *command = cmsis_dap_handle->command;
685
686         command[0] = CMD_DAP_SWO_CONTROL;
687         command[1] = control;
688
689         int retval = cmsis_dap_xfer(cmsis_dap_handle, 2);
690         if (retval != ERROR_OK || cmsis_dap_handle->response[1] != DAP_OK) {
691                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Control(%d) failed.", control);
692                 return ERROR_JTAG_DEVICE_ERROR;
693         }
694
695         return ERROR_OK;
696 }
697
698 /**
699  * Reads the SWO trace status.
700  * @param[out] trace_status The trace's status.
701  *                          Bit0: Trace Capture (1 - active, 0 - inactive).
702  *                          Bit6: Trace Stream Error.
703  *                          Bit7: Trace Buffer Overrun.
704  * @param[out] trace_count  Number of bytes in Trace Buffer (not yet read).
705  */
706 static int cmsis_dap_cmd_dap_swo_status(
707                                         uint8_t *trace_status,
708                                         size_t *trace_count)
709 {
710         uint8_t *command = cmsis_dap_handle->command;
711
712         command[0] = CMD_DAP_SWO_STATUS;
713
714         int retval = cmsis_dap_xfer(cmsis_dap_handle, 1);
715         if (retval != ERROR_OK) {
716                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Status failed.");
717                 return ERROR_JTAG_DEVICE_ERROR;
718         }
719
720         if (trace_status)
721                 *trace_status = cmsis_dap_handle->response[1];
722         if (trace_count)
723                 *trace_count = le_to_h_u32(&cmsis_dap_handle->response[2]);
724
725         return ERROR_OK;
726 }
727
728 /**
729  * Reads the captured SWO trace data from Trace Buffer.
730  * @param[in]  max_trace_count Maximum number of Trace Data bytes to read.
731  * @param[out] trace_status The trace's status.
732  * @param[out] trace_count  Number of Trace Data bytes read.
733  * @param[out] data         Trace Data bytes read.
734  */
735 static int cmsis_dap_cmd_dap_swo_data(
736                                         size_t max_trace_count,
737                                         uint8_t *trace_status,
738                                         size_t *trace_count,
739                                         uint8_t *data)
740 {
741         uint8_t *command = cmsis_dap_handle->command;
742
743         command[0] = CMD_DAP_SWO_DATA;
744         h_u16_to_le(&command[1], max_trace_count);
745
746         int retval = cmsis_dap_xfer(cmsis_dap_handle, 3);
747         if (retval != ERROR_OK) {
748                 LOG_ERROR("CMSIS-DAP: command CMD_SWO_Data failed.");
749                 return ERROR_JTAG_DEVICE_ERROR;
750         }
751
752         *trace_status = cmsis_dap_handle->response[1];
753         *trace_count = le_to_h_u16(&cmsis_dap_handle->response[2]);
754
755         if (*trace_count > 0)
756                 memcpy(data, &cmsis_dap_handle->response[4], *trace_count);
757
758         return ERROR_OK;
759 }
760
761 static void cmsis_dap_swd_write_from_queue(struct cmsis_dap *dap)
762 {
763         uint8_t *command = cmsis_dap_handle->command;
764         struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
765
766         LOG_DEBUG_IO("Executing %d queued transactions from FIFO index %d", block->transfer_count, pending_fifo_put_idx);
767
768         if (queued_retval != ERROR_OK) {
769                 LOG_DEBUG("Skipping due to previous errors: %d", queued_retval);
770                 goto skip;
771         }
772
773         if (block->transfer_count == 0)
774                 goto skip;
775
776         command[0] = CMD_DAP_TFER;
777         command[1] = 0x00;      /* DAP Index */
778         command[2] = block->transfer_count;
779         size_t idx = 3;
780
781         for (int i = 0; i < block->transfer_count; i++) {
782                 struct pending_transfer_result *transfer = &(block->transfers[i]);
783                 uint8_t cmd = transfer->cmd;
784                 uint32_t data = transfer->data;
785
786                 LOG_DEBUG_IO("%s %s reg %x %"PRIx32,
787                                 cmd & SWD_CMD_APNDP ? "AP" : "DP",
788                                 cmd & SWD_CMD_RNW ? "read" : "write",
789                           (cmd & SWD_CMD_A32) >> 1, data);
790
791                 /* When proper WAIT handling is implemented in the
792                  * common SWD framework, this kludge can be
793                  * removed. However, this might lead to minor
794                  * performance degradation as the adapter wouldn't be
795                  * able to automatically retry anything (because ARM
796                  * has forgotten to implement sticky error flags
797                  * clearing). See also comments regarding
798                  * cmsis_dap_cmd_dap_tfer_configure() and
799                  * cmsis_dap_cmd_dap_swd_configure() in
800                  * cmsis_dap_init().
801                  */
802                 if (!(cmd & SWD_CMD_RNW) &&
803                     !(cmd & SWD_CMD_APNDP) &&
804                     (cmd & SWD_CMD_A32) >> 1 == DP_CTRL_STAT &&
805                     (data & CORUNDETECT)) {
806                         LOG_DEBUG("refusing to enable sticky overrun detection");
807                         data &= ~CORUNDETECT;
808                 }
809
810                 command[idx++] = (cmd >> 1) & 0x0f;
811                 if (!(cmd & SWD_CMD_RNW)) {
812                         h_u32_to_le(&command[idx], data);
813                         idx += 4;
814                 }
815         }
816
817         int retval = dap->backend->write(dap, idx, LIBUSB_TIMEOUT_MS);
818         if (retval < 0) {
819                 queued_retval = retval;
820                 goto skip;
821         } else {
822                 queued_retval = ERROR_OK;
823         }
824
825         pending_fifo_put_idx = (pending_fifo_put_idx + 1) % dap->packet_count;
826         pending_fifo_block_count++;
827         if (pending_fifo_block_count > dap->packet_count)
828                 LOG_ERROR("too much pending writes %d", pending_fifo_block_count);
829
830         return;
831
832 skip:
833         block->transfer_count = 0;
834 }
835
836 static void cmsis_dap_swd_read_process(struct cmsis_dap *dap, int timeout_ms)
837 {
838         struct pending_request_block *block = &pending_fifo[pending_fifo_get_idx];
839
840         if (pending_fifo_block_count == 0)
841                 LOG_ERROR("no pending write");
842
843         /* get reply */
844         int retval = dap->backend->read(dap, timeout_ms);
845         if (retval == ERROR_TIMEOUT_REACHED && timeout_ms < LIBUSB_TIMEOUT_MS)
846                 return;
847
848         if (retval <= 0) {
849                 LOG_DEBUG("error reading data");
850                 queued_retval = ERROR_FAIL;
851                 goto skip;
852         }
853
854         uint8_t *resp = dap->response;
855         if (resp[0] != CMD_DAP_TFER) {
856                 LOG_ERROR("CMSIS-DAP command mismatch. Expected 0x%x received 0x%" PRIx8,
857                         CMD_DAP_TFER, resp[0]);
858                 queued_retval = ERROR_FAIL;
859                 goto skip;
860         }
861
862         uint8_t transfer_count = resp[1];
863         uint8_t ack = resp[2] & 0x07;
864         if (resp[2] & 0x08) {
865                 LOG_DEBUG("CMSIS-DAP Protocol Error @ %d (wrong parity)", transfer_count);
866                 queued_retval = ERROR_FAIL;
867                 goto skip;
868         }
869         if (ack != SWD_ACK_OK) {
870                 LOG_DEBUG("SWD ack not OK @ %d %s", transfer_count,
871                           ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? "FAULT" : "JUNK");
872                 queued_retval = ack == SWD_ACK_WAIT ? ERROR_WAIT : ERROR_FAIL;
873                 /* TODO: use results of transfers completed before the error occurred? */
874                 goto skip;
875         }
876
877         if (block->transfer_count != transfer_count)
878                 LOG_ERROR("CMSIS-DAP transfer count mismatch: expected %d, got %d",
879                           block->transfer_count, transfer_count);
880
881         LOG_DEBUG_IO("Received results of %d queued transactions FIFO index %d",
882                  transfer_count, pending_fifo_get_idx);
883         size_t idx = 3;
884         for (int i = 0; i < transfer_count; i++) {
885                 struct pending_transfer_result *transfer = &(block->transfers[i]);
886                 if (transfer->cmd & SWD_CMD_RNW) {
887                         static uint32_t last_read;
888                         uint32_t data = le_to_h_u32(&resp[idx]);
889                         uint32_t tmp = data;
890                         idx += 4;
891
892                         LOG_DEBUG_IO("Read result: %"PRIx32, data);
893
894                         /* Imitate posted AP reads */
895                         if ((transfer->cmd & SWD_CMD_APNDP) ||
896                             ((transfer->cmd & SWD_CMD_A32) >> 1 == DP_RDBUFF)) {
897                                 tmp = last_read;
898                                 last_read = data;
899                         }
900
901                         if (transfer->buffer)
902                                 *(uint32_t *)(transfer->buffer) = tmp;
903                 }
904         }
905
906 skip:
907         block->transfer_count = 0;
908         pending_fifo_get_idx = (pending_fifo_get_idx + 1) % dap->packet_count;
909         pending_fifo_block_count--;
910 }
911
912 static int cmsis_dap_swd_run_queue(void)
913 {
914         if (pending_fifo_block_count)
915                 cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
916
917         cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
918
919         while (pending_fifo_block_count)
920                 cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
921
922         pending_fifo_put_idx = 0;
923         pending_fifo_get_idx = 0;
924
925         int retval = queued_retval;
926         queued_retval = ERROR_OK;
927
928         return retval;
929 }
930
931 static void cmsis_dap_swd_queue_cmd(uint8_t cmd, uint32_t *dst, uint32_t data)
932 {
933         bool targetsel_cmd = swd_cmd(false, false, DP_TARGETSEL) == cmd;
934
935         if (pending_fifo[pending_fifo_put_idx].transfer_count == pending_queue_len
936                          || targetsel_cmd) {
937                 if (pending_fifo_block_count)
938                         cmsis_dap_swd_read_process(cmsis_dap_handle, 0);
939
940                 /* Not enough room in the queue. Run the queue. */
941                 cmsis_dap_swd_write_from_queue(cmsis_dap_handle);
942
943                 if (pending_fifo_block_count >= cmsis_dap_handle->packet_count)
944                         cmsis_dap_swd_read_process(cmsis_dap_handle, LIBUSB_TIMEOUT_MS);
945         }
946
947         if (queued_retval != ERROR_OK)
948                 return;
949
950         if (targetsel_cmd) {
951                 cmsis_dap_metacmd_targetsel(data);
952                 return;
953         }
954
955         struct pending_request_block *block = &pending_fifo[pending_fifo_put_idx];
956         struct pending_transfer_result *transfer = &(block->transfers[block->transfer_count]);
957         transfer->data = data;
958         transfer->cmd = cmd;
959         if (cmd & SWD_CMD_RNW) {
960                 /* Queue a read transaction */
961                 transfer->buffer = dst;
962         }
963         block->transfer_count++;
964 }
965
966 static void cmsis_dap_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk)
967 {
968         assert(!(cmd & SWD_CMD_RNW));
969         cmsis_dap_swd_queue_cmd(cmd, NULL, value);
970 }
971
972 static void cmsis_dap_swd_read_reg(uint8_t cmd, uint32_t *value, uint32_t ap_delay_clk)
973 {
974         assert(cmd & SWD_CMD_RNW);
975         cmsis_dap_swd_queue_cmd(cmd, value, 0);
976 }
977
978 static int cmsis_dap_get_serial_info(void)
979 {
980         uint8_t *data;
981
982         int retval = cmsis_dap_cmd_dap_info(INFO_ID_SERNUM, &data);
983         if (retval != ERROR_OK)
984                 return retval;
985
986         if (data[0]) /* strlen */
987                 LOG_INFO("CMSIS-DAP: Serial# = %s", &data[1]);
988
989         return ERROR_OK;
990 }
991
992 static int cmsis_dap_get_version_info(void)
993 {
994         uint8_t *data;
995
996         /* INFO_ID_FW_VER - string */
997         int retval = cmsis_dap_cmd_dap_info(INFO_ID_FW_VER, &data);
998         if (retval != ERROR_OK)
999                 return retval;
1000
1001         if (data[0]) /* strlen */
1002                 LOG_INFO("CMSIS-DAP: FW Version = %s", &data[1]);
1003
1004         return ERROR_OK;
1005 }
1006
1007 static int cmsis_dap_get_caps_info(void)
1008 {
1009         uint8_t *data;
1010
1011         /* INFO_ID_CAPS - byte */
1012         int retval = cmsis_dap_cmd_dap_info(INFO_ID_CAPS, &data);
1013         if (retval != ERROR_OK)
1014                 return retval;
1015
1016         if (data[0] == 1 || data[0] == 2) {
1017                 uint16_t caps = data[1];
1018                 if (data[0] == 2)
1019                         caps |= (uint16_t)data[2] << 8;
1020
1021                 cmsis_dap_handle->caps = caps;
1022
1023                 for (int i = 0; i < INFO_CAPS__NUM_CAPS; ++i) {
1024                         if (caps & BIT(i))
1025                                 LOG_INFO("CMSIS-DAP: %s", info_caps_str[i]);
1026                 }
1027         }
1028
1029         return ERROR_OK;
1030 }
1031
1032 static int cmsis_dap_get_swo_buf_sz(uint32_t *swo_buf_sz)
1033 {
1034         uint8_t *data;
1035
1036         /* INFO_ID_SWO_BUF_SZ - word */
1037         int retval = cmsis_dap_cmd_dap_info(INFO_ID_SWO_BUF_SZ, &data);
1038         if (retval != ERROR_OK)
1039                 return retval;
1040
1041         if (data[0] != 4)
1042                 return ERROR_FAIL;
1043
1044         *swo_buf_sz = le_to_h_u32(&data[1]);
1045
1046         LOG_INFO("CMSIS-DAP: SWO Trace Buffer Size = %u bytes", *swo_buf_sz);
1047
1048         return ERROR_OK;
1049 }
1050
1051 static int cmsis_dap_get_status(void)
1052 {
1053         uint8_t d;
1054
1055         int retval = cmsis_dap_cmd_dap_swj_pins(0, 0, 0, &d);
1056
1057         if (retval == ERROR_OK) {
1058                 LOG_INFO("SWCLK/TCK = %d SWDIO/TMS = %d TDI = %d TDO = %d nTRST = %d nRESET = %d",
1059                         (d & SWJ_PIN_TCK) ? 1 : 0,
1060                         (d & SWJ_PIN_TMS) ? 1 : 0,
1061                         (d & SWJ_PIN_TDI) ? 1 : 0,
1062                         (d & SWJ_PIN_TDO) ? 1 : 0,
1063                         (d & SWJ_PIN_TRST) ? 1 : 0,
1064                         (d & SWJ_PIN_SRST) ? 1 : 0);
1065         }
1066
1067         return retval;
1068 }
1069
1070 static int cmsis_dap_swd_switch_seq(enum swd_special_seq seq)
1071 {
1072         const uint8_t *s;
1073         unsigned int s_len;
1074         int retval;
1075
1076         if ((output_pins & (SWJ_PIN_SRST | SWJ_PIN_TRST)) == (SWJ_PIN_SRST | SWJ_PIN_TRST)) {
1077                 /* Following workaround deasserts reset on most adapters.
1078                  * Do not reconnect if a reset line is active!
1079                  * Reconnecting would break connecting under reset. */
1080
1081                 /* First disconnect before connecting, Atmel EDBG needs it for SAMD/R/L/C */
1082                 cmsis_dap_cmd_dap_disconnect();
1083
1084                 /* When we are reconnecting, DAP_Connect needs to be rerun, at
1085                  * least on Keil ULINK-ME */
1086                 retval = cmsis_dap_cmd_dap_connect(CONNECT_SWD);
1087                 if (retval != ERROR_OK)
1088                         return retval;
1089         }
1090
1091         switch (seq) {
1092         case LINE_RESET:
1093                 LOG_DEBUG_IO("SWD line reset");
1094                 s = swd_seq_line_reset;
1095                 s_len = swd_seq_line_reset_len;
1096                 break;
1097         case JTAG_TO_SWD:
1098                 LOG_DEBUG("JTAG-to-SWD");
1099                 s = swd_seq_jtag_to_swd;
1100                 s_len = swd_seq_jtag_to_swd_len;
1101                 break;
1102         case JTAG_TO_DORMANT:
1103                 LOG_DEBUG("JTAG-to-DORMANT");
1104                 s = swd_seq_jtag_to_dormant;
1105                 s_len = swd_seq_jtag_to_dormant_len;
1106                 break;
1107         case SWD_TO_JTAG:
1108                 LOG_DEBUG("SWD-to-JTAG");
1109                 s = swd_seq_swd_to_jtag;
1110                 s_len = swd_seq_swd_to_jtag_len;
1111                 break;
1112         case SWD_TO_DORMANT:
1113                 LOG_DEBUG("SWD-to-DORMANT");
1114                 s = swd_seq_swd_to_dormant;
1115                 s_len = swd_seq_swd_to_dormant_len;
1116                 break;
1117         case DORMANT_TO_SWD:
1118                 LOG_DEBUG("DORMANT-to-SWD");
1119                 s = swd_seq_dormant_to_swd;
1120                 s_len = swd_seq_dormant_to_swd_len;
1121                 break;
1122         case DORMANT_TO_JTAG:
1123                 LOG_DEBUG("DORMANT-to-JTAG");
1124                 s = swd_seq_dormant_to_jtag;
1125                 s_len = swd_seq_dormant_to_jtag_len;
1126                 break;
1127         default:
1128                 LOG_ERROR("Sequence %d not supported", seq);
1129                 return ERROR_FAIL;
1130         }
1131
1132         retval = cmsis_dap_cmd_dap_swj_sequence(s_len, s);
1133         if (retval != ERROR_OK)
1134                 return retval;
1135
1136         /* Atmel EDBG needs renew clock setting after SWJ_Sequence
1137          * otherwise default frequency is used */
1138         return cmsis_dap_cmd_dap_swj_clock(adapter_get_speed_khz());
1139 }
1140
1141 static int cmsis_dap_swd_open(void)
1142 {
1143         if (!(cmsis_dap_handle->caps & INFO_CAPS_SWD)) {
1144                 LOG_ERROR("CMSIS-DAP: SWD not supported");
1145                 return ERROR_JTAG_DEVICE_ERROR;
1146         }
1147
1148         int retval = cmsis_dap_cmd_dap_connect(CONNECT_SWD);
1149         if (retval != ERROR_OK)
1150                 return retval;
1151
1152         /* Add more setup here.??... */
1153
1154         LOG_INFO("CMSIS-DAP: Interface Initialised (SWD)");
1155         return ERROR_OK;
1156 }
1157
1158 static int cmsis_dap_init(void)
1159 {
1160         uint8_t *data;
1161
1162         int retval = cmsis_dap_open();
1163         if (retval != ERROR_OK)
1164                 return retval;
1165
1166         cmsis_dap_flush_read(cmsis_dap_handle);
1167
1168         retval = cmsis_dap_get_caps_info();
1169         if (retval != ERROR_OK)
1170                 return retval;
1171
1172         retval = cmsis_dap_get_version_info();
1173         if (retval != ERROR_OK)
1174                 return retval;
1175
1176         retval = cmsis_dap_get_serial_info();
1177         if (retval != ERROR_OK)
1178                 return retval;
1179
1180         if (swd_mode) {
1181                 retval = cmsis_dap_swd_open();
1182                 if (retval != ERROR_OK)
1183                         return retval;
1184         } else {
1185                 /* Connect in JTAG mode */
1186                 if (!(cmsis_dap_handle->caps & INFO_CAPS_JTAG)) {
1187                         LOG_ERROR("CMSIS-DAP: JTAG not supported");
1188                         return ERROR_JTAG_DEVICE_ERROR;
1189                 }
1190
1191                 retval = cmsis_dap_cmd_dap_connect(CONNECT_JTAG);
1192                 if (retval != ERROR_OK)
1193                         return retval;
1194
1195                 LOG_INFO("CMSIS-DAP: Interface Initialised (JTAG)");
1196         }
1197
1198         /* Be conservative and suppress submitting multiple HID requests
1199          * until we get packet count info from the adaptor */
1200         cmsis_dap_handle->packet_count = 1;
1201         pending_queue_len = 12;
1202
1203         /* INFO_ID_PKT_SZ - short */
1204         retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_SZ, &data);
1205         if (retval != ERROR_OK)
1206                 goto init_err;
1207
1208         if (data[0] == 2) {  /* short */
1209                 uint16_t pkt_sz = data[1] + (data[2] << 8);
1210                 if (pkt_sz != cmsis_dap_handle->packet_size) {
1211
1212                         /* 4 bytes of command header + 5 bytes per register
1213                          * write. For bulk read sequences just 4 bytes are
1214                          * needed per transfer, so this is suboptimal. */
1215                         pending_queue_len = (pkt_sz - 4) / 5;
1216
1217                         free(cmsis_dap_handle->packet_buffer);
1218                         retval = cmsis_dap_handle->backend->packet_buffer_alloc(cmsis_dap_handle, pkt_sz);
1219                         if (retval != ERROR_OK)
1220                                 goto init_err;
1221
1222                         LOG_DEBUG("CMSIS-DAP: Packet Size = %" PRIu16, pkt_sz);
1223                 }
1224         }
1225
1226         /* INFO_ID_PKT_CNT - byte */
1227         retval = cmsis_dap_cmd_dap_info(INFO_ID_PKT_CNT, &data);
1228         if (retval != ERROR_OK)
1229                 goto init_err;
1230
1231         if (data[0] == 1) { /* byte */
1232                 int pkt_cnt = data[1];
1233                 if (pkt_cnt > 1)
1234                         cmsis_dap_handle->packet_count = MIN(MAX_PENDING_REQUESTS, pkt_cnt);
1235
1236                 LOG_DEBUG("CMSIS-DAP: Packet Count = %d", pkt_cnt);
1237         }
1238
1239         LOG_DEBUG("Allocating FIFO for %d pending packets", cmsis_dap_handle->packet_count);
1240         for (int i = 0; i < cmsis_dap_handle->packet_count; i++) {
1241                 pending_fifo[i].transfers = malloc(pending_queue_len * sizeof(struct pending_transfer_result));
1242                 if (!pending_fifo[i].transfers) {
1243                         LOG_ERROR("Unable to allocate memory for CMSIS-DAP queue");
1244                         retval = ERROR_FAIL;
1245                         goto init_err;
1246                 }
1247         }
1248
1249         /* Intentionally not checked for error, just logs an info message
1250          * not vital for further debugging */
1251         (void)cmsis_dap_get_status();
1252
1253         /* Now try to connect to the target
1254          * TODO: This is all SWD only @ present */
1255         retval = cmsis_dap_cmd_dap_swj_clock(adapter_get_speed_khz());
1256         if (retval != ERROR_OK)
1257                 goto init_err;
1258
1259         /* Ask CMSIS-DAP to automatically retry on receiving WAIT for
1260          * up to 64 times. This must be changed to 0 if sticky
1261          * overrun detection is enabled. */
1262         retval = cmsis_dap_cmd_dap_tfer_configure(0, 64, 0);
1263         if (retval != ERROR_OK)
1264                 goto init_err;
1265
1266         if (swd_mode) {
1267                 /* Data Phase (bit 2) must be set to 1 if sticky overrun
1268                  * detection is enabled */
1269                 retval = cmsis_dap_cmd_dap_swd_configure(0);    /* 1 TRN, no Data Phase */
1270                 if (retval != ERROR_OK)
1271                         goto init_err;
1272         }
1273         /* Both LEDs on */
1274         /* Intentionally not checked for error, debugging will work
1275          * without LEDs */
1276         (void)cmsis_dap_cmd_dap_led(LED_ID_CONNECT, LED_ON);
1277         (void)cmsis_dap_cmd_dap_led(LED_ID_RUN, LED_ON);
1278
1279         /* support connecting with srst asserted */
1280         enum reset_types jtag_reset_config = jtag_get_reset_config();
1281
1282         if (jtag_reset_config & RESET_CNCT_UNDER_SRST) {
1283                 if (jtag_reset_config & RESET_SRST_NO_GATING) {
1284                         retval = cmsis_dap_cmd_dap_swj_pins(0, SWJ_PIN_SRST, 0, NULL);
1285                         if (retval != ERROR_OK)
1286                                 goto init_err;
1287                         LOG_INFO("Connecting under reset");
1288                 }
1289         }
1290         LOG_INFO("CMSIS-DAP: Interface ready");
1291         return ERROR_OK;
1292
1293 init_err:
1294         cmsis_dap_quit();
1295         return retval;
1296 }
1297
1298 static int cmsis_dap_swd_init(void)
1299 {
1300         swd_mode = true;
1301         return ERROR_OK;
1302 }
1303
1304 static int cmsis_dap_quit(void)
1305 {
1306         cmsis_dap_cmd_dap_disconnect();
1307
1308         /* Both LEDs off */
1309         cmsis_dap_cmd_dap_led(LED_ID_RUN, LED_OFF);
1310         cmsis_dap_cmd_dap_led(LED_ID_CONNECT, LED_OFF);
1311
1312         cmsis_dap_close(cmsis_dap_handle);
1313
1314         return ERROR_OK;
1315 }
1316
1317 static int cmsis_dap_reset(int trst, int srst)
1318 {
1319         /* Set both TRST and SRST even if they're not enabled as
1320          * there's no way to tristate them */
1321
1322         output_pins = 0;
1323         if (!srst)
1324                 output_pins |= SWJ_PIN_SRST;
1325         if (!trst)
1326                 output_pins |= SWJ_PIN_TRST;
1327
1328         int retval = cmsis_dap_cmd_dap_swj_pins(output_pins,
1329                         SWJ_PIN_TRST | SWJ_PIN_SRST, 0, NULL);
1330         if (retval != ERROR_OK)
1331                 LOG_ERROR("CMSIS-DAP: Interface reset failed");
1332         return retval;
1333 }
1334
1335 static void cmsis_dap_execute_sleep(struct jtag_command *cmd)
1336 {
1337 #if 0
1338         int retval = cmsis_dap_cmd_dap_delay(cmd->cmd.sleep->us);
1339         if (retval != ERROR_OK)
1340 #endif
1341                 jtag_sleep(cmd->cmd.sleep->us);
1342 }
1343
1344 /* Set TMS high for five TCK clocks, to move the TAP to the Test-Logic-Reset state */
1345 static int cmsis_dap_execute_tlr_reset(struct jtag_command *cmd)
1346 {
1347         LOG_INFO("cmsis-dap JTAG TLR_RESET");
1348         uint8_t seq = 0xff;
1349
1350         int retval = cmsis_dap_cmd_dap_swj_sequence(8, &seq);
1351         if (retval == ERROR_OK)
1352                 tap_set_state(TAP_RESET);
1353         return retval;
1354 }
1355
1356 /* Set new end state */
1357 static void cmsis_dap_end_state(tap_state_t state)
1358 {
1359         if (tap_is_state_stable(state))
1360                 tap_set_end_state(state);
1361         else {
1362                 LOG_ERROR("BUG: %i is not a valid end state", state);
1363                 exit(-1);
1364         }
1365 }
1366
1367 #ifdef SPRINT_BINARY
1368 static void sprint_binary(char *s, const uint8_t *buf, int offset, int len)
1369 {
1370         if (!len)
1371                 return;
1372
1373         /*
1374         buf = { 0x18 } len=5 should result in: 11000
1375         buf = { 0xff 0x18 } len=13 should result in: 11111111 11000
1376         buf = { 0xc0 0x18 } offset=3 len=10 should result in: 11000 11000
1377                 i=3 there means i/8 = 0 so c = 0xFF, and
1378         */
1379         for (int i = offset; i < offset + len; ++i) {
1380                 uint8_t c = buf[i / 8], mask = 1 << (i % 8);
1381                 if ((i != offset) && !(i % 8))
1382                         putchar(' ');
1383                 *s++ = (c & mask) ? '1' : '0';
1384         }
1385         *s = 0;
1386 }
1387 #endif
1388
1389 #ifdef CMSIS_DAP_JTAG_DEBUG
1390 static void debug_parse_cmsis_buf(const uint8_t *cmd, int cmdlen)
1391 {
1392         /* cmd is a usb packet to go to the cmsis-dap interface */
1393         printf("cmsis-dap buffer (%d b): ", cmdlen);
1394         for (int i = 0; i < cmdlen; ++i)
1395                 printf(" %02x", cmd[i]);
1396         printf("\n");
1397         switch (cmd[0]) {
1398                 case CMD_DAP_JTAG_SEQ: {
1399                         printf("cmsis-dap jtag sequence command %02x (n=%d)\n", cmd[0], cmd[1]);
1400                         /*
1401                          * #1 = number of sequences
1402                          * #2 = sequence info 1
1403                          * #3...4+n_bytes-1 = sequence 1
1404                          * #4+n_bytes = sequence info 2
1405                          * #5+n_bytes = sequence 2 (single bit)
1406                          */
1407                         int pos = 2;
1408                         for (int seq = 0; seq < cmd[1]; ++seq) {
1409                                 uint8_t info = cmd[pos++];
1410                                 int len = info & DAP_JTAG_SEQ_TCK;
1411                                 if (len == 0)
1412                                         len = 64;
1413                                 printf("  sequence %d starting %d: info %02x (len=%d tms=%d read_tdo=%d): ",
1414                                         seq, pos, info, len, info & DAP_JTAG_SEQ_TMS, info & DAP_JTAG_SEQ_TDO);
1415                                 for (int i = 0; i < DIV_ROUND_UP(len, 8); ++i)
1416                                         printf(" %02x", cmd[pos+i]);
1417                                 pos += DIV_ROUND_UP(len, 8);
1418                                 printf("\n");
1419                         }
1420                         if (pos != cmdlen) {
1421                                 printf("BUFFER LENGTH MISMATCH looks like %d but %d specified", pos, cmdlen);
1422                                 exit(-1);
1423                         }
1424
1425                         break;
1426                 }
1427                 default:
1428                         LOG_DEBUG("unknown cmsis-dap command %02x", cmd[1]);
1429                         break;
1430         }
1431 }
1432 #endif
1433
1434 static void cmsis_dap_flush(void)
1435 {
1436         if (!queued_seq_count)
1437                 return;
1438
1439         LOG_DEBUG_IO("Flushing %d queued sequences (%d bytes) with %d pending scan results to capture",
1440                 queued_seq_count, queued_seq_buf_end, pending_scan_result_count);
1441
1442         /* prepare CMSIS-DAP packet */
1443         uint8_t *command = cmsis_dap_handle->command;
1444         command[0] = CMD_DAP_JTAG_SEQ;
1445         command[1] = queued_seq_count;
1446         memcpy(&command[2], queued_seq_buf, queued_seq_buf_end);
1447
1448 #ifdef CMSIS_DAP_JTAG_DEBUG
1449         debug_parse_cmsis_buf(command, queued_seq_buf_end + 2);
1450 #endif
1451
1452         /* send command to USB device */
1453         int retval = cmsis_dap_xfer(cmsis_dap_handle, queued_seq_buf_end + 2);
1454
1455         uint8_t *resp = cmsis_dap_handle->response;
1456         if (retval != ERROR_OK || resp[1] != DAP_OK) {
1457                 LOG_ERROR("CMSIS-DAP command CMD_DAP_JTAG_SEQ failed.");
1458                 exit(-1);
1459         }
1460
1461 #ifdef CMSIS_DAP_JTAG_DEBUG
1462         LOG_DEBUG_IO("USB response buf:");
1463         for (int c = 0; c < queued_seq_buf_end + 3; ++c)
1464                 printf("%02X ", resp[c]);
1465         printf("\n");
1466 #endif
1467
1468         /* copy scan results into client buffers */
1469         for (int i = 0; i < pending_scan_result_count; ++i) {
1470                 struct pending_scan_result *scan = &pending_scan_results[i];
1471                 LOG_DEBUG_IO("Copying pending_scan_result %d/%d: %d bits from byte %d -> buffer + %d bits",
1472                         i, pending_scan_result_count, scan->length, scan->first + 2, scan->buffer_offset);
1473 #ifdef CMSIS_DAP_JTAG_DEBUG
1474                 for (uint32_t b = 0; b < DIV_ROUND_UP(scan->length, 8); ++b)
1475                         printf("%02X ", resp[2+scan->first+b]);
1476                 printf("\n");
1477 #endif
1478                 bit_copy(scan->buffer, scan->buffer_offset, &resp[2 + scan->first], 0, scan->length);
1479         }
1480
1481         /* reset */
1482         queued_seq_count = 0;
1483         queued_seq_buf_end = 0;
1484         queued_seq_tdo_ptr = 0;
1485         pending_scan_result_count = 0;
1486 }
1487
1488 /* queue a sequence of bits to clock out TDI / in TDO, executing if the buffer is full.
1489  *
1490  * sequence=NULL means clock out zeros on TDI
1491  * tdo_buffer=NULL means don't capture TDO
1492  */
1493 static void cmsis_dap_add_jtag_sequence(int s_len, const uint8_t *sequence, int s_offset,
1494                                         bool tms, uint8_t *tdo_buffer, int tdo_buffer_offset)
1495 {
1496         LOG_DEBUG_IO("[at %d] %d bits, tms %s, seq offset %d, tdo buf %p, tdo offset %d",
1497                 queued_seq_buf_end,
1498                 s_len, tms ? "HIGH" : "LOW", s_offset, tdo_buffer, tdo_buffer_offset);
1499
1500         if (s_len == 0)
1501                 return;
1502
1503         if (s_len > 64) {
1504                 LOG_DEBUG_IO("START JTAG SEQ SPLIT");
1505                 for (int offset = 0; offset < s_len; offset += 64) {
1506                         int len = s_len - offset;
1507                         if (len > 64)
1508                                 len = 64;
1509                         LOG_DEBUG_IO("Splitting long jtag sequence: %d-bit chunk starting at offset %d", len, offset);
1510                         cmsis_dap_add_jtag_sequence(
1511                                 len,
1512                                 sequence,
1513                                 s_offset + offset,
1514                                 tms,
1515                                 tdo_buffer,
1516                                 !tdo_buffer ? 0 : (tdo_buffer_offset + offset)
1517                                 );
1518                 }
1519                 LOG_DEBUG_IO("END JTAG SEQ SPLIT");
1520                 return;
1521         }
1522
1523         int cmd_len = 1 + DIV_ROUND_UP(s_len, 8);
1524         if (queued_seq_count >= 255 || queued_seq_buf_end + cmd_len > QUEUED_SEQ_BUF_LEN)
1525                 /* empty out the buffer */
1526                 cmsis_dap_flush();
1527
1528         ++queued_seq_count;
1529
1530         /* control byte */
1531         queued_seq_buf[queued_seq_buf_end] =
1532                 (tms ? DAP_JTAG_SEQ_TMS : 0) |
1533                 (tdo_buffer ? DAP_JTAG_SEQ_TDO : 0) |
1534                 (s_len == 64 ? 0 : s_len);
1535
1536         if (sequence)
1537                 bit_copy(&queued_seq_buf[queued_seq_buf_end + 1], 0, sequence, s_offset, s_len);
1538         else
1539                 memset(&queued_seq_buf[queued_seq_buf_end + 1], 0, DIV_ROUND_UP(s_len, 8));
1540
1541         queued_seq_buf_end += cmd_len;
1542
1543         if (tdo_buffer) {
1544                 struct pending_scan_result *scan = &pending_scan_results[pending_scan_result_count++];
1545                 scan->first = queued_seq_tdo_ptr;
1546                 queued_seq_tdo_ptr += DIV_ROUND_UP(s_len, 8);
1547                 scan->length = s_len;
1548                 scan->buffer = tdo_buffer;
1549                 scan->buffer_offset = tdo_buffer_offset;
1550         }
1551 }
1552
1553 /* queue a sequence of bits to clock out TMS, executing if the buffer is full */
1554 static void cmsis_dap_add_tms_sequence(const uint8_t *sequence, int s_len)
1555 {
1556         LOG_DEBUG_IO("%d bits: %02X", s_len, *sequence);
1557         /* we use a series of CMD_DAP_JTAG_SEQ commands to toggle TMS,
1558            because even though it seems ridiculously inefficient, it
1559            allows us to combine TMS and scan sequences into the same
1560            USB packet. */
1561         /* TODO: combine runs of the same tms value */
1562         for (int i = 0; i < s_len; ++i) {
1563                 bool bit = (sequence[i / 8] & (1 << (i % 8))) != 0;
1564                 cmsis_dap_add_jtag_sequence(1, NULL, 0, bit, NULL, 0);
1565         }
1566 }
1567
1568 /* Move to the end state by queuing a sequence to clock into TMS */
1569 static void cmsis_dap_state_move(void)
1570 {
1571         uint8_t tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state());
1572         uint8_t tms_scan_bits = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
1573
1574         LOG_DEBUG_IO("state move from %s to %s: %d clocks, %02X on tms",
1575                 tap_state_name(tap_get_state()), tap_state_name(tap_get_end_state()),
1576                 tms_scan_bits, tms_scan);
1577         cmsis_dap_add_tms_sequence(&tms_scan, tms_scan_bits);
1578
1579         tap_set_state(tap_get_end_state());
1580 }
1581
1582
1583 /* Execute a JTAG scan operation by queueing TMS and TDI/TDO sequences */
1584 static void cmsis_dap_execute_scan(struct jtag_command *cmd)
1585 {
1586         LOG_DEBUG_IO("%s type:%d", cmd->cmd.scan->ir_scan ? "IRSCAN" : "DRSCAN",
1587                 jtag_scan_type(cmd->cmd.scan));
1588
1589         /* Make sure there are no trailing fields with num_bits == 0, or the logic below will fail. */
1590         while (cmd->cmd.scan->num_fields > 0
1591                         && cmd->cmd.scan->fields[cmd->cmd.scan->num_fields - 1].num_bits == 0) {
1592                 cmd->cmd.scan->num_fields--;
1593                 LOG_DEBUG("discarding trailing empty field");
1594         }
1595
1596         if (cmd->cmd.scan->num_fields == 0) {
1597                 LOG_DEBUG("empty scan, doing nothing");
1598                 return;
1599         }
1600
1601         if (cmd->cmd.scan->ir_scan) {
1602                 if (tap_get_state() != TAP_IRSHIFT) {
1603                         cmsis_dap_end_state(TAP_IRSHIFT);
1604                         cmsis_dap_state_move();
1605                 }
1606         } else {
1607                 if (tap_get_state() != TAP_DRSHIFT) {
1608                         cmsis_dap_end_state(TAP_DRSHIFT);
1609                         cmsis_dap_state_move();
1610                 }
1611         }
1612
1613         cmsis_dap_end_state(cmd->cmd.scan->end_state);
1614
1615         struct scan_field *field = cmd->cmd.scan->fields;
1616         unsigned scan_size = 0;
1617
1618         for (int i = 0; i < cmd->cmd.scan->num_fields; i++, field++) {
1619                 scan_size += field->num_bits;
1620                 LOG_DEBUG_IO("%s%s field %d/%d %d bits",
1621                         field->in_value ? "in" : "",
1622                         field->out_value ? "out" : "",
1623                         i,
1624                         cmd->cmd.scan->num_fields,
1625                         field->num_bits);
1626
1627                 if (i == cmd->cmd.scan->num_fields - 1 && tap_get_state() != tap_get_end_state()) {
1628                         LOG_DEBUG_IO("Last field and have to move out of SHIFT state");
1629                         /* Last field, and we're leaving IRSHIFT/DRSHIFT. Clock last bit during tap
1630                          * movement. This last field can't have length zero, it was checked above. */
1631                         cmsis_dap_add_jtag_sequence(
1632                                 field->num_bits - 1, /* number of bits to clock */
1633                                 field->out_value, /* output sequence */
1634                                 0, /* output offset */
1635                                 false, /* TMS low */
1636                                 field->in_value,
1637                                 0);
1638
1639                         /* Clock the last bit out, with TMS high */
1640                         uint8_t last_bit = 0;
1641                         if (field->out_value)
1642                                 bit_copy(&last_bit, 0, field->out_value, field->num_bits - 1, 1);
1643                         cmsis_dap_add_jtag_sequence(
1644                                 1,
1645                                 &last_bit,
1646                                 0,
1647                                 true,
1648                                 field->in_value,
1649                                 field->num_bits - 1);
1650                         tap_set_state(tap_state_transition(tap_get_state(), 1));
1651
1652                         /* Now clock one more cycle, with TMS low, to get us into a PAUSE state */
1653                         cmsis_dap_add_jtag_sequence(
1654                                 1,
1655                                 &last_bit,
1656                                 0,
1657                                 false,
1658                                 NULL,
1659                                 0);
1660                         tap_set_state(tap_state_transition(tap_get_state(), 0));
1661                 } else {
1662                         LOG_DEBUG_IO("Internal field, staying in SHIFT state afterwards");
1663                         /* Clocking part of a sequence into DR or IR with TMS=0,
1664                            leaving TMS=0 at the end so we can continue later */
1665                         cmsis_dap_add_jtag_sequence(
1666                                 field->num_bits,
1667                                 field->out_value,
1668                                 0,
1669                                 false,
1670                                 field->in_value,
1671                                 0);
1672                 }
1673         }
1674
1675         if (tap_get_state() != tap_get_end_state()) {
1676                 cmsis_dap_end_state(tap_get_end_state());
1677                 cmsis_dap_state_move();
1678         }
1679
1680         LOG_DEBUG_IO("%s scan, %i bits, end in %s",
1681                 (cmd->cmd.scan->ir_scan) ? "IR" : "DR", scan_size,
1682                 tap_state_name(tap_get_end_state()));
1683 }
1684
1685 static void cmsis_dap_pathmove(int num_states, tap_state_t *path)
1686 {
1687         uint8_t tms0 = 0x00;
1688         uint8_t tms1 = 0xff;
1689
1690         for (int i = 0; i < num_states; i++) {
1691                 if (path[i] == tap_state_transition(tap_get_state(), false))
1692                         cmsis_dap_add_tms_sequence(&tms0, 1);
1693                 else if (path[i] == tap_state_transition(tap_get_state(), true))
1694                         cmsis_dap_add_tms_sequence(&tms1, 1);
1695                 else {
1696                         LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition.",
1697                                   tap_state_name(tap_get_state()), tap_state_name(path[i]));
1698                         exit(-1);
1699                 }
1700
1701                 tap_set_state(path[i]);
1702         }
1703
1704         cmsis_dap_end_state(tap_get_state());
1705 }
1706
1707 static void cmsis_dap_execute_pathmove(struct jtag_command *cmd)
1708 {
1709         LOG_DEBUG_IO("pathmove: %i states, end in %i",
1710                       cmd->cmd.pathmove->num_states,
1711                cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
1712
1713         cmsis_dap_pathmove(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path);
1714 }
1715
1716 static void cmsis_dap_stableclocks(int num_cycles)
1717 {
1718         uint8_t tms = tap_get_state() == TAP_RESET;
1719         /* TODO: Perform optimizations? */
1720         /* Execute num_cycles. */
1721         for (int i = 0; i < num_cycles; i++)
1722                 cmsis_dap_add_tms_sequence(&tms, 1);
1723 }
1724
1725 static void cmsis_dap_runtest(int num_cycles)
1726 {
1727         tap_state_t saved_end_state = tap_get_end_state();
1728
1729         /* Only do a state_move when we're not already in IDLE. */
1730         if (tap_get_state() != TAP_IDLE) {
1731                 cmsis_dap_end_state(TAP_IDLE);
1732                 cmsis_dap_state_move();
1733         }
1734         cmsis_dap_stableclocks(num_cycles);
1735
1736         /* Finish in end_state. */
1737         cmsis_dap_end_state(saved_end_state);
1738
1739         if (tap_get_state() != tap_get_end_state())
1740                 cmsis_dap_state_move();
1741 }
1742
1743 static void cmsis_dap_execute_runtest(struct jtag_command *cmd)
1744 {
1745         LOG_DEBUG_IO("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles,
1746                       cmd->cmd.runtest->end_state);
1747
1748         cmsis_dap_end_state(cmd->cmd.runtest->end_state);
1749         cmsis_dap_runtest(cmd->cmd.runtest->num_cycles);
1750 }
1751
1752 static void cmsis_dap_execute_stableclocks(struct jtag_command *cmd)
1753 {
1754         LOG_DEBUG_IO("stableclocks %i cycles", cmd->cmd.runtest->num_cycles);
1755         cmsis_dap_stableclocks(cmd->cmd.runtest->num_cycles);
1756 }
1757
1758 static void cmsis_dap_execute_tms(struct jtag_command *cmd)
1759 {
1760         LOG_DEBUG_IO("TMS: %d bits", cmd->cmd.tms->num_bits);
1761         cmsis_dap_cmd_dap_swj_sequence(cmd->cmd.tms->num_bits, cmd->cmd.tms->bits);
1762 }
1763
1764 /* TODO: Is there need to call cmsis_dap_flush() for the JTAG_PATHMOVE,
1765  * JTAG_RUNTEST, JTAG_STABLECLOCKS? */
1766 static void cmsis_dap_execute_command(struct jtag_command *cmd)
1767 {
1768         switch (cmd->type) {
1769                 case JTAG_SLEEP:
1770                         cmsis_dap_flush();
1771                         cmsis_dap_execute_sleep(cmd);
1772                         break;
1773                 case JTAG_TLR_RESET:
1774                         cmsis_dap_flush();
1775                         cmsis_dap_execute_tlr_reset(cmd);
1776                         break;
1777                 case JTAG_SCAN:
1778                         cmsis_dap_execute_scan(cmd);
1779                         break;
1780                 case JTAG_PATHMOVE:
1781                         cmsis_dap_execute_pathmove(cmd);
1782                         break;
1783                 case JTAG_RUNTEST:
1784                         cmsis_dap_execute_runtest(cmd);
1785                         break;
1786                 case JTAG_STABLECLOCKS:
1787                         cmsis_dap_execute_stableclocks(cmd);
1788                         break;
1789                 case JTAG_TMS:
1790                         cmsis_dap_execute_tms(cmd);
1791                         break;
1792                 default:
1793                         LOG_ERROR("BUG: unknown JTAG command type 0x%X encountered", cmd->type);
1794                         exit(-1);
1795         }
1796 }
1797
1798 static int cmsis_dap_execute_queue(void)
1799 {
1800         struct jtag_command *cmd = jtag_command_queue;
1801
1802         while (cmd) {
1803                 cmsis_dap_execute_command(cmd);
1804                 cmd = cmd->next;
1805         }
1806
1807         cmsis_dap_flush();
1808
1809         return ERROR_OK;
1810 }
1811
1812 static int cmsis_dap_speed(int speed)
1813 {
1814         if (speed == 0) {
1815                 LOG_ERROR("RTCK not supported. Set nonzero \"adapter speed\".");
1816                 return ERROR_JTAG_NOT_IMPLEMENTED;
1817         }
1818
1819         return cmsis_dap_cmd_dap_swj_clock(speed);
1820 }
1821
1822 static int cmsis_dap_speed_div(int speed, int *khz)
1823 {
1824         *khz = speed;
1825         return ERROR_OK;
1826 }
1827
1828 static int cmsis_dap_khz(int khz, int *jtag_speed)
1829 {
1830         *jtag_speed = khz;
1831         return ERROR_OK;
1832 }
1833
1834 static bool calculate_swo_prescaler(unsigned int traceclkin_freq,
1835                 uint32_t trace_freq, uint16_t *prescaler)
1836 {
1837         unsigned int presc = (traceclkin_freq + trace_freq / 2) / trace_freq;
1838         if (presc == 0 || presc > TPIU_ACPR_MAX_SWOSCALER + 1)
1839                 return false;
1840
1841         /* Probe's UART speed must be within 3% of the TPIU's SWO baud rate. */
1842         unsigned int max_deviation = (traceclkin_freq * 3) / 100;
1843         if (presc * trace_freq < traceclkin_freq - max_deviation ||
1844             presc * trace_freq > traceclkin_freq + max_deviation)
1845                 return false;
1846
1847         *prescaler = presc;
1848
1849         return true;
1850 }
1851
1852 /**
1853  * @see adapter_driver::config_trace
1854  */
1855 static int cmsis_dap_config_trace(
1856                                 bool trace_enabled,
1857                                 enum tpiu_pin_protocol pin_protocol,
1858                                 uint32_t port_size,
1859                                 unsigned int *swo_freq,
1860                                 unsigned int traceclkin_hz,
1861                                 uint16_t *swo_prescaler)
1862 {
1863         int retval;
1864
1865         if (!trace_enabled) {
1866                 if (cmsis_dap_handle->trace_enabled) {
1867                         retval = cmsis_dap_cmd_dap_swo_control(DAP_SWO_CONTROL_STOP);
1868                         if (retval != ERROR_OK) {
1869                                 LOG_ERROR("Failed to disable the SWO-trace.");
1870                                 return retval;
1871                         }
1872                 }
1873                 cmsis_dap_handle->trace_enabled = false;
1874                 LOG_INFO("SWO-trace disabled.");
1875                 return ERROR_OK;
1876         }
1877
1878         if (!(cmsis_dap_handle->caps & INFO_CAPS_SWO_UART) &&
1879             !(cmsis_dap_handle->caps & INFO_CAPS_SWO_MANCHESTER)) {
1880                 LOG_ERROR("SWO-trace is not supported by the device.");
1881                 return ERROR_FAIL;
1882         }
1883
1884         uint8_t swo_mode;
1885         if (pin_protocol == TPIU_PIN_PROTOCOL_ASYNC_UART &&
1886            (cmsis_dap_handle->caps & INFO_CAPS_SWO_UART)) {
1887                 swo_mode = DAP_SWO_MODE_UART;
1888         } else if (pin_protocol == TPIU_PIN_PROTOCOL_ASYNC_MANCHESTER &&
1889                   (cmsis_dap_handle->caps & INFO_CAPS_SWO_MANCHESTER)) {
1890                 swo_mode = DAP_SWO_MODE_MANCHESTER;
1891         } else {
1892                 LOG_ERROR("Selected pin protocol is not supported.");
1893                 return ERROR_FAIL;
1894         }
1895
1896         if (*swo_freq == 0) {
1897                 LOG_INFO("SWO-trace frequency autodetection not implemented.");
1898                 return ERROR_FAIL;
1899         }
1900
1901         retval = cmsis_dap_cmd_dap_swo_control(DAP_SWO_CONTROL_STOP);
1902         if (retval != ERROR_OK)
1903                 return retval;
1904
1905         cmsis_dap_handle->trace_enabled = false;
1906
1907         retval = cmsis_dap_get_swo_buf_sz(&cmsis_dap_handle->swo_buf_sz);
1908         if (retval != ERROR_OK)
1909                 return retval;
1910
1911         retval = cmsis_dap_cmd_dap_swo_transport(DAP_SWO_TRANSPORT_DATA);
1912         if (retval != ERROR_OK)
1913                 return retval;
1914
1915         retval = cmsis_dap_cmd_dap_swo_mode(swo_mode);
1916         if (retval != ERROR_OK)
1917                 return retval;
1918
1919         retval = cmsis_dap_cmd_dap_swo_baudrate(*swo_freq, swo_freq);
1920         if (retval != ERROR_OK)
1921                 return retval;
1922
1923         if (!calculate_swo_prescaler(traceclkin_hz, *swo_freq,
1924                         swo_prescaler)) {
1925                 LOG_ERROR("SWO frequency is not suitable. Please choose a "
1926                         "different frequency or use auto-detection.");
1927                 return ERROR_FAIL;
1928         }
1929
1930         LOG_INFO("SWO frequency: %u Hz.", *swo_freq);
1931         LOG_INFO("SWO prescaler: %u.", *swo_prescaler);
1932
1933         retval = cmsis_dap_cmd_dap_swo_control(DAP_SWO_CONTROL_START);
1934         if (retval != ERROR_OK)
1935                 return retval;
1936
1937         cmsis_dap_handle->trace_enabled = true;
1938
1939         return ERROR_OK;
1940 }
1941
1942 /**
1943  * @see adapter_driver::poll_trace
1944  */
1945 static int cmsis_dap_poll_trace(uint8_t *buf, size_t *size)
1946 {
1947         uint8_t trace_status;
1948         size_t trace_count;
1949
1950         if (!cmsis_dap_handle->trace_enabled) {
1951                 *size = 0;
1952                 return ERROR_OK;
1953         }
1954
1955         int retval = cmsis_dap_cmd_dap_swo_status(&trace_status, &trace_count);
1956         if (retval != ERROR_OK)
1957                 return retval;
1958         if ((trace_status & DAP_SWO_STATUS_CAPTURE_MASK) != DAP_SWO_STATUS_CAPTURE_ACTIVE)
1959                 return ERROR_FAIL;
1960
1961         *size = trace_count < *size ? trace_count : *size;
1962         size_t read_so_far = 0;
1963         do {
1964                 size_t rb = 0;
1965                 uint32_t packet_size = cmsis_dap_handle->packet_size - 4 /*data-reply*/;
1966                 uint32_t remaining = *size - read_so_far;
1967                 if (remaining < packet_size)
1968                         packet_size = remaining;
1969                 retval = cmsis_dap_cmd_dap_swo_data(
1970                                                 packet_size,
1971                                                 &trace_status,
1972                                                 &rb,
1973                                                 &buf[read_so_far]);
1974                 if (retval != ERROR_OK)
1975                         return retval;
1976                 if ((trace_status & DAP_SWO_STATUS_CAPTURE_MASK) != DAP_SWO_STATUS_CAPTURE_ACTIVE)
1977                         return ERROR_FAIL;
1978
1979                 read_so_far += rb;
1980         } while (read_so_far < *size);
1981
1982         return ERROR_OK;
1983 }
1984
1985 COMMAND_HANDLER(cmsis_dap_handle_info_command)
1986 {
1987         if (cmsis_dap_get_version_info() == ERROR_OK)
1988                 cmsis_dap_get_status();
1989
1990         return ERROR_OK;
1991 }
1992
1993 COMMAND_HANDLER(cmsis_dap_handle_cmd_command)
1994 {
1995         uint8_t *command = cmsis_dap_handle->command;
1996
1997         for (unsigned i = 0; i < CMD_ARGC; i++)
1998                 COMMAND_PARSE_NUMBER(u8, CMD_ARGV[i], command[i]);
1999
2000         int retval = cmsis_dap_xfer(cmsis_dap_handle, CMD_ARGC);
2001
2002         if (retval != ERROR_OK) {
2003                 LOG_ERROR("CMSIS-DAP command failed.");
2004                 return ERROR_JTAG_DEVICE_ERROR;
2005         }
2006
2007         uint8_t *resp = cmsis_dap_handle->response;
2008         LOG_INFO("Returned data %02" PRIx8 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8,
2009                 resp[1], resp[2], resp[3], resp[4]);
2010
2011         return ERROR_OK;
2012 }
2013
2014 COMMAND_HANDLER(cmsis_dap_handle_vid_pid_command)
2015 {
2016         if (CMD_ARGC > MAX_USB_IDS * 2) {
2017                 LOG_WARNING("ignoring extra IDs in cmsis_dap_vid_pid "
2018                         "(maximum is %d pairs)", MAX_USB_IDS);
2019                 CMD_ARGC = MAX_USB_IDS * 2;
2020         }
2021         if (CMD_ARGC < 2 || (CMD_ARGC & 1)) {
2022                 LOG_WARNING("incomplete cmsis_dap_vid_pid configuration directive");
2023                 if (CMD_ARGC < 2)
2024                         return ERROR_COMMAND_SYNTAX_ERROR;
2025                 /* remove the incomplete trailing id */
2026                 CMD_ARGC -= 1;
2027         }
2028
2029         unsigned i;
2030         for (i = 0; i < CMD_ARGC; i += 2) {
2031                 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i], cmsis_dap_vid[i >> 1]);
2032                 COMMAND_PARSE_NUMBER(u16, CMD_ARGV[i + 1], cmsis_dap_pid[i >> 1]);
2033         }
2034
2035         /*
2036          * Explicitly terminate, in case there are multiples instances of
2037          * cmsis_dap_vid_pid.
2038          */
2039         cmsis_dap_vid[i >> 1] = cmsis_dap_pid[i >> 1] = 0;
2040
2041         return ERROR_OK;
2042 }
2043
2044 COMMAND_HANDLER(cmsis_dap_handle_backend_command)
2045 {
2046         if (CMD_ARGC == 1) {
2047                 if (strcmp(CMD_ARGV[0], "auto") == 0) {
2048                         cmsis_dap_backend = -1; /* autoselect */
2049                 } else {
2050                         for (unsigned int i = 0; i < ARRAY_SIZE(cmsis_dap_backends); i++) {
2051                                 if (strcasecmp(cmsis_dap_backends[i]->name, CMD_ARGV[0]) == 0) {
2052                                         cmsis_dap_backend = i;
2053                                         return ERROR_OK;
2054                                 }
2055                         }
2056
2057                         LOG_ERROR("invalid backend argument to cmsis_dap_backend <backend>");
2058                 }
2059         } else {
2060                 LOG_ERROR("expected exactly one argument to cmsis_dap_backend <backend>");
2061         }
2062
2063         return ERROR_OK;
2064 }
2065
2066 static const struct command_registration cmsis_dap_subcommand_handlers[] = {
2067         {
2068                 .name = "info",
2069                 .handler = &cmsis_dap_handle_info_command,
2070                 .mode = COMMAND_EXEC,
2071                 .usage = "",
2072                 .help = "show cmsis-dap info",
2073         },
2074         {
2075                 .name = "cmd",
2076                 .handler = &cmsis_dap_handle_cmd_command,
2077                 .mode = COMMAND_EXEC,
2078                 .usage = "",
2079                 .help = "issue cmsis-dap command",
2080         },
2081         COMMAND_REGISTRATION_DONE
2082 };
2083
2084
2085 static const struct command_registration cmsis_dap_command_handlers[] = {
2086         {
2087                 .name = "cmsis-dap",
2088                 .mode = COMMAND_ANY,
2089                 .help = "perform CMSIS-DAP management",
2090                 .usage = "<cmd>",
2091                 .chain = cmsis_dap_subcommand_handlers,
2092         },
2093         {
2094                 .name = "cmsis_dap_vid_pid",
2095                 .handler = &cmsis_dap_handle_vid_pid_command,
2096                 .mode = COMMAND_CONFIG,
2097                 .help = "the vendor ID and product ID of the CMSIS-DAP device",
2098                 .usage = "(vid pid)*",
2099         },
2100         {
2101                 .name = "cmsis_dap_backend",
2102                 .handler = &cmsis_dap_handle_backend_command,
2103                 .mode = COMMAND_CONFIG,
2104                 .help = "set the communication backend to use (USB bulk or HID).",
2105                 .usage = "(auto | usb_bulk | hid)",
2106         },
2107 #if BUILD_CMSIS_DAP_USB
2108         {
2109                 .name = "cmsis_dap_usb",
2110                 .chain = cmsis_dap_usb_subcommand_handlers,
2111                 .mode = COMMAND_ANY,
2112                 .help = "USB bulk backend-specific commands",
2113                 .usage = "<cmd>",
2114         },
2115 #endif
2116         COMMAND_REGISTRATION_DONE
2117 };
2118
2119 static const struct swd_driver cmsis_dap_swd_driver = {
2120         .init = cmsis_dap_swd_init,
2121         .switch_seq = cmsis_dap_swd_switch_seq,
2122         .read_reg = cmsis_dap_swd_read_reg,
2123         .write_reg = cmsis_dap_swd_write_reg,
2124         .run = cmsis_dap_swd_run_queue,
2125 };
2126
2127 static const char * const cmsis_dap_transport[] = { "swd", "jtag", NULL };
2128
2129 static struct jtag_interface cmsis_dap_interface = {
2130         .supported = DEBUG_CAP_TMS_SEQ,
2131         .execute_queue = cmsis_dap_execute_queue,
2132 };
2133
2134 struct adapter_driver cmsis_dap_adapter_driver = {
2135         .name = "cmsis-dap",
2136         .transports = cmsis_dap_transport,
2137         .commands = cmsis_dap_command_handlers,
2138
2139         .init = cmsis_dap_init,
2140         .quit = cmsis_dap_quit,
2141         .reset = cmsis_dap_reset,
2142         .speed = cmsis_dap_speed,
2143         .khz = cmsis_dap_khz,
2144         .speed_div = cmsis_dap_speed_div,
2145         .config_trace = cmsis_dap_config_trace,
2146         .poll_trace = cmsis_dap_poll_trace,
2147
2148         .jtag_ops = &cmsis_dap_interface,
2149         .swd_ops = &cmsis_dap_swd_driver,
2150 };