1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * Copyright (C) 2007,2008 Øyvind Harboe *
6 * oyvind.harboe@zylin.com *
8 * Copyright (C) 2009 SoftPLC Corporation *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
17 * This program is distributed in the hope that it will be useful, *
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
20 * GNU General Public License for more details. *
22 * You should have received a copy of the GNU General Public License *
23 * along with this program; if not, write to the *
24 * Free Software Foundation, Inc., *
25 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
26 ***************************************************************************/
31 #include "replacements.h"
45 /* note that this is not marked as static as it must be available from outside jtag.c for those
46 that implement the jtag_xxx() minidriver layer
48 int jtag_error=ERROR_OK;
50 typedef struct cmd_queue_page_s
54 struct cmd_queue_page_s *next;
57 #define CMD_QUEUE_PAGE_SIZE (1024 * 1024)
58 static cmd_queue_page_t *cmd_queue_pages = NULL;
60 char* jtag_event_strings[] =
62 "JTAG controller reset (RESET or TRST)"
65 const Jim_Nvp nvp_jtag_tap_event[] = {
66 { .value = JTAG_TAP_EVENT_ENABLE, .name = "tap-enable" },
67 { .value = JTAG_TAP_EVENT_DISABLE, .name = "tap-disable" },
69 { .name = NULL, .value = -1 }
75 jtag_command_t *jtag_command_queue = NULL;
76 jtag_command_t **last_comand_pointer = &jtag_command_queue;
77 static jtag_tap_t *jtag_all_taps = NULL;
79 enum reset_types jtag_reset_config = RESET_NONE;
80 tap_state_t cmd_queue_end_state = TAP_RESET;
81 tap_state_t cmd_queue_cur_state = TAP_RESET;
83 int jtag_verify_capture_ir = 1;
85 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
86 static int jtag_nsrst_delay = 0; /* default to no nSRST delay */
87 static int jtag_ntrst_delay = 0; /* default to no nTRST delay */
89 /* maximum number of JTAG devices expected in the chain
91 #define JTAG_MAX_CHAIN_SIZE 20
93 /* callbacks to inform high-level handlers about JTAG state changes */
94 jtag_event_callback_t *jtag_event_callbacks;
97 static int speed_khz = 0;
98 /* flag if the kHz speed was defined */
99 static int hasKHz = 0;
101 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
104 #if BUILD_ECOSBOARD == 1
105 extern jtag_interface_t zy1000_interface;
108 #if BUILD_PARPORT == 1
109 extern jtag_interface_t parport_interface;
113 extern jtag_interface_t dummy_interface;
116 #if BUILD_FT2232_FTD2XX == 1
117 extern jtag_interface_t ft2232_interface;
120 #if BUILD_FT2232_LIBFTDI == 1
121 extern jtag_interface_t ft2232_interface;
124 #if BUILD_AMTJTAGACCEL == 1
125 extern jtag_interface_t amt_jtagaccel_interface;
128 #if BUILD_EP93XX == 1
129 extern jtag_interface_t ep93xx_interface;
132 #if BUILD_AT91RM9200 == 1
133 extern jtag_interface_t at91rm9200_interface;
136 #if BUILD_GW16012 == 1
137 extern jtag_interface_t gw16012_interface;
140 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
141 extern jtag_interface_t presto_interface;
144 #if BUILD_USBPROG == 1
145 extern jtag_interface_t usbprog_interface;
149 extern jtag_interface_t jlink_interface;
152 #if BUILD_VSLLINK == 1
153 extern jtag_interface_t vsllink_interface;
157 extern jtag_interface_t rlink_interface;
160 #if BUILD_ARMJTAGEW == 1
161 extern jtag_interface_t armjtagew_interface;
164 jtag_interface_t *jtag_interfaces[] = {
165 #if BUILD_ECOSBOARD == 1
168 #if BUILD_PARPORT == 1
174 #if BUILD_FT2232_FTD2XX == 1
177 #if BUILD_FT2232_LIBFTDI == 1
180 #if BUILD_AMTJTAGACCEL == 1
181 &amt_jtagaccel_interface,
183 #if BUILD_EP93XX == 1
186 #if BUILD_AT91RM9200 == 1
187 &at91rm9200_interface,
189 #if BUILD_GW16012 == 1
192 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
195 #if BUILD_USBPROG == 1
201 #if BUILD_VSLLINK == 1
207 #if BUILD_ARMJTAGEW == 1
208 &armjtagew_interface,
213 jtag_interface_t *jtag = NULL;
216 static jtag_interface_t *jtag_interface = NULL;
219 /* forward declarations */
220 //void jtag_add_pathmove(int num_states, tap_state_t *path);
221 //void jtag_add_runtest(int num_cycles, tap_state_t endstate);
222 //void jtag_add_end_state(tap_state_t endstate);
223 //void jtag_add_sleep(u32 us);
224 //int jtag_execute_queue(void);
225 static tap_state_t tap_state_by_name(const char *name);
228 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
229 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
230 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
231 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
232 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
233 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
234 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
236 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
238 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
239 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
240 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
241 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
242 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
244 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
246 jtag_tap_t *jtag_AllTaps(void)
248 return jtag_all_taps;
251 int jtag_NumTotalTaps(void)
265 int jtag_NumEnabledTaps(void)
281 jtag_tap_t *jtag_TapByString( const char *s )
289 if( 0 == strcmp( t->dotted_name, s ) ){
295 /* backup plan is by number */
297 /* ok - is "s" a number? */
299 n = strtol( s, &cp, 0 );
300 if( (s != cp) && (*cp == 0) ){
302 t = jtag_TapByAbsPosition(n);
308 jtag_tap_t * jtag_TapByJimObj( Jim_Interp *interp, Jim_Obj *o )
313 cp = Jim_GetString( o, NULL );
318 t = jtag_TapByString( cp );
321 Jim_SetResult_sprintf(interp,"Tap: %s is unknown", cp );
326 /* returns a pointer to the n-th device in the scan chain */
327 jtag_tap_t * jtag_TapByAbsPosition( int n )
335 while( t && (n > 0)) {
342 int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
344 jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
346 if (callback == NULL)
348 return ERROR_INVALID_ARGUMENTS;
353 while ((*callbacks_p)->next)
354 callbacks_p = &((*callbacks_p)->next);
355 callbacks_p = &((*callbacks_p)->next);
358 (*callbacks_p) = malloc(sizeof(jtag_event_callback_t));
359 (*callbacks_p)->callback = callback;
360 (*callbacks_p)->priv = priv;
361 (*callbacks_p)->next = NULL;
366 int jtag_unregister_event_callback(int (*callback)(enum jtag_event event, void *priv))
368 jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
370 if (callback == NULL)
372 return ERROR_INVALID_ARGUMENTS;
377 jtag_event_callback_t **next = &((*callbacks_p)->next);
378 if ((*callbacks_p)->callback == callback)
381 *callbacks_p = *next;
389 int jtag_call_event_callbacks(enum jtag_event event)
391 jtag_event_callback_t *callback = jtag_event_callbacks;
393 LOG_DEBUG("jtag event: %s", jtag_event_strings[event]);
397 callback->callback(event, callback->priv);
398 callback = callback->next;
404 /* returns a pointer to the pointer of the last command in queue
405 * this may be a pointer to the root pointer (jtag_command_queue)
406 * or to the next member of the last but one command
408 jtag_command_t** jtag_get_last_command_p(void)
410 /* jtag_command_t *cmd = jtag_command_queue;
416 return &jtag_command_queue;
420 return last_comand_pointer;
423 void* cmd_queue_alloc(size_t size)
425 cmd_queue_page_t **p_page = &cmd_queue_pages;
431 * We align/round the *SIZE* per below
432 * so that all pointers returned by
433 * this function are reasonably well
436 * If we did not, then an "odd-length" request would cause the
437 * *next* allocation to be at an *odd* address, and because
438 * this function has the same type of api as malloc() - we
439 * must also return pointers that have the same type of
442 * What I do not/have is a reasonable portable means
445 * The solution here, is based on these suggestions.
446 * http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
449 union worse_case_align {
455 #define ALIGN_SIZE (sizeof(union worse_case_align))
457 /* The alignment process. */
458 size = (size + ALIGN_SIZE -1) & (~(ALIGN_SIZE-1));
463 while ((*p_page)->next)
464 p_page = &((*p_page)->next);
465 if (CMD_QUEUE_PAGE_SIZE - (*p_page)->used < size)
466 p_page = &((*p_page)->next);
471 *p_page = malloc(sizeof(cmd_queue_page_t));
473 (*p_page)->address = malloc(CMD_QUEUE_PAGE_SIZE);
474 (*p_page)->next = NULL;
477 offset = (*p_page)->used;
478 (*p_page)->used += size;
480 t=(u8 *)((*p_page)->address);
484 void cmd_queue_free(void)
486 cmd_queue_page_t *page = cmd_queue_pages;
490 cmd_queue_page_t *last = page;
496 cmd_queue_pages = NULL;
499 static void jtag_prelude1(void)
503 LOG_WARNING("JTAG command queued, while TRST is low (TAP in reset)");
504 jtag_error=ERROR_JTAG_TRST_ASSERTED;
508 if (cmd_queue_end_state == TAP_RESET)
509 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
512 static void jtag_prelude(tap_state_t state)
516 if (state != TAP_INVALID)
517 jtag_add_end_state(state);
519 cmd_queue_cur_state = cmd_queue_end_state;
522 void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
528 retval=interface_jtag_add_ir_scan(num_fields, fields, cmd_queue_end_state);
529 if (retval!=ERROR_OK)
533 int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
535 jtag_command_t **last_cmd;
542 last_cmd = jtag_get_last_command_p();
544 /* allocate memory for a new list member */
545 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
546 (*last_cmd)->next = NULL;
547 last_comand_pointer = &((*last_cmd)->next);
548 (*last_cmd)->type = JTAG_SCAN;
550 /* allocate memory for ir scan command */
551 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
552 (*last_cmd)->cmd.scan->ir_scan = 1;
553 x = jtag_NumEnabledTaps();
554 (*last_cmd)->cmd.scan->num_fields = x; /* one field per device */
555 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(x * sizeof(scan_field_t));
556 (*last_cmd)->cmd.scan->end_state = state;
563 /* do this here so it is not forgotten */
564 tap = jtag_NextEnabledTap(tap);
569 scan_size = tap->ir_length;
570 (*last_cmd)->cmd.scan->fields[nth_tap].tap = tap;
571 (*last_cmd)->cmd.scan->fields[nth_tap].num_bits = scan_size;
572 (*last_cmd)->cmd.scan->fields[nth_tap].in_value = NULL;
573 (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = NULL; /* disable verification by default */
575 /* search the list */
576 for (j = 0; j < num_fields; j++)
578 if (tap == fields[j].tap)
581 (*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
583 if (jtag_verify_capture_ir)
585 if (fields[j].in_handler==NULL)
587 jtag_set_check_value((*last_cmd)->cmd.scan->fields+nth_tap, tap->expected, tap->expected_mask, NULL);
590 (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = fields[j].in_handler;
591 (*last_cmd)->cmd.scan->fields[nth_tap].in_handler_priv = fields[j].in_handler_priv;
592 (*last_cmd)->cmd.scan->fields[nth_tap].in_check_value = tap->expected;
593 (*last_cmd)->cmd.scan->fields[nth_tap].in_check_mask = tap->expected_mask;
604 /* if a tap isn't listed, set it to BYPASS */
605 (*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_set_ones(cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
609 /* update device information */
610 buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size);
616 void jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
622 retval=interface_jtag_add_plain_ir_scan(num_fields, fields, cmd_queue_end_state);
623 if (retval!=ERROR_OK)
627 int MINIDRIVER(interface_jtag_add_plain_ir_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
630 jtag_command_t **last_cmd;
632 last_cmd = jtag_get_last_command_p();
634 /* allocate memory for a new list member */
635 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
636 (*last_cmd)->next = NULL;
637 last_comand_pointer = &((*last_cmd)->next);
638 (*last_cmd)->type = JTAG_SCAN;
640 /* allocate memory for ir scan command */
641 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
642 (*last_cmd)->cmd.scan->ir_scan = 1;
643 (*last_cmd)->cmd.scan->num_fields = num_fields;
644 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(num_fields * sizeof(scan_field_t));
645 (*last_cmd)->cmd.scan->end_state = state;
647 for( i = 0 ; i < num_fields ; i++ ){
648 int num_bits = fields[i].num_bits;
649 int num_bytes = CEIL(fields[i].num_bits, 8);
650 (*last_cmd)->cmd.scan->fields[i].tap = fields[i].tap;
651 (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits;
652 (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits);
653 (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value;
654 (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value;
655 (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask;
656 (*last_cmd)->cmd.scan->fields[i].in_handler = NULL;
657 (*last_cmd)->cmd.scan->fields[i].in_handler_priv = NULL;
662 void jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
668 retval=interface_jtag_add_dr_scan(num_fields, fields, cmd_queue_end_state);
669 if (retval!=ERROR_OK)
673 int MINIDRIVER(interface_jtag_add_dr_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
677 int bypass_devices = 0;
681 jtag_command_t **last_cmd = jtag_get_last_command_p();
684 /* count devices in bypass */
688 tap = jtag_NextEnabledTap(tap);
697 /* allocate memory for a new list member */
698 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
699 last_comand_pointer = &((*last_cmd)->next);
700 (*last_cmd)->next = NULL;
701 (*last_cmd)->type = JTAG_SCAN;
703 /* allocate memory for dr scan command */
704 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
705 (*last_cmd)->cmd.scan->ir_scan = 0;
706 (*last_cmd)->cmd.scan->num_fields = num_fields + bypass_devices;
707 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc((num_fields + bypass_devices) * sizeof(scan_field_t));
708 (*last_cmd)->cmd.scan->end_state = state;
714 tap = jtag_NextEnabledTap(tap);
719 (*last_cmd)->cmd.scan->fields[field_count].tap = tap;
721 for (j = 0; j < num_fields; j++)
723 if (tap == fields[j].tap)
726 scan_size = fields[j].num_bits;
727 (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size;
728 (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
729 (*last_cmd)->cmd.scan->fields[field_count].in_value = fields[j].in_value;
730 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = fields[j].in_check_value;
731 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = fields[j].in_check_mask;
732 (*last_cmd)->cmd.scan->fields[field_count].in_handler = fields[j].in_handler;
733 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = fields[j].in_handler_priv;
738 #ifdef _DEBUG_JTAG_IO_
739 /* if a device isn't listed, the BYPASS register should be selected */
742 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
746 /* program the scan field to 1 bit length, and ignore it's value */
747 (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1;
748 (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL;
749 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
750 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
751 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
752 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
753 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
757 #ifdef _DEBUG_JTAG_IO_
758 /* if a device is listed, the BYPASS register must not be selected */
761 LOG_ERROR("BUG: scan data for a device in BYPASS");
770 void MINIDRIVER(interface_jtag_add_dr_out)(jtag_tap_t *target_tap,
774 tap_state_t end_state)
779 int bypass_devices = 0;
781 jtag_command_t **last_cmd = jtag_get_last_command_p();
784 /* count devices in bypass */
788 tap = jtag_NextEnabledTap(tap);
797 /* allocate memory for a new list member */
798 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
799 last_comand_pointer = &((*last_cmd)->next);
800 (*last_cmd)->next = NULL;
801 (*last_cmd)->type = JTAG_SCAN;
803 /* allocate memory for dr scan command */
804 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
805 (*last_cmd)->cmd.scan->ir_scan = 0;
806 (*last_cmd)->cmd.scan->num_fields = num_fields + bypass_devices;
807 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc((num_fields + bypass_devices) * sizeof(scan_field_t));
808 (*last_cmd)->cmd.scan->end_state = end_state;
813 tap = jtag_NextEnabledTap(tap);
818 (*last_cmd)->cmd.scan->fields[field_count].tap = tap;
820 if (tap == target_tap)
823 #ifdef _DEBUG_JTAG_IO_
824 /* if a device is listed, the BYPASS register must not be selected */
827 LOG_ERROR("BUG: scan data for a device in BYPASS");
831 for (j = 0; j < num_fields; j++)
834 scan_size = num_bits[j];
835 buf_set_u32(out_value, 0, scan_size, value[j]);
836 (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size;
837 (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
838 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
839 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
840 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
841 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
842 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
846 #ifdef _DEBUG_JTAG_IO_
847 /* if a device isn't listed, the BYPASS register should be selected */
850 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
854 /* program the scan field to 1 bit length, and ignore it's value */
855 (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1;
856 (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL;
857 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
858 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
859 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
860 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
861 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
866 void jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
872 retval=interface_jtag_add_plain_dr_scan(num_fields, fields, cmd_queue_end_state);
873 if (retval!=ERROR_OK)
877 int MINIDRIVER(interface_jtag_add_plain_dr_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
880 jtag_command_t **last_cmd = jtag_get_last_command_p();
882 /* allocate memory for a new list member */
883 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
884 last_comand_pointer = &((*last_cmd)->next);
885 (*last_cmd)->next = NULL;
886 (*last_cmd)->type = JTAG_SCAN;
888 /* allocate memory for scan command */
889 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
890 (*last_cmd)->cmd.scan->ir_scan = 0;
891 (*last_cmd)->cmd.scan->num_fields = num_fields;
892 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(num_fields * sizeof(scan_field_t));
893 (*last_cmd)->cmd.scan->end_state = state;
895 for (i = 0; i < num_fields; i++)
897 int num_bits = fields[i].num_bits;
898 int num_bytes = CEIL(fields[i].num_bits, 8);
899 (*last_cmd)->cmd.scan->fields[i].tap = fields[i].tap;
900 (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits;
901 (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits);
902 (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value;
903 (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value;
904 (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask;
905 (*last_cmd)->cmd.scan->fields[i].in_handler = fields[i].in_handler;
906 (*last_cmd)->cmd.scan->fields[i].in_handler_priv = fields[i].in_handler_priv;
912 void jtag_add_tlr(void)
914 jtag_prelude(TAP_RESET);
917 retval=interface_jtag_add_tlr();
918 if (retval!=ERROR_OK)
922 int MINIDRIVER(interface_jtag_add_tlr)(void)
924 tap_state_t state = TAP_RESET;
925 jtag_command_t **last_cmd = jtag_get_last_command_p();
927 /* allocate memory for a new list member */
928 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
929 last_comand_pointer = &((*last_cmd)->next);
930 (*last_cmd)->next = NULL;
931 (*last_cmd)->type = JTAG_STATEMOVE;
933 (*last_cmd)->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t));
934 (*last_cmd)->cmd.statemove->end_state = state;
939 void jtag_add_pathmove(int num_states, tap_state_t *path)
941 tap_state_t cur_state=cmd_queue_cur_state;
945 /* the last state has to be a stable state */
946 if (!tap_is_state_stable(path[num_states - 1]))
948 LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
952 for (i=0; i<num_states; i++)
954 if (path[i] == TAP_RESET)
956 LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
959 if ( tap_state_transition(cur_state, true) != path[i]
960 && tap_state_transition(cur_state, false) != path[i])
962 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[i]));
970 retval=interface_jtag_add_pathmove(num_states, path);
971 cmd_queue_cur_state = path[num_states - 1];
972 if (retval!=ERROR_OK)
976 int MINIDRIVER(interface_jtag_add_pathmove)(int num_states, tap_state_t *path)
978 jtag_command_t **last_cmd = jtag_get_last_command_p();
981 /* allocate memory for a new list member */
982 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
983 last_comand_pointer = &((*last_cmd)->next);
984 (*last_cmd)->next = NULL;
985 (*last_cmd)->type = JTAG_PATHMOVE;
987 (*last_cmd)->cmd.pathmove = cmd_queue_alloc(sizeof(pathmove_command_t));
988 (*last_cmd)->cmd.pathmove->num_states = num_states;
989 (*last_cmd)->cmd.pathmove->path = cmd_queue_alloc(sizeof(tap_state_t) * num_states);
991 for (i = 0; i < num_states; i++)
992 (*last_cmd)->cmd.pathmove->path[i] = path[i];
997 int MINIDRIVER(interface_jtag_add_runtest)(int num_cycles, tap_state_t state)
999 jtag_command_t **last_cmd = jtag_get_last_command_p();
1001 /* allocate memory for a new list member */
1002 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1003 (*last_cmd)->next = NULL;
1004 last_comand_pointer = &((*last_cmd)->next);
1005 (*last_cmd)->type = JTAG_RUNTEST;
1007 (*last_cmd)->cmd.runtest = cmd_queue_alloc(sizeof(runtest_command_t));
1008 (*last_cmd)->cmd.runtest->num_cycles = num_cycles;
1009 (*last_cmd)->cmd.runtest->end_state = state;
1014 void jtag_add_runtest(int num_cycles, tap_state_t state)
1018 jtag_prelude(state);
1020 /* executed by sw or hw fifo */
1021 retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);
1022 if (retval!=ERROR_OK)
1027 int MINIDRIVER(interface_jtag_add_clocks)( int num_cycles )
1029 jtag_command_t **last_cmd = jtag_get_last_command_p();
1031 /* allocate memory for a new list member */
1032 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1033 (*last_cmd)->next = NULL;
1034 last_comand_pointer = &((*last_cmd)->next);
1035 (*last_cmd)->type = JTAG_STABLECLOCKS;
1037 (*last_cmd)->cmd.stableclocks = cmd_queue_alloc(sizeof(stableclocks_command_t));
1038 (*last_cmd)->cmd.stableclocks->num_cycles = num_cycles;
1042 void jtag_add_clocks( int num_cycles )
1046 if( !tap_is_state_stable(cmd_queue_cur_state) )
1048 LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
1049 tap_state_name(cmd_queue_cur_state) );
1050 jtag_error = ERROR_JTAG_NOT_STABLE_STATE;
1054 if( num_cycles > 0 )
1058 retval = interface_jtag_add_clocks(num_cycles);
1059 if (retval != ERROR_OK)
1064 void jtag_add_reset(int req_tlr_or_trst, int req_srst)
1066 int trst_with_tlr = 0;
1069 /* FIX!!! there are *many* different cases here. A better
1070 * approach is needed for legal combinations of transitions...
1072 if ((jtag_reset_config & RESET_HAS_SRST)&&
1073 (jtag_reset_config & RESET_HAS_TRST)&&
1074 ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0))
1076 if (((req_tlr_or_trst&&!jtag_trst)||
1077 (!req_tlr_or_trst&&jtag_trst))&&
1078 ((req_srst&&!jtag_srst)||
1079 (!req_srst&&jtag_srst)))
1081 /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
1082 //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
1086 /* Make sure that jtag_reset_config allows the requested reset */
1087 /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
1088 if (((jtag_reset_config & RESET_SRST_PULLS_TRST) && (req_srst == 1)) && (!req_tlr_or_trst))
1090 LOG_ERROR("BUG: requested reset would assert trst");
1091 jtag_error=ERROR_FAIL;
1095 /* if TRST pulls SRST, we reset with TAP T-L-R */
1096 if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
1101 if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
1103 LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
1104 jtag_error=ERROR_FAIL;
1108 if (req_tlr_or_trst)
1110 if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
1122 jtag_srst = req_srst;
1124 retval = interface_jtag_add_reset(jtag_trst, jtag_srst);
1125 if (retval!=ERROR_OK)
1133 LOG_DEBUG("SRST line asserted");
1137 LOG_DEBUG("SRST line released");
1138 if (jtag_nsrst_delay)
1139 jtag_add_sleep(jtag_nsrst_delay * 1000);
1144 LOG_DEBUG("JTAG reset with RESET instead of TRST");
1145 jtag_add_end_state(TAP_RESET);
1147 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1153 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
1154 * and inform possible listeners about this
1156 LOG_DEBUG("TRST line asserted");
1157 cmd_queue_cur_state = TAP_RESET;
1158 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1162 if (jtag_ntrst_delay)
1163 jtag_add_sleep(jtag_ntrst_delay * 1000);
1167 int MINIDRIVER(interface_jtag_add_reset)(int req_trst, int req_srst)
1169 jtag_command_t **last_cmd = jtag_get_last_command_p();
1171 /* allocate memory for a new list member */
1172 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1173 (*last_cmd)->next = NULL;
1174 last_comand_pointer = &((*last_cmd)->next);
1175 (*last_cmd)->type = JTAG_RESET;
1177 (*last_cmd)->cmd.reset = cmd_queue_alloc(sizeof(reset_command_t));
1178 (*last_cmd)->cmd.reset->trst = req_trst;
1179 (*last_cmd)->cmd.reset->srst = req_srst;
1184 void jtag_add_end_state(tap_state_t state)
1186 cmd_queue_end_state = state;
1187 if ((cmd_queue_end_state == TAP_DRSHIFT)||(cmd_queue_end_state == TAP_IRSHIFT))
1189 LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
1193 int MINIDRIVER(interface_jtag_add_sleep)(u32 us)
1195 jtag_command_t **last_cmd = jtag_get_last_command_p();
1197 /* allocate memory for a new list member */
1198 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1199 (*last_cmd)->next = NULL;
1200 last_comand_pointer = &((*last_cmd)->next);
1201 (*last_cmd)->type = JTAG_SLEEP;
1203 (*last_cmd)->cmd.sleep = cmd_queue_alloc(sizeof(sleep_command_t));
1204 (*last_cmd)->cmd.sleep->us = us;
1209 void jtag_add_sleep(u32 us)
1211 keep_alive(); /* we might be running on a very slow JTAG clk */
1212 int retval=interface_jtag_add_sleep(us);
1213 if (retval!=ERROR_OK)
1218 int jtag_scan_size(scan_command_t *cmd)
1223 /* count bits in scan command */
1224 for (i = 0; i < cmd->num_fields; i++)
1226 bit_count += cmd->fields[i].num_bits;
1232 int jtag_build_buffer(scan_command_t *cmd, u8 **buffer)
1237 bit_count = jtag_scan_size(cmd);
1238 *buffer = malloc(CEIL(bit_count, 8));
1242 #ifdef _DEBUG_JTAG_IO_
1243 LOG_DEBUG("%s num_fields: %i", cmd->ir_scan ? "IRSCAN" : "DRSCAN", cmd->num_fields);
1246 for (i = 0; i < cmd->num_fields; i++)
1248 if (cmd->fields[i].out_value)
1250 #ifdef _DEBUG_JTAG_IO_
1251 char* char_buf = buf_to_str(cmd->fields[i].out_value, (cmd->fields[i].num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : cmd->fields[i].num_bits, 16);
1253 buf_set_buf(cmd->fields[i].out_value, 0, *buffer, bit_count, cmd->fields[i].num_bits);
1254 #ifdef _DEBUG_JTAG_IO_
1255 LOG_DEBUG("fields[%i].out_value[%i]: 0x%s", i, cmd->fields[i].num_bits, char_buf);
1261 #ifdef _DEBUG_JTAG_IO_
1262 LOG_DEBUG("fields[%i].out_value[%i]: NULL", i, cmd->fields[i].num_bits);
1266 bit_count += cmd->fields[i].num_bits;
1269 #ifdef _DEBUG_JTAG_IO_
1270 //LOG_DEBUG("bit_count totalling: %i", bit_count );
1276 int jtag_read_buffer(u8 *buffer, scan_command_t *cmd)
1282 /* we return ERROR_OK, unless a check fails, or a handler reports a problem */
1285 for (i = 0; i < cmd->num_fields; i++)
1287 /* if neither in_value nor in_handler
1288 * are specified we don't have to examine this field
1290 if (cmd->fields[i].in_value || cmd->fields[i].in_handler)
1292 int num_bits = cmd->fields[i].num_bits;
1293 u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits);
1295 #ifdef _DEBUG_JTAG_IO_
1296 char *char_buf = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1297 LOG_DEBUG("fields[%i].in_value[%i]: 0x%s", i, num_bits, char_buf);
1301 if (cmd->fields[i].in_value)
1303 buf_cpy(captured, cmd->fields[i].in_value, num_bits);
1305 if (cmd->fields[i].in_handler)
1307 if (cmd->fields[i].in_handler(cmd->fields[i].in_value, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK)
1309 LOG_WARNING("in_handler: with \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" );
1310 retval = ERROR_JTAG_QUEUE_FAILED;
1315 /* no in_value specified, but a handler takes care of the scanned data */
1316 if (cmd->fields[i].in_handler && (!cmd->fields[i].in_value))
1318 if (cmd->fields[i].in_handler(captured, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK)
1320 /* We're going to call the error:handler later, but if the in_handler
1321 * reported an error we report this failure upstream
1323 LOG_WARNING("in_handler: w/o \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" );
1324 retval = ERROR_JTAG_QUEUE_FAILED;
1330 bit_count += cmd->fields[i].num_bits;
1336 static const char *jtag_tap_name(jtag_tap_t *tap)
1338 return (tap == NULL) ? "(unknown)" : tap->dotted_name;
1341 int jtag_check_value(u8 *captured, void *priv, scan_field_t *field)
1343 int retval = ERROR_OK;
1344 int num_bits = field->num_bits;
1346 int compare_failed = 0;
1348 if (field->in_check_mask)
1349 compare_failed = buf_cmp_mask(captured, field->in_check_value, field->in_check_mask, num_bits);
1351 compare_failed = buf_cmp(captured, field->in_check_value, num_bits);
1353 if (compare_failed){
1354 /* An error handler could have caught the failing check
1355 * only report a problem when there wasn't a handler, or if the handler
1356 * acknowledged the error
1358 LOG_WARNING("TAP %s:",
1359 jtag_tap_name(field->tap));
1362 char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1363 char *in_check_value_char = buf_to_str(field->in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1365 if (field->in_check_mask)
1367 char *in_check_mask_char;
1368 in_check_mask_char = buf_to_str(field->in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1369 LOG_WARNING("value captured during scan didn't pass the requested check:");
1370 LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
1371 captured_char, in_check_value_char, in_check_mask_char);
1372 free(in_check_mask_char);
1376 LOG_WARNING("value captured during scan didn't pass the requested check: captured: 0x%s check_value: 0x%s", captured_char, in_check_value_char);
1379 free(captured_char);
1380 free(in_check_value_char);
1382 retval = ERROR_JTAG_QUEUE_FAILED;
1390 set up checking of this field using the in_handler. The values passed in must be valid until
1391 after jtag_execute() has completed.
1393 void jtag_set_check_value(scan_field_t *field, u8 *value, u8 *mask, error_handler_t *in_error_handler)
1396 field->in_handler = jtag_check_value;
1398 field->in_handler = NULL; /* No check, e.g. embeddedice uses value==NULL to indicate no check */
1399 field->in_handler_priv = NULL;
1400 field->in_check_value = value;
1401 field->in_check_mask = mask;
1404 enum scan_type jtag_scan_type(scan_command_t *cmd)
1409 for (i = 0; i < cmd->num_fields; i++)
1411 if (cmd->fields[i].in_value || cmd->fields[i].in_handler)
1413 if (cmd->fields[i].out_value)
1420 int MINIDRIVER(interface_jtag_execute_queue)(void)
1426 LOG_ERROR("No JTAG interface configured yet. Issue 'init' command in startup scripts before communicating with targets.");
1430 retval = jtag->execute_queue();
1434 jtag_command_queue = NULL;
1435 last_comand_pointer = &jtag_command_queue;
1440 int jtag_execute_queue(void)
1442 int retval=interface_jtag_execute_queue();
1443 if (retval==ERROR_OK)
1447 jtag_error=ERROR_OK;
1451 int jtag_reset_callback(enum jtag_event event, void *priv)
1453 jtag_tap_t *tap = priv;
1457 if (event == JTAG_TRST_ASSERTED)
1459 buf_set_ones(tap->cur_instr, tap->ir_length);
1466 void jtag_sleep(u32 us)
1468 alive_sleep(us/1000);
1471 /* Try to examine chain layout according to IEEE 1149.1 §12
1473 int jtag_examine_chain(void)
1477 u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
1480 int device_count = 0;
1481 u8 zero_check = 0x0;
1482 u8 one_check = 0xff;
1485 field.num_bits = sizeof(idcode_buffer) * 8;
1486 field.out_value = idcode_buffer;
1488 field.in_value = idcode_buffer;
1491 field.in_handler = NULL;
1494 for (i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
1496 buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
1499 jtag_add_plain_dr_scan(1, &field, TAP_RESET);
1500 jtag_execute_queue();
1502 for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++)
1504 zero_check |= idcode_buffer[i];
1505 one_check &= idcode_buffer[i];
1508 /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
1509 if ((zero_check == 0x00) || (one_check == 0xff))
1511 LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
1512 return ERROR_JTAG_INIT_FAILED;
1515 /* point at the 1st tap */
1516 tap = jtag_NextEnabledTap(NULL);
1518 LOG_ERROR("JTAG: No taps enabled?");
1519 return ERROR_JTAG_INIT_FAILED;
1522 for (bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
1524 u32 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1525 if ((idcode & 1) == 0)
1527 /* LSB must not be 0, this indicates a device in bypass */
1528 LOG_WARNING("Tap/Device does not have IDCODE");
1539 /* some devices, such as AVR will output all 1's instead of TDI
1540 input value at end of chain. */
1541 if ((idcode == 0x000000FF)||(idcode == 0xFFFFFFFF))
1544 /* End of chain (invalid manufacturer ID)
1546 * The JTAG examine is the very first thing that happens
1548 * A single JTAG device requires only 64 bits to be read back correctly.
1550 * The code below adds a check that the rest of the data scanned (640 bits)
1551 * are all as expected. This helps diagnose/catch problems with the JTAG chain
1553 * earlier and gives more helpful/explicit error messages.
1555 for (bit_count += 32; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;bit_count += 32)
1557 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1558 if (unexpected||((idcode != 0x000000FF)&&(idcode != 0xFFFFFFFF)))
1560 LOG_WARNING("Unexpected idcode after end of chain! %d 0x%08x", bit_count, idcode);
1568 #define EXTRACT_MFG(X) (((X) & 0xffe) >> 1)
1569 manufacturer = EXTRACT_MFG(idcode);
1570 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
1571 part = EXTRACT_PART(idcode);
1572 #define EXTRACT_VER(X) (((X) & 0xf0000000) >> 28)
1573 version = EXTRACT_VER(idcode);
1575 LOG_INFO("JTAG tap: %s tap/device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1576 ((tap != NULL) ? (tap->dotted_name) : "(not-named)"),
1577 idcode, manufacturer, part, version);
1583 tap->idcode = idcode;
1585 if (tap->expected_ids_cnt > 0) {
1586 /* Loop over the expected identification codes and test for a match */
1588 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1589 if( tap->idcode == tap->expected_ids[ii] ){
1594 /* If none of the expected ids matched, log an error */
1595 if (ii == tap->expected_ids_cnt) {
1596 LOG_ERROR("JTAG tap: %s got: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1599 EXTRACT_MFG( tap->idcode ),
1600 EXTRACT_PART( tap->idcode ),
1601 EXTRACT_VER( tap->idcode ) );
1602 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1603 LOG_ERROR("JTAG tap: %s expected %hhu of %hhu: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1606 tap->expected_ids_cnt,
1607 tap->expected_ids[ii],
1608 EXTRACT_MFG( tap->expected_ids[ii] ),
1609 EXTRACT_PART( tap->expected_ids[ii] ),
1610 EXTRACT_VER( tap->expected_ids[ii] ) );
1613 return ERROR_JTAG_INIT_FAILED;
1615 LOG_INFO("JTAG Tap/device matched");
1619 LOG_INFO("JTAG TAP ID: 0x%08x - Unknown - please report (A) chipname and (B) idcode to the openocd project",
1623 tap = jtag_NextEnabledTap(tap);
1628 /* see if number of discovered devices matches configuration */
1629 if (device_count != jtag_NumEnabledTaps())
1631 LOG_ERROR("number of discovered devices in JTAG chain (%i) doesn't match (enabled) configuration (%i), total taps: %d",
1632 device_count, jtag_NumEnabledTaps(), jtag_NumTotalTaps());
1633 LOG_ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1634 return ERROR_JTAG_INIT_FAILED;
1640 int jtag_validate_chain(void)
1643 int total_ir_length = 0;
1649 total_ir_length = 0;
1651 tap = jtag_NextEnabledTap(tap);
1655 total_ir_length += tap->ir_length;
1658 total_ir_length += 2;
1659 ir_test = malloc(CEIL(total_ir_length, 8));
1660 buf_set_ones(ir_test, total_ir_length);
1663 field.num_bits = total_ir_length;
1664 field.out_value = ir_test;
1666 field.in_value = ir_test;
1669 field.in_handler = NULL;
1672 jtag_add_plain_ir_scan(1, &field, TAP_RESET);
1673 jtag_execute_queue();
1679 tap = jtag_NextEnabledTap(tap);
1684 val = buf_get_u32(ir_test, chain_pos, 2);
1687 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1688 LOG_ERROR("Could not validate JTAG scan chain, IR mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, jtag_tap_name(tap), chain_pos, val);
1691 return ERROR_JTAG_INIT_FAILED;
1693 chain_pos += tap->ir_length;
1696 val = buf_get_u32(ir_test, chain_pos, 2);
1699 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1700 LOG_ERROR("Could not validate end of JTAG scan chain, IR mismatch, scan returned 0x%s. pos=%d expected 0x3 got %0x", cbuf, chain_pos, val);
1703 return ERROR_JTAG_INIT_FAILED;
1711 enum jtag_tap_cfg_param {
1715 static Jim_Nvp nvp_config_opts[] = {
1716 { .name = "-event", .value = JCFG_EVENT },
1718 { .name = NULL, .value = -1 }
1721 static int jtag_tap_configure_cmd( Jim_GetOptInfo *goi, jtag_tap_t * tap)
1727 /* parse config or cget options */
1728 while (goi->argc > 0) {
1729 Jim_SetEmptyResult (goi->interp);
1731 e = Jim_GetOpt_Nvp(goi, nvp_config_opts, &n);
1733 Jim_GetOpt_NvpUnknown(goi, nvp_config_opts, 0);
1739 if (goi->argc == 0) {
1740 Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ..." );
1744 e = Jim_GetOpt_Nvp( goi, nvp_jtag_tap_event, &n );
1746 Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
1750 if (goi->isconfigure) {
1751 if (goi->argc != 1) {
1752 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?");
1756 if (goi->argc != 0) {
1757 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?");
1763 jtag_tap_event_action_t *jteap;
1765 jteap = tap->event_action;
1766 /* replace existing? */
1768 if (jteap->event == (enum jtag_tap_event)n->value) {
1771 jteap = jteap->next;
1774 if (goi->isconfigure) {
1775 if (jteap == NULL) {
1777 jteap = calloc(1, sizeof (*jteap));
1779 jteap->event = n->value;
1780 Jim_GetOpt_Obj( goi, &o);
1782 Jim_DecrRefCount(interp, jteap->body);
1784 jteap->body = Jim_DuplicateObj(goi->interp, o);
1785 Jim_IncrRefCount(jteap->body);
1787 /* add to head of event list */
1788 jteap->next = tap->event_action;
1789 tap->event_action = jteap;
1790 Jim_SetEmptyResult(goi->interp);
1793 if (jteap == NULL) {
1794 Jim_SetEmptyResult(goi->interp);
1796 Jim_SetResult(goi->interp, Jim_DuplicateObj(goi->interp, jteap->body));
1803 } /* while (goi->argc) */
1808 static int jim_newtap_cmd( Jim_GetOptInfo *goi )
1818 const Jim_Nvp opts[] = {
1819 #define NTAP_OPT_IRLEN 0
1820 { .name = "-irlen" , .value = NTAP_OPT_IRLEN },
1821 #define NTAP_OPT_IRMASK 1
1822 { .name = "-irmask" , .value = NTAP_OPT_IRMASK },
1823 #define NTAP_OPT_IRCAPTURE 2
1824 { .name = "-ircapture" , .value = NTAP_OPT_IRCAPTURE },
1825 #define NTAP_OPT_ENABLED 3
1826 { .name = "-enable" , .value = NTAP_OPT_ENABLED },
1827 #define NTAP_OPT_DISABLED 4
1828 { .name = "-disable" , .value = NTAP_OPT_DISABLED },
1829 #define NTAP_OPT_EXPECTED_ID 5
1830 { .name = "-expected-id" , .value = NTAP_OPT_EXPECTED_ID },
1831 { .name = NULL , .value = -1 },
1834 pTap = malloc( sizeof(jtag_tap_t) );
1835 memset( pTap, 0, sizeof(*pTap) );
1837 Jim_SetResult_sprintf( goi->interp, "no memory");
1841 * we expect CHIP + TAP + OPTIONS
1843 if( goi->argc < 3 ){
1844 Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
1847 Jim_GetOpt_String( goi, &cp, NULL );
1848 pTap->chip = strdup(cp);
1850 Jim_GetOpt_String( goi, &cp, NULL );
1851 pTap->tapname = strdup(cp);
1853 /* name + dot + name + null */
1854 x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
1856 sprintf( cp, "%s.%s", pTap->chip, pTap->tapname );
1857 pTap->dotted_name = cp;
1859 LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
1860 pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
1862 /* default is enabled */
1865 /* deal with options */
1866 #define NTREQ_IRLEN 1
1867 #define NTREQ_IRCAPTURE 2
1868 #define NTREQ_IRMASK 4
1870 /* clear them as we find them */
1871 reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
1874 e = Jim_GetOpt_Nvp( goi, opts, &n );
1876 Jim_GetOpt_NvpUnknown( goi, opts, 0 );
1879 LOG_DEBUG("Processing option: %s", n->name );
1881 case NTAP_OPT_ENABLED:
1884 case NTAP_OPT_DISABLED:
1887 case NTAP_OPT_EXPECTED_ID:
1889 u32 *new_expected_ids;
1891 e = Jim_GetOpt_Wide( goi, &w );
1893 Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
1897 new_expected_ids = malloc(sizeof(u32) * (pTap->expected_ids_cnt + 1));
1898 if (new_expected_ids == NULL) {
1899 Jim_SetResult_sprintf( goi->interp, "no memory");
1903 memcpy(new_expected_ids, pTap->expected_ids, sizeof(u32) * pTap->expected_ids_cnt);
1905 new_expected_ids[pTap->expected_ids_cnt] = w;
1907 free(pTap->expected_ids);
1908 pTap->expected_ids = new_expected_ids;
1909 pTap->expected_ids_cnt++;
1912 case NTAP_OPT_IRLEN:
1913 case NTAP_OPT_IRMASK:
1914 case NTAP_OPT_IRCAPTURE:
1915 e = Jim_GetOpt_Wide( goi, &w );
1917 Jim_SetResult_sprintf( goi->interp, "option: %s bad parameter", n->name );
1920 if( (w < 0) || (w > 0xffff) ){
1922 Jim_SetResult_sprintf( goi->interp, "option: %s - wacky value: %d (0x%x)",
1923 n->name, (int)(w), (int)(w));
1927 case NTAP_OPT_IRLEN:
1928 pTap->ir_length = w;
1929 reqbits &= (~(NTREQ_IRLEN));
1931 case NTAP_OPT_IRMASK:
1932 pTap->ir_capture_mask = w;
1933 reqbits &= (~(NTREQ_IRMASK));
1935 case NTAP_OPT_IRCAPTURE:
1936 pTap->ir_capture_value = w;
1937 reqbits &= (~(NTREQ_IRCAPTURE));
1940 } /* switch(n->value) */
1941 } /* while( goi->argc ) */
1943 /* Did we get all the options? */
1946 Jim_SetResult_sprintf( goi->interp,
1947 "newtap: %s missing required parameters",
1949 /* TODO: Tell user what is missing :-( */
1950 /* no memory leaks pelase */
1951 free(((void *)(pTap->expected_ids)));
1952 free(((void *)(pTap->chip)));
1953 free(((void *)(pTap->tapname)));
1954 free(((void *)(pTap->dotted_name)));
1955 free(((void *)(pTap)));
1959 pTap->expected = malloc( pTap->ir_length );
1960 pTap->expected_mask = malloc( pTap->ir_length );
1961 pTap->cur_instr = malloc( pTap->ir_length );
1963 buf_set_u32( pTap->expected,
1966 pTap->ir_capture_value );
1967 buf_set_u32( pTap->expected_mask,
1970 pTap->ir_capture_mask );
1971 buf_set_ones( pTap->cur_instr,
1976 jtag_register_event_callback(jtag_reset_callback, pTap );
1978 ppTap = &(jtag_all_taps);
1979 while( (*ppTap) != NULL ){
1980 ppTap = &((*ppTap)->next_tap);
1984 static int n_taps = 0;
1985 pTap->abs_chain_position = n_taps++;
1987 LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
1988 (*ppTap)->dotted_name,
1989 (*ppTap)->abs_chain_position,
1990 (*ppTap)->ir_length,
1991 (*ppTap)->ir_capture_value,
1992 (*ppTap)->ir_capture_mask );
1997 static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
2003 struct command_context_s *context;
2007 JTAG_CMD_INIT_RESET,
2010 JTAG_CMD_TAPDISABLE,
2011 JTAG_CMD_TAPISENABLED,
2016 const Jim_Nvp jtag_cmds[] = {
2017 { .name = "interface" , .value = JTAG_CMD_INTERFACE },
2018 { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET },
2019 { .name = "newtap" , .value = JTAG_CMD_NEWTAP },
2020 { .name = "tapisenabled" , .value = JTAG_CMD_TAPISENABLED },
2021 { .name = "tapenable" , .value = JTAG_CMD_TAPENABLE },
2022 { .name = "tapdisable" , .value = JTAG_CMD_TAPDISABLE },
2023 { .name = "configure" , .value = JTAG_CMD_CONFIGURE },
2024 { .name = "cget" , .value = JTAG_CMD_CGET },
2026 { .name = NULL, .value = -1 },
2029 context = Jim_GetAssocData(interp, "context");
2030 /* go past the command */
2031 Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
2033 e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
2035 Jim_GetOpt_NvpUnknown( &goi, jtag_cmds, 0 );
2038 Jim_SetEmptyResult( goi.interp );
2040 case JTAG_CMD_INTERFACE:
2041 /* return the name of the interface */
2042 /* TCL code might need to know the exact type... */
2043 /* FUTURE: we allow this as a means to "set" the interface. */
2044 if( goi.argc != 0 ){
2045 Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2048 Jim_SetResultString( goi.interp, jtag_interface->name, -1 );
2050 case JTAG_CMD_INIT_RESET:
2051 if( goi.argc != 0 ){
2052 Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2055 e = jtag_init_reset(context);
2056 if( e != ERROR_OK ){
2057 Jim_SetResult_sprintf( goi.interp, "error: %d", e);
2061 case JTAG_CMD_NEWTAP:
2062 return jim_newtap_cmd( &goi );
2064 case JTAG_CMD_TAPISENABLED:
2065 case JTAG_CMD_TAPENABLE:
2066 case JTAG_CMD_TAPDISABLE:
2067 if( goi.argc != 1 ){
2068 Jim_SetResultString( goi.interp, "Too many parameters",-1 );
2074 t = jtag_TapByJimObj( goi.interp, goi.argv[0] );
2079 case JTAG_CMD_TAPISENABLED:
2082 case JTAG_CMD_TAPENABLE:
2083 jtag_tap_handle_event( t, JTAG_TAP_EVENT_ENABLE);
2087 case JTAG_CMD_TAPDISABLE:
2088 jtag_tap_handle_event( t, JTAG_TAP_EVENT_DISABLE);
2093 Jim_SetResult( goi.interp, Jim_NewIntObj( goi.interp, e ) );
2100 Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ...");
2107 Jim_GetOpt_Obj(&goi, &o);
2108 t = jtag_TapByJimObj( goi.interp, o );
2113 goi.isconfigure = 0;
2114 return jtag_tap_configure_cmd( &goi, t);
2118 case JTAG_CMD_CONFIGURE:
2120 Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
2127 Jim_GetOpt_Obj(&goi, &o);
2128 t = jtag_TapByJimObj( goi.interp, o );
2133 goi.isconfigure = 1;
2134 return jtag_tap_configure_cmd( &goi, t);
2141 int jtag_register_commands(struct command_context_s *cmd_ctx)
2143 register_jim( cmd_ctx, "jtag", jim_jtag_command, "perform jtag tap actions");
2145 register_command(cmd_ctx, NULL, "interface", handle_interface_command,
2146 COMMAND_CONFIG, "try to configure interface");
2147 register_command(cmd_ctx, NULL, "jtag_speed", handle_jtag_speed_command,
2148 COMMAND_ANY, "set jtag speed (if supported)");
2149 register_command(cmd_ctx, NULL, "jtag_khz", handle_jtag_khz_command,
2150 COMMAND_ANY, "same as jtag_speed, except it takes maximum khz as arguments. 0 KHz = RTCK.");
2151 register_command(cmd_ctx, NULL, "jtag_device", handle_jtag_device_command,
2152 COMMAND_CONFIG, "jtag_device <ir_length> <ir_expected> <ir_mask>");
2153 register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command,
2155 "[none/trst_only/srst_only/trst_and_srst] [srst_pulls_trst/trst_pulls_srst] [combined/separate] [trst_push_pull/trst_open_drain] [srst_push_pull/srst_open_drain]");
2156 register_command(cmd_ctx, NULL, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command,
2157 COMMAND_ANY, "jtag_nsrst_delay <ms> - delay after deasserting srst in ms");
2158 register_command(cmd_ctx, NULL, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command,
2159 COMMAND_ANY, "jtag_ntrst_delay <ms> - delay after deasserting trst in ms");
2161 register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command,
2162 COMMAND_EXEC, "print current scan chain configuration");
2164 register_command(cmd_ctx, NULL, "endstate", handle_endstate_command,
2165 COMMAND_EXEC, "finish JTAG operations in <tap_state>");
2166 register_command(cmd_ctx, NULL, "jtag_reset", handle_jtag_reset_command,
2167 COMMAND_EXEC, "toggle reset lines <trst> <srst>");
2168 register_command(cmd_ctx, NULL, "runtest", handle_runtest_command,
2169 COMMAND_EXEC, "move to Run-Test/Idle, and execute <num_cycles>");
2170 register_command(cmd_ctx, NULL, "irscan", handle_irscan_command,
2171 COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ...");
2172 register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ...");
2174 register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command,
2175 COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>");
2179 int jtag_interface_init(struct command_context_s *cmd_ctx)
2184 if (!jtag_interface)
2186 /* nothing was previously specified by "interface" command */
2187 LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
2188 return ERROR_JTAG_INVALID_INTERFACE;
2192 jtag_interface->khz(speed_khz, &jtag_speed);
2196 if (jtag_interface->init() != ERROR_OK)
2197 return ERROR_JTAG_INIT_FAILED;
2199 jtag = jtag_interface;
2203 static int jtag_init_inner(struct command_context_s *cmd_ctx)
2208 LOG_DEBUG("Init JTAG chain");
2210 tap = jtag_NextEnabledTap(NULL);
2212 LOG_ERROR("There are no enabled taps?");
2213 return ERROR_JTAG_INIT_FAILED;
2217 if ((retval=jtag_execute_queue())!=ERROR_OK)
2220 /* examine chain first, as this could discover the real chain layout */
2221 if (jtag_examine_chain() != ERROR_OK)
2223 LOG_ERROR("trying to validate configured JTAG chain anyway...");
2226 if (jtag_validate_chain() != ERROR_OK)
2228 LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
2234 int jtag_init_reset(struct command_context_s *cmd_ctx)
2238 if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2241 LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
2243 /* Reset can happen after a power cycle.
2245 * Ideally we would only assert TRST or run RESET before the target reset.
2247 * However w/srst_pulls_trst, trst is asserted together with the target
2248 * reset whether we want it or not.
2250 * NB! Some targets have JTAG circuitry disabled until a
2251 * trst & srst has been asserted.
2253 * NB! here we assume nsrst/ntrst delay are sufficient!
2255 * NB! order matters!!!! srst *can* disconnect JTAG circuitry
2258 jtag_add_reset(1, 0); /* RESET or TRST */
2259 if (jtag_reset_config & RESET_HAS_SRST)
2261 jtag_add_reset(1, 1);
2262 if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
2263 jtag_add_reset(0, 1);
2265 jtag_add_reset(0, 0);
2266 if ((retval = jtag_execute_queue()) != ERROR_OK)
2269 /* Check that we can communication on the JTAG chain + eventually we want to
2270 * be able to perform enumeration only after OpenOCD has started
2271 * telnet and GDB server
2273 * That would allow users to more easily perform any magic they need to before
2276 return jtag_init_inner(cmd_ctx);
2279 int jtag_init(struct command_context_s *cmd_ctx)
2282 if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2284 if (jtag_init_inner(cmd_ctx)==ERROR_OK)
2288 return jtag_init_reset(cmd_ctx);
2291 static int default_khz(int khz, int *jtag_speed)
2293 LOG_ERROR("Translation from khz to jtag_speed not implemented");
2297 static int default_speed_div(int speed, int *khz)
2299 LOG_ERROR("Translation from jtag_speed to khz not implemented");
2303 static int default_power_dropout(int *dropout)
2305 *dropout=0; /* by default we can't detect power dropout */
2309 static int default_srst_asserted(int *srst_asserted)
2311 *srst_asserted=0; /* by default we can't detect srst asserted */
2315 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2320 /* check whether the interface is already configured */
2323 LOG_WARNING("Interface already configured, ignoring");
2327 /* interface name is a mandatory argument */
2328 if (argc < 1 || args[0][0] == '\0')
2330 return ERROR_COMMAND_SYNTAX_ERROR;
2333 for (i=0; jtag_interfaces[i]; i++)
2335 if (strcmp(args[0], jtag_interfaces[i]->name) == 0)
2337 if ((retval = jtag_interfaces[i]->register_commands(cmd_ctx)) != ERROR_OK)
2342 jtag_interface = jtag_interfaces[i];
2344 if (jtag_interface->khz == NULL)
2346 jtag_interface->khz = default_khz;
2348 if (jtag_interface->speed_div == NULL)
2350 jtag_interface->speed_div = default_speed_div;
2352 if (jtag_interface->power_dropout == NULL)
2354 jtag_interface->power_dropout = default_power_dropout;
2356 if (jtag_interface->srst_asserted == NULL)
2358 jtag_interface->srst_asserted = default_srst_asserted;
2365 /* no valid interface was found (i.e. the configuration option,
2366 * didn't match one of the compiled-in interfaces
2368 LOG_ERROR("No valid jtag interface found (%s)", args[0]);
2369 LOG_ERROR("compiled-in jtag interfaces:");
2370 for (i = 0; jtag_interfaces[i]; i++)
2372 LOG_ERROR("%i: %s", i, jtag_interfaces[i]->name);
2375 return ERROR_JTAG_INVALID_INTERFACE;
2378 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2382 Jim_Obj *newargs[ 10 ];
2385 * argv[-1] = command
2386 * argv[ 0] = ir length
2387 * argv[ 1] = ir capture
2388 * argv[ 2] = ir mask
2389 * argv[ 3] = not actually used by anything but in the docs
2393 command_print( cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
2396 command_print( cmd_ctx, "OLD SYNTAX: DEPRECATED - translating to new syntax");
2397 command_print( cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
2401 command_print( cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
2402 command_print( cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
2403 command_print( cmd_ctx, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
2404 command_print( cmd_ctx, "And then refer to the taps by the dotted name.");
2406 newargs[0] = Jim_NewStringObj( interp, "jtag", -1 );
2407 newargs[1] = Jim_NewStringObj( interp, "newtap", -1 );
2408 sprintf( buf, "chip%d", jtag_NumTotalTaps() );
2409 newargs[2] = Jim_NewStringObj( interp, buf, -1 );
2410 sprintf( buf, "tap%d", jtag_NumTotalTaps() );
2411 newargs[3] = Jim_NewStringObj( interp, buf, -1 );
2412 newargs[4] = Jim_NewStringObj( interp, "-irlen", -1 );
2413 newargs[5] = Jim_NewStringObj( interp, args[0], -1 );
2414 newargs[6] = Jim_NewStringObj( interp, "-ircapture", -1 );
2415 newargs[7] = Jim_NewStringObj( interp, args[1], -1 );
2416 newargs[8] = Jim_NewStringObj( interp, "-irmask", -1 );
2417 newargs[9] = Jim_NewStringObj( interp, args[2], -1 );
2419 command_print( cmd_ctx, "NEW COMMAND:");
2420 sprintf( buf, "%s %s %s %s %s %s %s %s %s %s",
2421 Jim_GetString( newargs[0], NULL ),
2422 Jim_GetString( newargs[1], NULL ),
2423 Jim_GetString( newargs[2], NULL ),
2424 Jim_GetString( newargs[3], NULL ),
2425 Jim_GetString( newargs[4], NULL ),
2426 Jim_GetString( newargs[5], NULL ),
2427 Jim_GetString( newargs[6], NULL ),
2428 Jim_GetString( newargs[7], NULL ),
2429 Jim_GetString( newargs[8], NULL ),
2430 Jim_GetString( newargs[9], NULL ) );
2432 e = jim_jtag_command( interp, 10, newargs );
2434 command_print( cmd_ctx, "%s", Jim_GetString( Jim_GetResult(interp), NULL ) );
2439 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2443 tap = jtag_all_taps;
2444 command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
2445 command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
2448 u32 expected, expected_mask, cur_instr, ii;
2449 expected = buf_get_u32(tap->expected, 0, tap->ir_length);
2450 expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
2451 cur_instr = buf_get_u32(tap->cur_instr, 0, tap->ir_length);
2453 command_print(cmd_ctx,
2454 "%2d | %-18s | %c | 0x%08x | 0x%08x | 0x%02x | 0x%02x | 0x%02x | 0x%02x",
2455 tap->abs_chain_position,
2457 tap->enabled ? 'Y' : 'n',
2459 (tap->expected_ids_cnt > 0 ? tap->expected_ids[0] : 0),
2465 for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
2466 command_print(cmd_ctx, " | | | | 0x%08x | | | | ",
2467 tap->expected_ids[ii]);
2470 tap = tap->next_tap;
2476 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2479 return ERROR_COMMAND_SYNTAX_ERROR;
2483 if (strcmp(args[0], "none") == 0)
2484 jtag_reset_config = RESET_NONE;
2485 else if (strcmp(args[0], "trst_only") == 0)
2486 jtag_reset_config = RESET_HAS_TRST;
2487 else if (strcmp(args[0], "srst_only") == 0)
2488 jtag_reset_config = RESET_HAS_SRST;
2489 else if (strcmp(args[0], "trst_and_srst") == 0)
2490 jtag_reset_config = RESET_TRST_AND_SRST;
2493 LOG_ERROR("(1) invalid reset_config argument (%s), defaulting to none", args[0]);
2494 jtag_reset_config = RESET_NONE;
2495 return ERROR_INVALID_ARGUMENTS;
2501 if (strcmp(args[1], "separate") == 0)
2503 /* seperate reset lines - default */
2506 if (strcmp(args[1], "srst_pulls_trst") == 0)
2507 jtag_reset_config |= RESET_SRST_PULLS_TRST;
2508 else if (strcmp(args[1], "trst_pulls_srst") == 0)
2509 jtag_reset_config |= RESET_TRST_PULLS_SRST;
2510 else if (strcmp(args[1], "combined") == 0)
2511 jtag_reset_config |= RESET_SRST_PULLS_TRST | RESET_TRST_PULLS_SRST;
2514 LOG_ERROR("(2) invalid reset_config argument (%s), defaulting to none", args[1]);
2515 jtag_reset_config = RESET_NONE;
2516 return ERROR_INVALID_ARGUMENTS;
2523 if (strcmp(args[2], "trst_open_drain") == 0)
2524 jtag_reset_config |= RESET_TRST_OPEN_DRAIN;
2525 else if (strcmp(args[2], "trst_push_pull") == 0)
2526 jtag_reset_config &= ~RESET_TRST_OPEN_DRAIN;
2529 LOG_ERROR("(3) invalid reset_config argument (%s) defaulting to none", args[2] );
2530 jtag_reset_config = RESET_NONE;
2531 return ERROR_INVALID_ARGUMENTS;
2537 if (strcmp(args[3], "srst_push_pull") == 0)
2538 jtag_reset_config |= RESET_SRST_PUSH_PULL;
2539 else if (strcmp(args[3], "srst_open_drain") == 0)
2540 jtag_reset_config &= ~RESET_SRST_PUSH_PULL;
2543 LOG_ERROR("(4) invalid reset_config argument (%s), defaulting to none", args[3]);
2544 jtag_reset_config = RESET_NONE;
2545 return ERROR_INVALID_ARGUMENTS;
2552 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2556 LOG_ERROR("jtag_nsrst_delay <ms> command takes one required argument");
2561 jtag_nsrst_delay = strtoul(args[0], NULL, 0);
2567 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2571 LOG_ERROR("jtag_ntrst_delay <ms> command takes one required argument");
2576 jtag_ntrst_delay = strtoul(args[0], NULL, 0);
2582 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2584 int retval=ERROR_OK;
2588 LOG_DEBUG("handle jtag speed");
2591 cur_speed = jtag_speed = strtoul(args[0], NULL, 0);
2593 /* this command can be called during CONFIG,
2594 * in which case jtag isn't initialized */
2597 retval=jtag->speed(cur_speed);
2599 } else if (argc == 0)
2603 return ERROR_COMMAND_SYNTAX_ERROR;
2605 command_print(cmd_ctx, "jtag_speed: %d", jtag_speed);
2610 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2612 int retval=ERROR_OK;
2613 LOG_DEBUG("handle jtag khz");
2617 speed_khz = strtoul(args[0], NULL, 0);
2621 LOG_DEBUG("have interface set up");
2623 if ((retval=jtag->khz(speed_khz, &speed_div1))!=ERROR_OK)
2629 cur_speed = jtag_speed = speed_div1;
2631 retval=jtag->speed(cur_speed);
2640 return ERROR_COMMAND_SYNTAX_ERROR;
2645 if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK)
2651 command_print(cmd_ctx, "RCLK - adaptive");
2654 command_print(cmd_ctx, "%d kHz", speed_khz);
2660 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2666 return ERROR_COMMAND_SYNTAX_ERROR;
2670 state = tap_state_by_name( args[0] );
2672 command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
2673 return ERROR_COMMAND_SYNTAX_ERROR;
2675 jtag_add_end_state(state);
2676 jtag_execute_queue();
2678 command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state));
2683 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2690 return ERROR_COMMAND_SYNTAX_ERROR;
2693 if (args[0][0] == '1')
2695 else if (args[0][0] == '0')
2699 return ERROR_COMMAND_SYNTAX_ERROR;
2702 if (args[1][0] == '1')
2704 else if (args[1][0] == '0')
2708 return ERROR_COMMAND_SYNTAX_ERROR;
2711 if (jtag_interface_init(cmd_ctx) != ERROR_OK)
2712 return ERROR_JTAG_INIT_FAILED;
2714 jtag_add_reset(trst, srst);
2715 jtag_execute_queue();
2720 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2724 return ERROR_COMMAND_SYNTAX_ERROR;
2727 jtag_add_runtest(strtol(args[0], NULL, 0), TAP_INVALID);
2728 jtag_execute_queue();
2734 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2737 scan_field_t *fields;
2739 tap_state_t endstate;
2741 if ((argc < 2) || (argc % 2))
2743 return ERROR_COMMAND_SYNTAX_ERROR;
2746 /* optional "-endstate" */
2748 /* at the end of the arguments. */
2750 endstate = TAP_INVALID;
2752 /* have at least one pair of numbers. */
2753 /* is last pair the magic text? */
2754 if( 0 == strcmp( "-endstate", args[ argc - 2 ] ) ){
2757 cpA = args[ argc-1 ];
2758 for( endstate = 0 ; endstate < TAP_NUM_STATES ; endstate++ ){
2759 cpS = tap_state_name( endstate );
2760 if( 0 == strcmp( cpA, cpS ) ){
2764 if( endstate >= TAP_NUM_STATES ){
2765 return ERROR_COMMAND_SYNTAX_ERROR;
2767 /* found - remove the last 2 args */
2773 fields = malloc(sizeof(scan_field_t) * argc / 2);
2775 for (i = 0; i < argc / 2; i++)
2777 tap = jtag_TapByString( args[i*2] );
2780 command_print( cmd_ctx, "Tap: %s unknown", args[i*2] );
2783 int field_size = tap->ir_length;
2784 fields[i].tap = tap;
2785 fields[i].out_value = malloc(CEIL(field_size, 8));
2786 buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0));
2787 fields[i].in_value = NULL;
2788 fields[i].in_check_mask = NULL;
2789 fields[i].in_handler = NULL;
2790 fields[i].in_handler_priv = NULL;
2793 jtag_add_ir_scan(argc / 2, fields, TAP_INVALID);
2794 /* did we have an endstate? */
2795 if (endstate != TAP_INVALID)
2796 jtag_add_end_state(endstate);
2798 jtag_execute_queue();
2800 for (i = 0; i < argc / 2; i++)
2801 free(fields[i].out_value);
2808 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args)
2811 scan_field_t *fields;
2813 int field_count = 0;
2816 tap_state_t endstate;
2819 * args[2] = num_bits
2820 * args[3] = hex string
2821 * ... repeat num bits and hex string ...
2824 * args[N-2] = "-endstate"
2825 * args[N-1] = statename
2827 if ((argc < 4) || ((argc % 2)!=0))
2829 Jim_WrongNumArgs(interp, 1, args, "wrong arguments");
2833 /* assume no endstate */
2834 endstate = TAP_INVALID;
2835 /* validate arguments as numbers */
2837 for (i = 2; i < argc; i+=2)
2842 e = Jim_GetLong(interp, args[i], &bits);
2843 /* If valid - try next arg */
2848 /* Not valid.. are we at the end? */
2849 if ( ((i+2) != argc) ){
2850 /* nope, then error */
2854 /* it could be: "-endstate FOO" */
2856 /* get arg as a string. */
2857 cp = Jim_GetString( args[i], NULL );
2858 /* is it the magic? */
2859 if( 0 == strcmp( "-endstate", cp ) ){
2860 /* is the statename valid? */
2861 cp = Jim_GetString( args[i+1], NULL );
2863 /* see if it is a valid state name */
2864 endstate = tap_state_by_name(cp);
2866 /* update the error message */
2867 Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
2869 /* valid - so clear the error */
2871 /* and remove the last 2 args */
2876 /* Still an error? */
2878 return e; /* too bad */
2880 } /* validate args */
2882 tap = jtag_TapByJimObj( interp, args[1] );
2887 num_fields=(argc-2)/2;
2888 fields = malloc(sizeof(scan_field_t) * num_fields);
2889 for (i = 2; i < argc; i+=2)
2895 Jim_GetLong(interp, args[i], &bits);
2896 str = Jim_GetString(args[i+1], &len);
2898 fields[field_count].tap = tap;
2899 fields[field_count].num_bits = bits;
2900 fields[field_count].out_value = malloc(CEIL(bits, 8));
2901 str_to_buf(str, len, fields[field_count].out_value, bits, 0);
2902 fields[field_count].in_value = fields[field_count].out_value;
2903 fields[field_count].in_check_mask = NULL;
2904 fields[field_count].in_check_value = NULL;
2905 fields[field_count].in_handler = NULL;
2906 fields[field_count++].in_handler_priv = NULL;
2909 jtag_add_dr_scan(num_fields, fields, TAP_INVALID);
2910 /* did we get an end state? */
2911 if (endstate != TAP_INVALID)
2912 jtag_add_end_state(endstate);
2914 retval = jtag_execute_queue();
2915 if (retval != ERROR_OK)
2917 Jim_SetResultString(interp, "drscan: jtag execute failed",-1);
2922 Jim_Obj *list = Jim_NewListObj(interp, NULL, 0);
2923 for (i = 2; i < argc; i+=2)
2928 Jim_GetLong(interp, args[i], &bits);
2929 str = buf_to_str(fields[field_count].in_value, bits, 16);
2930 free(fields[field_count].out_value);
2932 Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str)));
2937 Jim_SetResult(interp, list);
2944 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2948 if (strcmp(args[0], "enable") == 0)
2950 jtag_verify_capture_ir = 1;
2952 else if (strcmp(args[0], "disable") == 0)
2954 jtag_verify_capture_ir = 0;
2957 return ERROR_COMMAND_SYNTAX_ERROR;
2959 } else if (argc != 0)
2961 return ERROR_COMMAND_SYNTAX_ERROR;
2964 command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
2969 int jtag_power_dropout(int *dropout)
2971 return jtag->power_dropout(dropout);
2974 int jtag_srst_asserted(int *srst_asserted)
2976 return jtag->srst_asserted(srst_asserted);
2979 void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
2981 jtag_tap_event_action_t * jteap;
2984 jteap = tap->event_action;
2988 if (jteap->event == e) {
2990 LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
2993 Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
2994 Jim_GetString(jteap->body, NULL) );
2995 if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
2996 Jim_PrintErrorMessage(interp);
3000 jteap = jteap->next;
3004 LOG_DEBUG( "event %d %s - no action",
3006 Jim_Nvp_value2name_simple( nvp_jtag_tap_event, e)->name);
3010 /*-----<Cable Helper API>---------------------------------------*/
3012 /* these Cable Helper API functions are all documented in the jtag.h header file,
3013 using a Doxygen format. And since Doxygen's configuration file "Doxyfile",
3014 is setup to prefer its docs in the header file, no documentation is here, for
3015 if it were, it would have to be doubly maintained.
3019 * @see tap_set_state() and tap_get_state() accessors.
3020 * Actual name is not important since accessors hide it.
3022 static tap_state_t state_follower = TAP_RESET;
3024 void tap_set_state_impl( tap_state_t new_state )
3026 /* this is the state we think the TAPs are in now, was cur_state */
3027 state_follower = new_state;
3030 tap_state_t tap_get_state()
3032 return state_follower;
3036 * @see tap_set_end_state() and tap_get_end_state() accessors.
3037 * Actual name is not important because accessors hide it.
3039 static tap_state_t end_state_follower = TAP_RESET;
3041 void tap_set_end_state( tap_state_t new_end_state )
3043 /* this is the state we think the TAPs will be in at completion of the
3044 current TAP operation, was end_state
3046 end_state_follower = new_end_state;
3049 tap_state_t tap_get_end_state()
3051 return end_state_follower;
3055 int tap_move_ndx( tap_state_t astate )
3057 /* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
3063 case TAP_RESET: ndx = 0; break;
3064 case TAP_DRSHIFT: ndx = 2; break;
3065 case TAP_DRPAUSE: ndx = 3; break;
3066 case TAP_IDLE: ndx = 1; break;
3067 case TAP_IRSHIFT: ndx = 4; break;
3068 case TAP_IRPAUSE: ndx = 5; break;
3070 LOG_ERROR( "fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate) );
3078 /* tap_move[i][j]: tap movement command to go from state i to state j
3079 * 0: Test-Logic-Reset
3086 * DRSHIFT->DRSHIFT and IRSHIFT->IRSHIFT have to be caught in interface specific code
3093 } tms_seqs[6][6] = /* [from_state_ndx][to_state_ndx] */
3095 /* value clocked to TMS to move from one of six stable states to another.
3096 * N.B. OOCD clocks TMS from LSB first, so read these right-to-left.
3097 * N.B. These values are tightly bound to the table in tap_get_tms_path_len().
3098 * N.B. Reset only needs to be 0b11111, but in JLink an even byte of 1's is more stable.
3099 * These extra ones cause no TAP state problem, because we go into reset and stay in reset.
3103 * These macros allow us to specify TMS state transitions by bits rather than hex bytes.
3104 * Read the bits from LSBit first to MSBit last (right-to-left).
3106 #define HEX__(n) 0x##n##LU
3109 (((x) & 0x0000000FLU)?(1<<0):0) \
3110 +(((x) & 0x000000F0LU)?(1<<1):0) \
3111 +(((x) & 0x00000F00LU)?(1<<2):0) \
3112 +(((x) & 0x0000F000LU)?(1<<3):0) \
3113 +(((x) & 0x000F0000LU)?(1<<4):0) \
3114 +(((x) & 0x00F00000LU)?(1<<5):0) \
3115 +(((x) & 0x0F000000LU)?(1<<6):0) \
3116 +(((x) & 0xF0000000LU)?(1<<7):0)
3118 #define B8(bits,count) { ((u8)B8__(HEX__(bits))), (count) }
3120 #if 0 && ((BUILD_FT2232_FTD2XX==1) || (BUILD_FT2232_LIBFTDI==1))
3121 /* this is the table submitted by Jeff Williams on 3/30/2009 with this comment:
3123 OK, I added Peter's version of the state table, and it works OK for
3124 me on MC1322x. I've recreated the jlink portion of patch with this
3125 new state table. His changes to my state table are pretty minor in
3126 terms of total transitions, but Peter feels that his version fixes
3127 some long-standing problems.
3130 I added the bit count into the table
3135 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */ /* from state: */
3136 { B8(11111,5), B8(0,1), B8(0010,4), B8(01010,5), B8(00110,5), B8(010110,6) }, /* RESET */
3137 { B8(11111,5), B8(0,1), B8(001,3), B8(0101,4), B8(0011,4), B8(01011,5) }, /* IDLE */
3138 { B8(11111,5), B8(011,3), B8(00111,5), B8(01,2), B8(001111,6), B8(0101111,7) }, /* DRSHIFT */
3139 { B8(11111,5), B8(011,3), B8(01,2), B8(0,1), B8(001111,6), B8(0101111,7) }, /* DRPAUSE */
3140 { B8(11111,5), B8(011,3), B8(00111,5), B8(010111,6), B8(001111,6), B8(01,2) }, /* IRSHIFT */
3141 { B8(11111,5), B8(011,3), B8(00111,5), B8(010111,6), B8(01,2), B8(0,1) } /* IRPAUSE */
3143 #else /* this is the old table, converted from hex and with the bit_count set to 7 for each combo, like before */
3146 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */ /* from state: */
3147 { B8(1111111,7), B8(0000000,7), B8(0010111,7), B8(0001010,7), B8(0011011,7), B8(0010110,7) }, /* RESET */
3148 { B8(1111111,7), B8(0000000,7), B8(0100101,7), B8(0000101,7), B8(0101011,7), B8(0001011,7) }, /* IDLE */
3149 { B8(1111111,7), B8(0110001,7), B8(0000000,7), B8(0000001,7), B8(0001111,7), B8(0101111,7) }, /* DRSHIFT */
3150 { B8(1111111,7), B8(0110000,7), B8(0100000,7), B8(0010111,7), B8(0011110,7), B8(0101111,7) }, /* DRPAUSE */
3151 { B8(1111111,7), B8(0110001,7), B8(0000111,7), B8(0010111,7), B8(0000000,7), B8(0000001,7) }, /* IRSHIFT */
3152 { B8(1111111,7), B8(0110000,7), B8(0011100,7), B8(0010111,7), B8(0100000,7), B8(0101111,7) }, /* IRPAUSE */
3156 #if 0 /* keeping old hex stuff for awhile, for reference */
3157 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */
3158 { 0x7f, 0x00, 0x17, 0x0a, 0x1b, 0x16 }, /* RESET */
3159 { 0x7f, 0x00, 0x25, 0x05, 0x2b, 0x0b }, /* IDLE */
3160 { 0x7f, 0x31, 0x00, 0x01, 0x0f, 0x2f }, /* DRSHIFT */
3161 { 0x7f, 0x30, 0x20, 0x17, 0x1e, 0x2f }, /* DRPAUSE */
3162 { 0x7f, 0x31, 0x07, 0x17, 0x00, 0x01 }, /* IRSHIFT */
3163 { 0x7f, 0x30, 0x1c, 0x17, 0x20, 0x2f } /* IRPAUSE */
3168 int tap_get_tms_path( tap_state_t from, tap_state_t to )
3170 return tms_seqs[tap_move_ndx(from)][tap_move_ndx(to)].bits;
3174 int tap_get_tms_path_len( tap_state_t from, tap_state_t to )
3176 return tms_seqs[tap_move_ndx(from)][tap_move_ndx(to)].bit_count;
3180 bool tap_is_state_stable(tap_state_t astate)
3184 /* A switch() is used because it is symbol dependent
3185 (not value dependent like an array), and can also check bounds.
3204 tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
3206 tap_state_t new_state;
3208 /* A switch is used because it is symbol dependent and not value dependent
3209 like an array. Also it can check for out of range conditions.
3217 new_state = cur_state;
3222 new_state = TAP_DRSELECT;
3225 new_state = TAP_IRSELECT;
3229 new_state = TAP_DREXIT1;
3233 new_state = TAP_DRUPDATE;
3236 new_state = TAP_DREXIT2;
3239 new_state = TAP_RESET;
3243 new_state = TAP_IREXIT1;
3247 new_state = TAP_IRUPDATE;
3250 new_state = TAP_IREXIT2;
3253 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3266 new_state = TAP_IDLE;
3269 new_state = TAP_DRCAPTURE;
3274 new_state = TAP_DRSHIFT;
3278 new_state = TAP_DRPAUSE;
3281 new_state = TAP_IRCAPTURE;
3286 new_state = TAP_IRSHIFT;
3290 new_state = TAP_IRPAUSE;
3293 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3302 const char* tap_state_name(tap_state_t state)
3308 case TAP_RESET: ret = "RESET"; break;
3309 case TAP_IDLE: ret = "RUN/IDLE"; break;
3310 case TAP_DRSELECT: ret = "DRSELECT"; break;
3311 case TAP_DRCAPTURE: ret = "DRCAPTURE"; break;
3312 case TAP_DRSHIFT: ret = "DRSHIFT"; break;
3313 case TAP_DREXIT1: ret = "DREXIT1"; break;
3314 case TAP_DRPAUSE: ret = "DRPAUSE"; break;
3315 case TAP_DREXIT2: ret = "DREXIT2"; break;
3316 case TAP_DRUPDATE: ret = "DRUPDATE"; break;
3317 case TAP_IRSELECT: ret = "IRSELECT"; break;
3318 case TAP_IRCAPTURE: ret = "IRCAPTURE"; break;
3319 case TAP_IRSHIFT: ret = "IRSHIFT"; break;
3320 case TAP_IREXIT1: ret = "IREXIT1"; break;
3321 case TAP_IRPAUSE: ret = "IRPAUSE"; break;
3322 case TAP_IREXIT2: ret = "IREXIT2"; break;
3323 case TAP_IRUPDATE: ret = "IRUPDATE"; break;
3324 default: ret = "???";
3330 static tap_state_t tap_state_by_name( const char *name )
3334 for( x = 0 ; x < TAP_NUM_STATES ; x++ ){
3335 /* be nice to the human */
3336 if( 0 == strcasecmp( name, tap_state_name(x) ) ){
3344 #ifdef _DEBUG_JTAG_IO_
3346 #define JTAG_DEBUG_STATE_APPEND(buf, len, bit) \
3347 do { buf[len] = bit ? '1' : '0'; } while(0)
3348 #define JTAG_DEBUG_STATE_PRINT(a, b, astr, bstr) \
3349 DEBUG_JTAG_IO("TAP/SM: %9s -> %5s\tTMS: %s\tTDI: %s", \
3350 tap_state_name(a), tap_state_name(b), astr, bstr)
3352 tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf,
3353 unsigned tap_bits, tap_state_t next_state)
3355 const u8 *tms_buffer;
3356 const u8 *tdi_buffer;
3361 unsigned tap_out_bits;
3365 tap_state_t last_state;
3367 // set startstate (and possibly last, if tap_bits == 0)
3368 last_state = next_state;
3369 DEBUG_JTAG_IO("TAP/SM: START state: %s", tap_state_name(next_state));
3371 tms_buffer = (const u8 *)tms_buf;
3372 tdi_buffer = (const u8 *)tdi_buf;
3374 tap_bytes = TAP_SCAN_BYTES(tap_bits);
3375 DEBUG_JTAG_IO("TAP/SM: TMS bits: %u (bytes: %u)", tap_bits, tap_bytes);
3378 for(cur_byte = 0; cur_byte < tap_bytes; cur_byte++)
3380 for(cur_bit = 0; cur_bit < 8; cur_bit++)
3382 // make sure we do not run off the end of the buffers
3383 unsigned tap_bit = cur_byte * 8 + cur_bit;
3384 if (tap_bit == tap_bits)
3387 // check and save TMS bit
3388 tap_bit = !!(tms_buffer[cur_byte] & (1 << cur_bit));
3389 JTAG_DEBUG_STATE_APPEND(tms_str, tap_out_bits, tap_bit);
3391 // use TMS bit to find the next TAP state
3392 next_state = tap_state_transition(last_state, tap_bit);
3394 // check and store TDI bit
3395 tap_bit = !!(tdi_buffer[cur_byte] & (1 << cur_bit));
3396 JTAG_DEBUG_STATE_APPEND(tdi_str, tap_out_bits, tap_bit);
3398 // increment TAP bits
3401 // Only show TDO bits on state transitions, or
3402 // after some number of bits in the same state.
3403 if ((next_state == last_state) && (tap_out_bits < 32))
3406 // terminate strings and display state transition
3407 tms_str[tap_out_bits] = tdi_str[tap_out_bits] = 0;
3408 JTAG_DEBUG_STATE_PRINT(last_state, next_state, tms_str, tdi_str);
3411 last_state = next_state;
3418 // terminate strings and display state transition
3419 tms_str[tap_out_bits] = tdi_str[tap_out_bits] = 0;
3420 JTAG_DEBUG_STATE_PRINT(last_state, next_state, tms_str, tdi_str);
3423 DEBUG_JTAG_IO("TAP/SM: FINAL state: %s", tap_state_name(next_state));
3427 #endif // _DEBUG_JTAG_IO_
3429 /*-----</Cable Helper API>--------------------------------------*/