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"
42 /* note that this is not marked as static as it must be available from outside jtag.c for those
43 that implement the jtag_xxx() minidriver layer
45 int jtag_error=ERROR_OK;
48 typedef struct cmd_queue_page_s
52 struct cmd_queue_page_s *next;
55 #define CMD_QUEUE_PAGE_SIZE (1024 * 1024)
56 static cmd_queue_page_t *cmd_queue_pages = NULL;
58 char* jtag_event_strings[] =
60 "JTAG controller reset (RESET or TRST)"
63 const Jim_Nvp nvp_jtag_tap_event[] = {
64 { .value = JTAG_TAP_EVENT_ENABLE, .name = "tap-enable" },
65 { .value = JTAG_TAP_EVENT_DISABLE, .name = "tap-disable" },
67 { .name = NULL, .value = -1 }
73 jtag_command_t *jtag_command_queue = NULL;
74 jtag_command_t **last_comand_pointer = &jtag_command_queue;
75 static jtag_tap_t *jtag_all_taps = NULL;
77 enum reset_types jtag_reset_config = RESET_NONE;
78 tap_state_t cmd_queue_end_state = TAP_RESET;
79 tap_state_t cmd_queue_cur_state = TAP_RESET;
81 int jtag_verify_capture_ir = 1;
83 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
84 int jtag_nsrst_delay = 0; /* default to no nSRST delay */
85 int jtag_ntrst_delay = 0; /* default to no nTRST delay */
87 /* maximum number of JTAG devices expected in the chain
89 #define JTAG_MAX_CHAIN_SIZE 20
91 /* callbacks to inform high-level handlers about JTAG state changes */
92 jtag_event_callback_t *jtag_event_callbacks;
95 static int speed_khz = 0;
96 /* flag if the kHz speed was defined */
97 static int hasKHz = 0;
99 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
102 #if BUILD_ECOSBOARD == 1
103 extern jtag_interface_t zy1000_interface;
106 #if BUILD_PARPORT == 1
107 extern jtag_interface_t parport_interface;
111 extern jtag_interface_t dummy_interface;
114 #if BUILD_FT2232_FTD2XX == 1
115 extern jtag_interface_t ft2232_interface;
118 #if BUILD_FT2232_LIBFTDI == 1
119 extern jtag_interface_t ft2232_interface;
122 #if BUILD_AMTJTAGACCEL == 1
123 extern jtag_interface_t amt_jtagaccel_interface;
126 #if BUILD_EP93XX == 1
127 extern jtag_interface_t ep93xx_interface;
130 #if BUILD_AT91RM9200 == 1
131 extern jtag_interface_t at91rm9200_interface;
134 #if BUILD_GW16012 == 1
135 extern jtag_interface_t gw16012_interface;
138 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
139 extern jtag_interface_t presto_interface;
142 #if BUILD_USBPROG == 1
143 extern jtag_interface_t usbprog_interface;
147 extern jtag_interface_t jlink_interface;
150 #if BUILD_VSLLINK == 1
151 extern jtag_interface_t vsllink_interface;
155 extern jtag_interface_t rlink_interface;
158 #if BUILD_ARMJTAGEW == 1
159 extern jtag_interface_t armjtagew_interface;
162 jtag_interface_t *jtag_interfaces[] = {
163 #if BUILD_ECOSBOARD == 1
166 #if BUILD_PARPORT == 1
172 #if BUILD_FT2232_FTD2XX == 1
175 #if BUILD_FT2232_LIBFTDI == 1
178 #if BUILD_AMTJTAGACCEL == 1
179 &amt_jtagaccel_interface,
181 #if BUILD_EP93XX == 1
184 #if BUILD_AT91RM9200 == 1
185 &at91rm9200_interface,
187 #if BUILD_GW16012 == 1
190 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
193 #if BUILD_USBPROG == 1
199 #if BUILD_VSLLINK == 1
205 #if BUILD_ARMJTAGEW == 1
206 &armjtagew_interface,
211 jtag_interface_t *jtag = NULL;
214 jtag_interface_t *jtag_interface = NULL;
217 /* forward declarations */
218 void jtag_add_pathmove(int num_states, tap_state_t *path);
219 void jtag_add_runtest(int num_cycles, tap_state_t endstate);
220 void jtag_add_end_state(tap_state_t endstate);
221 void jtag_add_sleep(u32 us);
222 int jtag_execute_queue(void);
226 int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
227 int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
228 int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
229 int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
230 int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
231 int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
232 int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
234 int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
236 int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
237 int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
238 int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
239 int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
240 int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
242 int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
244 jtag_tap_t *jtag_AllTaps(void)
246 return jtag_all_taps;
249 int jtag_NumTotalTaps(void)
263 int jtag_NumEnabledTaps(void)
280 jtag_tap_t *jtag_TapByString( const char *s )
288 if( 0 == strcmp( t->dotted_name, s ) ){
294 // backup plan is by number
296 /* ok - is "s" a number? */
298 n = strtol( s, &cp, 0 );
299 if( (s != cp) && (*cp == 0) ){
301 t = jtag_TapByAbsPosition(n);
307 jtag_tap_t * jtag_TapByJimObj( Jim_Interp *interp, Jim_Obj *o )
312 cp = Jim_GetString( o, NULL );
317 t = jtag_TapByString( cp );
320 Jim_SetResult_sprintf(interp,"Tap: %s is unknown", cp );
325 /* returns a pointer to the n-th device in the scan chain */
326 jtag_tap_t * jtag_TapByAbsPosition( int n )
334 while( t && (n > 0)) {
341 int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
343 jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
345 if (callback == NULL)
347 return ERROR_INVALID_ARGUMENTS;
352 while ((*callbacks_p)->next)
353 callbacks_p = &((*callbacks_p)->next);
354 callbacks_p = &((*callbacks_p)->next);
357 (*callbacks_p) = malloc(sizeof(jtag_event_callback_t));
358 (*callbacks_p)->callback = callback;
359 (*callbacks_p)->priv = priv;
360 (*callbacks_p)->next = NULL;
365 int jtag_unregister_event_callback(int (*callback)(enum jtag_event event, void *priv))
367 jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
369 if (callback == NULL)
371 return ERROR_INVALID_ARGUMENTS;
376 jtag_event_callback_t **next = &((*callbacks_p)->next);
377 if ((*callbacks_p)->callback == callback)
380 *callbacks_p = *next;
388 int jtag_call_event_callbacks(enum jtag_event event)
390 jtag_event_callback_t *callback = jtag_event_callbacks;
392 LOG_DEBUG("jtag event: %s", jtag_event_strings[event]);
396 callback->callback(event, callback->priv);
397 callback = callback->next;
403 /* returns a pointer to the pointer of the last command in queue
404 * this may be a pointer to the root pointer (jtag_command_queue)
405 * or to the next member of the last but one command
407 jtag_command_t** jtag_get_last_command_p(void)
409 /* jtag_command_t *cmd = jtag_command_queue;
415 return &jtag_command_queue;
419 return last_comand_pointer;
422 void* cmd_queue_alloc(size_t size)
424 cmd_queue_page_t **p_page = &cmd_queue_pages;
430 * We align/round the *SIZE* per below
431 * so that all pointers returned by
432 * this function are reasonably well
435 * If we did not, then an "odd-length" request would cause the
436 * *next* allocation to be at an *odd* address, and because
437 * this function has the same type of api as malloc() - we
438 * must also return pointers that have the same type of
441 * What I do not/have is a reasonable portable means
444 * The solution here, is based on these suggestions.
445 * http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
448 union worse_case_align {
454 #define ALIGN_SIZE (sizeof(union worse_case_align))
456 /* The alignment process. */
457 size = (size + ALIGN_SIZE -1) & (~(ALIGN_SIZE-1));
462 while ((*p_page)->next)
463 p_page = &((*p_page)->next);
464 if (CMD_QUEUE_PAGE_SIZE - (*p_page)->used < size)
465 p_page = &((*p_page)->next);
470 *p_page = malloc(sizeof(cmd_queue_page_t));
472 (*p_page)->address = malloc(CMD_QUEUE_PAGE_SIZE);
473 (*p_page)->next = NULL;
476 offset = (*p_page)->used;
477 (*p_page)->used += size;
479 t=(u8 *)((*p_page)->address);
483 void cmd_queue_free(void)
485 cmd_queue_page_t *page = cmd_queue_pages;
489 cmd_queue_page_t *last = page;
495 cmd_queue_pages = NULL;
498 static void jtag_prelude1(void)
502 LOG_WARNING("JTAG command queued, while TRST is low (TAP in reset)");
503 jtag_error=ERROR_JTAG_TRST_ASSERTED;
507 if (cmd_queue_end_state == TAP_RESET)
508 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
511 static void jtag_prelude(tap_state_t state)
516 jtag_add_end_state(state);
518 cmd_queue_cur_state = cmd_queue_end_state;
521 void jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
527 retval=interface_jtag_add_ir_scan(num_fields, fields, cmd_queue_end_state);
528 if (retval!=ERROR_OK)
532 int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
534 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);
582 (*last_cmd)->cmd.scan->fields[nth_tap].out_mask = buf_cpy(fields[j].out_mask, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
584 if (jtag_verify_capture_ir)
586 if (fields[j].in_handler==NULL)
588 jtag_set_check_value((*last_cmd)->cmd.scan->fields+nth_tap, tap->expected, tap->expected_mask, NULL);
591 (*last_cmd)->cmd.scan->fields[nth_tap].in_handler = fields[j].in_handler;
592 (*last_cmd)->cmd.scan->fields[nth_tap].in_handler_priv = fields[j].in_handler_priv;
593 (*last_cmd)->cmd.scan->fields[nth_tap].in_check_value = tap->expected;
594 (*last_cmd)->cmd.scan->fields[nth_tap].in_check_mask = tap->expected_mask;
605 /* if a tap isn't listed, set it to BYPASS */
606 (*last_cmd)->cmd.scan->fields[nth_tap].out_value = buf_set_ones(cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
607 (*last_cmd)->cmd.scan->fields[nth_tap].out_mask = NULL;
611 /* update device information */
612 buf_cpy((*last_cmd)->cmd.scan->fields[nth_tap].out_value, tap->cur_instr, scan_size);
618 void jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
624 retval=interface_jtag_add_plain_ir_scan(num_fields, fields, cmd_queue_end_state);
625 if (retval!=ERROR_OK)
629 int MINIDRIVER(interface_jtag_add_plain_ir_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
632 jtag_command_t **last_cmd;
634 last_cmd = jtag_get_last_command_p();
636 /* allocate memory for a new list member */
637 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
638 (*last_cmd)->next = NULL;
639 last_comand_pointer = &((*last_cmd)->next);
640 (*last_cmd)->type = JTAG_SCAN;
642 /* allocate memory for ir scan command */
643 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
644 (*last_cmd)->cmd.scan->ir_scan = 1;
645 (*last_cmd)->cmd.scan->num_fields = num_fields;
646 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(num_fields * sizeof(scan_field_t));
647 (*last_cmd)->cmd.scan->end_state = state;
649 for( i = 0 ; i < num_fields ; i++ ){
650 int num_bits = fields[i].num_bits;
651 int num_bytes = CEIL(fields[i].num_bits, 8);
652 (*last_cmd)->cmd.scan->fields[i].tap = fields[i].tap;
653 (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits;
654 (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits);
655 (*last_cmd)->cmd.scan->fields[i].out_mask = buf_cpy(fields[i].out_mask, cmd_queue_alloc(num_bytes), num_bits);
656 (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value;
657 (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value;
658 (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask;
659 (*last_cmd)->cmd.scan->fields[i].in_handler = NULL;
660 (*last_cmd)->cmd.scan->fields[i].in_handler_priv = NULL;
665 void jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
671 retval=interface_jtag_add_dr_scan(num_fields, fields, cmd_queue_end_state);
672 if (retval!=ERROR_OK)
676 int MINIDRIVER(interface_jtag_add_dr_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
680 int bypass_devices = 0;
684 jtag_command_t **last_cmd = jtag_get_last_command_p();
687 /* count devices in bypass */
691 tap = jtag_NextEnabledTap(tap);
700 /* allocate memory for a new list member */
701 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
702 last_comand_pointer = &((*last_cmd)->next);
703 (*last_cmd)->next = NULL;
704 (*last_cmd)->type = JTAG_SCAN;
706 /* allocate memory for dr scan command */
707 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
708 (*last_cmd)->cmd.scan->ir_scan = 0;
709 (*last_cmd)->cmd.scan->num_fields = num_fields + bypass_devices;
710 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc((num_fields + bypass_devices) * sizeof(scan_field_t));
711 (*last_cmd)->cmd.scan->end_state = state;
717 tap = jtag_NextEnabledTap(tap);
722 (*last_cmd)->cmd.scan->fields[field_count].tap = tap;
724 for (j = 0; j < num_fields; j++)
726 if (tap == fields[j].tap)
729 scan_size = fields[j].num_bits;
730 (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size;
731 (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(fields[j].out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
732 (*last_cmd)->cmd.scan->fields[field_count].out_mask = buf_cpy(fields[j].out_mask, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
733 (*last_cmd)->cmd.scan->fields[field_count].in_value = fields[j].in_value;
734 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = fields[j].in_check_value;
735 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = fields[j].in_check_mask;
736 (*last_cmd)->cmd.scan->fields[field_count].in_handler = fields[j].in_handler;
737 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = fields[j].in_handler_priv;
742 #ifdef _DEBUG_JTAG_IO_
743 /* if a device isn't listed, the BYPASS register should be selected */
746 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
750 /* program the scan field to 1 bit length, and ignore it's value */
751 (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1;
752 (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL;
753 (*last_cmd)->cmd.scan->fields[field_count].out_mask = NULL;
754 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
755 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
756 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
757 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
758 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
762 #ifdef _DEBUG_JTAG_IO_
763 /* if a device is listed, the BYPASS register must not be selected */
766 LOG_ERROR("BUG: scan data for a device in BYPASS");
775 void MINIDRIVER(interface_jtag_add_dr_out)(jtag_tap_t *target_tap,
779 tap_state_t end_state)
784 int bypass_devices = 0;
786 jtag_command_t **last_cmd = jtag_get_last_command_p();
789 /* count devices in bypass */
793 tap = jtag_NextEnabledTap(tap);
802 /* allocate memory for a new list member */
803 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
804 last_comand_pointer = &((*last_cmd)->next);
805 (*last_cmd)->next = NULL;
806 (*last_cmd)->type = JTAG_SCAN;
808 /* allocate memory for dr scan command */
809 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
810 (*last_cmd)->cmd.scan->ir_scan = 0;
811 (*last_cmd)->cmd.scan->num_fields = num_fields + bypass_devices;
812 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc((num_fields + bypass_devices) * sizeof(scan_field_t));
813 (*last_cmd)->cmd.scan->end_state = end_state;
818 tap = jtag_NextEnabledTap(tap);
823 (*last_cmd)->cmd.scan->fields[field_count].tap = tap;
825 if (tap == target_tap)
828 #ifdef _DEBUG_JTAG_IO_
829 /* if a device is listed, the BYPASS register must not be selected */
832 LOG_ERROR("BUG: scan data for a device in BYPASS");
836 for (j = 0; j < num_fields; j++)
839 scan_size = num_bits[j];
840 buf_set_u32(out_value, 0, scan_size, value[j]);
841 (*last_cmd)->cmd.scan->fields[field_count].num_bits = scan_size;
842 (*last_cmd)->cmd.scan->fields[field_count].out_value = buf_cpy(out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
843 (*last_cmd)->cmd.scan->fields[field_count].out_mask = NULL;
844 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
845 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
846 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
847 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
848 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
852 #ifdef _DEBUG_JTAG_IO_
853 /* if a device isn't listed, the BYPASS register should be selected */
856 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
860 /* program the scan field to 1 bit length, and ignore it's value */
861 (*last_cmd)->cmd.scan->fields[field_count].num_bits = 1;
862 (*last_cmd)->cmd.scan->fields[field_count].out_value = NULL;
863 (*last_cmd)->cmd.scan->fields[field_count].out_mask = NULL;
864 (*last_cmd)->cmd.scan->fields[field_count].in_value = NULL;
865 (*last_cmd)->cmd.scan->fields[field_count].in_check_value = NULL;
866 (*last_cmd)->cmd.scan->fields[field_count].in_check_mask = NULL;
867 (*last_cmd)->cmd.scan->fields[field_count].in_handler = NULL;
868 (*last_cmd)->cmd.scan->fields[field_count++].in_handler_priv = NULL;
873 void jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
879 retval=interface_jtag_add_plain_dr_scan(num_fields, fields, cmd_queue_end_state);
880 if (retval!=ERROR_OK)
884 int MINIDRIVER(interface_jtag_add_plain_dr_scan)(int num_fields, scan_field_t *fields, tap_state_t state)
887 jtag_command_t **last_cmd = jtag_get_last_command_p();
889 /* allocate memory for a new list member */
890 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
891 last_comand_pointer = &((*last_cmd)->next);
892 (*last_cmd)->next = NULL;
893 (*last_cmd)->type = JTAG_SCAN;
895 /* allocate memory for scan command */
896 (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t));
897 (*last_cmd)->cmd.scan->ir_scan = 0;
898 (*last_cmd)->cmd.scan->num_fields = num_fields;
899 (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(num_fields * sizeof(scan_field_t));
900 (*last_cmd)->cmd.scan->end_state = state;
902 for (i = 0; i < num_fields; i++)
904 int num_bits = fields[i].num_bits;
905 int num_bytes = CEIL(fields[i].num_bits, 8);
906 (*last_cmd)->cmd.scan->fields[i].tap = fields[i].tap;
907 (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits;
908 (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(fields[i].out_value, cmd_queue_alloc(num_bytes), num_bits);
909 (*last_cmd)->cmd.scan->fields[i].out_mask = buf_cpy(fields[i].out_mask, cmd_queue_alloc(num_bytes), num_bits);
910 (*last_cmd)->cmd.scan->fields[i].in_value = fields[i].in_value;
911 (*last_cmd)->cmd.scan->fields[i].in_check_value = fields[i].in_check_value;
912 (*last_cmd)->cmd.scan->fields[i].in_check_mask = fields[i].in_check_mask;
913 (*last_cmd)->cmd.scan->fields[i].in_handler = fields[i].in_handler;
914 (*last_cmd)->cmd.scan->fields[i].in_handler_priv = fields[i].in_handler_priv;
920 void jtag_add_tlr(void)
922 jtag_prelude(TAP_RESET);
925 retval=interface_jtag_add_tlr();
926 if (retval!=ERROR_OK)
930 int MINIDRIVER(interface_jtag_add_tlr)(void)
932 tap_state_t state = TAP_RESET;
933 jtag_command_t **last_cmd = jtag_get_last_command_p();
935 /* allocate memory for a new list member */
936 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
937 last_comand_pointer = &((*last_cmd)->next);
938 (*last_cmd)->next = NULL;
939 (*last_cmd)->type = JTAG_STATEMOVE;
941 (*last_cmd)->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t));
942 (*last_cmd)->cmd.statemove->end_state = state;
947 void jtag_add_pathmove(int num_states, tap_state_t *path)
949 tap_state_t cur_state=cmd_queue_cur_state;
953 /* the last state has to be a stable state */
954 if (!tap_is_state_stable(path[num_states - 1]))
956 LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
960 for (i=0; i<num_states; i++)
962 if (path[i] == TAP_RESET)
964 LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
967 if ( tap_state_transition(cur_state, true) != path[i]
968 && tap_state_transition(cur_state, false) != path[i])
970 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[i]));
978 retval=interface_jtag_add_pathmove(num_states, path);
979 cmd_queue_cur_state = path[num_states - 1];
980 if (retval!=ERROR_OK)
984 int MINIDRIVER(interface_jtag_add_pathmove)(int num_states, tap_state_t *path)
986 jtag_command_t **last_cmd = jtag_get_last_command_p();
989 /* allocate memory for a new list member */
990 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
991 last_comand_pointer = &((*last_cmd)->next);
992 (*last_cmd)->next = NULL;
993 (*last_cmd)->type = JTAG_PATHMOVE;
995 (*last_cmd)->cmd.pathmove = cmd_queue_alloc(sizeof(pathmove_command_t));
996 (*last_cmd)->cmd.pathmove->num_states = num_states;
997 (*last_cmd)->cmd.pathmove->path = cmd_queue_alloc(sizeof(tap_state_t) * num_states);
999 for (i = 0; i < num_states; i++)
1000 (*last_cmd)->cmd.pathmove->path[i] = path[i];
1005 int MINIDRIVER(interface_jtag_add_runtest)(int num_cycles, tap_state_t state)
1007 jtag_command_t **last_cmd = jtag_get_last_command_p();
1009 /* allocate memory for a new list member */
1010 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1011 (*last_cmd)->next = NULL;
1012 last_comand_pointer = &((*last_cmd)->next);
1013 (*last_cmd)->type = JTAG_RUNTEST;
1015 (*last_cmd)->cmd.runtest = cmd_queue_alloc(sizeof(runtest_command_t));
1016 (*last_cmd)->cmd.runtest->num_cycles = num_cycles;
1017 (*last_cmd)->cmd.runtest->end_state = state;
1022 void jtag_add_runtest(int num_cycles, tap_state_t state)
1026 jtag_prelude(state);
1028 /* executed by sw or hw fifo */
1029 retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);
1030 if (retval!=ERROR_OK)
1035 int MINIDRIVER(interface_jtag_add_clocks)( int num_cycles )
1037 jtag_command_t **last_cmd = jtag_get_last_command_p();
1039 /* allocate memory for a new list member */
1040 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1041 (*last_cmd)->next = NULL;
1042 last_comand_pointer = &((*last_cmd)->next);
1043 (*last_cmd)->type = JTAG_STABLECLOCKS;
1045 (*last_cmd)->cmd.stableclocks = cmd_queue_alloc(sizeof(stableclocks_command_t));
1046 (*last_cmd)->cmd.stableclocks->num_cycles = num_cycles;
1050 void jtag_add_clocks( int num_cycles )
1054 if( !tap_is_state_stable(cmd_queue_cur_state) )
1056 LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
1057 tap_state_name(cmd_queue_cur_state) );
1058 jtag_error = ERROR_JTAG_NOT_STABLE_STATE;
1062 if( num_cycles > 0 )
1066 retval = interface_jtag_add_clocks(num_cycles);
1067 if (retval != ERROR_OK)
1072 void jtag_add_reset(int req_tlr_or_trst, int req_srst)
1074 int trst_with_tlr = 0;
1077 /* FIX!!! there are *many* different cases here. A better
1078 * approach is needed for legal combinations of transitions...
1080 if ((jtag_reset_config & RESET_HAS_SRST)&&
1081 (jtag_reset_config & RESET_HAS_TRST)&&
1082 ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0))
1084 if (((req_tlr_or_trst&&!jtag_trst)||
1085 (!req_tlr_or_trst&&jtag_trst))&&
1086 ((req_srst&&!jtag_srst)||
1087 (!req_srst&&jtag_srst)))
1089 /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
1090 //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
1094 /* Make sure that jtag_reset_config allows the requested reset */
1095 /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
1096 if (((jtag_reset_config & RESET_SRST_PULLS_TRST) && (req_srst == 1)) && (!req_tlr_or_trst))
1098 LOG_ERROR("BUG: requested reset would assert trst");
1099 jtag_error=ERROR_FAIL;
1103 /* if TRST pulls SRST, we reset with TAP T-L-R */
1104 if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
1109 if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
1111 LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
1112 jtag_error=ERROR_FAIL;
1116 if (req_tlr_or_trst)
1118 if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
1130 jtag_srst = req_srst;
1132 retval = interface_jtag_add_reset(jtag_trst, jtag_srst);
1133 if (retval!=ERROR_OK)
1141 LOG_DEBUG("SRST line asserted");
1145 LOG_DEBUG("SRST line released");
1146 if (jtag_nsrst_delay)
1147 jtag_add_sleep(jtag_nsrst_delay * 1000);
1152 LOG_DEBUG("JTAG reset with RESET instead of TRST");
1153 jtag_add_end_state(TAP_RESET);
1155 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1161 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
1162 * and inform possible listeners about this
1164 LOG_DEBUG("TRST line asserted");
1165 cmd_queue_cur_state = TAP_RESET;
1166 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1170 if (jtag_ntrst_delay)
1171 jtag_add_sleep(jtag_ntrst_delay * 1000);
1175 int MINIDRIVER(interface_jtag_add_reset)(int req_trst, int req_srst)
1177 jtag_command_t **last_cmd = jtag_get_last_command_p();
1179 /* allocate memory for a new list member */
1180 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1181 (*last_cmd)->next = NULL;
1182 last_comand_pointer = &((*last_cmd)->next);
1183 (*last_cmd)->type = JTAG_RESET;
1185 (*last_cmd)->cmd.reset = cmd_queue_alloc(sizeof(reset_command_t));
1186 (*last_cmd)->cmd.reset->trst = req_trst;
1187 (*last_cmd)->cmd.reset->srst = req_srst;
1192 void jtag_add_end_state(tap_state_t state)
1194 cmd_queue_end_state = state;
1195 if ((cmd_queue_end_state == TAP_DRSHIFT)||(cmd_queue_end_state == TAP_IRSHIFT))
1197 LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
1201 int MINIDRIVER(interface_jtag_add_sleep)(u32 us)
1203 jtag_command_t **last_cmd = jtag_get_last_command_p();
1205 /* allocate memory for a new list member */
1206 *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1207 (*last_cmd)->next = NULL;
1208 last_comand_pointer = &((*last_cmd)->next);
1209 (*last_cmd)->type = JTAG_SLEEP;
1211 (*last_cmd)->cmd.sleep = cmd_queue_alloc(sizeof(sleep_command_t));
1212 (*last_cmd)->cmd.sleep->us = us;
1217 void jtag_add_sleep(u32 us)
1219 keep_alive(); /* we might be running on a very slow JTAG clk */
1220 int retval=interface_jtag_add_sleep(us);
1221 if (retval!=ERROR_OK)
1226 int jtag_scan_size(scan_command_t *cmd)
1231 /* count bits in scan command */
1232 for (i = 0; i < cmd->num_fields; i++)
1234 bit_count += cmd->fields[i].num_bits;
1240 int jtag_build_buffer(scan_command_t *cmd, u8 **buffer)
1245 bit_count = jtag_scan_size(cmd);
1246 *buffer = malloc(CEIL(bit_count, 8));
1250 #ifdef _DEBUG_JTAG_IO_
1251 LOG_DEBUG("num_fields: %i",cmd->num_fields);
1254 for (i = 0; i < cmd->num_fields; i++)
1256 if (cmd->fields[i].out_value)
1258 #ifdef _DEBUG_JTAG_IO_
1259 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);
1261 buf_set_buf(cmd->fields[i].out_value, 0, *buffer, bit_count, cmd->fields[i].num_bits);
1262 #ifdef _DEBUG_JTAG_IO_
1263 LOG_DEBUG("fields[%i].out_value[%i]: 0x%s", i, cmd->fields[i].num_bits, char_buf);
1268 bit_count += cmd->fields[i].num_bits;
1274 int jtag_read_buffer(u8 *buffer, scan_command_t *cmd)
1280 /* we return ERROR_OK, unless a check fails, or a handler reports a problem */
1283 for (i = 0; i < cmd->num_fields; i++)
1285 /* if neither in_value nor in_handler
1286 * are specified we don't have to examine this field
1288 if (cmd->fields[i].in_value || cmd->fields[i].in_handler)
1290 int num_bits = cmd->fields[i].num_bits;
1291 u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits);
1293 #ifdef _DEBUG_JTAG_IO_
1294 char *char_buf = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1295 LOG_DEBUG("fields[%i].in_value[%i]: 0x%s", i, num_bits, char_buf);
1299 if (cmd->fields[i].in_value)
1301 buf_cpy(captured, cmd->fields[i].in_value, num_bits);
1303 if (cmd->fields[i].in_handler)
1305 if (cmd->fields[i].in_handler(cmd->fields[i].in_value, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK)
1307 LOG_WARNING("in_handler: with \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" );
1308 retval = ERROR_JTAG_QUEUE_FAILED;
1313 /* no in_value specified, but a handler takes care of the scanned data */
1314 if (cmd->fields[i].in_handler && (!cmd->fields[i].in_value))
1316 if (cmd->fields[i].in_handler(captured, cmd->fields[i].in_handler_priv, cmd->fields+i) != ERROR_OK)
1318 /* We're going to call the error:handler later, but if the in_handler
1319 * reported an error we report this failure upstream
1321 LOG_WARNING("in_handler: w/o \"in_value\", mismatch in %s", cmd->ir_scan ? "SIR" : "SDR" );
1322 retval = ERROR_JTAG_QUEUE_FAILED;
1328 bit_count += cmd->fields[i].num_bits;
1334 static const char *jtag_tap_name(jtag_tap_t *tap)
1336 return (tap == NULL) ? "(unknown)" : tap->dotted_name;
1339 int jtag_check_value(u8 *captured, void *priv, scan_field_t *field)
1341 int retval = ERROR_OK;
1342 int num_bits = field->num_bits;
1344 int compare_failed = 0;
1346 if (field->in_check_mask)
1347 compare_failed = buf_cmp_mask(captured, field->in_check_value, field->in_check_mask, num_bits);
1349 compare_failed = buf_cmp(captured, field->in_check_value, num_bits);
1351 if (compare_failed){
1352 /* An error handler could have caught the failing check
1353 * only report a problem when there wasn't a handler, or if the handler
1354 * acknowledged the error
1356 LOG_WARNING("TAP %s:",
1357 jtag_tap_name(field->tap));
1360 char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1361 char *in_check_value_char = buf_to_str(field->in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1363 if (field->in_check_mask)
1365 char *in_check_mask_char;
1366 in_check_mask_char = buf_to_str(field->in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1367 LOG_WARNING("value captured during scan didn't pass the requested check:");
1368 LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
1369 captured_char, in_check_value_char, in_check_mask_char);
1370 free(in_check_mask_char);
1374 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);
1377 free(captured_char);
1378 free(in_check_value_char);
1380 retval = ERROR_JTAG_QUEUE_FAILED;
1388 set up checking of this field using the in_handler. The values passed in must be valid until
1389 after jtag_execute() has completed.
1391 void jtag_set_check_value(scan_field_t *field, u8 *value, u8 *mask, error_handler_t *in_error_handler)
1394 field->in_handler = jtag_check_value;
1396 field->in_handler = NULL; /* No check, e.g. embeddedice uses value==NULL to indicate no check */
1397 field->in_handler_priv = NULL;
1398 field->in_check_value = value;
1399 field->in_check_mask = mask;
1402 enum scan_type jtag_scan_type(scan_command_t *cmd)
1407 for (i = 0; i < cmd->num_fields; i++)
1409 if (cmd->fields[i].in_value || cmd->fields[i].in_handler)
1411 if (cmd->fields[i].out_value)
1418 int MINIDRIVER(interface_jtag_execute_queue)(void)
1424 LOG_ERROR("No JTAG interface configured yet. Issue 'init' command in startup scripts before communicating with targets.");
1428 retval = jtag->execute_queue();
1432 jtag_command_queue = NULL;
1433 last_comand_pointer = &jtag_command_queue;
1438 int jtag_execute_queue(void)
1440 int retval=interface_jtag_execute_queue();
1441 if (retval==ERROR_OK)
1445 jtag_error=ERROR_OK;
1449 int jtag_reset_callback(enum jtag_event event, void *priv)
1451 jtag_tap_t *tap = priv;
1455 if (event == JTAG_TRST_ASSERTED)
1457 buf_set_ones(tap->cur_instr, tap->ir_length);
1464 void jtag_sleep(u32 us)
1466 alive_sleep(us/1000);
1469 /* Try to examine chain layout according to IEEE 1149.1 §12
1471 int jtag_examine_chain(void)
1475 u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
1478 int device_count = 0;
1479 u8 zero_check = 0x0;
1480 u8 one_check = 0xff;
1483 field.num_bits = sizeof(idcode_buffer) * 8;
1484 field.out_value = idcode_buffer;
1485 field.out_mask = NULL;
1486 field.in_value = idcode_buffer;
1487 field.in_check_value = NULL;
1488 field.in_check_mask = NULL;
1489 field.in_handler = NULL;
1490 field.in_handler_priv = NULL;
1492 for (i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
1494 buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
1497 jtag_add_plain_dr_scan(1, &field, TAP_RESET);
1498 jtag_execute_queue();
1500 for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++)
1502 zero_check |= idcode_buffer[i];
1503 one_check &= idcode_buffer[i];
1506 /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
1507 if ((zero_check == 0x00) || (one_check == 0xff))
1509 LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
1510 return ERROR_JTAG_INIT_FAILED;
1513 // point at the 1st tap
1514 tap = jtag_NextEnabledTap(NULL);
1516 LOG_ERROR("JTAG: No taps enabled?");
1517 return ERROR_JTAG_INIT_FAILED;
1520 for (bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
1522 u32 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1523 if ((idcode & 1) == 0)
1525 /* LSB must not be 0, this indicates a device in bypass */
1526 LOG_WARNING("Tap/Device does not have IDCODE");
1537 if (idcode == 0x000000FF)
1540 /* End of chain (invalid manufacturer ID)
1542 * The JTAG examine is the very first thing that happens
1544 * A single JTAG device requires only 64 bits to be read back correctly.
1546 * The code below adds a check that the rest of the data scanned (640 bits)
1547 * are all as expected. This helps diagnose/catch problems with the JTAG chain
1549 * earlier and gives more helpful/explicit error messages.
1551 for (bit_count += 32; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;bit_count += 32)
1553 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1554 if (unexpected||(idcode != 0x000000FF))
1556 LOG_WARNING("Unexpected idcode after end of chain! %d 0x%08x", bit_count, idcode);
1564 #define EXTRACT_MFG(X) (((X) & 0xffe) >> 1)
1565 manufacturer = EXTRACT_MFG(idcode);
1566 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
1567 part = EXTRACT_PART(idcode);
1568 #define EXTRACT_VER(X) (((X) & 0xf0000000) >> 28)
1569 version = EXTRACT_VER(idcode);
1571 LOG_INFO("JTAG tap: %s tap/device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1572 ((tap != NULL) ? (tap->dotted_name) : "(not-named)"),
1573 idcode, manufacturer, part, version);
1579 tap->idcode = idcode;
1581 if (tap->expected_ids_cnt > 0) {
1582 /* Loop over the expected identification codes and test for a match */
1584 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1585 if( tap->idcode == tap->expected_ids[ii] ){
1590 /* If none of the expected ids matched, log an error */
1591 if (ii == tap->expected_ids_cnt) {
1592 LOG_ERROR("JTAG tap: %s got: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1595 EXTRACT_MFG( tap->idcode ),
1596 EXTRACT_PART( tap->idcode ),
1597 EXTRACT_VER( tap->idcode ) );
1598 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1599 LOG_ERROR("JTAG tap: %s expected %hhu of %hhu: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1602 tap->expected_ids_cnt,
1603 tap->expected_ids[ii],
1604 EXTRACT_MFG( tap->expected_ids[ii] ),
1605 EXTRACT_PART( tap->expected_ids[ii] ),
1606 EXTRACT_VER( tap->expected_ids[ii] ) );
1609 return ERROR_JTAG_INIT_FAILED;
1611 LOG_INFO("JTAG Tap/device matched");
1615 LOG_INFO("JTAG TAP ID: 0x%08x - Unknown - please report (A) chipname and (B) idcode to the openocd project",
1619 tap = jtag_NextEnabledTap(tap);
1624 /* see if number of discovered devices matches configuration */
1625 if (device_count != jtag_NumEnabledTaps())
1627 LOG_ERROR("number of discovered devices in JTAG chain (%i) doesn't match (enabled) configuration (%i), total taps: %d",
1628 device_count, jtag_NumEnabledTaps(), jtag_NumTotalTaps());
1629 LOG_ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1630 return ERROR_JTAG_INIT_FAILED;
1636 int jtag_validate_chain(void)
1639 int total_ir_length = 0;
1645 total_ir_length = 0;
1647 tap = jtag_NextEnabledTap(tap);
1651 total_ir_length += tap->ir_length;
1654 total_ir_length += 2;
1655 ir_test = malloc(CEIL(total_ir_length, 8));
1656 buf_set_ones(ir_test, total_ir_length);
1659 field.num_bits = total_ir_length;
1660 field.out_value = ir_test;
1661 field.out_mask = NULL;
1662 field.in_value = ir_test;
1663 field.in_check_value = NULL;
1664 field.in_check_mask = NULL;
1665 field.in_handler = NULL;
1666 field.in_handler_priv = NULL;
1668 jtag_add_plain_ir_scan(1, &field, TAP_RESET);
1669 jtag_execute_queue();
1675 tap = jtag_NextEnabledTap(tap);
1680 val = buf_get_u32(ir_test, chain_pos, 2);
1683 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1684 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);
1687 return ERROR_JTAG_INIT_FAILED;
1689 chain_pos += tap->ir_length;
1692 val = buf_get_u32(ir_test, chain_pos, 2);
1695 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1696 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);
1699 return ERROR_JTAG_INIT_FAILED;
1707 enum jtag_tap_cfg_param {
1711 static Jim_Nvp nvp_config_opts[] = {
1712 { .name = "-event", .value = JCFG_EVENT },
1714 { .name = NULL, .value = -1 }
1718 jtag_tap_configure_cmd( Jim_GetOptInfo *goi,
1725 /* parse config or cget options */
1726 while (goi->argc > 0) {
1727 Jim_SetEmptyResult (goi->interp);
1729 e = Jim_GetOpt_Nvp(goi, nvp_config_opts, &n);
1731 Jim_GetOpt_NvpUnknown(goi, nvp_config_opts, 0);
1737 if (goi->argc == 0) {
1738 Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ..." );
1742 e = Jim_GetOpt_Nvp( goi, nvp_jtag_tap_event, &n );
1744 Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
1748 if (goi->isconfigure) {
1749 if (goi->argc != 1) {
1750 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?");
1754 if (goi->argc != 0) {
1755 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?");
1761 jtag_tap_event_action_t *jteap;
1763 jteap = tap->event_action;
1764 /* replace existing? */
1766 if (jteap->event == n->value) {
1769 jteap = jteap->next;
1772 if (goi->isconfigure) {
1773 if (jteap == NULL) {
1775 jteap = calloc(1, sizeof (*jteap));
1777 jteap->event = n->value;
1778 Jim_GetOpt_Obj( goi, &o);
1780 Jim_DecrRefCount(interp, jteap->body);
1782 jteap->body = Jim_DuplicateObj(goi->interp, o);
1783 Jim_IncrRefCount(jteap->body);
1785 /* add to head of event list */
1786 jteap->next = tap->event_action;
1787 tap->event_action = jteap;
1788 Jim_SetEmptyResult(goi->interp);
1791 if (jteap == NULL) {
1792 Jim_SetEmptyResult(goi->interp);
1794 Jim_SetResult(goi->interp, Jim_DuplicateObj(goi->interp, jteap->body));
1801 } /* while (goi->argc) */
1806 static int jim_newtap_cmd( Jim_GetOptInfo *goi )
1816 const Jim_Nvp opts[] = {
1817 #define NTAP_OPT_IRLEN 0
1818 { .name = "-irlen" , .value = NTAP_OPT_IRLEN },
1819 #define NTAP_OPT_IRMASK 1
1820 { .name = "-irmask" , .value = NTAP_OPT_IRMASK },
1821 #define NTAP_OPT_IRCAPTURE 2
1822 { .name = "-ircapture" , .value = NTAP_OPT_IRCAPTURE },
1823 #define NTAP_OPT_ENABLED 3
1824 { .name = "-enable" , .value = NTAP_OPT_ENABLED },
1825 #define NTAP_OPT_DISABLED 4
1826 { .name = "-disable" , .value = NTAP_OPT_DISABLED },
1827 #define NTAP_OPT_EXPECTED_ID 5
1828 { .name = "-expected-id" , .value = NTAP_OPT_EXPECTED_ID },
1829 { .name = NULL , .value = -1 },
1832 pTap = malloc( sizeof(jtag_tap_t) );
1833 memset( pTap, 0, sizeof(*pTap) );
1835 Jim_SetResult_sprintf( goi->interp, "no memory");
1839 * we expect CHIP + TAP + OPTIONS
1841 if( goi->argc < 3 ){
1842 Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
1845 Jim_GetOpt_String( goi, &cp, NULL );
1846 pTap->chip = strdup(cp);
1848 Jim_GetOpt_String( goi, &cp, NULL );
1849 pTap->tapname = strdup(cp);
1851 /* name + dot + name + null */
1852 x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
1854 sprintf( cp, "%s.%s", pTap->chip, pTap->tapname );
1855 pTap->dotted_name = cp;
1857 LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
1858 pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
1860 /* default is enabled */
1863 /* deal with options */
1864 #define NTREQ_IRLEN 1
1865 #define NTREQ_IRCAPTURE 2
1866 #define NTREQ_IRMASK 4
1868 /* clear them as we find them */
1869 reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
1872 e = Jim_GetOpt_Nvp( goi, opts, &n );
1874 Jim_GetOpt_NvpUnknown( goi, opts, 0 );
1877 LOG_DEBUG("Processing option: %s", n->name );
1879 case NTAP_OPT_ENABLED:
1882 case NTAP_OPT_DISABLED:
1885 case NTAP_OPT_EXPECTED_ID:
1887 u32 *new_expected_ids;
1889 e = Jim_GetOpt_Wide( goi, &w );
1891 Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
1895 new_expected_ids = malloc(sizeof(u32) * (pTap->expected_ids_cnt + 1));
1896 if (new_expected_ids == NULL) {
1897 Jim_SetResult_sprintf( goi->interp, "no memory");
1901 memcpy(new_expected_ids, pTap->expected_ids, sizeof(u32) * pTap->expected_ids_cnt);
1903 new_expected_ids[pTap->expected_ids_cnt] = w;
1905 free(pTap->expected_ids);
1906 pTap->expected_ids = new_expected_ids;
1907 pTap->expected_ids_cnt++;
1910 case NTAP_OPT_IRLEN:
1911 case NTAP_OPT_IRMASK:
1912 case NTAP_OPT_IRCAPTURE:
1913 e = Jim_GetOpt_Wide( goi, &w );
1915 Jim_SetResult_sprintf( goi->interp, "option: %s bad parameter", n->name );
1918 if( (w < 0) || (w > 0xffff) ){
1920 Jim_SetResult_sprintf( goi->interp, "option: %s - wacky value: %d (0x%x)",
1921 n->name, (int)(w), (int)(w));
1925 case NTAP_OPT_IRLEN:
1926 pTap->ir_length = w;
1927 reqbits &= (~(NTREQ_IRLEN));
1929 case NTAP_OPT_IRMASK:
1930 pTap->ir_capture_mask = w;
1931 reqbits &= (~(NTREQ_IRMASK));
1933 case NTAP_OPT_IRCAPTURE:
1934 pTap->ir_capture_value = w;
1935 reqbits &= (~(NTREQ_IRCAPTURE));
1938 } /* switch(n->value) */
1939 } /* while( goi->argc ) */
1941 /* Did we get all the options? */
1944 Jim_SetResult_sprintf( goi->interp,
1945 "newtap: %s missing required parameters",
1947 /* TODO: Tell user what is missing :-( */
1948 /* no memory leaks pelase */
1949 free(((void *)(pTap->expected_ids)));
1950 free(((void *)(pTap->chip)));
1951 free(((void *)(pTap->tapname)));
1952 free(((void *)(pTap->dotted_name)));
1953 free(((void *)(pTap)));
1957 pTap->expected = malloc( pTap->ir_length );
1958 pTap->expected_mask = malloc( pTap->ir_length );
1959 pTap->cur_instr = malloc( pTap->ir_length );
1961 buf_set_u32( pTap->expected,
1964 pTap->ir_capture_value );
1965 buf_set_u32( pTap->expected_mask,
1968 pTap->ir_capture_mask );
1969 buf_set_ones( pTap->cur_instr,
1974 jtag_register_event_callback(jtag_reset_callback, pTap );
1976 ppTap = &(jtag_all_taps);
1977 while( (*ppTap) != NULL ){
1978 ppTap = &((*ppTap)->next_tap);
1982 static int n_taps = 0;
1983 pTap->abs_chain_position = n_taps++;
1985 LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
1986 (*ppTap)->dotted_name,
1987 (*ppTap)->abs_chain_position,
1988 (*ppTap)->ir_length,
1989 (*ppTap)->ir_capture_value,
1990 (*ppTap)->ir_capture_mask );
1995 static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
2001 struct command_context_s *context;
2005 JTAG_CMD_INIT_RESET,
2008 JTAG_CMD_TAPDISABLE,
2009 JTAG_CMD_TAPISENABLED,
2014 const Jim_Nvp jtag_cmds[] = {
2015 { .name = "interface" , .value = JTAG_CMD_INTERFACE },
2016 { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET },
2017 { .name = "newtap" , .value = JTAG_CMD_NEWTAP },
2018 { .name = "tapisenabled" , .value = JTAG_CMD_TAPISENABLED },
2019 { .name = "tapenable" , .value = JTAG_CMD_TAPENABLE },
2020 { .name = "tapdisable" , .value = JTAG_CMD_TAPDISABLE },
2021 { .name = "configure" , .value = JTAG_CMD_CONFIGURE },
2022 { .name = "cget" , .value = JTAG_CMD_CGET },
2024 { .name = NULL, .value = -1 },
2027 context = Jim_GetAssocData(interp, "context");
2028 /* go past the command */
2029 Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
2031 e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
2033 Jim_GetOpt_NvpUnknown( &goi, jtag_cmds, 0 );
2036 Jim_SetEmptyResult( goi.interp );
2038 case JTAG_CMD_INTERFACE:
2039 /* return the name of the interface */
2040 /* TCL code might need to know the exact type... */
2041 /* FUTURE: we allow this as a means to "set" the interface. */
2042 if( goi.argc != 0 ){
2043 Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2046 Jim_SetResultString( goi.interp, jtag_interface->name, -1 );
2048 case JTAG_CMD_INIT_RESET:
2049 if( goi.argc != 0 ){
2050 Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2053 e = jtag_init_reset(context);
2054 if( e != ERROR_OK ){
2055 Jim_SetResult_sprintf( goi.interp, "error: %d", e);
2059 case JTAG_CMD_NEWTAP:
2060 return jim_newtap_cmd( &goi );
2062 case JTAG_CMD_TAPISENABLED:
2063 case JTAG_CMD_TAPENABLE:
2064 case JTAG_CMD_TAPDISABLE:
2065 if( goi.argc != 1 ){
2066 Jim_SetResultString( goi.interp, "Too many parameters",-1 );
2072 t = jtag_TapByJimObj( goi.interp, goi.argv[0] );
2077 case JTAG_CMD_TAPISENABLED:
2080 case JTAG_CMD_TAPENABLE:
2081 jtag_tap_handle_event( t, JTAG_TAP_EVENT_ENABLE);
2085 case JTAG_CMD_TAPDISABLE:
2086 jtag_tap_handle_event( t, JTAG_TAP_EVENT_DISABLE);
2091 Jim_SetResult( goi.interp, Jim_NewIntObj( goi.interp, e ) );
2098 Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ...");
2105 Jim_GetOpt_Obj(&goi, &o);
2106 t = jtag_TapByJimObj( goi.interp, o );
2111 goi.isconfigure = 0;
2112 return jtag_tap_configure_cmd( &goi, t);
2116 case JTAG_CMD_CONFIGURE:
2118 Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
2125 Jim_GetOpt_Obj(&goi, &o);
2126 t = jtag_TapByJimObj( goi.interp, o );
2131 goi.isconfigure = 1;
2132 return jtag_tap_configure_cmd( &goi, t);
2139 int jtag_register_commands(struct command_context_s *cmd_ctx)
2141 register_jim( cmd_ctx, "jtag", jim_jtag_command, "perform jtag tap actions");
2143 register_command(cmd_ctx, NULL, "interface", handle_interface_command,
2144 COMMAND_CONFIG, "try to configure interface");
2145 register_command(cmd_ctx, NULL, "jtag_speed", handle_jtag_speed_command,
2146 COMMAND_ANY, "set jtag speed (if supported)");
2147 register_command(cmd_ctx, NULL, "jtag_khz", handle_jtag_khz_command,
2148 COMMAND_ANY, "same as jtag_speed, except it takes maximum khz as arguments. 0 KHz = RTCK.");
2149 register_command(cmd_ctx, NULL, "jtag_device", handle_jtag_device_command,
2150 COMMAND_CONFIG, "jtag_device <ir_length> <ir_expected> <ir_mask>");
2151 register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command,
2153 "[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]");
2154 register_command(cmd_ctx, NULL, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command,
2155 COMMAND_ANY, "jtag_nsrst_delay <ms> - delay after deasserting srst in ms");
2156 register_command(cmd_ctx, NULL, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command,
2157 COMMAND_ANY, "jtag_ntrst_delay <ms> - delay after deasserting trst in ms");
2159 register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command,
2160 COMMAND_EXEC, "print current scan chain configuration");
2162 register_command(cmd_ctx, NULL, "endstate", handle_endstate_command,
2163 COMMAND_EXEC, "finish JTAG operations in <tap_state>");
2164 register_command(cmd_ctx, NULL, "jtag_reset", handle_jtag_reset_command,
2165 COMMAND_EXEC, "toggle reset lines <trst> <srst>");
2166 register_command(cmd_ctx, NULL, "runtest", handle_runtest_command,
2167 COMMAND_EXEC, "move to Run-Test/Idle, and execute <num_cycles>");
2168 register_command(cmd_ctx, NULL, "irscan", handle_irscan_command,
2169 COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ...");
2170 register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ...");
2172 register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command,
2173 COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>");
2177 int jtag_interface_init(struct command_context_s *cmd_ctx)
2182 if (!jtag_interface)
2184 /* nothing was previously specified by "interface" command */
2185 LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
2186 return ERROR_JTAG_INVALID_INTERFACE;
2190 jtag_interface->khz(speed_khz, &jtag_speed);
2194 if (jtag_interface->init() != ERROR_OK)
2195 return ERROR_JTAG_INIT_FAILED;
2197 jtag = jtag_interface;
2201 static int jtag_init_inner(struct command_context_s *cmd_ctx)
2206 LOG_DEBUG("Init JTAG chain");
2208 tap = jtag_NextEnabledTap(NULL);
2210 LOG_ERROR("There are no enabled taps?");
2211 return ERROR_JTAG_INIT_FAILED;
2215 if ((retval=jtag_execute_queue())!=ERROR_OK)
2218 /* examine chain first, as this could discover the real chain layout */
2219 if (jtag_examine_chain() != ERROR_OK)
2221 LOG_ERROR("trying to validate configured JTAG chain anyway...");
2224 if (jtag_validate_chain() != ERROR_OK)
2226 LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
2232 int jtag_init_reset(struct command_context_s *cmd_ctx)
2236 if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2239 LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
2241 /* Reset can happen after a power cycle.
2243 * Ideally we would only assert TRST or run RESET before the target reset.
2245 * However w/srst_pulls_trst, trst is asserted together with the target
2246 * reset whether we want it or not.
2248 * NB! Some targets have JTAG circuitry disabled until a
2249 * trst & srst has been asserted.
2251 * NB! here we assume nsrst/ntrst delay are sufficient!
2253 * NB! order matters!!!! srst *can* disconnect JTAG circuitry
2256 jtag_add_reset(1, 0); /* RESET or TRST */
2257 if (jtag_reset_config & RESET_HAS_SRST)
2259 jtag_add_reset(1, 1);
2260 if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
2261 jtag_add_reset(0, 1);
2263 jtag_add_reset(0, 0);
2264 if ((retval = jtag_execute_queue()) != ERROR_OK)
2267 /* Check that we can communication on the JTAG chain + eventually we want to
2268 * be able to perform enumeration only after OpenOCD has started
2269 * telnet and GDB server
2271 * That would allow users to more easily perform any magic they need to before
2274 return jtag_init_inner(cmd_ctx);
2277 int jtag_init(struct command_context_s *cmd_ctx)
2280 if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2282 if (jtag_init_inner(cmd_ctx)==ERROR_OK)
2286 return jtag_init_reset(cmd_ctx);
2289 static int default_khz(int khz, int *jtag_speed)
2291 LOG_ERROR("Translation from khz to jtag_speed not implemented");
2295 static int default_speed_div(int speed, int *khz)
2297 LOG_ERROR("Translation from jtag_speed to khz not implemented");
2301 static int default_power_dropout(int *dropout)
2303 *dropout=0; /* by default we can't detect power dropout */
2307 static int default_srst_asserted(int *srst_asserted)
2309 *srst_asserted=0; /* by default we can't detect srst asserted */
2313 int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2318 /* check whether the interface is already configured */
2321 LOG_WARNING("Interface already configured, ignoring");
2325 /* interface name is a mandatory argument */
2326 if (argc < 1 || args[0][0] == '\0')
2328 return ERROR_COMMAND_SYNTAX_ERROR;
2331 for (i=0; jtag_interfaces[i]; i++)
2333 if (strcmp(args[0], jtag_interfaces[i]->name) == 0)
2335 if ((retval = jtag_interfaces[i]->register_commands(cmd_ctx)) != ERROR_OK)
2340 jtag_interface = jtag_interfaces[i];
2342 if (jtag_interface->khz == NULL)
2344 jtag_interface->khz = default_khz;
2346 if (jtag_interface->speed_div == NULL)
2348 jtag_interface->speed_div = default_speed_div;
2350 if (jtag_interface->power_dropout == NULL)
2352 jtag_interface->power_dropout = default_power_dropout;
2354 if (jtag_interface->srst_asserted == NULL)
2356 jtag_interface->srst_asserted = default_srst_asserted;
2363 /* no valid interface was found (i.e. the configuration option,
2364 * didn't match one of the compiled-in interfaces
2366 LOG_ERROR("No valid jtag interface found (%s)", args[0]);
2367 LOG_ERROR("compiled-in jtag interfaces:");
2368 for (i = 0; jtag_interfaces[i]; i++)
2370 LOG_ERROR("%i: %s", i, jtag_interfaces[i]->name);
2373 return ERROR_JTAG_INVALID_INTERFACE;
2376 int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2380 Jim_Obj *newargs[ 10 ];
2383 * argv[-1] = command
2384 * argv[ 0] = ir length
2385 * argv[ 1] = ir capture
2386 * argv[ 2] = ir mask
2387 * argv[ 3] = not actually used by anything but in the docs
2391 command_print( cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
2394 command_print( cmd_ctx, "OLD SYNTAX: DEPRECATED - translating to new syntax");
2395 command_print( cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
2399 command_print( cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundryscan(len5)");
2400 command_print( cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
2401 command_print( cmd_ctx, "jtag newtap stm32 boundry ....., and the tap: \"stm32.boundery\"");
2402 command_print( cmd_ctx, "And then refer to the taps by the dotted name.");
2404 newargs[0] = Jim_NewStringObj( interp, "jtag", -1 );
2405 newargs[1] = Jim_NewStringObj( interp, "newtap", -1 );
2406 sprintf( buf, "chip%d", jtag_NumTotalTaps() );
2407 newargs[2] = Jim_NewStringObj( interp, buf, -1 );
2408 sprintf( buf, "tap%d", jtag_NumTotalTaps() );
2409 newargs[3] = Jim_NewStringObj( interp, buf, -1 );
2410 newargs[4] = Jim_NewStringObj( interp, "-irlen", -1 );
2411 newargs[5] = Jim_NewStringObj( interp, args[0], -1 );
2412 newargs[6] = Jim_NewStringObj( interp, "-ircapture", -1 );
2413 newargs[7] = Jim_NewStringObj( interp, args[1], -1 );
2414 newargs[8] = Jim_NewStringObj( interp, "-irmask", -1 );
2415 newargs[9] = Jim_NewStringObj( interp, args[2], -1 );
2417 command_print( cmd_ctx, "NEW COMMAND:");
2418 sprintf( buf, "%s %s %s %s %s %s %s %s %s %s",
2419 Jim_GetString( newargs[0], NULL ),
2420 Jim_GetString( newargs[1], NULL ),
2421 Jim_GetString( newargs[2], NULL ),
2422 Jim_GetString( newargs[3], NULL ),
2423 Jim_GetString( newargs[4], NULL ),
2424 Jim_GetString( newargs[5], NULL ),
2425 Jim_GetString( newargs[6], NULL ),
2426 Jim_GetString( newargs[7], NULL ),
2427 Jim_GetString( newargs[8], NULL ),
2428 Jim_GetString( newargs[9], NULL ) );
2430 e = jim_jtag_command( interp, 10, newargs );
2432 command_print( cmd_ctx, "%s", Jim_GetString( Jim_GetResult(interp), NULL ) );
2437 int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2441 tap = jtag_all_taps;
2442 command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
2443 command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
2446 u32 expected, expected_mask, cur_instr, ii;
2447 expected = buf_get_u32(tap->expected, 0, tap->ir_length);
2448 expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
2449 cur_instr = buf_get_u32(tap->cur_instr, 0, tap->ir_length);
2451 command_print(cmd_ctx,
2452 "%2d | %-18s | %c | 0x%08x | 0x%08x | 0x%02x | 0x%02x | 0x%02x | 0x%02x",
2453 tap->abs_chain_position,
2455 tap->enabled ? 'Y' : 'n',
2457 (tap->expected_ids_cnt > 0 ? tap->expected_ids[0] : 0),
2463 for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
2464 command_print(cmd_ctx, " | | | | 0x%08x | | | | ",
2465 tap->expected_ids[ii]);
2468 tap = tap->next_tap;
2474 int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2477 return ERROR_COMMAND_SYNTAX_ERROR;
2481 if (strcmp(args[0], "none") == 0)
2482 jtag_reset_config = RESET_NONE;
2483 else if (strcmp(args[0], "trst_only") == 0)
2484 jtag_reset_config = RESET_HAS_TRST;
2485 else if (strcmp(args[0], "srst_only") == 0)
2486 jtag_reset_config = RESET_HAS_SRST;
2487 else if (strcmp(args[0], "trst_and_srst") == 0)
2488 jtag_reset_config = RESET_TRST_AND_SRST;
2491 LOG_ERROR("(1) invalid reset_config argument (%s), defaulting to none", args[0]);
2492 jtag_reset_config = RESET_NONE;
2493 return ERROR_INVALID_ARGUMENTS;
2499 if (strcmp(args[1], "separate") == 0)
2501 /* seperate reset lines - default */
2504 if (strcmp(args[1], "srst_pulls_trst") == 0)
2505 jtag_reset_config |= RESET_SRST_PULLS_TRST;
2506 else if (strcmp(args[1], "trst_pulls_srst") == 0)
2507 jtag_reset_config |= RESET_TRST_PULLS_SRST;
2508 else if (strcmp(args[1], "combined") == 0)
2509 jtag_reset_config |= RESET_SRST_PULLS_TRST | RESET_TRST_PULLS_SRST;
2512 LOG_ERROR("(2) invalid reset_config argument (%s), defaulting to none", args[1]);
2513 jtag_reset_config = RESET_NONE;
2514 return ERROR_INVALID_ARGUMENTS;
2521 if (strcmp(args[2], "trst_open_drain") == 0)
2522 jtag_reset_config |= RESET_TRST_OPEN_DRAIN;
2523 else if (strcmp(args[2], "trst_push_pull") == 0)
2524 jtag_reset_config &= ~RESET_TRST_OPEN_DRAIN;
2527 LOG_ERROR("(3) invalid reset_config argument (%s) defaulting to none", args[2] );
2528 jtag_reset_config = RESET_NONE;
2529 return ERROR_INVALID_ARGUMENTS;
2535 if (strcmp(args[3], "srst_push_pull") == 0)
2536 jtag_reset_config |= RESET_SRST_PUSH_PULL;
2537 else if (strcmp(args[3], "srst_open_drain") == 0)
2538 jtag_reset_config &= ~RESET_SRST_PUSH_PULL;
2541 LOG_ERROR("(4) invalid reset_config argument (%s), defaulting to none", args[3]);
2542 jtag_reset_config = RESET_NONE;
2543 return ERROR_INVALID_ARGUMENTS;
2550 int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2554 LOG_ERROR("jtag_nsrst_delay <ms> command takes one required argument");
2559 jtag_nsrst_delay = strtoul(args[0], NULL, 0);
2565 int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2569 LOG_ERROR("jtag_ntrst_delay <ms> command takes one required argument");
2574 jtag_ntrst_delay = strtoul(args[0], NULL, 0);
2580 int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2582 int retval=ERROR_OK;
2586 LOG_DEBUG("handle jtag speed");
2589 cur_speed = jtag_speed = strtoul(args[0], NULL, 0);
2591 /* this command can be called during CONFIG,
2592 * in which case jtag isn't initialized */
2595 retval=jtag->speed(cur_speed);
2597 } else if (argc == 0)
2601 return ERROR_COMMAND_SYNTAX_ERROR;
2603 command_print(cmd_ctx, "jtag_speed: %d", jtag_speed);
2608 int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2610 int retval=ERROR_OK;
2611 LOG_DEBUG("handle jtag khz");
2615 speed_khz = strtoul(args[0], NULL, 0);
2619 LOG_DEBUG("have interface set up");
2621 if ((retval=jtag->khz(speed_khz, &speed_div1))!=ERROR_OK)
2627 cur_speed = jtag_speed = speed_div1;
2629 retval=jtag->speed(cur_speed);
2638 return ERROR_COMMAND_SYNTAX_ERROR;
2643 if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK)
2649 command_print(cmd_ctx, "RCLK - adaptive");
2652 command_print(cmd_ctx, "%d kHz", speed_khz);
2658 int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2664 return ERROR_COMMAND_SYNTAX_ERROR;
2668 state = tap_state_by_name( args[0] );
2670 command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
2671 return ERROR_COMMAND_SYNTAX_ERROR;
2673 jtag_add_end_state( (tap_state_t)(state));
2674 jtag_execute_queue();
2676 command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state));
2681 int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2688 return ERROR_COMMAND_SYNTAX_ERROR;
2691 if (args[0][0] == '1')
2693 else if (args[0][0] == '0')
2697 return ERROR_COMMAND_SYNTAX_ERROR;
2700 if (args[1][0] == '1')
2702 else if (args[1][0] == '0')
2706 return ERROR_COMMAND_SYNTAX_ERROR;
2709 if (jtag_interface_init(cmd_ctx) != ERROR_OK)
2710 return ERROR_JTAG_INIT_FAILED;
2712 jtag_add_reset(trst, srst);
2713 jtag_execute_queue();
2718 int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2722 return ERROR_COMMAND_SYNTAX_ERROR;
2725 jtag_add_runtest(strtol(args[0], NULL, 0), -1);
2726 jtag_execute_queue();
2732 int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2735 scan_field_t *fields;
2739 if ((argc < 2) || (argc % 2))
2741 return ERROR_COMMAND_SYNTAX_ERROR;
2744 // optional "-endstate"
2746 // at the end of the arguments.
2750 // have at least one pair of numbers.
2751 // is last pair the magic text?
2752 if( 0 == strcmp( "-endstate", args[ argc - 2 ] ) ){
2755 cpA = args[ argc-1 ];
2756 for( endstate = 0 ; endstate < 16 ; endstate++ ){
2757 cpS = tap_state_name( endstate );
2758 if( 0 == strcmp( cpA, cpS ) ){
2762 if( endstate >= 16 ){
2763 return ERROR_COMMAND_SYNTAX_ERROR;
2765 // found - remove the last 2 args
2772 fields = malloc(sizeof(scan_field_t) * argc / 2);
2774 for (i = 0; i < argc / 2; i++)
2776 tap = jtag_TapByString( args[i*2] );
2779 command_print( cmd_ctx, "Tap: %s unknown", args[i*2] );
2782 int field_size = tap->ir_length;
2783 fields[i].tap = tap;
2784 fields[i].out_value = malloc(CEIL(field_size, 8));
2785 buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0));
2786 fields[i].out_mask = NULL;
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, -1);
2794 // did we have an endstate?
2795 if( endstate >= 0 ){
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 int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args)
2811 scan_field_t *fields;
2813 int field_count = 0;
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 */
2835 // validate arguments as numbers
2837 for (i = 2; i < argc; i+=2)
2843 e = Jim_GetLong(interp, args[i], &bits);
2844 /* If valid - try next arg */
2849 /* Not valid.. are we at the end? */
2850 if ( ((i+2) != argc) ){
2851 /* nope, then error */
2855 /* it could be: "-endstate FOO" */
2857 /* get arg as a string. */
2858 cp = Jim_GetString( args[i], NULL );
2859 /* is it the magic? */
2860 if( 0 == strcmp( "-endstate", cp ) ){
2861 /* is the statename valid? */
2862 cp = Jim_GetString( args[i+1], NULL );
2864 /* see if it is a valid state name */
2865 endstate = tap_state_by_name(cp);
2867 /* update the error message */
2868 Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
2870 /* valid - so clear the error */
2872 /* and remove the last 2 args */
2877 /* Still an error? */
2879 return e; /* too bad */
2881 } /* validate args */
2883 tap = jtag_TapByJimObj( interp, args[1] );
2888 num_fields=(argc-2)/2;
2889 fields = malloc(sizeof(scan_field_t) * num_fields);
2890 for (i = 2; i < argc; i+=2)
2896 Jim_GetLong(interp, args[i], &bits);
2897 str = Jim_GetString(args[i+1], &len);
2899 fields[field_count].tap = tap;
2900 fields[field_count].num_bits = bits;
2901 fields[field_count].out_value = malloc(CEIL(bits, 8));
2902 str_to_buf(str, len, fields[field_count].out_value, bits, 0);
2903 fields[field_count].out_mask = NULL;
2904 fields[field_count].in_value = fields[field_count].out_value;
2905 fields[field_count].in_check_mask = NULL;
2906 fields[field_count].in_check_value = NULL;
2907 fields[field_count].in_handler = NULL;
2908 fields[field_count++].in_handler_priv = NULL;
2911 jtag_add_dr_scan(num_fields, fields, -1);
2912 // did we get an end state?
2913 if( endstate >= 0 ){
2914 jtag_add_end_state( (tap_state_t)endstate );
2916 retval = jtag_execute_queue();
2917 if (retval != ERROR_OK)
2919 Jim_SetResultString(interp, "drscan: jtag execute failed",-1);
2924 Jim_Obj *list = Jim_NewListObj(interp, NULL, 0);
2925 for (i = 2; i < argc; i+=2)
2930 Jim_GetLong(interp, args[i], &bits);
2931 str = buf_to_str(fields[field_count].in_value, bits, 16);
2932 free(fields[field_count].out_value);
2934 Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str)));
2939 Jim_SetResult(interp, list);
2946 int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2950 if (strcmp(args[0], "enable") == 0)
2952 jtag_verify_capture_ir = 1;
2954 else if (strcmp(args[0], "disable") == 0)
2956 jtag_verify_capture_ir = 0;
2959 return ERROR_COMMAND_SYNTAX_ERROR;
2961 } else if (argc != 0)
2963 return ERROR_COMMAND_SYNTAX_ERROR;
2966 command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
2971 int jtag_power_dropout(int *dropout)
2973 return jtag->power_dropout(dropout);
2976 int jtag_srst_asserted(int *srst_asserted)
2978 return jtag->srst_asserted(srst_asserted);
2981 void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
2983 jtag_tap_event_action_t * jteap;
2986 jteap = tap->event_action;
2990 if (jteap->event == e) {
2992 LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
2995 Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
2996 Jim_GetString(jteap->body, NULL) );
2997 if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
2998 Jim_PrintErrorMessage(interp);
3002 jteap = jteap->next;
3006 LOG_DEBUG( "event %d %s - no action",
3008 Jim_Nvp_value2name_simple( nvp_jtag_tap_event, e)->name);
3013 /*-----<Cable Helper API>---------------------------------------*/
3015 /* these Cable Helper API functions are all documented in the jtag.h header file,
3016 using a Doxygen format. And since Doxygen's configuration file "Doxyfile",
3017 is setup to prefer its docs in the header file, no documentation is here, for
3018 if it were, it would have to be doubly maintained.
3022 * @see tap_set_state() and tap_get_state() accessors.
3023 * Actual name is not important since accessors hide it.
3025 static tap_state_t state_follower = TAP_RESET;
3027 void tap_set_state_impl( tap_state_t new_state )
3029 /* this is the state we think the TAPs are in now, was cur_state */
3030 state_follower = new_state;
3033 tap_state_t tap_get_state()
3035 return state_follower;
3039 * @see tap_set_end_state() and tap_get_end_state() accessors.
3040 * Actual name is not important because accessors hide it.
3042 static tap_state_t end_state_follower = TAP_RESET;
3044 void tap_set_end_state( tap_state_t new_end_state )
3046 /* this is the state we think the TAPs will be in at completion of the
3047 current TAP operation, was end_state
3049 end_state_follower = new_end_state;
3052 tap_state_t tap_get_end_state()
3054 return end_state_follower;
3058 int tap_move_ndx( tap_state_t astate )
3060 /* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
3063 const static int move_map[16] =
3065 0, -1, -1, 2, -1, 3, -1, -1,
3066 1, -1, -1, 4, -1, 5, -1, -1
3074 case TAP_RESET: ndx = 0; break;
3075 case TAP_DRSHIFT: ndx = 2; break;
3076 case TAP_DRPAUSE: ndx = 3; break;
3077 case TAP_IDLE: ndx = 1; break;
3078 case TAP_IRSHIFT: ndx = 4; break;
3079 case TAP_IRPAUSE: ndx = 5; break;
3081 LOG_ERROR( "fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate) );
3089 int tap_get_tms_path( tap_state_t from, tap_state_t to )
3091 /* tap_move[i][j]: tap movement command to go from state i to state j
3092 * 0: Test-Logic-Reset
3099 * DRSHIFT->DRSHIFT and IRSHIFT->IRSHIFT have to be caught in interface specific code
3101 const static u8 tms_seqs[6][6] =
3103 /* value clocked to TMS to move from one of six stable states to another */
3105 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */
3106 { 0x7f, 0x00, 0x17, 0x0a, 0x1b, 0x16 }, /* RESET */
3107 { 0x7f, 0x00, 0x25, 0x05, 0x2b, 0x0b }, /* IDLE */
3108 { 0x7f, 0x31, 0x00, 0x01, 0x0f, 0x2f }, /* DRSHIFT */
3109 { 0x7f, 0x30, 0x20, 0x17, 0x1e, 0x2f }, /* DRPAUSE */
3110 { 0x7f, 0x31, 0x07, 0x17, 0x00, 0x01 }, /* IRSHIFT */
3111 { 0x7f, 0x30, 0x1c, 0x17, 0x20, 0x2f } /* IRPAUSE */
3114 if( !tap_is_state_stable(from) )
3116 LOG_ERROR( "fatal: tap_state \"from\" (=%s) is not stable", tap_state_name(from) );
3120 if( !tap_is_state_stable(to) )
3122 LOG_ERROR( "fatal: tap_state \"to\" (=%s) is not stable", tap_state_name(to) );
3126 /* @todo: support other than 7 clocks ? */
3127 return tms_seqs[tap_move_ndx(from)][tap_move_ndx(to)];
3131 bool tap_is_state_stable(tap_state_t astate)
3135 /* A switch() is used because it is symbol dependent
3136 (not value dependent like an array), and can also check bounds.
3155 tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
3157 tap_state_t new_state;
3159 /* A switch is used because it is symbol dependent and not value dependent
3160 like an array. Also it can check for out of range conditions.
3168 new_state = cur_state;
3173 new_state = TAP_DRSELECT;
3176 new_state = TAP_IRSELECT;
3180 new_state = TAP_DREXIT1;
3184 new_state = TAP_DRUPDATE;
3187 new_state = TAP_DREXIT2;
3190 new_state = TAP_RESET;
3194 new_state = TAP_IREXIT1;
3198 new_state = TAP_IRUPDATE;
3201 new_state = TAP_IREXIT2;
3204 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3217 new_state = TAP_IDLE;
3220 new_state = TAP_DRCAPTURE;
3225 new_state = TAP_DRSHIFT;
3229 new_state = TAP_DRPAUSE;
3232 new_state = TAP_IRCAPTURE;
3237 new_state = TAP_IRSHIFT;
3241 new_state = TAP_IRPAUSE;
3244 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3253 const char* tap_state_name(tap_state_t state)
3259 case TAP_RESET: ret = "RESET"; break;
3260 case TAP_IDLE: ret = "IDLE"; break;
3261 case TAP_DRSELECT: ret = "DRSELECT"; break;
3262 case TAP_DRCAPTURE: ret = "DRCAPTURE"; break;
3263 case TAP_DRSHIFT: ret = "DRSHIFT"; break;
3264 case TAP_DREXIT1: ret = "DREXIT1"; break;
3265 case TAP_DRPAUSE: ret = "DRPAUSE"; break;
3266 case TAP_DREXIT2: ret = "DREXIT2"; break;
3267 case TAP_DRUPDATE: ret = "DRUPDATE"; break;
3268 case TAP_IRSELECT: ret = "IRSELECT"; break;
3269 case TAP_IRCAPTURE: ret = "IRCAPTURE"; break;
3270 case TAP_IRSHIFT: ret = "IRSHIFT"; break;
3271 case TAP_IREXIT1: ret = "IREXIT1"; break;
3272 case TAP_IRPAUSE: ret = "IRPAUSE"; break;
3273 case TAP_IREXIT2: ret = "IREXIT2"; break;
3274 case TAP_IRUPDATE: ret = "IRUPDATE"; break;
3275 default: ret = "???";
3282 tap_state_by_name( const char *name )
3286 for( x = 0 ; x < 16 ; x++ ){
3287 /* be nice to the human */
3288 if( 0 == strcasecmp( name, tap_state_name(x) ) ){
3296 /*-----</Cable Helper API>--------------------------------------*/