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 ***************************************************************************/
38 int jtag_flush_queue_count
; /* count # of flushes for profiling / debugging purposes */
40 static void jtag_add_scan_check(void (*jtag_add_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
),
41 int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
);
43 /* note that this is not marked as static as it must be available from outside jtag.c for those
44 that implement the jtag_xxx() minidriver layer
46 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 #ifndef HAVE_JTAG_MINIDRIVER_H
74 struct jtag_callback_entry
76 struct jtag_callback_entry
*next
;
78 jtag_callback_t callback
;
80 jtag_callback_data_t data1
;
81 jtag_callback_data_t data2
;
82 jtag_callback_data_t data3
;
86 static struct jtag_callback_entry
*jtag_callback_queue_head
= NULL
;
87 static struct jtag_callback_entry
*jtag_callback_queue_tail
= NULL
;
91 jtag_command_t
*jtag_command_queue
= NULL
;
92 jtag_command_t
**last_command_pointer
= &jtag_command_queue
;
93 static jtag_tap_t
*jtag_all_taps
= NULL
;
95 enum reset_types jtag_reset_config
= RESET_NONE
;
96 tap_state_t cmd_queue_end_state
= TAP_RESET
;
97 tap_state_t cmd_queue_cur_state
= TAP_RESET
;
99 int jtag_verify_capture_ir
= 1;
102 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
103 static int jtag_nsrst_delay
= 0; /* default to no nSRST delay */
104 static int jtag_ntrst_delay
= 0; /* default to no nTRST delay */
106 /* maximum number of JTAG devices expected in the chain
108 #define JTAG_MAX_CHAIN_SIZE 20
110 /* callbacks to inform high-level handlers about JTAG state changes */
111 jtag_event_callback_t
*jtag_event_callbacks
;
114 static int speed_khz
= 0;
115 /* flag if the kHz speed was defined */
116 static int hasKHz
= 0;
118 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
121 #if BUILD_ECOSBOARD == 1
122 extern jtag_interface_t zy1000_interface
;
125 #if BUILD_PARPORT == 1
126 extern jtag_interface_t parport_interface
;
130 extern jtag_interface_t dummy_interface
;
133 #if BUILD_FT2232_FTD2XX == 1
134 extern jtag_interface_t ft2232_interface
;
137 #if BUILD_FT2232_LIBFTDI == 1
138 extern jtag_interface_t ft2232_interface
;
141 #if BUILD_AMTJTAGACCEL == 1
142 extern jtag_interface_t amt_jtagaccel_interface
;
145 #if BUILD_EP93XX == 1
146 extern jtag_interface_t ep93xx_interface
;
149 #if BUILD_AT91RM9200 == 1
150 extern jtag_interface_t at91rm9200_interface
;
153 #if BUILD_GW16012 == 1
154 extern jtag_interface_t gw16012_interface
;
157 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
158 extern jtag_interface_t presto_interface
;
161 #if BUILD_USBPROG == 1
162 extern jtag_interface_t usbprog_interface
;
166 extern jtag_interface_t jlink_interface
;
169 #if BUILD_VSLLINK == 1
170 extern jtag_interface_t vsllink_interface
;
174 extern jtag_interface_t rlink_interface
;
177 #if BUILD_ARMJTAGEW == 1
178 extern jtag_interface_t armjtagew_interface
;
181 jtag_interface_t
*jtag_interfaces
[] = {
182 #if BUILD_ECOSBOARD == 1
185 #if BUILD_PARPORT == 1
191 #if BUILD_FT2232_FTD2XX == 1
194 #if BUILD_FT2232_LIBFTDI == 1
197 #if BUILD_AMTJTAGACCEL == 1
198 &amt_jtagaccel_interface
,
200 #if BUILD_EP93XX == 1
203 #if BUILD_AT91RM9200 == 1
204 &at91rm9200_interface
,
206 #if BUILD_GW16012 == 1
209 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
212 #if BUILD_USBPROG == 1
218 #if BUILD_VSLLINK == 1
224 #if BUILD_ARMJTAGEW == 1
225 &armjtagew_interface
,
230 jtag_interface_t
*jtag
= NULL
;
233 static jtag_interface_t
*jtag_interface
= NULL
;
236 /* forward declarations */
237 //void jtag_add_pathmove(int num_states, tap_state_t *path);
238 //void jtag_add_runtest(int num_cycles, tap_state_t endstate);
239 //void jtag_add_end_state(tap_state_t endstate);
240 //void jtag_add_sleep(u32 us);
241 //int jtag_execute_queue(void);
242 static tap_state_t
tap_state_by_name(const char *name
);
245 static int handle_interface_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
246 static int handle_jtag_speed_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
247 static int handle_jtag_khz_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
248 static int handle_jtag_device_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
249 static int handle_reset_config_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
250 static int handle_jtag_nsrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
251 static int handle_jtag_ntrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
253 static int handle_scan_chain_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
255 static int handle_endstate_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
256 static int handle_jtag_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
257 static int handle_runtest_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
258 static int handle_irscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
259 static int Jim_Command_drscan(Jim_Interp
*interp
, int argc
, Jim_Obj
*const *argv
);
260 static int Jim_Command_flush_count(Jim_Interp
*interp
, int argc
, Jim_Obj
*const *args
);
262 static int handle_verify_ircapture_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
263 static int handle_verify_jtag_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
264 static int handle_tms_sequence_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
266 jtag_tap_t
*jtag_AllTaps(void)
268 return jtag_all_taps
;
271 int jtag_NumTotalTaps(void)
285 int jtag_NumEnabledTaps(void)
301 jtag_tap_t
*jtag_TapByString( const char *s
)
309 if( 0 == strcmp( t
->dotted_name
, s
) ){
315 /* backup plan is by number */
317 /* ok - is "s" a number? */
319 n
= strtol( s
, &cp
, 0 );
320 if( (s
!= cp
) && (*cp
== 0) ){
322 t
= jtag_TapByAbsPosition(n
);
328 jtag_tap_t
* jtag_TapByJimObj( Jim_Interp
*interp
, Jim_Obj
*o
)
333 cp
= Jim_GetString( o
, NULL
);
338 t
= jtag_TapByString( cp
);
341 Jim_SetResult_sprintf(interp
,"Tap: %s is unknown", cp
);
346 /* returns a pointer to the n-th device in the scan chain */
347 jtag_tap_t
* jtag_TapByAbsPosition( int n
)
355 while( t
&& (n
> 0)) {
362 int jtag_register_event_callback(int (*callback
)(enum jtag_event event
, void *priv
), void *priv
)
364 jtag_event_callback_t
**callbacks_p
= &jtag_event_callbacks
;
366 if (callback
== NULL
)
368 return ERROR_INVALID_ARGUMENTS
;
373 while ((*callbacks_p
)->next
)
374 callbacks_p
= &((*callbacks_p
)->next
);
375 callbacks_p
= &((*callbacks_p
)->next
);
378 (*callbacks_p
) = malloc(sizeof(jtag_event_callback_t
));
379 (*callbacks_p
)->callback
= callback
;
380 (*callbacks_p
)->priv
= priv
;
381 (*callbacks_p
)->next
= NULL
;
386 int jtag_unregister_event_callback(int (*callback
)(enum jtag_event event
, void *priv
))
388 jtag_event_callback_t
**callbacks_p
= &jtag_event_callbacks
;
390 if (callback
== NULL
)
392 return ERROR_INVALID_ARGUMENTS
;
397 jtag_event_callback_t
**next
= &((*callbacks_p
)->next
);
398 if ((*callbacks_p
)->callback
== callback
)
401 *callbacks_p
= *next
;
409 int jtag_call_event_callbacks(enum jtag_event event
)
411 jtag_event_callback_t
*callback
= jtag_event_callbacks
;
413 LOG_DEBUG("jtag event: %s", jtag_event_strings
[event
]);
417 callback
->callback(event
, callback
->priv
);
418 callback
= callback
->next
;
424 /* returns a pointer to the pointer of the last command in queue
425 * this may be a pointer to the root pointer (jtag_command_queue)
426 * or to the next member of the last but one command
428 jtag_command_t
** jtag_get_last_command_p(void)
430 /* jtag_command_t *cmd = jtag_command_queue;
436 return &jtag_command_queue;
440 return last_command_pointer
;
444 void jtag_queue_command(jtag_command_t
* cmd
)
446 jtag_command_t
**last_cmd
;
448 last_cmd
= jtag_get_last_command_p();
452 (*last_cmd
)->next
= NULL
;
454 last_command_pointer
= &((*last_cmd
)->next
);
458 void* cmd_queue_alloc(size_t size
)
460 cmd_queue_page_t
**p_page
= &cmd_queue_pages
;
466 * We align/round the *SIZE* per below
467 * so that all pointers returned by
468 * this function are reasonably well
471 * If we did not, then an "odd-length" request would cause the
472 * *next* allocation to be at an *odd* address, and because
473 * this function has the same type of api as malloc() - we
474 * must also return pointers that have the same type of
477 * What I do not/have is a reasonable portable means
480 * The solution here, is based on these suggestions.
481 * http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
484 union worse_case_align
{
490 #define ALIGN_SIZE (sizeof(union worse_case_align))
492 /* The alignment process. */
493 size
= (size
+ ALIGN_SIZE
-1) & (~(ALIGN_SIZE
-1));
498 while ((*p_page
)->next
)
499 p_page
= &((*p_page
)->next
);
500 if (CMD_QUEUE_PAGE_SIZE
- (*p_page
)->used
< size
)
501 p_page
= &((*p_page
)->next
);
506 *p_page
= malloc(sizeof(cmd_queue_page_t
));
508 (*p_page
)->address
= malloc(CMD_QUEUE_PAGE_SIZE
);
509 (*p_page
)->next
= NULL
;
512 offset
= (*p_page
)->used
;
513 (*p_page
)->used
+= size
;
515 t
=(u8
*)((*p_page
)->address
);
519 void cmd_queue_free(void)
521 cmd_queue_page_t
*page
= cmd_queue_pages
;
525 cmd_queue_page_t
*last
= page
;
531 cmd_queue_pages
= NULL
;
534 static void jtag_prelude1(void)
538 LOG_WARNING("JTAG command queued, while TRST is low (TAP in reset)");
539 jtag_error
=ERROR_JTAG_TRST_ASSERTED
;
543 if (cmd_queue_end_state
== TAP_RESET
)
544 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
547 static void jtag_prelude(tap_state_t state
)
551 if (state
!= TAP_INVALID
)
552 jtag_add_end_state(state
);
554 cmd_queue_cur_state
= cmd_queue_end_state
;
557 void jtag_add_ir_scan_noverify(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
562 retval
=interface_jtag_add_ir_scan(in_num_fields
, in_fields
, cmd_queue_end_state
);
563 if (retval
!=ERROR_OK
)
570 * Generate an IR SCAN with a list of scan fields with one entry for each enabled TAP.
572 * If the input field list contains an instruction value for a TAP then that is used
573 * otherwise the TAP is set to bypass.
575 * TAPs for which no fields are passed are marked as bypassed for subsequent DR SCANs.
578 void jtag_add_ir_scan(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
580 if (jtag_verify
&&jtag_verify_capture_ir
)
582 /* 8 x 32 bit id's is enough for all invoations */
584 for (int j
= 0; j
< in_num_fields
; j
++)
586 in_fields
[j
].check_value
=NULL
;
587 in_fields
[j
].check_mask
=NULL
;
588 /* if we are to run a verification of the ir scan, we need to get the input back.
589 * We may have to allocate space if the caller didn't ask for the input back.
591 in_fields
[j
].check_value
=in_fields
[j
].tap
->expected
;
592 in_fields
[j
].check_mask
=in_fields
[j
].tap
->expected_mask
;
594 jtag_add_scan_check(jtag_add_ir_scan_noverify
, in_num_fields
, in_fields
, state
);
597 jtag_add_ir_scan_noverify(in_num_fields
, in_fields
, state
);
602 * see jtag_add_ir_scan()
605 int MINIDRIVER(interface_jtag_add_ir_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
610 int num_taps
= jtag_NumEnabledTaps();
612 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
613 scan_command_t
* scan
= cmd_queue_alloc(sizeof(scan_command_t
));
615 jtag_queue_command(cmd
);
617 cmd
->type
= JTAG_SCAN
;
618 cmd
->cmd
.scan
= scan
;
620 scan
->ir_scan
= true;
621 scan
->num_fields
= num_taps
; /* one field per device */
622 scan
->fields
= cmd_queue_alloc(num_taps
* sizeof(scan_field_t
));
623 scan
->end_state
= state
;
630 /* do this here so it is not forgotten */
631 tap
= jtag_NextEnabledTap(tap
);
637 assert(nth_tap
< num_taps
);
639 size_t scan_size
= tap
->ir_length
;
640 scan
->fields
[nth_tap
].tap
= tap
;
641 scan
->fields
[nth_tap
].num_bits
= scan_size
;
642 scan
->fields
[nth_tap
].in_value
= NULL
; /* do not collect input for tap's in bypass */
644 /* search the list */
645 for (int j
= 0; j
< in_num_fields
; j
++)
647 if (tap
== in_fields
[j
].tap
)
650 scan
->fields
[nth_tap
].in_value
= in_fields
[j
].in_value
;
651 scan
->fields
[nth_tap
].out_value
= buf_cpy(in_fields
[j
].out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
660 /* if a tap isn't listed, set it to BYPASS */
661 scan
->fields
[nth_tap
].out_value
= buf_set_ones(cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
665 /* update device information */
666 buf_cpy(scan
->fields
[nth_tap
].out_value
, tap
->cur_instr
, scan_size
);
669 assert(nth_tap
== (num_taps
- 1));
675 * Duplicate the scan fields passed into the function into an IR SCAN command
677 * This function assumes that the caller handles extra fields for bypassed TAPs
680 void jtag_add_plain_ir_scan(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
686 retval
=interface_jtag_add_plain_ir_scan(in_num_fields
, in_fields
, cmd_queue_end_state
);
687 if (retval
!=ERROR_OK
)
693 * see jtag_add_plain_ir_scan()
696 int MINIDRIVER(interface_jtag_add_plain_ir_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
699 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
700 scan_command_t
* scan
= cmd_queue_alloc(sizeof(scan_command_t
));
702 jtag_queue_command(cmd
);
704 cmd
->type
= JTAG_SCAN
;
705 cmd
->cmd
.scan
= scan
;
707 scan
->ir_scan
= true;
708 scan
->num_fields
= in_num_fields
;
709 scan
->fields
= cmd_queue_alloc(in_num_fields
* sizeof(scan_field_t
));
710 scan
->end_state
= state
;
712 for (int i
= 0; i
< in_num_fields
; i
++)
714 int num_bits
= in_fields
[i
].num_bits
;
715 int num_bytes
= CEIL(in_fields
[i
].num_bits
, 8);
716 scan
->fields
[i
].tap
= in_fields
[i
].tap
;
717 scan
->fields
[i
].num_bits
= num_bits
;
718 scan
->fields
[i
].out_value
= buf_cpy(in_fields
[i
].out_value
, cmd_queue_alloc(num_bytes
), num_bits
);
719 scan
->fields
[i
].in_value
= in_fields
[i
].in_value
;
727 int jtag_check_value_inner(u8
*captured
, u8
*in_check_value
, u8
*in_check_mask
, int num_bits
);
729 static int jtag_check_value_mask_callback(u8
*in
, jtag_callback_data_t data1
, jtag_callback_data_t data2
, jtag_callback_data_t data3
)
731 return jtag_check_value_inner(in
, (u8
*)data1
, (u8
*)data2
, (int)data3
);
734 static void jtag_add_scan_check(void (*jtag_add_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
),
735 int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
737 for (int i
= 0; i
< in_num_fields
; i
++)
739 in_fields
[i
].allocated
= 0;
740 in_fields
[i
].modified
= 0;
741 if ((in_fields
[i
].check_value
!= NULL
) && (in_fields
[i
].in_value
== NULL
))
743 in_fields
[i
].modified
= 1;
744 /* we need storage space... */
745 #ifdef HAVE_JTAG_MINIDRIVER_H
746 if (in_fields
[i
].num_bits
<= 32)
748 /* This is enough space and we're executing this synchronously */
749 in_fields
[i
].in_value
= in_fields
[i
].intmp
;
752 in_fields
[i
].in_value
= (u8
*)malloc(CEIL(in_fields
[i
].num_bits
, 8));
753 in_fields
[i
].allocated
= 1;
756 in_fields
[i
].in_value
= (u8
*)cmd_queue_alloc(CEIL(in_fields
[i
].num_bits
, 8));
761 jtag_add_scan(in_num_fields
, in_fields
, state
);
763 for (int i
= 0; i
< in_num_fields
; i
++)
765 if ((in_fields
[i
].check_value
!= NULL
) && (in_fields
[i
].in_value
!= NULL
))
767 /* this is synchronous for a minidriver */
768 jtag_add_callback4(jtag_check_value_mask_callback
, in_fields
[i
].in_value
,
769 (jtag_callback_data_t
)in_fields
[i
].check_value
,
770 (jtag_callback_data_t
)in_fields
[i
].check_mask
,
771 (jtag_callback_data_t
)in_fields
[i
].num_bits
);
773 if (in_fields
[i
].allocated
)
775 free(in_fields
[i
].in_value
);
777 if (in_fields
[i
].modified
)
779 in_fields
[i
].in_value
= NULL
;
784 void jtag_add_dr_scan_check(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
788 jtag_add_scan_check(jtag_add_dr_scan
, in_num_fields
, in_fields
, state
);
791 jtag_add_dr_scan(in_num_fields
, in_fields
, state
);
797 * Generate a DR SCAN using the fields passed to the function
799 * For not bypassed TAPs the function checks in_fields and uses fields specified there.
800 * For bypassed TAPs the function generates a dummy 1bit field.
802 * The bypass status of TAPs is set by jtag_add_ir_scan().
805 void jtag_add_dr_scan(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
811 retval
=interface_jtag_add_dr_scan(in_num_fields
, in_fields
, cmd_queue_end_state
);
812 if (retval
!=ERROR_OK
)
818 * see jtag_add_dr_scan()
821 int MINIDRIVER(interface_jtag_add_dr_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
825 int bypass_devices
= 0;
830 /* count devices in bypass */
834 tap
= jtag_NextEnabledTap(tap
);
843 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
844 scan_command_t
* scan
= cmd_queue_alloc(sizeof(scan_command_t
));
846 jtag_queue_command(cmd
);
848 cmd
->type
= JTAG_SCAN
;
849 cmd
->cmd
.scan
= scan
;
851 scan
->ir_scan
= false;
852 scan
->num_fields
= in_num_fields
+ bypass_devices
;
853 scan
->fields
= cmd_queue_alloc((in_num_fields
+ bypass_devices
) * sizeof(scan_field_t
));
854 scan
->end_state
= state
;
860 tap
= jtag_NextEnabledTap(tap
);
865 scan
->fields
[field_count
].tap
= tap
;
867 for (j
= 0; j
< in_num_fields
; j
++)
869 if (tap
== in_fields
[j
].tap
)
872 size_t scan_size
= in_fields
[j
].num_bits
;
873 scan
->fields
[field_count
].num_bits
= scan_size
;
874 scan
->fields
[field_count
].out_value
= buf_cpy(in_fields
[j
].out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
875 scan
->fields
[field_count
].in_value
= in_fields
[j
].in_value
;
881 #ifdef _DEBUG_JTAG_IO_
882 /* if a device isn't listed, the BYPASS register should be selected */
885 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
889 /* program the scan field to 1 bit length, and ignore it's value */
890 scan
->fields
[field_count
].num_bits
= 1;
891 scan
->fields
[field_count
].out_value
= NULL
;
892 scan
->fields
[field_count
].in_value
= NULL
;
897 #ifdef _DEBUG_JTAG_IO_
898 /* if a device is listed, the BYPASS register must not be selected */
901 LOG_ERROR("BUG: scan data for a device in BYPASS");
908 /* field_count represents the true number of fields setup*/
909 scan
->num_fields
= field_count
;
916 * Generate a DR SCAN using the array of output values passed to the function
918 * This function assumes that the parameter target_tap specifies the one TAP
919 * that is not bypassed. All other TAPs must be bypassed and the function will
920 * generate a dummy 1bit field for them.
922 * For the target_tap a sequence of output-only fields will be generated where
923 * each field has the size num_bits and the field's values are taken from
926 * The bypass status of TAPs is set by jtag_add_ir_scan().
929 void MINIDRIVER(interface_jtag_add_dr_out
)(jtag_tap_t
*target_tap
,
933 tap_state_t end_state
)
937 int bypass_devices
= 0;
941 /* count devices in bypass */
945 tap
= jtag_NextEnabledTap(tap
);
954 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
955 scan_command_t
* scan
= cmd_queue_alloc(sizeof(scan_command_t
));
957 jtag_queue_command(cmd
);
959 cmd
->type
= JTAG_SCAN
;
960 cmd
->cmd
.scan
= scan
;
962 scan
->ir_scan
= false;
963 scan
->num_fields
= in_num_fields
+ bypass_devices
;
964 scan
->fields
= cmd_queue_alloc((in_num_fields
+ bypass_devices
) * sizeof(scan_field_t
));
965 scan
->end_state
= end_state
;
970 tap
= jtag_NextEnabledTap(tap
);
975 scan
->fields
[field_count
].tap
= tap
;
977 if (tap
== target_tap
)
979 #ifdef _DEBUG_JTAG_IO_
980 /* if a device is listed, the BYPASS register must not be selected */
983 LOG_ERROR("BUG: scan data for a device in BYPASS");
987 for (int j
= 0; j
< in_num_fields
; j
++)
990 size_t scan_size
= num_bits
[j
];
991 buf_set_u32(out_value
, 0, scan_size
, value
[j
]);
992 scan
->fields
[field_count
].num_bits
= scan_size
;
993 scan
->fields
[field_count
].out_value
= buf_cpy(out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
994 scan
->fields
[field_count
].in_value
= NULL
;
999 #ifdef _DEBUG_JTAG_IO_
1000 /* if a device isn't listed, the BYPASS register should be selected */
1003 LOG_ERROR("BUG: no scan data for a device not in BYPASS");
1007 /* program the scan field to 1 bit length, and ignore it's value */
1008 scan
->fields
[field_count
].num_bits
= 1;
1009 scan
->fields
[field_count
].out_value
= NULL
;
1010 scan
->fields
[field_count
].in_value
= NULL
;
1018 * Duplicate the scan fields passed into the function into a DR SCAN command
1020 * This function assumes that the caller handles extra fields for bypassed TAPs
1023 void jtag_add_plain_dr_scan(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
1027 jtag_prelude(state
);
1029 retval
=interface_jtag_add_plain_dr_scan(in_num_fields
, in_fields
, cmd_queue_end_state
);
1030 if (retval
!=ERROR_OK
)
1036 * see jtag_add_plain_dr_scan()
1039 int MINIDRIVER(interface_jtag_add_plain_dr_scan
)(int in_num_fields
, scan_field_t
*in_fields
, tap_state_t state
)
1041 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1042 scan_command_t
* scan
= cmd_queue_alloc(sizeof(scan_command_t
));
1044 jtag_queue_command(cmd
);
1046 cmd
->type
= JTAG_SCAN
;
1047 cmd
->cmd
.scan
= scan
;
1049 scan
->ir_scan
= false;
1050 scan
->num_fields
= in_num_fields
;
1051 scan
->fields
= cmd_queue_alloc(in_num_fields
* sizeof(scan_field_t
));
1052 scan
->end_state
= state
;
1054 for (int i
= 0; i
< in_num_fields
; i
++)
1056 int num_bits
= in_fields
[i
].num_bits
;
1057 int num_bytes
= CEIL(in_fields
[i
].num_bits
, 8);
1058 scan
->fields
[i
].tap
= in_fields
[i
].tap
;
1059 scan
->fields
[i
].num_bits
= num_bits
;
1060 scan
->fields
[i
].out_value
= buf_cpy(in_fields
[i
].out_value
, cmd_queue_alloc(num_bytes
), num_bits
);
1061 scan
->fields
[i
].in_value
= in_fields
[i
].in_value
;
1068 void jtag_add_tlr(void)
1070 jtag_prelude(TAP_RESET
);
1073 retval
=interface_jtag_add_tlr();
1074 if (retval
!=ERROR_OK
)
1078 int MINIDRIVER(interface_jtag_add_tlr
)(void)
1080 tap_state_t state
= TAP_RESET
;
1082 /* allocate memory for a new list member */
1083 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1085 jtag_queue_command(cmd
);
1087 cmd
->type
= JTAG_STATEMOVE
;
1089 cmd
->cmd
.statemove
= cmd_queue_alloc(sizeof(statemove_command_t
));
1090 cmd
->cmd
.statemove
->end_state
= state
;
1095 void jtag_add_pathmove(int num_states
, tap_state_t
*path
)
1097 tap_state_t cur_state
= cmd_queue_cur_state
;
1101 /* the last state has to be a stable state */
1102 if (!tap_is_state_stable(path
[num_states
- 1]))
1104 LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
1108 for (i
=0; i
<num_states
; i
++)
1110 if (path
[i
] == TAP_RESET
)
1112 LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
1116 if ( tap_state_transition(cur_state
, true) != path
[i
]
1117 && tap_state_transition(cur_state
, false) != path
[i
])
1119 LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state
), tap_state_name(path
[i
]));
1122 cur_state
= path
[i
];
1127 retval
= interface_jtag_add_pathmove(num_states
, path
);
1128 cmd_queue_cur_state
= path
[num_states
- 1];
1129 if (retval
!=ERROR_OK
)
1133 int MINIDRIVER(interface_jtag_add_pathmove
)(int num_states
, tap_state_t
*path
)
1135 /* allocate memory for a new list member */
1136 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1138 jtag_queue_command(cmd
);
1140 cmd
->type
= JTAG_PATHMOVE
;
1142 cmd
->cmd
.pathmove
= cmd_queue_alloc(sizeof(pathmove_command_t
));
1143 cmd
->cmd
.pathmove
->num_states
= num_states
;
1144 cmd
->cmd
.pathmove
->path
= cmd_queue_alloc(sizeof(tap_state_t
) * num_states
);
1146 for (int i
= 0; i
< num_states
; i
++)
1147 cmd
->cmd
.pathmove
->path
[i
] = path
[i
];
1152 int MINIDRIVER(interface_jtag_add_runtest
)(int num_cycles
, tap_state_t state
)
1154 /* allocate memory for a new list member */
1155 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1157 jtag_queue_command(cmd
);
1159 cmd
->type
= JTAG_RUNTEST
;
1161 cmd
->cmd
.runtest
= cmd_queue_alloc(sizeof(runtest_command_t
));
1162 cmd
->cmd
.runtest
->num_cycles
= num_cycles
;
1163 cmd
->cmd
.runtest
->end_state
= state
;
1168 void jtag_add_runtest(int num_cycles
, tap_state_t state
)
1172 jtag_prelude(state
);
1174 /* executed by sw or hw fifo */
1175 retval
=interface_jtag_add_runtest(num_cycles
, cmd_queue_end_state
);
1176 if (retval
!=ERROR_OK
)
1181 int MINIDRIVER(interface_jtag_add_clocks
)( int num_cycles
)
1183 /* allocate memory for a new list member */
1184 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1186 jtag_queue_command(cmd
);
1188 cmd
->type
= JTAG_STABLECLOCKS
;
1190 cmd
->cmd
.stableclocks
= cmd_queue_alloc(sizeof(stableclocks_command_t
));
1191 cmd
->cmd
.stableclocks
->num_cycles
= num_cycles
;
1196 void jtag_add_clocks( int num_cycles
)
1200 if( !tap_is_state_stable(cmd_queue_cur_state
) )
1202 LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
1203 tap_state_name(cmd_queue_cur_state
) );
1204 jtag_error
= ERROR_JTAG_NOT_STABLE_STATE
;
1208 if( num_cycles
> 0 )
1212 retval
= interface_jtag_add_clocks(num_cycles
);
1213 if (retval
!= ERROR_OK
)
1218 void jtag_add_reset(int req_tlr_or_trst
, int req_srst
)
1220 int trst_with_tlr
= 0;
1223 /* FIX!!! there are *many* different cases here. A better
1224 * approach is needed for legal combinations of transitions...
1226 if ((jtag_reset_config
& RESET_HAS_SRST
)&&
1227 (jtag_reset_config
& RESET_HAS_TRST
)&&
1228 ((jtag_reset_config
& RESET_SRST_PULLS_TRST
)==0))
1230 if (((req_tlr_or_trst
&&!jtag_trst
)||
1231 (!req_tlr_or_trst
&&jtag_trst
))&&
1232 ((req_srst
&&!jtag_srst
)||
1233 (!req_srst
&&jtag_srst
)))
1235 /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
1236 //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
1240 /* Make sure that jtag_reset_config allows the requested reset */
1241 /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
1242 if (((jtag_reset_config
& RESET_SRST_PULLS_TRST
) && (req_srst
== 1)) && (!req_tlr_or_trst
))
1244 LOG_ERROR("BUG: requested reset would assert trst");
1245 jtag_error
=ERROR_FAIL
;
1249 /* if TRST pulls SRST, we reset with TAP T-L-R */
1250 if (((jtag_reset_config
& RESET_TRST_PULLS_SRST
) && (req_tlr_or_trst
)) && (req_srst
== 0))
1255 if (req_srst
&& !(jtag_reset_config
& RESET_HAS_SRST
))
1257 LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
1258 jtag_error
=ERROR_FAIL
;
1262 if (req_tlr_or_trst
)
1264 if (!trst_with_tlr
&& (jtag_reset_config
& RESET_HAS_TRST
))
1276 jtag_srst
= req_srst
;
1278 retval
= interface_jtag_add_reset(jtag_trst
, jtag_srst
);
1279 if (retval
!=ERROR_OK
)
1287 LOG_DEBUG("SRST line asserted");
1291 LOG_DEBUG("SRST line released");
1292 if (jtag_nsrst_delay
)
1293 jtag_add_sleep(jtag_nsrst_delay
* 1000);
1298 LOG_DEBUG("JTAG reset with RESET instead of TRST");
1299 jtag_add_end_state(TAP_RESET
);
1301 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
1307 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
1308 * and inform possible listeners about this
1310 LOG_DEBUG("TRST line asserted");
1311 cmd_queue_cur_state
= TAP_RESET
;
1312 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
1316 if (jtag_ntrst_delay
)
1317 jtag_add_sleep(jtag_ntrst_delay
* 1000);
1321 int MINIDRIVER(interface_jtag_add_reset
)(int req_trst
, int req_srst
)
1323 /* allocate memory for a new list member */
1324 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1326 jtag_queue_command(cmd
);
1328 cmd
->type
= JTAG_RESET
;
1330 cmd
->cmd
.reset
= cmd_queue_alloc(sizeof(reset_command_t
));
1331 cmd
->cmd
.reset
->trst
= req_trst
;
1332 cmd
->cmd
.reset
->srst
= req_srst
;
1337 void jtag_add_end_state(tap_state_t state
)
1339 cmd_queue_end_state
= state
;
1340 if ((cmd_queue_end_state
== TAP_DRSHIFT
)||(cmd_queue_end_state
== TAP_IRSHIFT
))
1342 LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
1346 int MINIDRIVER(interface_jtag_add_sleep
)(u32 us
)
1348 /* allocate memory for a new list member */
1349 jtag_command_t
* cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1351 jtag_queue_command(cmd
);
1353 cmd
->type
= JTAG_SLEEP
;
1355 cmd
->cmd
.sleep
= cmd_queue_alloc(sizeof(sleep_command_t
));
1356 cmd
->cmd
.sleep
->us
= us
;
1361 void jtag_add_sleep(u32 us
)
1363 keep_alive(); /* we might be running on a very slow JTAG clk */
1364 int retval
=interface_jtag_add_sleep(us
);
1365 if (retval
!=ERROR_OK
)
1370 int jtag_scan_size(scan_command_t
*cmd
)
1375 /* count bits in scan command */
1376 for (i
= 0; i
< cmd
->num_fields
; i
++)
1378 bit_count
+= cmd
->fields
[i
].num_bits
;
1384 int jtag_build_buffer(scan_command_t
*cmd
, u8
**buffer
)
1389 bit_count
= jtag_scan_size(cmd
);
1390 *buffer
= calloc(1,CEIL(bit_count
, 8));
1394 #ifdef _DEBUG_JTAG_IO_
1395 LOG_DEBUG("%s num_fields: %i", cmd
->ir_scan
? "IRSCAN" : "DRSCAN", cmd
->num_fields
);
1398 for (i
= 0; i
< cmd
->num_fields
; i
++)
1400 if (cmd
->fields
[i
].out_value
)
1402 #ifdef _DEBUG_JTAG_IO_
1403 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);
1405 buf_set_buf(cmd
->fields
[i
].out_value
, 0, *buffer
, bit_count
, cmd
->fields
[i
].num_bits
);
1406 #ifdef _DEBUG_JTAG_IO_
1407 LOG_DEBUG("fields[%i].out_value[%i]: 0x%s", i
, cmd
->fields
[i
].num_bits
, char_buf
);
1413 #ifdef _DEBUG_JTAG_IO_
1414 LOG_DEBUG("fields[%i].out_value[%i]: NULL", i
, cmd
->fields
[i
].num_bits
);
1418 bit_count
+= cmd
->fields
[i
].num_bits
;
1421 #ifdef _DEBUG_JTAG_IO_
1422 //LOG_DEBUG("bit_count totalling: %i", bit_count );
1428 int jtag_read_buffer(u8
*buffer
, scan_command_t
*cmd
)
1434 /* we return ERROR_OK, unless a check fails, or a handler reports a problem */
1437 for (i
= 0; i
< cmd
->num_fields
; i
++)
1439 /* if neither in_value nor in_handler
1440 * are specified we don't have to examine this field
1442 if (cmd
->fields
[i
].in_value
)
1444 int num_bits
= cmd
->fields
[i
].num_bits
;
1445 u8
*captured
= buf_set_buf(buffer
, bit_count
, malloc(CEIL(num_bits
, 8)), 0, num_bits
);
1447 #ifdef _DEBUG_JTAG_IO_
1448 char *char_buf
= buf_to_str(captured
, (num_bits
> DEBUG_JTAG_IOZ
) ? DEBUG_JTAG_IOZ
: num_bits
, 16);
1449 LOG_DEBUG("fields[%i].in_value[%i]: 0x%s", i
, num_bits
, char_buf
);
1453 if (cmd
->fields
[i
].in_value
)
1455 buf_cpy(captured
, cmd
->fields
[i
].in_value
, num_bits
);
1460 bit_count
+= cmd
->fields
[i
].num_bits
;
1466 static const char *jtag_tap_name(jtag_tap_t
*tap
)
1468 return (tap
== NULL
) ? "(unknown)" : tap
->dotted_name
;
1471 int jtag_check_value_inner(u8
*captured
, u8
*in_check_value
, u8
*in_check_mask
, int num_bits
)
1473 int retval
= ERROR_OK
;
1475 int compare_failed
= 0;
1478 compare_failed
= buf_cmp_mask(captured
, in_check_value
, in_check_mask
, num_bits
);
1480 compare_failed
= buf_cmp(captured
, in_check_value
, num_bits
);
1482 if (compare_failed
){
1483 /* An error handler could have caught the failing check
1484 * only report a problem when there wasn't a handler, or if the handler
1485 * acknowledged the error
1488 LOG_WARNING("TAP %s:",
1489 jtag_tap_name(field->tap));
1493 char *captured_char
= buf_to_str(captured
, (num_bits
> DEBUG_JTAG_IOZ
) ? DEBUG_JTAG_IOZ
: num_bits
, 16);
1494 char *in_check_value_char
= buf_to_str(in_check_value
, (num_bits
> DEBUG_JTAG_IOZ
) ? DEBUG_JTAG_IOZ
: num_bits
, 16);
1498 char *in_check_mask_char
;
1499 in_check_mask_char
= buf_to_str(in_check_mask
, (num_bits
> DEBUG_JTAG_IOZ
) ? DEBUG_JTAG_IOZ
: num_bits
, 16);
1500 LOG_WARNING("value captured during scan didn't pass the requested check:");
1501 LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
1502 captured_char
, in_check_value_char
, in_check_mask_char
);
1503 free(in_check_mask_char
);
1507 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
);
1510 free(captured_char
);
1511 free(in_check_value_char
);
1513 retval
= ERROR_JTAG_QUEUE_FAILED
;
1520 void jtag_check_value_mask(scan_field_t
*field
, u8
*value
, u8
*mask
)
1522 assert(field
->in_value
!= NULL
);
1526 /* no checking to do */
1530 jtag_execute_queue_noclear();
1532 int retval
=jtag_check_value_inner(field
->in_value
, value
, mask
, field
->num_bits
);
1533 jtag_set_error(retval
);
1538 enum scan_type
jtag_scan_type(scan_command_t
*cmd
)
1543 for (i
= 0; i
< cmd
->num_fields
; i
++)
1545 if (cmd
->fields
[i
].in_value
)
1547 if (cmd
->fields
[i
].out_value
)
1555 #ifndef HAVE_JTAG_MINIDRIVER_H
1556 /* add callback to end of queue */
1557 void jtag_add_callback4(jtag_callback_t callback
, u8
*in
, jtag_callback_data_t data1
, jtag_callback_data_t data2
, jtag_callback_data_t data3
)
1559 struct jtag_callback_entry
*entry
=cmd_queue_alloc(sizeof(struct jtag_callback_entry
));
1562 entry
->callback
=callback
;
1568 if (jtag_callback_queue_head
==NULL
)
1570 jtag_callback_queue_head
=entry
;
1571 jtag_callback_queue_tail
=entry
;
1574 jtag_callback_queue_tail
->next
=entry
;
1575 jtag_callback_queue_tail
=entry
;
1580 static int jtag_convert_to_callback4(u8
*in
, jtag_callback_data_t data1
, jtag_callback_data_t data2
, jtag_callback_data_t data3
)
1582 ((jtag_callback1_t
)data1
)(in
);
1586 void jtag_add_callback(jtag_callback1_t callback
, u8
*in
)
1588 jtag_add_callback4(jtag_convert_to_callback4
, in
, (jtag_callback_data_t
)callback
, 0, 0);
1592 #ifndef HAVE_JTAG_MINIDRIVER_H
1594 int interface_jtag_execute_queue(void)
1600 LOG_ERROR("No JTAG interface configured yet. Issue 'init' command in startup scripts before communicating with targets.");
1604 retval
= jtag
->execute_queue();
1606 if (retval
== ERROR_OK
)
1608 struct jtag_callback_entry
*entry
;
1609 for (entry
=jtag_callback_queue_head
; entry
!=NULL
; entry
=entry
->next
)
1611 retval
=entry
->callback(entry
->in
, entry
->data1
, entry
->data2
, entry
->data3
);
1612 if (retval
!=ERROR_OK
)
1619 jtag_callback_queue_head
= NULL
;
1620 jtag_callback_queue_tail
= NULL
;
1622 jtag_command_queue
= NULL
;
1623 last_command_pointer
= &jtag_command_queue
;
1629 void jtag_execute_queue_noclear(void)
1631 /* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
1632 * E.g. a JTAG over TCP/IP or USB....
1634 jtag_flush_queue_count
++;
1636 int retval
=interface_jtag_execute_queue();
1637 /* we keep the first error */
1638 if ((jtag_error
==ERROR_OK
)&&(retval
!=ERROR_OK
))
1644 int jtag_execute_queue(void)
1647 jtag_execute_queue_noclear();
1649 jtag_error
=ERROR_OK
;
1653 int jtag_reset_callback(enum jtag_event event
, void *priv
)
1655 jtag_tap_t
*tap
= priv
;
1659 if (event
== JTAG_TRST_ASSERTED
)
1661 buf_set_ones(tap
->cur_instr
, tap
->ir_length
);
1668 void jtag_sleep(u32 us
)
1670 alive_sleep(us
/1000);
1673 /* Try to examine chain layout according to IEEE 1149.1 §12
1675 int jtag_examine_chain(void)
1679 u8 idcode_buffer
[JTAG_MAX_CHAIN_SIZE
* 4];
1682 int device_count
= 0;
1683 u8 zero_check
= 0x0;
1684 u8 one_check
= 0xff;
1687 field
.num_bits
= sizeof(idcode_buffer
) * 8;
1688 field
.out_value
= idcode_buffer
;
1690 field
.in_value
= idcode_buffer
;
1695 for (i
= 0; i
< JTAG_MAX_CHAIN_SIZE
; i
++)
1697 buf_set_u32(idcode_buffer
, i
* 32, 32, 0x000000FF);
1700 jtag_add_plain_dr_scan(1, &field
, TAP_RESET
);
1701 jtag_execute_queue();
1703 for (i
= 0; i
< JTAG_MAX_CHAIN_SIZE
* 4; i
++)
1705 zero_check
|= idcode_buffer
[i
];
1706 one_check
&= idcode_buffer
[i
];
1709 /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
1710 if ((zero_check
== 0x00) || (one_check
== 0xff))
1712 LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
1713 return ERROR_JTAG_INIT_FAILED
;
1716 /* point at the 1st tap */
1717 tap
= jtag_NextEnabledTap(NULL
);
1719 LOG_ERROR("JTAG: No taps enabled?");
1720 return ERROR_JTAG_INIT_FAILED
;
1723 for (bit_count
= 0; bit_count
< (JTAG_MAX_CHAIN_SIZE
* 32) - 31;)
1725 u32 idcode
= buf_get_u32(idcode_buffer
, bit_count
, 32);
1726 if ((idcode
& 1) == 0)
1728 /* LSB must not be 0, this indicates a device in bypass */
1729 LOG_WARNING("Tap/Device does not have IDCODE");
1740 /* some devices, such as AVR will output all 1's instead of TDI
1741 input value at end of chain. */
1742 if ((idcode
== 0x000000FF)||(idcode
== 0xFFFFFFFF))
1745 /* End of chain (invalid manufacturer ID)
1747 * The JTAG examine is the very first thing that happens
1749 * A single JTAG device requires only 64 bits to be read back correctly.
1751 * The code below adds a check that the rest of the data scanned (640 bits)
1752 * are all as expected. This helps diagnose/catch problems with the JTAG chain
1754 * earlier and gives more helpful/explicit error messages.
1756 for (bit_count
+= 32; bit_count
< (JTAG_MAX_CHAIN_SIZE
* 32) - 31;bit_count
+= 32)
1758 idcode
= buf_get_u32(idcode_buffer
, bit_count
, 32);
1759 if (unexpected
||((idcode
!= 0x000000FF)&&(idcode
!= 0xFFFFFFFF)))
1761 LOG_WARNING("Unexpected idcode after end of chain! %d 0x%08x", bit_count
, idcode
);
1769 #define EXTRACT_MFG(X) (((X) & 0xffe) >> 1)
1770 manufacturer
= EXTRACT_MFG(idcode
);
1771 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
1772 part
= EXTRACT_PART(idcode
);
1773 #define EXTRACT_VER(X) (((X) & 0xf0000000) >> 28)
1774 version
= EXTRACT_VER(idcode
);
1776 LOG_INFO("JTAG tap: %s tap/device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1777 ((tap
!= NULL
) ? (tap
->dotted_name
) : "(not-named)"),
1778 idcode
, manufacturer
, part
, version
);
1784 tap
->idcode
= idcode
;
1786 if (tap
->expected_ids_cnt
> 0) {
1787 /* Loop over the expected identification codes and test for a match */
1789 for (ii
= 0; ii
< tap
->expected_ids_cnt
; ii
++) {
1790 if( tap
->idcode
== tap
->expected_ids
[ii
] ){
1795 /* If none of the expected ids matched, log an error */
1796 if (ii
== tap
->expected_ids_cnt
) {
1797 LOG_ERROR("JTAG tap: %s got: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1800 EXTRACT_MFG( tap
->idcode
),
1801 EXTRACT_PART( tap
->idcode
),
1802 EXTRACT_VER( tap
->idcode
) );
1803 for (ii
= 0; ii
< tap
->expected_ids_cnt
; ii
++) {
1804 LOG_ERROR("JTAG tap: %s expected %hhu of %hhu: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1807 tap
->expected_ids_cnt
,
1808 tap
->expected_ids
[ii
],
1809 EXTRACT_MFG( tap
->expected_ids
[ii
] ),
1810 EXTRACT_PART( tap
->expected_ids
[ii
] ),
1811 EXTRACT_VER( tap
->expected_ids
[ii
] ) );
1814 return ERROR_JTAG_INIT_FAILED
;
1816 LOG_INFO("JTAG Tap/device matched");
1820 LOG_INFO("JTAG TAP ID: 0x%08x - Unknown - please report (A) chipname and (B) idcode to the openocd project",
1824 tap
= jtag_NextEnabledTap(tap
);
1829 /* see if number of discovered devices matches configuration */
1830 if (device_count
!= jtag_NumEnabledTaps())
1832 LOG_ERROR("number of discovered devices in JTAG chain (%i) doesn't match (enabled) configuration (%i), total taps: %d",
1833 device_count
, jtag_NumEnabledTaps(), jtag_NumTotalTaps());
1834 LOG_ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1835 return ERROR_JTAG_INIT_FAILED
;
1841 int jtag_validate_chain(void)
1844 int total_ir_length
= 0;
1850 total_ir_length
= 0;
1852 tap
= jtag_NextEnabledTap(tap
);
1856 total_ir_length
+= tap
->ir_length
;
1859 total_ir_length
+= 2;
1860 ir_test
= malloc(CEIL(total_ir_length
, 8));
1861 buf_set_ones(ir_test
, total_ir_length
);
1864 field
.num_bits
= total_ir_length
;
1865 field
.out_value
= ir_test
;
1866 field
.in_value
= ir_test
;
1869 jtag_add_plain_ir_scan(1, &field
, TAP_RESET
);
1870 jtag_execute_queue();
1876 tap
= jtag_NextEnabledTap(tap
);
1881 val
= buf_get_u32(ir_test
, chain_pos
, 2);
1884 char *cbuf
= buf_to_str(ir_test
, total_ir_length
, 16);
1885 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
);
1888 return ERROR_JTAG_INIT_FAILED
;
1890 chain_pos
+= tap
->ir_length
;
1893 val
= buf_get_u32(ir_test
, chain_pos
, 2);
1896 char *cbuf
= buf_to_str(ir_test
, total_ir_length
, 16);
1897 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
);
1900 return ERROR_JTAG_INIT_FAILED
;
1908 enum jtag_tap_cfg_param
{
1912 static Jim_Nvp nvp_config_opts
[] = {
1913 { .name
= "-event", .value
= JCFG_EVENT
},
1915 { .name
= NULL
, .value
= -1 }
1918 static int jtag_tap_configure_cmd( Jim_GetOptInfo
*goi
, jtag_tap_t
* tap
)
1924 /* parse config or cget options */
1925 while (goi
->argc
> 0) {
1926 Jim_SetEmptyResult (goi
->interp
);
1928 e
= Jim_GetOpt_Nvp(goi
, nvp_config_opts
, &n
);
1930 Jim_GetOpt_NvpUnknown(goi
, nvp_config_opts
, 0);
1936 if (goi
->argc
== 0) {
1937 Jim_WrongNumArgs( goi
->interp
, goi
->argc
, goi
->argv
, "-event ?event-name? ..." );
1941 e
= Jim_GetOpt_Nvp( goi
, nvp_jtag_tap_event
, &n
);
1943 Jim_GetOpt_NvpUnknown(goi
, nvp_jtag_tap_event
, 1);
1947 if (goi
->isconfigure
) {
1948 if (goi
->argc
!= 1) {
1949 Jim_WrongNumArgs(goi
->interp
, goi
->argc
, goi
->argv
, "-event ?event-name? ?EVENT-BODY?");
1953 if (goi
->argc
!= 0) {
1954 Jim_WrongNumArgs(goi
->interp
, goi
->argc
, goi
->argv
, "-event ?event-name?");
1960 jtag_tap_event_action_t
*jteap
;
1962 jteap
= tap
->event_action
;
1963 /* replace existing? */
1965 if (jteap
->event
== (enum jtag_tap_event
)n
->value
) {
1968 jteap
= jteap
->next
;
1971 if (goi
->isconfigure
) {
1972 if (jteap
== NULL
) {
1974 jteap
= calloc(1, sizeof (*jteap
));
1976 jteap
->event
= n
->value
;
1977 Jim_GetOpt_Obj( goi
, &o
);
1979 Jim_DecrRefCount(interp
, jteap
->body
);
1981 jteap
->body
= Jim_DuplicateObj(goi
->interp
, o
);
1982 Jim_IncrRefCount(jteap
->body
);
1984 /* add to head of event list */
1985 jteap
->next
= tap
->event_action
;
1986 tap
->event_action
= jteap
;
1987 Jim_SetEmptyResult(goi
->interp
);
1990 if (jteap
== NULL
) {
1991 Jim_SetEmptyResult(goi
->interp
);
1993 Jim_SetResult(goi
->interp
, Jim_DuplicateObj(goi
->interp
, jteap
->body
));
2000 } /* while (goi->argc) */
2005 static int jim_newtap_cmd( Jim_GetOptInfo
*goi
)
2015 const Jim_Nvp opts
[] = {
2016 #define NTAP_OPT_IRLEN 0
2017 { .name
= "-irlen" , .value
= NTAP_OPT_IRLEN
},
2018 #define NTAP_OPT_IRMASK 1
2019 { .name
= "-irmask" , .value
= NTAP_OPT_IRMASK
},
2020 #define NTAP_OPT_IRCAPTURE 2
2021 { .name
= "-ircapture" , .value
= NTAP_OPT_IRCAPTURE
},
2022 #define NTAP_OPT_ENABLED 3
2023 { .name
= "-enable" , .value
= NTAP_OPT_ENABLED
},
2024 #define NTAP_OPT_DISABLED 4
2025 { .name
= "-disable" , .value
= NTAP_OPT_DISABLED
},
2026 #define NTAP_OPT_EXPECTED_ID 5
2027 { .name
= "-expected-id" , .value
= NTAP_OPT_EXPECTED_ID
},
2028 { .name
= NULL
, .value
= -1 },
2031 pTap
= malloc( sizeof(jtag_tap_t
) );
2032 memset( pTap
, 0, sizeof(*pTap
) );
2034 Jim_SetResult_sprintf( goi
->interp
, "no memory");
2038 * we expect CHIP + TAP + OPTIONS
2040 if( goi
->argc
< 3 ){
2041 Jim_SetResult_sprintf(goi
->interp
, "Missing CHIP TAP OPTIONS ....");
2044 Jim_GetOpt_String( goi
, &cp
, NULL
);
2045 pTap
->chip
= strdup(cp
);
2047 Jim_GetOpt_String( goi
, &cp
, NULL
);
2048 pTap
->tapname
= strdup(cp
);
2050 /* name + dot + name + null */
2051 x
= strlen(pTap
->chip
) + 1 + strlen(pTap
->tapname
) + 1;
2053 sprintf( cp
, "%s.%s", pTap
->chip
, pTap
->tapname
);
2054 pTap
->dotted_name
= cp
;
2056 LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
2057 pTap
->chip
, pTap
->tapname
, pTap
->dotted_name
, goi
->argc
);
2059 /* default is enabled */
2062 /* deal with options */
2063 #define NTREQ_IRLEN 1
2064 #define NTREQ_IRCAPTURE 2
2065 #define NTREQ_IRMASK 4
2067 /* clear them as we find them */
2068 reqbits
= (NTREQ_IRLEN
| NTREQ_IRCAPTURE
| NTREQ_IRMASK
);
2071 e
= Jim_GetOpt_Nvp( goi
, opts
, &n
);
2073 Jim_GetOpt_NvpUnknown( goi
, opts
, 0 );
2076 LOG_DEBUG("Processing option: %s", n
->name
);
2078 case NTAP_OPT_ENABLED
:
2081 case NTAP_OPT_DISABLED
:
2084 case NTAP_OPT_EXPECTED_ID
:
2086 u32
*new_expected_ids
;
2088 e
= Jim_GetOpt_Wide( goi
, &w
);
2090 Jim_SetResult_sprintf(goi
->interp
, "option: %s bad parameter", n
->name
);
2094 new_expected_ids
= malloc(sizeof(u32
) * (pTap
->expected_ids_cnt
+ 1));
2095 if (new_expected_ids
== NULL
) {
2096 Jim_SetResult_sprintf( goi
->interp
, "no memory");
2100 memcpy(new_expected_ids
, pTap
->expected_ids
, sizeof(u32
) * pTap
->expected_ids_cnt
);
2102 new_expected_ids
[pTap
->expected_ids_cnt
] = w
;
2104 free(pTap
->expected_ids
);
2105 pTap
->expected_ids
= new_expected_ids
;
2106 pTap
->expected_ids_cnt
++;
2109 case NTAP_OPT_IRLEN
:
2110 case NTAP_OPT_IRMASK
:
2111 case NTAP_OPT_IRCAPTURE
:
2112 e
= Jim_GetOpt_Wide( goi
, &w
);
2114 Jim_SetResult_sprintf( goi
->interp
, "option: %s bad parameter", n
->name
);
2117 if( (w
< 0) || (w
> 0xffff) ){
2119 Jim_SetResult_sprintf( goi
->interp
, "option: %s - wacky value: %d (0x%x)",
2120 n
->name
, (int)(w
), (int)(w
));
2124 case NTAP_OPT_IRLEN
:
2125 pTap
->ir_length
= w
;
2126 reqbits
&= (~(NTREQ_IRLEN
));
2128 case NTAP_OPT_IRMASK
:
2129 pTap
->ir_capture_mask
= w
;
2130 reqbits
&= (~(NTREQ_IRMASK
));
2132 case NTAP_OPT_IRCAPTURE
:
2133 pTap
->ir_capture_value
= w
;
2134 reqbits
&= (~(NTREQ_IRCAPTURE
));
2137 } /* switch(n->value) */
2138 } /* while( goi->argc ) */
2140 /* Did we get all the options? */
2143 Jim_SetResult_sprintf( goi
->interp
,
2144 "newtap: %s missing required parameters",
2146 /* TODO: Tell user what is missing :-( */
2147 /* no memory leaks pelase */
2148 free(((void *)(pTap
->expected_ids
)));
2149 free(((void *)(pTap
->chip
)));
2150 free(((void *)(pTap
->tapname
)));
2151 free(((void *)(pTap
->dotted_name
)));
2152 free(((void *)(pTap
)));
2156 pTap
->expected
= malloc( pTap
->ir_length
);
2157 pTap
->expected_mask
= malloc( pTap
->ir_length
);
2158 pTap
->cur_instr
= malloc( pTap
->ir_length
);
2160 buf_set_u32( pTap
->expected
,
2163 pTap
->ir_capture_value
);
2164 buf_set_u32( pTap
->expected_mask
,
2167 pTap
->ir_capture_mask
);
2168 buf_set_ones( pTap
->cur_instr
,
2173 jtag_register_event_callback(jtag_reset_callback
, pTap
);
2175 ppTap
= &(jtag_all_taps
);
2176 while( (*ppTap
) != NULL
){
2177 ppTap
= &((*ppTap
)->next_tap
);
2181 static int n_taps
= 0;
2182 pTap
->abs_chain_position
= n_taps
++;
2184 LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
2185 (*ppTap
)->dotted_name
,
2186 (*ppTap
)->abs_chain_position
,
2187 (*ppTap
)->ir_length
,
2188 (*ppTap
)->ir_capture_value
,
2189 (*ppTap
)->ir_capture_mask
);
2194 static int jim_jtag_command( Jim_Interp
*interp
, int argc
, Jim_Obj
*const *argv
)
2200 struct command_context_s
*context
;
2204 JTAG_CMD_INIT_RESET
,
2207 JTAG_CMD_TAPDISABLE
,
2208 JTAG_CMD_TAPISENABLED
,
2213 const Jim_Nvp jtag_cmds
[] = {
2214 { .name
= "interface" , .value
= JTAG_CMD_INTERFACE
},
2215 { .name
= "arp_init-reset", .value
= JTAG_CMD_INIT_RESET
},
2216 { .name
= "newtap" , .value
= JTAG_CMD_NEWTAP
},
2217 { .name
= "tapisenabled" , .value
= JTAG_CMD_TAPISENABLED
},
2218 { .name
= "tapenable" , .value
= JTAG_CMD_TAPENABLE
},
2219 { .name
= "tapdisable" , .value
= JTAG_CMD_TAPDISABLE
},
2220 { .name
= "configure" , .value
= JTAG_CMD_CONFIGURE
},
2221 { .name
= "cget" , .value
= JTAG_CMD_CGET
},
2223 { .name
= NULL
, .value
= -1 },
2226 context
= Jim_GetAssocData(interp
, "context");
2227 /* go past the command */
2228 Jim_GetOpt_Setup( &goi
, interp
, argc
-1, argv
+1 );
2230 e
= Jim_GetOpt_Nvp( &goi
, jtag_cmds
, &n
);
2232 Jim_GetOpt_NvpUnknown( &goi
, jtag_cmds
, 0 );
2235 Jim_SetEmptyResult( goi
.interp
);
2237 case JTAG_CMD_INTERFACE
:
2238 /* return the name of the interface */
2239 /* TCL code might need to know the exact type... */
2240 /* FUTURE: we allow this as a means to "set" the interface. */
2241 if( goi
.argc
!= 0 ){
2242 Jim_WrongNumArgs( goi
.interp
, 1, goi
.argv
-1, "(no params)");
2245 Jim_SetResultString( goi
.interp
, jtag_interface
->name
, -1 );
2247 case JTAG_CMD_INIT_RESET
:
2248 if( goi
.argc
!= 0 ){
2249 Jim_WrongNumArgs( goi
.interp
, 1, goi
.argv
-1, "(no params)");
2252 e
= jtag_init_reset(context
);
2253 if( e
!= ERROR_OK
){
2254 Jim_SetResult_sprintf( goi
.interp
, "error: %d", e
);
2258 case JTAG_CMD_NEWTAP
:
2259 return jim_newtap_cmd( &goi
);
2261 case JTAG_CMD_TAPISENABLED
:
2262 case JTAG_CMD_TAPENABLE
:
2263 case JTAG_CMD_TAPDISABLE
:
2264 if( goi
.argc
!= 1 ){
2265 Jim_SetResultString( goi
.interp
, "Too many parameters",-1 );
2271 t
= jtag_TapByJimObj( goi
.interp
, goi
.argv
[0] );
2276 case JTAG_CMD_TAPISENABLED
:
2279 case JTAG_CMD_TAPENABLE
:
2280 jtag_tap_handle_event( t
, JTAG_TAP_EVENT_ENABLE
);
2284 case JTAG_CMD_TAPDISABLE
:
2285 jtag_tap_handle_event( t
, JTAG_TAP_EVENT_DISABLE
);
2290 Jim_SetResult( goi
.interp
, Jim_NewIntObj( goi
.interp
, e
) );
2297 Jim_WrongNumArgs( goi
.interp
, 0, NULL
, "?tap-name? -option ...");
2304 Jim_GetOpt_Obj(&goi
, &o
);
2305 t
= jtag_TapByJimObj( goi
.interp
, o
);
2310 goi
.isconfigure
= 0;
2311 return jtag_tap_configure_cmd( &goi
, t
);
2315 case JTAG_CMD_CONFIGURE
:
2317 Jim_WrongNumArgs( goi
.interp
, 0, NULL
, "?tap-name? -option ?VALUE? ...");
2324 Jim_GetOpt_Obj(&goi
, &o
);
2325 t
= jtag_TapByJimObj( goi
.interp
, o
);
2330 goi
.isconfigure
= 1;
2331 return jtag_tap_configure_cmd( &goi
, t
);
2338 int jtag_register_commands(struct command_context_s
*cmd_ctx
)
2340 register_jim( cmd_ctx
, "jtag", jim_jtag_command
, "perform jtag tap actions");
2342 register_command(cmd_ctx
, NULL
, "interface", handle_interface_command
,
2343 COMMAND_CONFIG
, "try to configure interface");
2344 register_command(cmd_ctx
, NULL
, "jtag_speed", handle_jtag_speed_command
,
2345 COMMAND_ANY
, "set jtag speed (if supported)");
2346 register_command(cmd_ctx
, NULL
, "jtag_khz", handle_jtag_khz_command
,
2347 COMMAND_ANY
, "same as jtag_speed, except it takes maximum khz as arguments. 0 KHz = RTCK.");
2348 register_command(cmd_ctx
, NULL
, "jtag_device", handle_jtag_device_command
,
2349 COMMAND_CONFIG
, "jtag_device <ir_length> <ir_expected> <ir_mask>");
2350 register_command(cmd_ctx
, NULL
, "reset_config", handle_reset_config_command
,
2352 "[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]");
2353 register_command(cmd_ctx
, NULL
, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command
,
2354 COMMAND_ANY
, "jtag_nsrst_delay <ms> - delay after deasserting srst in ms");
2355 register_command(cmd_ctx
, NULL
, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command
,
2356 COMMAND_ANY
, "jtag_ntrst_delay <ms> - delay after deasserting trst in ms");
2358 register_command(cmd_ctx
, NULL
, "scan_chain", handle_scan_chain_command
,
2359 COMMAND_EXEC
, "print current scan chain configuration");
2361 register_command(cmd_ctx
, NULL
, "endstate", handle_endstate_command
,
2362 COMMAND_EXEC
, "finish JTAG operations in <tap_state>");
2363 register_command(cmd_ctx
, NULL
, "jtag_reset", handle_jtag_reset_command
,
2364 COMMAND_EXEC
, "toggle reset lines <trst> <srst>");
2365 register_command(cmd_ctx
, NULL
, "runtest", handle_runtest_command
,
2366 COMMAND_EXEC
, "move to Run-Test/Idle, and execute <num_cycles>");
2367 register_command(cmd_ctx
, NULL
, "irscan", handle_irscan_command
,
2368 COMMAND_EXEC
, "execute IR scan <device> <instr> [dev2] [instr2] ...");
2369 register_jim(cmd_ctx
, "drscan", Jim_Command_drscan
, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ...");
2370 register_jim(cmd_ctx
, "flush_count", Jim_Command_flush_count
, "returns number of times the JTAG queue has been flushed");
2372 register_command(cmd_ctx
, NULL
, "verify_ircapture", handle_verify_ircapture_command
,
2373 COMMAND_ANY
, "verify value captured during Capture-IR <enable|disable>");
2374 register_command(cmd_ctx
, NULL
, "verify_jtag", handle_verify_jtag_command
,
2375 COMMAND_ANY
, "verify value capture <enable|disable>");
2376 register_command(cmd_ctx
, NULL
, "tms_sequence", handle_tms_sequence_command
,
2377 COMMAND_ANY
, "choose short(default) or long tms_sequence <short|long>");
2381 int jtag_interface_init(struct command_context_s
*cmd_ctx
)
2386 if (!jtag_interface
)
2388 /* nothing was previously specified by "interface" command */
2389 LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
2390 return ERROR_JTAG_INVALID_INTERFACE
;
2394 jtag_interface
->khz(speed_khz
, &jtag_speed
);
2398 if (jtag_interface
->init() != ERROR_OK
)
2399 return ERROR_JTAG_INIT_FAILED
;
2401 jtag
= jtag_interface
;
2405 static int jtag_init_inner(struct command_context_s
*cmd_ctx
)
2410 LOG_DEBUG("Init JTAG chain");
2412 tap
= jtag_NextEnabledTap(NULL
);
2414 LOG_ERROR("There are no enabled taps?");
2415 return ERROR_JTAG_INIT_FAILED
;
2419 if ((retval
=jtag_execute_queue())!=ERROR_OK
)
2422 /* examine chain first, as this could discover the real chain layout */
2423 if (jtag_examine_chain() != ERROR_OK
)
2425 LOG_ERROR("trying to validate configured JTAG chain anyway...");
2428 if (jtag_validate_chain() != ERROR_OK
)
2430 LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
2436 int jtag_init_reset(struct command_context_s
*cmd_ctx
)
2440 if ((retval
=jtag_interface_init(cmd_ctx
)) != ERROR_OK
)
2443 LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
2445 /* Reset can happen after a power cycle.
2447 * Ideally we would only assert TRST or run RESET before the target reset.
2449 * However w/srst_pulls_trst, trst is asserted together with the target
2450 * reset whether we want it or not.
2452 * NB! Some targets have JTAG circuitry disabled until a
2453 * trst & srst has been asserted.
2455 * NB! here we assume nsrst/ntrst delay are sufficient!
2457 * NB! order matters!!!! srst *can* disconnect JTAG circuitry
2460 jtag_add_reset(1, 0); /* RESET or TRST */
2461 if (jtag_reset_config
& RESET_HAS_SRST
)
2463 jtag_add_reset(1, 1);
2464 if ((jtag_reset_config
& RESET_SRST_PULLS_TRST
)==0)
2465 jtag_add_reset(0, 1);
2467 jtag_add_reset(0, 0);
2468 if ((retval
= jtag_execute_queue()) != ERROR_OK
)
2471 /* Check that we can communication on the JTAG chain + eventually we want to
2472 * be able to perform enumeration only after OpenOCD has started
2473 * telnet and GDB server
2475 * That would allow users to more easily perform any magic they need to before
2478 return jtag_init_inner(cmd_ctx
);
2481 int jtag_init(struct command_context_s
*cmd_ctx
)
2484 if ((retval
=jtag_interface_init(cmd_ctx
)) != ERROR_OK
)
2486 if (jtag_init_inner(cmd_ctx
)==ERROR_OK
)
2490 return jtag_init_reset(cmd_ctx
);
2493 static int default_khz(int khz
, int *jtag_speed
)
2495 LOG_ERROR("Translation from khz to jtag_speed not implemented");
2499 static int default_speed_div(int speed
, int *khz
)
2501 LOG_ERROR("Translation from jtag_speed to khz not implemented");
2505 static int default_power_dropout(int *dropout
)
2507 *dropout
=0; /* by default we can't detect power dropout */
2511 static int default_srst_asserted(int *srst_asserted
)
2513 *srst_asserted
=0; /* by default we can't detect srst asserted */
2517 static int handle_interface_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2522 /* check whether the interface is already configured */
2525 LOG_WARNING("Interface already configured, ignoring");
2529 /* interface name is a mandatory argument */
2530 if (argc
< 1 || args
[0][0] == '\0')
2532 return ERROR_COMMAND_SYNTAX_ERROR
;
2535 for (i
=0; jtag_interfaces
[i
]; i
++)
2537 if (strcmp(args
[0], jtag_interfaces
[i
]->name
) == 0)
2539 if ((retval
= jtag_interfaces
[i
]->register_commands(cmd_ctx
)) != ERROR_OK
)
2544 jtag_interface
= jtag_interfaces
[i
];
2546 if (jtag_interface
->khz
== NULL
)
2548 jtag_interface
->khz
= default_khz
;
2550 if (jtag_interface
->speed_div
== NULL
)
2552 jtag_interface
->speed_div
= default_speed_div
;
2554 if (jtag_interface
->power_dropout
== NULL
)
2556 jtag_interface
->power_dropout
= default_power_dropout
;
2558 if (jtag_interface
->srst_asserted
== NULL
)
2560 jtag_interface
->srst_asserted
= default_srst_asserted
;
2567 /* no valid interface was found (i.e. the configuration option,
2568 * didn't match one of the compiled-in interfaces
2570 LOG_ERROR("No valid jtag interface found (%s)", args
[0]);
2571 LOG_ERROR("compiled-in jtag interfaces:");
2572 for (i
= 0; jtag_interfaces
[i
]; i
++)
2574 LOG_ERROR("%i: %s", i
, jtag_interfaces
[i
]->name
);
2577 return ERROR_JTAG_INVALID_INTERFACE
;
2580 static int handle_jtag_device_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2584 Jim_Obj
*newargs
[ 10 ];
2587 * argv[-1] = command
2588 * argv[ 0] = ir length
2589 * argv[ 1] = ir capture
2590 * argv[ 2] = ir mask
2591 * argv[ 3] = not actually used by anything but in the docs
2595 command_print( cmd_ctx
, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
2598 command_print( cmd_ctx
, "OLD SYNTAX: DEPRECATED - translating to new syntax");
2599 command_print( cmd_ctx
, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
2603 command_print( cmd_ctx
, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
2604 command_print( cmd_ctx
, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
2605 command_print( cmd_ctx
, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
2606 command_print( cmd_ctx
, "And then refer to the taps by the dotted name.");
2608 newargs
[0] = Jim_NewStringObj( interp
, "jtag", -1 );
2609 newargs
[1] = Jim_NewStringObj( interp
, "newtap", -1 );
2610 sprintf( buf
, "chip%d", jtag_NumTotalTaps() );
2611 newargs
[2] = Jim_NewStringObj( interp
, buf
, -1 );
2612 sprintf( buf
, "tap%d", jtag_NumTotalTaps() );
2613 newargs
[3] = Jim_NewStringObj( interp
, buf
, -1 );
2614 newargs
[4] = Jim_NewStringObj( interp
, "-irlen", -1 );
2615 newargs
[5] = Jim_NewStringObj( interp
, args
[0], -1 );
2616 newargs
[6] = Jim_NewStringObj( interp
, "-ircapture", -1 );
2617 newargs
[7] = Jim_NewStringObj( interp
, args
[1], -1 );
2618 newargs
[8] = Jim_NewStringObj( interp
, "-irmask", -1 );
2619 newargs
[9] = Jim_NewStringObj( interp
, args
[2], -1 );
2621 command_print( cmd_ctx
, "NEW COMMAND:");
2622 sprintf( buf
, "%s %s %s %s %s %s %s %s %s %s",
2623 Jim_GetString( newargs
[0], NULL
),
2624 Jim_GetString( newargs
[1], NULL
),
2625 Jim_GetString( newargs
[2], NULL
),
2626 Jim_GetString( newargs
[3], NULL
),
2627 Jim_GetString( newargs
[4], NULL
),
2628 Jim_GetString( newargs
[5], NULL
),
2629 Jim_GetString( newargs
[6], NULL
),
2630 Jim_GetString( newargs
[7], NULL
),
2631 Jim_GetString( newargs
[8], NULL
),
2632 Jim_GetString( newargs
[9], NULL
) );
2634 e
= jim_jtag_command( interp
, 10, newargs
);
2636 command_print( cmd_ctx
, "%s", Jim_GetString( Jim_GetResult(interp
), NULL
) );
2641 static int handle_scan_chain_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2645 tap
= jtag_all_taps
;
2646 command_print(cmd_ctx
, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
2647 command_print(cmd_ctx
, "---|--------------------|---------|------------|------------|------|------|------|---------");
2650 u32 expected
, expected_mask
, cur_instr
, ii
;
2651 expected
= buf_get_u32(tap
->expected
, 0, tap
->ir_length
);
2652 expected_mask
= buf_get_u32(tap
->expected_mask
, 0, tap
->ir_length
);
2653 cur_instr
= buf_get_u32(tap
->cur_instr
, 0, tap
->ir_length
);
2655 command_print(cmd_ctx
,
2656 "%2d | %-18s | %c | 0x%08x | 0x%08x | 0x%02x | 0x%02x | 0x%02x | 0x%02x",
2657 tap
->abs_chain_position
,
2659 tap
->enabled
? 'Y' : 'n',
2661 (tap
->expected_ids_cnt
> 0 ? tap
->expected_ids
[0] : 0),
2667 for (ii
= 1; ii
< tap
->expected_ids_cnt
; ii
++) {
2668 command_print(cmd_ctx
, " | | | | 0x%08x | | | | ",
2669 tap
->expected_ids
[ii
]);
2672 tap
= tap
->next_tap
;
2678 static int handle_reset_config_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2681 return ERROR_COMMAND_SYNTAX_ERROR
;
2685 if (strcmp(args
[0], "none") == 0)
2686 jtag_reset_config
= RESET_NONE
;
2687 else if (strcmp(args
[0], "trst_only") == 0)
2688 jtag_reset_config
= RESET_HAS_TRST
;
2689 else if (strcmp(args
[0], "srst_only") == 0)
2690 jtag_reset_config
= RESET_HAS_SRST
;
2691 else if (strcmp(args
[0], "trst_and_srst") == 0)
2692 jtag_reset_config
= RESET_TRST_AND_SRST
;
2695 LOG_ERROR("(1) invalid reset_config argument (%s), defaulting to none", args
[0]);
2696 jtag_reset_config
= RESET_NONE
;
2697 return ERROR_INVALID_ARGUMENTS
;
2703 if (strcmp(args
[1], "separate") == 0)
2705 /* seperate reset lines - default */
2708 if (strcmp(args
[1], "srst_pulls_trst") == 0)
2709 jtag_reset_config
|= RESET_SRST_PULLS_TRST
;
2710 else if (strcmp(args
[1], "trst_pulls_srst") == 0)
2711 jtag_reset_config
|= RESET_TRST_PULLS_SRST
;
2712 else if (strcmp(args
[1], "combined") == 0)
2713 jtag_reset_config
|= RESET_SRST_PULLS_TRST
| RESET_TRST_PULLS_SRST
;
2716 LOG_ERROR("(2) invalid reset_config argument (%s), defaulting to none", args
[1]);
2717 jtag_reset_config
= RESET_NONE
;
2718 return ERROR_INVALID_ARGUMENTS
;
2725 if (strcmp(args
[2], "trst_open_drain") == 0)
2726 jtag_reset_config
|= RESET_TRST_OPEN_DRAIN
;
2727 else if (strcmp(args
[2], "trst_push_pull") == 0)
2728 jtag_reset_config
&= ~RESET_TRST_OPEN_DRAIN
;
2731 LOG_ERROR("(3) invalid reset_config argument (%s) defaulting to none", args
[2] );
2732 jtag_reset_config
= RESET_NONE
;
2733 return ERROR_INVALID_ARGUMENTS
;
2739 if (strcmp(args
[3], "srst_push_pull") == 0)
2740 jtag_reset_config
|= RESET_SRST_PUSH_PULL
;
2741 else if (strcmp(args
[3], "srst_open_drain") == 0)
2742 jtag_reset_config
&= ~RESET_SRST_PUSH_PULL
;
2745 LOG_ERROR("(4) invalid reset_config argument (%s), defaulting to none", args
[3]);
2746 jtag_reset_config
= RESET_NONE
;
2747 return ERROR_INVALID_ARGUMENTS
;
2754 static int handle_jtag_nsrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2758 LOG_ERROR("jtag_nsrst_delay <ms> command takes one required argument");
2763 jtag_nsrst_delay
= strtoul(args
[0], NULL
, 0);
2769 static int handle_jtag_ntrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2773 LOG_ERROR("jtag_ntrst_delay <ms> command takes one required argument");
2778 jtag_ntrst_delay
= strtoul(args
[0], NULL
, 0);
2784 static int handle_jtag_speed_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2786 int retval
=ERROR_OK
;
2790 LOG_DEBUG("handle jtag speed");
2793 cur_speed
= jtag_speed
= strtoul(args
[0], NULL
, 0);
2795 /* this command can be called during CONFIG,
2796 * in which case jtag isn't initialized */
2799 retval
=jtag
->speed(cur_speed
);
2801 } else if (argc
== 0)
2805 return ERROR_COMMAND_SYNTAX_ERROR
;
2807 command_print(cmd_ctx
, "jtag_speed: %d", jtag_speed
);
2812 static int handle_jtag_khz_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2814 int retval
=ERROR_OK
;
2815 LOG_DEBUG("handle jtag khz");
2819 speed_khz
= strtoul(args
[0], NULL
, 0);
2823 LOG_DEBUG("have interface set up");
2825 if ((retval
=jtag
->khz(speed_khz
, &speed_div1
))!=ERROR_OK
)
2831 cur_speed
= jtag_speed
= speed_div1
;
2833 retval
=jtag
->speed(cur_speed
);
2842 return ERROR_COMMAND_SYNTAX_ERROR
;
2847 if ((retval
=jtag
->speed_div(jtag_speed
, &speed_khz
))!=ERROR_OK
)
2853 command_print(cmd_ctx
, "RCLK - adaptive");
2856 command_print(cmd_ctx
, "%d kHz", speed_khz
);
2862 static int handle_endstate_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2868 return ERROR_COMMAND_SYNTAX_ERROR
;
2872 state
= tap_state_by_name( args
[0] );
2874 command_print( cmd_ctx
, "Invalid state name: %s\n", args
[0] );
2875 return ERROR_COMMAND_SYNTAX_ERROR
;
2877 jtag_add_end_state(state
);
2878 jtag_execute_queue();
2880 command_print(cmd_ctx
, "current endstate: %s", tap_state_name(cmd_queue_end_state
));
2885 static int handle_jtag_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2892 return ERROR_COMMAND_SYNTAX_ERROR
;
2895 if (args
[0][0] == '1')
2897 else if (args
[0][0] == '0')
2901 return ERROR_COMMAND_SYNTAX_ERROR
;
2904 if (args
[1][0] == '1')
2906 else if (args
[1][0] == '0')
2910 return ERROR_COMMAND_SYNTAX_ERROR
;
2913 if (jtag_interface_init(cmd_ctx
) != ERROR_OK
)
2914 return ERROR_JTAG_INIT_FAILED
;
2916 jtag_add_reset(trst
, srst
);
2917 jtag_execute_queue();
2922 static int handle_runtest_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2926 return ERROR_COMMAND_SYNTAX_ERROR
;
2929 jtag_add_runtest(strtol(args
[0], NULL
, 0), TAP_INVALID
);
2930 jtag_execute_queue();
2936 static int handle_irscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
2939 scan_field_t
*fields
;
2941 tap_state_t endstate
;
2943 if ((argc
< 2) || (argc
% 2))
2945 return ERROR_COMMAND_SYNTAX_ERROR
;
2948 /* optional "-endstate" */
2950 /* at the end of the arguments. */
2952 endstate
= cmd_queue_end_state
;
2954 /* have at least one pair of numbers. */
2955 /* is last pair the magic text? */
2956 if( 0 == strcmp( "-endstate", args
[ argc
- 2 ] ) ){
2959 cpA
= args
[ argc
-1 ];
2960 for( endstate
= 0 ; endstate
< TAP_NUM_STATES
; endstate
++ ){
2961 cpS
= tap_state_name( endstate
);
2962 if( 0 == strcmp( cpA
, cpS
) ){
2966 if( endstate
>= TAP_NUM_STATES
){
2967 return ERROR_COMMAND_SYNTAX_ERROR
;
2969 /* found - remove the last 2 args */
2975 int num_fields
= argc
/ 2;
2977 fields
= malloc(sizeof(scan_field_t
) * num_fields
);
2979 for (i
= 0; i
< num_fields
; i
++)
2981 tap
= jtag_TapByString( args
[i
*2] );
2984 command_print( cmd_ctx
, "Tap: %s unknown", args
[i
*2] );
2987 int field_size
= tap
->ir_length
;
2988 fields
[i
].tap
= tap
;
2989 fields
[i
].num_bits
= field_size
;
2990 fields
[i
].out_value
= malloc(CEIL(field_size
, 8));
2991 buf_set_u32(fields
[i
].out_value
, 0, field_size
, strtoul(args
[i
*2+1], NULL
, 0));
2992 fields
[i
].in_value
= NULL
;
2995 /* did we have an endstate? */
2996 jtag_add_ir_scan(num_fields
, fields
, endstate
);
2998 int retval
=jtag_execute_queue();
3000 for (i
= 0; i
< num_fields
; i
++)
3001 free(fields
[i
].out_value
);
3008 static int Jim_Command_drscan(Jim_Interp
*interp
, int argc
, Jim_Obj
*const *args
)
3011 scan_field_t
*fields
;
3013 int field_count
= 0;
3016 tap_state_t endstate
;
3019 * args[2] = num_bits
3020 * args[3] = hex string
3021 * ... repeat num bits and hex string ...
3024 * args[N-2] = "-endstate"
3025 * args[N-1] = statename
3027 if ((argc
< 4) || ((argc
% 2)!=0))
3029 Jim_WrongNumArgs(interp
, 1, args
, "wrong arguments");
3033 /* assume no endstate */
3034 endstate
= cmd_queue_end_state
;
3035 /* validate arguments as numbers */
3037 for (i
= 2; i
< argc
; i
+=2)
3042 e
= Jim_GetLong(interp
, args
[i
], &bits
);
3043 /* If valid - try next arg */
3048 /* Not valid.. are we at the end? */
3049 if ( ((i
+2) != argc
) ){
3050 /* nope, then error */
3054 /* it could be: "-endstate FOO" */
3056 /* get arg as a string. */
3057 cp
= Jim_GetString( args
[i
], NULL
);
3058 /* is it the magic? */
3059 if( 0 == strcmp( "-endstate", cp
) ){
3060 /* is the statename valid? */
3061 cp
= Jim_GetString( args
[i
+1], NULL
);
3063 /* see if it is a valid state name */
3064 endstate
= tap_state_by_name(cp
);
3066 /* update the error message */
3067 Jim_SetResult_sprintf(interp
,"endstate: %s invalid", cp
);
3069 /* valid - so clear the error */
3071 /* and remove the last 2 args */
3076 /* Still an error? */
3078 return e
; /* too bad */
3080 } /* validate args */
3082 tap
= jtag_TapByJimObj( interp
, args
[1] );
3087 num_fields
=(argc
-2)/2;
3088 fields
= malloc(sizeof(scan_field_t
) * num_fields
);
3089 for (i
= 2; i
< argc
; i
+=2)
3095 Jim_GetLong(interp
, args
[i
], &bits
);
3096 str
= Jim_GetString(args
[i
+1], &len
);
3098 fields
[field_count
].tap
= tap
;
3099 fields
[field_count
].num_bits
= bits
;
3100 fields
[field_count
].out_value
= malloc(CEIL(bits
, 8));
3101 str_to_buf(str
, len
, fields
[field_count
].out_value
, bits
, 0);
3102 fields
[field_count
].in_value
= fields
[field_count
].out_value
;
3106 jtag_add_dr_scan(num_fields
, fields
, endstate
);
3108 retval
= jtag_execute_queue();
3109 if (retval
!= ERROR_OK
)
3111 Jim_SetResultString(interp
, "drscan: jtag execute failed",-1);
3116 Jim_Obj
*list
= Jim_NewListObj(interp
, NULL
, 0);
3117 for (i
= 2; i
< argc
; i
+=2)
3122 Jim_GetLong(interp
, args
[i
], &bits
);
3123 str
= buf_to_str(fields
[field_count
].in_value
, bits
, 16);
3124 free(fields
[field_count
].out_value
);
3126 Jim_ListAppendElement(interp
, list
, Jim_NewStringObj(interp
, str
, strlen(str
)));
3131 Jim_SetResult(interp
, list
);
3139 static int Jim_Command_flush_count(Jim_Interp
*interp
, int argc
, Jim_Obj
*const *args
)
3141 Jim_SetResult(interp
, Jim_NewIntObj(interp
, jtag_flush_queue_count
));
3147 static int handle_verify_ircapture_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
3151 if (strcmp(args
[0], "enable") == 0)
3153 jtag_verify_capture_ir
= 1;
3155 else if (strcmp(args
[0], "disable") == 0)
3157 jtag_verify_capture_ir
= 0;
3160 return ERROR_COMMAND_SYNTAX_ERROR
;
3162 } else if (argc
!= 0)
3164 return ERROR_COMMAND_SYNTAX_ERROR
;
3167 command_print(cmd_ctx
, "verify Capture-IR is %s", (jtag_verify_capture_ir
) ? "enabled": "disabled");
3172 static int handle_verify_jtag_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
3176 if (strcmp(args
[0], "enable") == 0)
3180 else if (strcmp(args
[0], "disable") == 0)
3185 return ERROR_COMMAND_SYNTAX_ERROR
;
3187 } else if (argc
!= 0)
3189 return ERROR_COMMAND_SYNTAX_ERROR
;
3192 command_print(cmd_ctx
, "verify jtag capture is %s", (jtag_verify
) ? "enabled": "disabled");
3198 int jtag_power_dropout(int *dropout
)
3200 return jtag
->power_dropout(dropout
);
3203 int jtag_srst_asserted(int *srst_asserted
)
3205 return jtag
->srst_asserted(srst_asserted
);
3208 void jtag_tap_handle_event( jtag_tap_t
* tap
, enum jtag_tap_event e
)
3210 jtag_tap_event_action_t
* jteap
;
3213 jteap
= tap
->event_action
;
3217 if (jteap
->event
== e
) {
3219 LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
3222 Jim_Nvp_value2name_simple(nvp_jtag_tap_event
, e
)->name
,
3223 Jim_GetString(jteap
->body
, NULL
) );
3224 if (Jim_EvalObj(interp
, jteap
->body
) != JIM_OK
) {
3225 Jim_PrintErrorMessage(interp
);
3229 jteap
= jteap
->next
;
3233 LOG_DEBUG( "event %d %s - no action",
3235 Jim_Nvp_value2name_simple( nvp_jtag_tap_event
, e
)->name
);
3239 /*-----<Cable Helper API>---------------------------------------*/
3241 /* these Cable Helper API functions are all documented in the jtag.h header file,
3242 using a Doxygen format. And since Doxygen's configuration file "Doxyfile",
3243 is setup to prefer its docs in the header file, no documentation is here, for
3244 if it were, it would have to be doubly maintained.
3248 * @see tap_set_state() and tap_get_state() accessors.
3249 * Actual name is not important since accessors hide it.
3251 static tap_state_t state_follower
= TAP_RESET
;
3253 void tap_set_state_impl( tap_state_t new_state
)
3255 /* this is the state we think the TAPs are in now, was cur_state */
3256 state_follower
= new_state
;
3259 tap_state_t
tap_get_state()
3261 return state_follower
;
3265 * @see tap_set_end_state() and tap_get_end_state() accessors.
3266 * Actual name is not important because accessors hide it.
3268 static tap_state_t end_state_follower
= TAP_RESET
;
3270 void tap_set_end_state( tap_state_t new_end_state
)
3272 /* this is the state we think the TAPs will be in at completion of the
3273 current TAP operation, was end_state
3275 end_state_follower
= new_end_state
;
3278 tap_state_t
tap_get_end_state()
3280 return end_state_follower
;
3284 int tap_move_ndx( tap_state_t astate
)
3286 /* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
3292 case TAP_RESET
: ndx
= 0; break;
3293 case TAP_DRSHIFT
: ndx
= 2; break;
3294 case TAP_DRPAUSE
: ndx
= 3; break;
3295 case TAP_IDLE
: ndx
= 1; break;
3296 case TAP_IRSHIFT
: ndx
= 4; break;
3297 case TAP_IRPAUSE
: ndx
= 5; break;
3299 LOG_ERROR( "fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate
) );
3307 /* tap_move[i][j]: tap movement command to go from state i to state j
3308 * 0: Test-Logic-Reset
3315 * DRSHIFT->DRSHIFT and IRSHIFT->IRSHIFT have to be caught in interface specific code
3317 struct tms_sequences
3325 * These macros allow us to specify TMS state transitions by bits rather than hex bytes.
3326 * Read the bits from LSBit first to MSBit last (right-to-left).
3328 #define HEX__(n) 0x##n##LU
3331 (((x) & 0x0000000FLU)?(1<<0):0) \
3332 +(((x) & 0x000000F0LU)?(1<<1):0) \
3333 +(((x) & 0x00000F00LU)?(1<<2):0) \
3334 +(((x) & 0x0000F000LU)?(1<<3):0) \
3335 +(((x) & 0x000F0000LU)?(1<<4):0) \
3336 +(((x) & 0x00F00000LU)?(1<<5):0) \
3337 +(((x) & 0x0F000000LU)?(1<<6):0) \
3338 +(((x) & 0xF0000000LU)?(1<<7):0)
3340 #define B8(bits,count) { ((u8)B8__(HEX__(bits))), (count) }
3342 static const struct tms_sequences old_tms_seqs
[6][6] = /* [from_state_ndx][to_state_ndx] */
3344 /* value clocked to TMS to move from one of six stable states to another.
3345 * N.B. OOCD clocks TMS from LSB first, so read these right-to-left.
3346 * N.B. These values are tightly bound to the table in tap_get_tms_path_len().
3347 * N.B. Reset only needs to be 0b11111, but in JLink an even byte of 1's is more stable.
3348 * These extra ones cause no TAP state problem, because we go into reset and stay in reset.
3354 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */ /* from state: */
3355 { B8(1111111,7), B8(0000000,7), B8(0010111,7), B8(0001010,7), B8(0011011,7), B8(0010110,7) }, /* RESET */
3356 { B8(1111111,7), B8(0000000,7), B8(0100101,7), B8(0000101,7), B8(0101011,7), B8(0001011,7) }, /* IDLE */
3357 { B8(1111111,7), B8(0110001,7), B8(0000000,7), B8(0000001,7), B8(0001111,7), B8(0101111,7) }, /* DRSHIFT */
3358 { B8(1111111,7), B8(0110000,7), B8(0100000,7), B8(0010111,7), B8(0011110,7), B8(0101111,7) }, /* DRPAUSE */
3359 { B8(1111111,7), B8(0110001,7), B8(0000111,7), B8(0010111,7), B8(0000000,7), B8(0000001,7) }, /* IRSHIFT */
3360 { B8(1111111,7), B8(0110000,7), B8(0011100,7), B8(0010111,7), B8(0011110,7), B8(0101111,7) }, /* IRPAUSE */
3365 static const struct tms_sequences short_tms_seqs
[6][6] = /* [from_state_ndx][to_state_ndx] */
3367 /* this is the table submitted by Jeff Williams on 3/30/2009 with this comment:
3369 OK, I added Peter's version of the state table, and it works OK for
3370 me on MC1322x. I've recreated the jlink portion of patch with this
3371 new state table. His changes to my state table are pretty minor in
3372 terms of total transitions, but Peter feels that his version fixes
3373 some long-standing problems.
3376 I added the bit count into the table, reduced RESET column to 7 bits from 8.
3379 state specific comments:
3380 ------------------------
3381 *->RESET tried the 5 bit reset and it gave me problems, 7 bits seems to
3382 work better on ARM9 with ft2232 driver. (Dick)
3384 RESET->DRSHIFT add 1 extra clock cycles in the RESET state before advancing.
3385 needed on ARM9 with ft2232 driver. (Dick)
3387 RESET->IRSHIFT add 1 extra clock cycles in the RESET state before advancing.
3388 needed on ARM9 with ft2232 driver. (Dick)
3392 /* RESET IDLE DRSHIFT DRPAUSE IRSHIFT IRPAUSE */ /* from state: */
3393 { B8(1111111,7), B8(0000000,7), B8(0010111,7), B8(0001010,7), B8(0011011,7), B8(0010110,7) }, /* RESET */
3394 { B8(1111111,7), B8(0000000,7), B8(001,3), B8(0101,4), B8(0011,4), B8(01011,5) }, /* IDLE */
3395 { B8(1111111,7), B8(011,3), B8(00111,5), B8(01,2), B8(001111,6), B8(0101111,7) }, /* DRSHIFT */
3396 { B8(1111111,7), B8(011,3), B8(01,2), B8(0,1), B8(001111,6), B8(0101111,7) }, /* DRPAUSE */
3397 { B8(1111111,7), B8(011,3), B8(00111,5), B8(010111,6), B8(001111,6), B8(01,2) }, /* IRSHIFT */
3398 { B8(1111111,7), B8(011,3), B8(00111,5), B8(010111,6), B8(01,2), B8(0,1) } /* IRPAUSE */
3402 typedef const struct tms_sequences tms_table
[6][6];
3404 static tms_table
*tms_seqs
=&short_tms_seqs
;
3406 int tap_get_tms_path( tap_state_t from
, tap_state_t to
)
3408 return (*tms_seqs
)[tap_move_ndx(from
)][tap_move_ndx(to
)].bits
;
3412 int tap_get_tms_path_len( tap_state_t from
, tap_state_t to
)
3414 return (*tms_seqs
)[tap_move_ndx(from
)][tap_move_ndx(to
)].bit_count
;
3418 bool tap_is_state_stable(tap_state_t astate
)
3422 /* A switch() is used because it is symbol dependent
3423 (not value dependent like an array), and can also check bounds.
3442 tap_state_t
tap_state_transition(tap_state_t cur_state
, bool tms
)
3444 tap_state_t new_state
;
3446 /* A switch is used because it is symbol dependent and not value dependent
3447 like an array. Also it can check for out of range conditions.
3455 new_state
= cur_state
;
3460 new_state
= TAP_DRSELECT
;
3463 new_state
= TAP_IRSELECT
;
3467 new_state
= TAP_DREXIT1
;
3471 new_state
= TAP_DRUPDATE
;
3474 new_state
= TAP_DREXIT2
;
3477 new_state
= TAP_RESET
;
3481 new_state
= TAP_IREXIT1
;
3485 new_state
= TAP_IRUPDATE
;
3488 new_state
= TAP_IREXIT2
;
3491 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state
);
3504 new_state
= TAP_IDLE
;
3507 new_state
= TAP_DRCAPTURE
;
3512 new_state
= TAP_DRSHIFT
;
3516 new_state
= TAP_DRPAUSE
;
3519 new_state
= TAP_IRCAPTURE
;
3524 new_state
= TAP_IRSHIFT
;
3528 new_state
= TAP_IRPAUSE
;
3531 LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state
);
3540 const char* tap_state_name(tap_state_t state
)
3546 case TAP_RESET
: ret
= "RESET"; break;
3547 case TAP_IDLE
: ret
= "RUN/IDLE"; break;
3548 case TAP_DRSELECT
: ret
= "DRSELECT"; break;
3549 case TAP_DRCAPTURE
: ret
= "DRCAPTURE"; break;
3550 case TAP_DRSHIFT
: ret
= "DRSHIFT"; break;
3551 case TAP_DREXIT1
: ret
= "DREXIT1"; break;
3552 case TAP_DRPAUSE
: ret
= "DRPAUSE"; break;
3553 case TAP_DREXIT2
: ret
= "DREXIT2"; break;
3554 case TAP_DRUPDATE
: ret
= "DRUPDATE"; break;
3555 case TAP_IRSELECT
: ret
= "IRSELECT"; break;
3556 case TAP_IRCAPTURE
: ret
= "IRCAPTURE"; break;
3557 case TAP_IRSHIFT
: ret
= "IRSHIFT"; break;
3558 case TAP_IREXIT1
: ret
= "IREXIT1"; break;
3559 case TAP_IRPAUSE
: ret
= "IRPAUSE"; break;
3560 case TAP_IREXIT2
: ret
= "IREXIT2"; break;
3561 case TAP_IRUPDATE
: ret
= "IRUPDATE"; break;
3562 default: ret
= "???";
3568 static tap_state_t
tap_state_by_name( const char *name
)
3572 for( x
= 0 ; x
< TAP_NUM_STATES
; x
++ ){
3573 /* be nice to the human */
3574 if( 0 == strcasecmp( name
, tap_state_name(x
) ) ){
3582 #ifdef _DEBUG_JTAG_IO_
3584 #define JTAG_DEBUG_STATE_APPEND(buf, len, bit) \
3585 do { buf[len] = bit ? '1' : '0'; } while(0)
3586 #define JTAG_DEBUG_STATE_PRINT(a, b, astr, bstr) \
3587 DEBUG_JTAG_IO("TAP/SM: %9s -> %5s\tTMS: %s\tTDI: %s", \
3588 tap_state_name(a), tap_state_name(b), astr, bstr)
3590 tap_state_t
jtag_debug_state_machine(const void *tms_buf
, const void *tdi_buf
,
3591 unsigned tap_bits
, tap_state_t next_state
)
3593 const u8
*tms_buffer
;
3594 const u8
*tdi_buffer
;
3599 unsigned tap_out_bits
;
3603 tap_state_t last_state
;
3605 // set startstate (and possibly last, if tap_bits == 0)
3606 last_state
= next_state
;
3607 DEBUG_JTAG_IO("TAP/SM: START state: %s", tap_state_name(next_state
));
3609 tms_buffer
= (const u8
*)tms_buf
;
3610 tdi_buffer
= (const u8
*)tdi_buf
;
3612 tap_bytes
= TAP_SCAN_BYTES(tap_bits
);
3613 DEBUG_JTAG_IO("TAP/SM: TMS bits: %u (bytes: %u)", tap_bits
, tap_bytes
);
3616 for(cur_byte
= 0; cur_byte
< tap_bytes
; cur_byte
++)
3618 for(cur_bit
= 0; cur_bit
< 8; cur_bit
++)
3620 // make sure we do not run off the end of the buffers
3621 unsigned tap_bit
= cur_byte
* 8 + cur_bit
;
3622 if (tap_bit
== tap_bits
)
3625 // check and save TMS bit
3626 tap_bit
= !!(tms_buffer
[cur_byte
] & (1 << cur_bit
));
3627 JTAG_DEBUG_STATE_APPEND(tms_str
, tap_out_bits
, tap_bit
);
3629 // use TMS bit to find the next TAP state
3630 next_state
= tap_state_transition(last_state
, tap_bit
);
3632 // check and store TDI bit
3633 tap_bit
= !!(tdi_buffer
[cur_byte
] & (1 << cur_bit
));
3634 JTAG_DEBUG_STATE_APPEND(tdi_str
, tap_out_bits
, tap_bit
);
3636 // increment TAP bits
3639 // Only show TDO bits on state transitions, or
3640 // after some number of bits in the same state.
3641 if ((next_state
== last_state
) && (tap_out_bits
< 32))
3644 // terminate strings and display state transition
3645 tms_str
[tap_out_bits
] = tdi_str
[tap_out_bits
] = 0;
3646 JTAG_DEBUG_STATE_PRINT(last_state
, next_state
, tms_str
, tdi_str
);
3649 last_state
= next_state
;
3656 // terminate strings and display state transition
3657 tms_str
[tap_out_bits
] = tdi_str
[tap_out_bits
] = 0;
3658 JTAG_DEBUG_STATE_PRINT(last_state
, next_state
, tms_str
, tdi_str
);
3661 DEBUG_JTAG_IO("TAP/SM: FINAL state: %s", tap_state_name(next_state
));
3665 #endif // _DEBUG_JTAG_IO_
3667 #ifndef HAVE_JTAG_MINIDRIVER_H
3668 void jtag_alloc_in_value32(scan_field_t
*field
)
3670 field
->in_value
=(u8
*)cmd_queue_alloc(4);
3674 static int handle_tms_sequence_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
3678 if (strcmp(args
[0], "short") == 0)
3680 tms_seqs
=&short_tms_seqs
;
3682 else if (strcmp(args
[0], "long") == 0)
3684 tms_seqs
=&old_tms_seqs
;
3687 return ERROR_COMMAND_SYNTAX_ERROR
;
3689 } else if (argc
!= 0)
3691 return ERROR_COMMAND_SYNTAX_ERROR
;
3694 command_print(cmd_ctx
, "tms sequence is %s", (tms_seqs
==&short_tms_seqs
) ? "short": "long");
3699 /*-----</Cable Helper API>--------------------------------------*/