1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
24 #include "replacements.h"
30 #include "interpreter.h"
37 /* note that this is not marked as static as it must be available from outside jtag.c for those
38 that implement the jtag_xxx() minidriver layer
40 int jtag_error
=ERROR_OK
;
43 char* tap_state_strings
[16] =
46 "sds", "cd", "sd", "e1d", "pd", "e2d", "ud",
48 "sis", "ci", "si", "e1i", "pi", "e2i", "ui"
51 typedef struct cmd_queue_page_s
55 struct cmd_queue_page_s
*next
;
58 #define CMD_QUEUE_PAGE_SIZE (1024 * 1024)
59 static cmd_queue_page_t
*cmd_queue_pages
= NULL
;
61 /* tap_move[i][j]: tap movement command to go from state i to state j
69 * SD->SD and SI->SI have to be caught in interface specific code
73 /* TLR RTI SD PD SI PI */
74 {0x7f, 0x00, 0x17, 0x0a, 0x1b, 0x16}, /* TLR */
75 {0x7f, 0x00, 0x25, 0x05, 0x2b, 0x0b}, /* RTI */
76 {0x7f, 0x31, 0x00, 0x01, 0x0f, 0x2f}, /* SD */
77 {0x7f, 0x30, 0x20, 0x17, 0x1e, 0x2f}, /* PD */
78 {0x7f, 0x31, 0x07, 0x17, 0x00, 0x01}, /* SI */
79 {0x7f, 0x30, 0x1c, 0x17, 0x20, 0x2f} /* PI */
82 int tap_move_map
[16] = {
83 0, -1, -1, 2, -1, 3, -1, -1,
84 1, -1, -1, 4, -1, 5, -1, -1
87 tap_transition_t tap_transitions
[16] =
89 {TAP_TLR
, TAP_RTI
}, /* TLR */
90 {TAP_SIS
, TAP_CD
}, /* SDS */
91 {TAP_E1D
, TAP_SD
}, /* CD */
92 {TAP_E1D
, TAP_SD
}, /* SD */
93 {TAP_UD
, TAP_PD
}, /* E1D */
94 {TAP_E2D
, TAP_PD
}, /* PD */
95 {TAP_UD
, TAP_SD
}, /* E2D */
96 {TAP_SDS
, TAP_RTI
}, /* UD */
97 {TAP_SDS
, TAP_RTI
}, /* RTI */
98 {TAP_TLR
, TAP_CI
}, /* SIS */
99 {TAP_E1I
, TAP_SI
}, /* CI */
100 {TAP_E1I
, TAP_SI
}, /* SI */
101 {TAP_UI
, TAP_PI
}, /* E1I */
102 {TAP_E2I
, TAP_PI
}, /* PI */
103 {TAP_UI
, TAP_SI
}, /* E2I */
104 {TAP_SDS
, TAP_RTI
} /* UI */
107 char* jtag_event_strings
[] =
109 "JTAG controller reset(tms or TRST)"
112 enum tap_state end_state
= TAP_TLR
;
113 enum tap_state cur_state
= TAP_TLR
;
117 jtag_command_t
*jtag_command_queue
= NULL
;
118 jtag_command_t
**last_comand_pointer
= &jtag_command_queue
;
119 jtag_device_t
*jtag_devices
= NULL
;
120 int jtag_num_devices
= 0;
121 int jtag_ir_scan_size
= 0;
122 enum reset_types jtag_reset_config
= RESET_NONE
;
123 enum tap_state cmd_queue_end_state
= TAP_TLR
;
124 enum tap_state cmd_queue_cur_state
= TAP_TLR
;
126 int jtag_verify_capture_ir
= 1;
128 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
129 int jtag_nsrst_delay
= 0; /* default to no nSRST delay */
130 int jtag_ntrst_delay
= 0; /* default to no nTRST delay */
132 /* maximum number of JTAG devices expected in the chain
134 #define JTAG_MAX_CHAIN_SIZE 20
136 /* callbacks to inform high-level handlers about JTAG state changes */
137 jtag_event_callback_t
*jtag_event_callbacks
;
139 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
142 #if BUILD_ECOSBOARD == 1
143 extern jtag_interface_t eCosBoard_interface
;
146 #if BUILD_PARPORT == 1
147 extern jtag_interface_t parport_interface
;
150 #if BUILD_FT2232_FTD2XX == 1
151 extern jtag_interface_t ft2232_interface
;
154 #if BUILD_FT2232_LIBFTDI == 1
155 extern jtag_interface_t ft2232_interface
;
158 #if BUILD_AMTJTAGACCEL == 1
159 extern jtag_interface_t amt_jtagaccel_interface
;
162 #if BUILD_EP93XX == 1
163 extern jtag_interface_t ep93xx_interface
;
166 #if BUILD_AT91RM9200 == 1
167 extern jtag_interface_t at91rm9200_interface
;
170 #if BUILD_GW16012 == 1
171 extern jtag_interface_t gw16012_interface
;
174 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
175 extern jtag_interface_t presto_interface
;
178 #if BUILD_USBPROG == 1
179 extern jtag_interface_t usbprog_interface
;
182 jtag_interface_t
*jtag_interfaces
[] = {
183 #if BUILD_ECOSBOARD == 1
184 &eCosBoard_interface
,
186 #if BUILD_PARPORT == 1
189 #if BUILD_FT2232_FTD2XX == 1
192 #if BUILD_FT2232_LIBFTDI == 1
195 #if BUILD_AMTJTAGACCEL == 1
196 &amt_jtagaccel_interface
,
198 #if BUILD_EP93XX == 1
201 #if BUILD_AT91RM9200 == 1
202 &at91rm9200_interface
,
204 #if BUILD_GW16012 == 1
207 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
210 #if BUILD_USBPROG == 1
216 jtag_interface_t
*jtag
= NULL
;
219 jtag_interface_t
*jtag_interface
= NULL
;
223 /* forward declarations */
224 void jtag_add_statemove(enum tap_state endstate
);
225 void jtag_add_pathmove(int num_states
, enum tap_state
*path
);
226 void jtag_add_runtest(int num_cycles
, enum tap_state endstate
);
227 int jtag_add_reset(int trst
, int srst
);
228 void jtag_add_end_state(enum tap_state endstate
);
229 void jtag_add_sleep(u32 us
);
230 int jtag_execute_queue(void);
231 int jtag_cancel_queue(void);
234 int handle_interface_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
235 int handle_jtag_speed_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
236 int handle_jtag_device_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
237 int handle_reset_config_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
238 int handle_jtag_nsrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
239 int handle_jtag_ntrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
241 int handle_scan_chain_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
243 int handle_endstate_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
244 int handle_jtag_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
245 int handle_runtest_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
246 int handle_statemove_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
247 int handle_irscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
248 int handle_drscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
250 int handle_verify_ircapture_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
);
252 int jtag_register_event_callback(int (*callback
)(enum jtag_event event
, void *priv
), void *priv
)
254 jtag_event_callback_t
**callbacks_p
= &jtag_event_callbacks
;
256 if (callback
== NULL
)
258 return ERROR_INVALID_ARGUMENTS
;
263 while ((*callbacks_p
)->next
)
264 callbacks_p
= &((*callbacks_p
)->next
);
265 callbacks_p
= &((*callbacks_p
)->next
);
268 (*callbacks_p
) = malloc(sizeof(jtag_event_callback_t
));
269 (*callbacks_p
)->callback
= callback
;
270 (*callbacks_p
)->priv
= priv
;
271 (*callbacks_p
)->next
= NULL
;
276 int jtag_unregister_event_callback(int (*callback
)(enum jtag_event event
, void *priv
))
278 jtag_event_callback_t
**callbacks_p
= &jtag_event_callbacks
;
280 if (callback
== NULL
)
282 return ERROR_INVALID_ARGUMENTS
;
287 jtag_event_callback_t
**next
= &((*callbacks_p
)->next
);
288 if ((*callbacks_p
)->callback
== callback
)
291 *callbacks_p
= *next
;
299 int jtag_call_event_callbacks(enum jtag_event event
)
301 jtag_event_callback_t
*callback
= jtag_event_callbacks
;
303 DEBUG("jtag event: %s", jtag_event_strings
[event
]);
307 callback
->callback(event
, callback
->priv
);
308 callback
= callback
->next
;
314 /* returns a pointer to the pointer of the last command in queue
315 * this may be a pointer to the root pointer (jtag_command_queue)
316 * or to the next member of the last but one command
318 jtag_command_t
** jtag_get_last_command_p(void)
320 /* jtag_command_t *cmd = jtag_command_queue;
326 return &jtag_command_queue;
330 return last_comand_pointer
;
333 /* returns a pointer to the n-th device in the scan chain */
334 jtag_device_t
* jtag_get_device(int num
)
336 jtag_device_t
*device
= jtag_devices
;
343 device
= device
->next
;
347 ERROR("jtag device number %d not defined", num
);
351 void* cmd_queue_alloc(size_t size
)
353 cmd_queue_page_t
**p_page
= &cmd_queue_pages
;
358 while ((*p_page
)->next
)
359 p_page
= &((*p_page
)->next
);
360 if (CMD_QUEUE_PAGE_SIZE
- (*p_page
)->used
< size
)
361 p_page
= &((*p_page
)->next
);
366 *p_page
= malloc(sizeof(cmd_queue_page_t
));
368 (*p_page
)->address
= malloc(CMD_QUEUE_PAGE_SIZE
);
369 (*p_page
)->next
= NULL
;
372 offset
= (*p_page
)->used
;
373 (*p_page
)->used
+= size
;
375 u8
*t
=(u8
*)((*p_page
)->address
);
379 void cmd_queue_free()
381 cmd_queue_page_t
*page
= cmd_queue_pages
;
385 cmd_queue_page_t
*last
= page
;
391 cmd_queue_pages
= NULL
;
394 static void jtag_prelude1()
398 WARNING("JTAG command queued, while TRST is low (TAP in reset)");
399 jtag_error
=ERROR_JTAG_TRST_ASSERTED
;
403 if (cmd_queue_end_state
== TAP_TLR
)
404 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
407 static void jtag_prelude(enum tap_state state
)
412 cmd_queue_end_state
= state
;
414 cmd_queue_cur_state
= cmd_queue_end_state
;
417 void jtag_add_ir_scan(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
421 int retval
=interface_jtag_add_ir_scan(num_fields
, fields
, cmd_queue_end_state
);
422 if (retval
!=ERROR_OK
)
426 int MINIDRIVER(interface_jtag_add_ir_scan
)(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
428 jtag_command_t
**last_cmd
;
429 jtag_device_t
*device
;
434 last_cmd
= jtag_get_last_command_p();
436 /* allocate memory for a new list member */
437 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
438 (*last_cmd
)->next
= NULL
;
439 last_comand_pointer
= &((*last_cmd
)->next
);
440 (*last_cmd
)->type
= JTAG_SCAN
;
442 /* allocate memory for ir scan command */
443 (*last_cmd
)->cmd
.scan
= cmd_queue_alloc(sizeof(scan_command_t
));
444 (*last_cmd
)->cmd
.scan
->ir_scan
= 1;
445 (*last_cmd
)->cmd
.scan
->num_fields
= jtag_num_devices
; /* one field per device */
446 (*last_cmd
)->cmd
.scan
->fields
= cmd_queue_alloc(jtag_num_devices
* sizeof(scan_field_t
));
447 (*last_cmd
)->cmd
.scan
->end_state
= state
;
449 for (i
= 0; i
< jtag_num_devices
; i
++)
452 device
= jtag_get_device(i
);
453 scan_size
= device
->ir_length
;
454 (*last_cmd
)->cmd
.scan
->fields
[i
].device
= i
;
455 (*last_cmd
)->cmd
.scan
->fields
[i
].num_bits
= scan_size
;
456 (*last_cmd
)->cmd
.scan
->fields
[i
].in_value
= NULL
;
457 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler
= NULL
; /* disable verification by default */
459 /* search the list */
460 for (j
= 0; j
< num_fields
; j
++)
462 if (i
== fields
[j
].device
)
465 (*last_cmd
)->cmd
.scan
->fields
[i
].out_value
= buf_cpy(fields
[j
].out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
466 (*last_cmd
)->cmd
.scan
->fields
[i
].out_mask
= buf_cpy(fields
[j
].out_mask
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
468 if (jtag_verify_capture_ir
)
470 if (fields
[j
].in_handler
==NULL
)
472 jtag_set_check_value((*last_cmd
)->cmd
.scan
->fields
+i
, device
->expected
, device
->expected_mask
, NULL
);
475 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler
= fields
[j
].in_handler
;
476 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler_priv
= fields
[j
].in_handler_priv
;
477 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_value
= device
->expected
;
478 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_mask
= device
->expected_mask
;
489 /* if a device isn't listed, set it to BYPASS */
490 (*last_cmd
)->cmd
.scan
->fields
[i
].out_value
= buf_set_ones(cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
491 (*last_cmd
)->cmd
.scan
->fields
[i
].out_mask
= NULL
;
496 /* update device information */
497 buf_cpy((*last_cmd
)->cmd
.scan
->fields
[i
].out_value
, jtag_get_device(i
)->cur_instr
, scan_size
);
503 void jtag_add_plain_ir_scan(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
507 int retval
=interface_jtag_add_plain_ir_scan(num_fields
, fields
, cmd_queue_end_state
);
508 if (retval
!=ERROR_OK
)
512 int MINIDRIVER(interface_jtag_add_plain_ir_scan
)(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
515 jtag_command_t
**last_cmd
;
517 last_cmd
= jtag_get_last_command_p();
519 /* allocate memory for a new list member */
520 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
521 (*last_cmd
)->next
= NULL
;
522 last_comand_pointer
= &((*last_cmd
)->next
);
523 (*last_cmd
)->type
= JTAG_SCAN
;
525 /* allocate memory for ir scan command */
526 (*last_cmd
)->cmd
.scan
= cmd_queue_alloc(sizeof(scan_command_t
));
527 (*last_cmd
)->cmd
.scan
->ir_scan
= 1;
528 (*last_cmd
)->cmd
.scan
->num_fields
= num_fields
;
529 (*last_cmd
)->cmd
.scan
->fields
= cmd_queue_alloc(num_fields
* sizeof(scan_field_t
));
530 (*last_cmd
)->cmd
.scan
->end_state
= state
;
532 for (i
= 0; i
< num_fields
; i
++)
534 int num_bits
= fields
[i
].num_bits
;
535 int num_bytes
= CEIL(fields
[i
].num_bits
, 8);
536 (*last_cmd
)->cmd
.scan
->fields
[i
].device
= fields
[i
].device
;
537 (*last_cmd
)->cmd
.scan
->fields
[i
].num_bits
= num_bits
;
538 (*last_cmd
)->cmd
.scan
->fields
[i
].out_value
= buf_cpy(fields
[i
].out_value
, cmd_queue_alloc(num_bytes
), num_bits
);
539 (*last_cmd
)->cmd
.scan
->fields
[i
].out_mask
= buf_cpy(fields
[i
].out_mask
, cmd_queue_alloc(num_bytes
), num_bits
);
540 (*last_cmd
)->cmd
.scan
->fields
[i
].in_value
= fields
[i
].in_value
;
541 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_value
= fields
[i
].in_check_value
;
542 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_mask
= fields
[i
].in_check_mask
;
543 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler
= NULL
;
544 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler_priv
= NULL
;
549 void jtag_add_dr_scan(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
553 int retval
=interface_jtag_add_dr_scan(num_fields
, fields
, cmd_queue_end_state
);
554 if (retval
!=ERROR_OK
)
558 int MINIDRIVER(interface_jtag_add_dr_scan
)(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
561 int bypass_devices
= 0;
565 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
566 jtag_device_t
*device
= jtag_devices
;
568 /* count devices in bypass */
573 device
= device
->next
;
576 /* allocate memory for a new list member */
577 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
578 last_comand_pointer
= &((*last_cmd
)->next
);
579 (*last_cmd
)->next
= NULL
;
580 (*last_cmd
)->type
= JTAG_SCAN
;
582 /* allocate memory for dr scan command */
583 (*last_cmd
)->cmd
.scan
= cmd_queue_alloc(sizeof(scan_command_t
));
584 (*last_cmd
)->cmd
.scan
->ir_scan
= 0;
585 (*last_cmd
)->cmd
.scan
->num_fields
= num_fields
+ bypass_devices
;
586 (*last_cmd
)->cmd
.scan
->fields
= cmd_queue_alloc((num_fields
+ bypass_devices
) * sizeof(scan_field_t
));
587 (*last_cmd
)->cmd
.scan
->end_state
= state
;
589 for (i
= 0; i
< jtag_num_devices
; i
++)
592 (*last_cmd
)->cmd
.scan
->fields
[field_count
].device
= i
;
594 for (j
= 0; j
< num_fields
; j
++)
596 if (i
== fields
[j
].device
)
599 scan_size
= fields
[j
].num_bits
;
600 (*last_cmd
)->cmd
.scan
->fields
[field_count
].num_bits
= scan_size
;
601 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_value
= buf_cpy(fields
[j
].out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
602 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_mask
= buf_cpy(fields
[j
].out_mask
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
603 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_value
= fields
[j
].in_value
;
604 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_value
= fields
[j
].in_check_value
;
605 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_mask
= fields
[j
].in_check_mask
;
606 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_handler
= fields
[j
].in_handler
;
607 (*last_cmd
)->cmd
.scan
->fields
[field_count
++].in_handler_priv
= fields
[j
].in_handler_priv
;
612 #ifdef _DEBUG_JTAG_IO_
613 /* if a device isn't listed, the BYPASS register should be selected */
614 if (!jtag_get_device(i
)->bypass
)
616 ERROR("BUG: no scan data for a device not in BYPASS");
620 /* program the scan field to 1 bit length, and ignore it's value */
621 (*last_cmd
)->cmd
.scan
->fields
[field_count
].num_bits
= 1;
622 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_value
= NULL
;
623 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_mask
= NULL
;
624 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_value
= NULL
;
625 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_value
= NULL
;
626 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_mask
= NULL
;
627 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_handler
= NULL
;
628 (*last_cmd
)->cmd
.scan
->fields
[field_count
++].in_handler_priv
= NULL
;
632 #ifdef _DEBUG_JTAG_IO_
633 /* if a device is listed, the BYPASS register must not be selected */
634 if (jtag_get_device(i
)->bypass
)
636 ERROR("BUG: scan data for a device in BYPASS");
645 void MINIDRIVER(interface_jtag_add_dr_out
)(int device_num
,
649 enum tap_state end_state
)
654 int bypass_devices
= 0;
656 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
657 jtag_device_t
*device
= jtag_devices
;
658 /* count devices in bypass */
663 device
= device
->next
;
666 /* allocate memory for a new list member */
667 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
668 last_comand_pointer
= &((*last_cmd
)->next
);
669 (*last_cmd
)->next
= NULL
;
670 (*last_cmd
)->type
= JTAG_SCAN
;
672 /* allocate memory for dr scan command */
673 (*last_cmd
)->cmd
.scan
= cmd_queue_alloc(sizeof(scan_command_t
));
674 (*last_cmd
)->cmd
.scan
->ir_scan
= 0;
675 (*last_cmd
)->cmd
.scan
->num_fields
= num_fields
+ bypass_devices
;
676 (*last_cmd
)->cmd
.scan
->fields
= cmd_queue_alloc((num_fields
+ bypass_devices
) * sizeof(scan_field_t
));
677 (*last_cmd
)->cmd
.scan
->end_state
= end_state
;
679 for (i
= 0; i
< jtag_num_devices
; i
++)
681 (*last_cmd
)->cmd
.scan
->fields
[field_count
].device
= i
;
686 #ifdef _DEBUG_JTAG_IO_
687 /* if a device is listed, the BYPASS register must not be selected */
688 if (jtag_get_device(i
)->bypass
)
690 ERROR("BUG: scan data for a device in BYPASS");
694 for (j
= 0; j
< num_fields
; j
++)
697 scan_size
= num_bits
[j
];
698 buf_set_u32(out_value
, 0, scan_size
, value
[j
]);
699 (*last_cmd
)->cmd
.scan
->fields
[field_count
].num_bits
= scan_size
;
700 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_value
= buf_cpy(out_value
, cmd_queue_alloc(CEIL(scan_size
, 8)), scan_size
);
701 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_mask
= NULL
;
702 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_value
= NULL
;
703 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_value
= NULL
;
704 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_mask
= NULL
;
705 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_handler
= NULL
;
706 (*last_cmd
)->cmd
.scan
->fields
[field_count
++].in_handler_priv
= NULL
;
710 #ifdef _DEBUG_JTAG_IO_
711 /* if a device isn't listed, the BYPASS register should be selected */
712 if (!jtag_get_device(i
)->bypass
)
714 ERROR("BUG: no scan data for a device not in BYPASS");
718 /* program the scan field to 1 bit length, and ignore it's value */
719 (*last_cmd
)->cmd
.scan
->fields
[field_count
].num_bits
= 1;
720 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_value
= NULL
;
721 (*last_cmd
)->cmd
.scan
->fields
[field_count
].out_mask
= NULL
;
722 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_value
= NULL
;
723 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_value
= NULL
;
724 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_check_mask
= NULL
;
725 (*last_cmd
)->cmd
.scan
->fields
[field_count
].in_handler
= NULL
;
726 (*last_cmd
)->cmd
.scan
->fields
[field_count
++].in_handler_priv
= NULL
;
734 void jtag_add_plain_dr_scan(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
738 int retval
=interface_jtag_add_plain_dr_scan(num_fields
, fields
, cmd_queue_end_state
);
739 if (retval
!=ERROR_OK
)
743 int MINIDRIVER(interface_jtag_add_plain_dr_scan
)(int num_fields
, scan_field_t
*fields
, enum tap_state state
)
746 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
748 /* allocate memory for a new list member */
749 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
750 last_comand_pointer
= &((*last_cmd
)->next
);
751 (*last_cmd
)->next
= NULL
;
752 (*last_cmd
)->type
= JTAG_SCAN
;
754 /* allocate memory for scan command */
755 (*last_cmd
)->cmd
.scan
= cmd_queue_alloc(sizeof(scan_command_t
));
756 (*last_cmd
)->cmd
.scan
->ir_scan
= 0;
757 (*last_cmd
)->cmd
.scan
->num_fields
= num_fields
;
758 (*last_cmd
)->cmd
.scan
->fields
= cmd_queue_alloc(num_fields
* sizeof(scan_field_t
));
759 (*last_cmd
)->cmd
.scan
->end_state
= state
;
761 for (i
= 0; i
< num_fields
; i
++)
763 int num_bits
= fields
[i
].num_bits
;
764 int num_bytes
= CEIL(fields
[i
].num_bits
, 8);
765 (*last_cmd
)->cmd
.scan
->fields
[i
].device
= fields
[i
].device
;
766 (*last_cmd
)->cmd
.scan
->fields
[i
].num_bits
= num_bits
;
767 (*last_cmd
)->cmd
.scan
->fields
[i
].out_value
= buf_cpy(fields
[i
].out_value
, cmd_queue_alloc(num_bytes
), num_bits
);
768 (*last_cmd
)->cmd
.scan
->fields
[i
].out_mask
= buf_cpy(fields
[i
].out_mask
, cmd_queue_alloc(num_bytes
), num_bits
);
769 (*last_cmd
)->cmd
.scan
->fields
[i
].in_value
= fields
[i
].in_value
;
770 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_value
= fields
[i
].in_check_value
;
771 (*last_cmd
)->cmd
.scan
->fields
[i
].in_check_mask
= fields
[i
].in_check_mask
;
772 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler
= fields
[i
].in_handler
;
773 (*last_cmd
)->cmd
.scan
->fields
[i
].in_handler_priv
= fields
[i
].in_handler_priv
;
778 void jtag_add_statemove(enum tap_state state
)
783 retval
=interface_jtag_add_statemove(cmd_queue_end_state
);
784 if (retval
!=ERROR_OK
)
788 int MINIDRIVER(interface_jtag_add_statemove
)(enum tap_state state
)
790 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
792 /* allocate memory for a new list member */
793 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
794 last_comand_pointer
= &((*last_cmd
)->next
);
795 (*last_cmd
)->next
= NULL
;
796 (*last_cmd
)->type
= JTAG_STATEMOVE
;
798 (*last_cmd
)->cmd
.statemove
= cmd_queue_alloc(sizeof(statemove_command_t
));
799 (*last_cmd
)->cmd
.statemove
->end_state
= state
;
805 void jtag_add_pathmove(int num_states
, enum tap_state
*path
)
807 /* the last state has to be a stable state */
808 if (tap_move_map
[path
[num_states
- 1]] == -1)
810 ERROR("BUG: TAP path doesn't finish in a stable state");
814 enum tap_state cur_state
=cmd_queue_cur_state
;
816 for (i
=0; i
<num_states
; i
++)
818 if ((tap_transitions
[cur_state
].low
!= path
[i
])&&
819 (tap_transitions
[cur_state
].high
!= path
[i
]))
821 ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_strings
[cur_state
], tap_state_strings
[path
[i
]]);
829 cmd_queue_cur_state
= path
[num_states
- 1];
831 int retval
=interface_jtag_add_pathmove(num_states
, path
);
832 if (retval
!=ERROR_OK
)
837 int MINIDRIVER(interface_jtag_add_pathmove
)(int num_states
, enum tap_state
*path
)
839 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
842 /* allocate memory for a new list member */
843 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
844 last_comand_pointer
= &((*last_cmd
)->next
);
845 (*last_cmd
)->next
= NULL
;
846 (*last_cmd
)->type
= JTAG_PATHMOVE
;
848 (*last_cmd
)->cmd
.pathmove
= cmd_queue_alloc(sizeof(pathmove_command_t
));
849 (*last_cmd
)->cmd
.pathmove
->num_states
= num_states
;
850 (*last_cmd
)->cmd
.pathmove
->path
= cmd_queue_alloc(sizeof(enum tap_state
) * num_states
);
852 for (i
= 0; i
< num_states
; i
++)
853 (*last_cmd
)->cmd
.pathmove
->path
[i
] = path
[i
];
858 int MINIDRIVER(interface_jtag_add_runtest
)(int num_cycles
, enum tap_state state
)
860 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
862 /* allocate memory for a new list member */
863 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
864 (*last_cmd
)->next
= NULL
;
865 last_comand_pointer
= &((*last_cmd
)->next
);
866 (*last_cmd
)->type
= JTAG_RUNTEST
;
868 (*last_cmd
)->cmd
.runtest
= cmd_queue_alloc(sizeof(runtest_command_t
));
869 (*last_cmd
)->cmd
.runtest
->num_cycles
= num_cycles
;
870 (*last_cmd
)->cmd
.runtest
->end_state
= state
;
875 void jtag_add_runtest(int num_cycles
, enum tap_state state
)
879 /* executed by sw or hw fifo */
880 int retval
=interface_jtag_add_runtest(num_cycles
, cmd_queue_end_state
);
881 if (retval
!=ERROR_OK
)
885 int jtag_add_reset(int req_trst
, int req_srst
)
887 int trst_with_tms
= 0;
891 req_trst
= jtag_trst
;
894 req_srst
= jtag_srst
;
896 /* Make sure that jtag_reset_config allows the requested reset */
897 /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
898 if (((jtag_reset_config
& RESET_SRST_PULLS_TRST
) && (req_srst
== 1)) && (req_trst
== 0))
900 ERROR("requested reset would assert trst");
901 return ERROR_JTAG_RESET_WOULD_ASSERT_TRST
;
904 /* if TRST pulls SRST, we reset with TAP T-L-R */
905 if (((jtag_reset_config
& RESET_TRST_PULLS_SRST
) && (req_trst
== 1)) && (req_srst
== 0))
911 if (req_srst
&& !(jtag_reset_config
& RESET_HAS_SRST
))
913 ERROR("requested nSRST assertion, but the current configuration doesn't support this");
914 return ERROR_JTAG_RESET_CANT_SRST
;
917 if (req_trst
&& !(jtag_reset_config
& RESET_HAS_TRST
))
923 jtag_trst
= req_trst
;
924 jtag_srst
= req_srst
;
926 retval
= interface_jtag_add_reset(req_trst
, req_srst
);
927 if (retval
!=ERROR_OK
)
935 DEBUG("SRST line asserted");
939 DEBUG("SRST line released");
940 if (jtag_nsrst_delay
)
941 jtag_add_sleep(jtag_nsrst_delay
* 1000);
946 DEBUG("JTAG reset with tms instead of TRST");
947 jtag_add_end_state(TAP_TLR
);
948 jtag_add_statemove(TAP_TLR
);
949 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
955 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
956 * and inform possible listeners about this
958 DEBUG("TRST line asserted");
959 cmd_queue_cur_state
= TAP_TLR
;
960 jtag_call_event_callbacks(JTAG_TRST_ASSERTED
);
964 /* the nTRST line got deasserted, so we're still in Test-Logic-Reset,
965 * but we might want to add a delay to give the TAP time to settle
967 DEBUG("Now in TAP_TLR - Test-Logic-Reset(either due to TRST line asserted or tms reset)");
968 if (jtag_ntrst_delay
)
969 jtag_add_sleep(jtag_ntrst_delay
* 1000);
974 int MINIDRIVER(interface_jtag_add_reset
)(int req_trst
, int req_srst
)
976 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
978 /* allocate memory for a new list member */
979 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
980 (*last_cmd
)->next
= NULL
;
981 last_comand_pointer
= &((*last_cmd
)->next
);
982 (*last_cmd
)->type
= JTAG_RESET
;
984 (*last_cmd
)->cmd
.reset
= cmd_queue_alloc(sizeof(reset_command_t
));
985 (*last_cmd
)->cmd
.reset
->trst
= req_trst
;
986 (*last_cmd
)->cmd
.reset
->srst
= req_srst
;
992 void jtag_add_end_state(enum tap_state state
)
994 cmd_queue_end_state
= state
;
997 int MINIDRIVER(interface_jtag_add_sleep
)(u32 us
)
999 jtag_command_t
**last_cmd
= jtag_get_last_command_p();
1001 /* allocate memory for a new list member */
1002 *last_cmd
= cmd_queue_alloc(sizeof(jtag_command_t
));
1003 (*last_cmd
)->next
= NULL
;
1004 last_comand_pointer
= &((*last_cmd
)->next
);
1005 (*last_cmd
)->type
= JTAG_SLEEP
;
1007 (*last_cmd
)->cmd
.sleep
= cmd_queue_alloc(sizeof(sleep_command_t
));
1008 (*last_cmd
)->cmd
.sleep
->us
= us
;
1013 void jtag_add_sleep(u32 us
)
1015 int retval
=interface_jtag_add_sleep(us
);
1016 if (retval
!=ERROR_OK
)
1021 int jtag_scan_size(scan_command_t
*cmd
)
1026 /* count bits in scan command */
1027 for (i
= 0; i
< cmd
->num_fields
; i
++)
1029 bit_count
+= cmd
->fields
[i
].num_bits
;
1035 int jtag_build_buffer(scan_command_t
*cmd
, u8
**buffer
)
1040 bit_count
= jtag_scan_size(cmd
);
1041 *buffer
= malloc(CEIL(bit_count
, 8));
1045 for (i
= 0; i
< cmd
->num_fields
; i
++)
1047 if (cmd
->fields
[i
].out_value
)
1049 #ifdef _DEBUG_JTAG_IO_
1050 char* char_buf
= buf_to_str(cmd
->fields
[i
].out_value
, (cmd
->fields
[i
].num_bits
> 64) ? 64 : cmd
->fields
[i
].num_bits
, 16);
1052 buf_set_buf(cmd
->fields
[i
].out_value
, 0, *buffer
, bit_count
, cmd
->fields
[i
].num_bits
);
1053 #ifdef _DEBUG_JTAG_IO_
1054 DEBUG("fields[%i].out_value: 0x%s", i
, char_buf
);
1059 bit_count
+= cmd
->fields
[i
].num_bits
;
1066 int jtag_read_buffer(u8
*buffer
, scan_command_t
*cmd
)
1072 /* we return ERROR_OK, unless a check fails, or a handler reports a problem */
1075 for (i
= 0; i
< cmd
->num_fields
; i
++)
1077 /* if neither in_value nor in_handler
1078 * are specified we don't have to examine this field
1080 if (cmd
->fields
[i
].in_value
|| cmd
->fields
[i
].in_handler
)
1082 int num_bits
= cmd
->fields
[i
].num_bits
;
1083 u8
*captured
= buf_set_buf(buffer
, bit_count
, malloc(CEIL(num_bits
, 8)), 0, num_bits
);
1085 #ifdef _DEBUG_JTAG_IO_
1088 char_buf
= buf_to_str(captured
, (num_bits
> 64) ? 64 : num_bits
, 16);
1089 DEBUG("fields[%i].in_value: 0x%s", i
, char_buf
);
1093 if (cmd
->fields
[i
].in_value
)
1095 buf_cpy(captured
, cmd
->fields
[i
].in_value
, num_bits
);
1097 if (cmd
->fields
[i
].in_handler
)
1099 if (cmd
->fields
[i
].in_handler(cmd
->fields
[i
].in_value
, cmd
->fields
[i
].in_handler_priv
, cmd
->fields
+i
) != ERROR_OK
)
1101 WARNING("in_handler reported a failed check");
1102 retval
= ERROR_JTAG_QUEUE_FAILED
;
1107 /* no in_value specified, but a handler takes care of the scanned data */
1108 if (cmd
->fields
[i
].in_handler
&& (!cmd
->fields
[i
].in_value
))
1110 if (cmd
->fields
[i
].in_handler(captured
, cmd
->fields
[i
].in_handler_priv
, cmd
->fields
+i
) != ERROR_OK
)
1112 /* We're going to call the error:handler later, but if the in_handler
1113 * reported an error we report this failure upstream
1115 WARNING("in_handler reported a failed check");
1116 retval
= ERROR_JTAG_QUEUE_FAILED
;
1122 bit_count
+= cmd
->fields
[i
].num_bits
;
1128 int jtag_check_value(u8
*captured
, void *priv
, scan_field_t
*field
)
1130 int retval
= ERROR_OK
;
1131 int num_bits
= field
->num_bits
;
1133 int compare_failed
= 0;
1135 if (field
->in_check_mask
)
1136 compare_failed
= buf_cmp_mask(captured
, field
->in_check_value
, field
->in_check_mask
, num_bits
);
1138 compare_failed
= buf_cmp(captured
, field
->in_check_value
, num_bits
);
1142 /* An error handler could have caught the failing check
1143 * only report a problem when there wasn't a handler, or if the handler
1144 * acknowledged the error
1148 char *captured_char
= buf_to_str(captured
, (num_bits
> 64) ? 64 : num_bits
, 16);
1149 char *in_check_value_char
= buf_to_str(field
->in_check_value
, (num_bits
> 64) ? 64 : num_bits
, 16);
1151 if (field
->in_check_mask
)
1153 char *in_check_mask_char
;
1154 in_check_mask_char
= buf_to_str(field
->in_check_mask
, (num_bits
> 64) ? 64 : num_bits
, 16);
1155 WARNING("value captured during scan didn't pass the requested check: captured: 0x%s check_value: 0x%s check_mask: 0x%s", captured_char
, in_check_value_char
, in_check_mask_char
);
1156 free(in_check_mask_char
);
1160 WARNING("value captured during scan didn't pass the requested check: captured: 0x%s check_value: 0x%s", captured_char
, in_check_value_char
);
1163 free(captured_char
);
1164 free(in_check_value_char
);
1166 retval
= ERROR_JTAG_QUEUE_FAILED
;
1174 set up checking of this field using the in_handler. The values passed in must be valid until
1175 after jtag_execute() has completed.
1177 void jtag_set_check_value(scan_field_t
*field
, u8
*value
, u8
*mask
, error_handler_t
*in_error_handler
)
1180 field
->in_handler
= jtag_check_value
;
1182 field
->in_handler
= NULL
; /* No check, e.g. embeddedice uses value==NULL to indicate no check */
1183 field
->in_handler_priv
= NULL
; /* this will be filled in at the invocation site to point to the field duplicate */
1184 field
->in_check_value
= value
;
1185 field
->in_check_mask
= mask
;
1188 enum scan_type
jtag_scan_type(scan_command_t
*cmd
)
1193 for (i
= 0; i
< cmd
->num_fields
; i
++)
1195 if (cmd
->fields
[i
].in_value
|| cmd
->fields
[i
].in_handler
)
1197 if (cmd
->fields
[i
].out_value
)
1204 int MINIDRIVER(interface_jtag_execute_queue
)(void)
1208 retval
= jtag
->execute_queue();
1212 jtag_command_queue
= NULL
;
1213 last_comand_pointer
= &jtag_command_queue
;
1218 int jtag_execute_queue(void)
1220 int retval
=interface_jtag_execute_queue();
1221 if (retval
==ERROR_OK
)
1225 jtag_error
=ERROR_OK
;
1229 int jtag_reset_callback(enum jtag_event event
, void *priv
)
1231 jtag_device_t
*device
= priv
;
1235 if (event
== JTAG_TRST_ASSERTED
)
1237 buf_set_ones(device
->cur_instr
, device
->ir_length
);
1244 void jtag_sleep(u32 us
)
1249 /* Try to examine chain layout according to IEEE 1149.1 §12
1251 int jtag_examine_chain()
1253 jtag_device_t
*device
= jtag_devices
;
1255 u8 idcode_buffer
[JTAG_MAX_CHAIN_SIZE
* 4];
1258 int device_count
= 0;
1259 u8 zero_check
= 0x0;
1260 u8 one_check
= 0xff;
1263 field
.num_bits
= sizeof(idcode_buffer
) * 8;
1264 field
.out_value
= idcode_buffer
;
1265 field
.out_mask
= NULL
;
1266 field
.in_value
= idcode_buffer
;
1267 field
.in_check_value
= NULL
;
1268 field
.in_check_mask
= NULL
;
1269 field
.in_handler
= NULL
;
1270 field
.in_handler_priv
= NULL
;
1272 for (i
= 0; i
< JTAG_MAX_CHAIN_SIZE
; i
++)
1274 buf_set_u32(idcode_buffer
, i
* 32, 32, 0x000000FF);
1277 jtag_add_plain_dr_scan(1, &field
, TAP_TLR
);
1278 jtag_execute_queue();
1280 for (i
= 0; i
< JTAG_MAX_CHAIN_SIZE
* 4; i
++)
1282 zero_check
|= idcode_buffer
[i
];
1283 one_check
&= idcode_buffer
[i
];
1286 /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
1287 if ((zero_check
== 0x00) || (one_check
== 0xff))
1289 ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
1290 return ERROR_JTAG_INIT_FAILED
;
1293 for (bit_count
= 0; bit_count
< (JTAG_MAX_CHAIN_SIZE
* 32) - 31;)
1295 u32 idcode
= buf_get_u32(idcode_buffer
, bit_count
, 32);
1296 if ((idcode
& 1) == 0)
1298 /* LSB must not be 0, this indicates a device in bypass */
1309 if (idcode
== 0x000000FF)
1311 /* End of chain (invalid manufacturer ID) */
1317 device
->idcode
= idcode
;
1318 device
= device
->next
;
1322 manufacturer
= (idcode
& 0xffe) >> 1;
1323 part
= (idcode
& 0xffff000) >> 12;
1324 version
= (idcode
& 0xf0000000) >> 28;
1326 INFO("JTAG device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1327 idcode
, manufacturer
, part
, version
);
1333 /* see if number of discovered devices matches configuration */
1334 if (device_count
!= jtag_num_devices
)
1336 ERROR("number of discovered devices in JTAG chain (%i) doesn't match configuration (%i)",
1337 device_count
, jtag_num_devices
);
1338 ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1339 return ERROR_JTAG_INIT_FAILED
;
1345 int jtag_validate_chain()
1347 jtag_device_t
*device
= jtag_devices
;
1348 int total_ir_length
= 0;
1355 total_ir_length
+= device
->ir_length
;
1356 device
= device
->next
;
1359 total_ir_length
+= 2;
1360 ir_test
= malloc(CEIL(total_ir_length
, 8));
1361 buf_set_ones(ir_test
, total_ir_length
);
1364 field
.num_bits
= total_ir_length
;
1365 field
.out_value
= ir_test
;
1366 field
.out_mask
= NULL
;
1367 field
.in_value
= ir_test
;
1368 field
.in_check_value
= NULL
;
1369 field
.in_check_mask
= NULL
;
1370 field
.in_handler
= NULL
;
1371 field
.in_handler_priv
= NULL
;
1373 jtag_add_plain_ir_scan(1, &field
, TAP_TLR
);
1374 jtag_execute_queue();
1376 device
= jtag_devices
;
1379 if (buf_get_u32(ir_test
, chain_pos
, 2) != 0x1)
1381 char *cbuf
= buf_to_str(ir_test
, total_ir_length
, 16);
1382 ERROR("Error validating JTAG scan chain, IR mismatch, scan returned 0x%s", cbuf
);
1385 return ERROR_JTAG_INIT_FAILED
;
1387 chain_pos
+= device
->ir_length
;
1388 device
= device
->next
;
1391 if (buf_get_u32(ir_test
, chain_pos
, 2) != 0x3)
1393 char *cbuf
= buf_to_str(ir_test
, total_ir_length
, 16);
1394 ERROR("Error validating JTAG scan chain, IR mismatch, scan returned 0x%s", cbuf
);
1397 return ERROR_JTAG_INIT_FAILED
;
1405 int jtag_register_commands(struct command_context_s
*cmd_ctx
)
1407 register_command(cmd_ctx
, NULL
, "interface", handle_interface_command
,
1408 COMMAND_CONFIG
, NULL
);
1409 register_command(cmd_ctx
, NULL
, "jtag_speed", handle_jtag_speed_command
,
1410 COMMAND_ANY
, "set jtag speed (if supported) <speed>");
1411 register_command(cmd_ctx
, NULL
, "jtag_device", handle_jtag_device_command
,
1412 COMMAND_CONFIG
, "jtag_device <ir_length> <ir_expected> <ir_mask>");
1413 register_command(cmd_ctx
, NULL
, "reset_config", handle_reset_config_command
,
1414 COMMAND_CONFIG
, NULL
);
1415 register_command(cmd_ctx
, NULL
, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command
,
1416 COMMAND_CONFIG
, NULL
);
1417 register_command(cmd_ctx
, NULL
, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command
,
1418 COMMAND_CONFIG
, NULL
);
1420 register_command(cmd_ctx
, NULL
, "scan_chain", handle_scan_chain_command
,
1421 COMMAND_EXEC
, "print current scan chain configuration");
1423 register_command(cmd_ctx
, NULL
, "endstate", handle_endstate_command
,
1424 COMMAND_EXEC
, "finish JTAG operations in <tap_state>");
1425 register_command(cmd_ctx
, NULL
, "jtag_reset", handle_jtag_reset_command
,
1426 COMMAND_EXEC
, "toggle reset lines <trst> <srst>");
1427 register_command(cmd_ctx
, NULL
, "runtest", handle_runtest_command
,
1428 COMMAND_EXEC
, "move to Run-Test/Idle, and execute <num_cycles>");
1429 register_command(cmd_ctx
, NULL
, "statemove", handle_statemove_command
,
1430 COMMAND_EXEC
, "move to current endstate or [tap_state]");
1431 register_command(cmd_ctx
, NULL
, "irscan", handle_irscan_command
,
1432 COMMAND_EXEC
, "execute IR scan <device> <instr> [dev2] [instr2] ...");
1433 register_command(cmd_ctx
, NULL
, "drscan", handle_drscan_command
,
1434 COMMAND_EXEC
, "execute DR scan <device> <var> [dev2] [var2] ...");
1436 register_command(cmd_ctx
, NULL
, "verify_ircapture", handle_verify_ircapture_command
,
1437 COMMAND_ANY
, "verify value captured during Capture-IR <enable|disable>");
1441 int jtag_interface_init(struct command_context_s
*cmd_ctx
)
1443 if (!jtag_interface
)
1445 /* nothing was previously specified by "interface" command */
1446 ERROR("JTAG interface has to be specified, see \"interface\" command");
1447 return ERROR_JTAG_INVALID_INTERFACE
;
1450 if (jtag_interface
->init() != ERROR_OK
)
1451 return ERROR_JTAG_INIT_FAILED
;
1453 jtag
= jtag_interface
;
1457 int jtag_init(struct command_context_s
*cmd_ctx
)
1459 int validate_tries
= 0;
1460 jtag_device_t
*device
;
1464 if (!jtag
&& jtag_interface_init(cmd_ctx
) != ERROR_OK
)
1465 return ERROR_JTAG_INIT_FAILED
;
1467 device
= jtag_devices
;
1468 jtag_ir_scan_size
= 0;
1469 jtag_num_devices
= 0;
1470 while (device
!= NULL
)
1472 jtag_ir_scan_size
+= device
->ir_length
;
1474 device
= device
->next
;
1477 jtag_add_statemove(TAP_TLR
);
1478 jtag_execute_queue();
1480 /* examine chain first, as this could discover the real chain layout */
1481 if (jtag_examine_chain() != ERROR_OK
)
1483 ERROR("trying to validate configured JTAG chain anyway...");
1486 while (jtag_validate_chain() != ERROR_OK
)
1489 if (validate_tries
> 5)
1491 ERROR("Could not validate JTAG chain, exit");
1492 return ERROR_JTAG_INVALID_INTERFACE
;
1501 int handle_interface_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1505 /* check whether the interface is already configured */
1508 WARNING("Interface already configured, ignoring");
1512 /* interface name is a mandatory argument */
1513 if (argc
< 1 || args
[0][0] == '\0')
1515 return ERROR_COMMAND_SYNTAX_ERROR
;
1518 for (i
=0; jtag_interfaces
[i
]; i
++)
1520 if (strcmp(args
[0], jtag_interfaces
[i
]->name
) == 0)
1522 if (jtag_interfaces
[i
]->register_commands(cmd_ctx
) != ERROR_OK
)
1525 jtag_interface
= jtag_interfaces
[i
];
1530 /* no valid interface was found (i.e. the configuration option,
1531 * didn't match one of the compiled-in interfaces
1533 ERROR("No valid jtag interface found (%s)", args
[0]);
1534 ERROR("compiled-in jtag interfaces:");
1535 for (i
= 0; jtag_interfaces
[i
]; i
++)
1537 ERROR("%i: %s", i
, jtag_interfaces
[i
]->name
);
1540 return ERROR_JTAG_INVALID_INTERFACE
;
1543 int handle_jtag_device_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1545 jtag_device_t
**last_device_p
= &jtag_devices
;
1549 while ((*last_device_p
)->next
)
1550 last_device_p
= &((*last_device_p
)->next
);
1551 last_device_p
= &((*last_device_p
)->next
);
1557 *last_device_p
= malloc(sizeof(jtag_device_t
));
1558 (*last_device_p
)->ir_length
= strtoul(args
[0], NULL
, 0);
1560 (*last_device_p
)->expected
= malloc((*last_device_p
)->ir_length
);
1561 buf_set_u32((*last_device_p
)->expected
, 0, (*last_device_p
)->ir_length
, strtoul(args
[1], NULL
, 0));
1562 (*last_device_p
)->expected_mask
= malloc((*last_device_p
)->ir_length
);
1563 buf_set_u32((*last_device_p
)->expected_mask
, 0, (*last_device_p
)->ir_length
, strtoul(args
[2], NULL
, 0));
1565 (*last_device_p
)->cur_instr
= malloc((*last_device_p
)->ir_length
);
1566 (*last_device_p
)->bypass
= 1;
1567 buf_set_ones((*last_device_p
)->cur_instr
, (*last_device_p
)->ir_length
);
1569 (*last_device_p
)->next
= NULL
;
1571 jtag_register_event_callback(jtag_reset_callback
, (*last_device_p
));
1578 int handle_scan_chain_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1580 jtag_device_t
*device
= jtag_devices
;
1581 int device_count
= 0;
1585 u32 expected
, expected_mask
, cur_instr
;
1586 expected
= buf_get_u32(device
->expected
, 0, device
->ir_length
);
1587 expected_mask
= buf_get_u32(device
->expected_mask
, 0, device
->ir_length
);
1588 cur_instr
= buf_get_u32(device
->cur_instr
, 0, device
->ir_length
);
1589 command_print(cmd_ctx
, "%i: idcode: 0x%8.8x ir length %i, ir capture 0x%x, ir mask 0x%x, current instruction 0x%x", device_count
, device
->idcode
, device
->ir_length
, expected
, expected_mask
, cur_instr
);
1590 device
= device
->next
;
1597 int handle_reset_config_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1601 if (strcmp(args
[0], "none") == 0)
1602 jtag_reset_config
= RESET_NONE
;
1603 else if (strcmp(args
[0], "trst_only") == 0)
1604 jtag_reset_config
= RESET_HAS_TRST
;
1605 else if (strcmp(args
[0], "srst_only") == 0)
1606 jtag_reset_config
= RESET_HAS_SRST
;
1607 else if (strcmp(args
[0], "trst_and_srst") == 0)
1608 jtag_reset_config
= RESET_TRST_AND_SRST
;
1611 ERROR("invalid reset_config argument, defaulting to none");
1612 jtag_reset_config
= RESET_NONE
;
1613 return ERROR_INVALID_ARGUMENTS
;
1619 if (strcmp(args
[1], "srst_pulls_trst") == 0)
1620 jtag_reset_config
|= RESET_SRST_PULLS_TRST
;
1621 else if (strcmp(args
[1], "trst_pulls_srst") == 0)
1622 jtag_reset_config
|= RESET_TRST_PULLS_SRST
;
1623 else if (strcmp(args
[1], "combined") == 0)
1624 jtag_reset_config
|= RESET_SRST_PULLS_TRST
| RESET_TRST_PULLS_SRST
;
1625 else if (strcmp(args
[1], "separate") == 0)
1626 jtag_reset_config
&= ~(RESET_SRST_PULLS_TRST
| RESET_TRST_PULLS_SRST
);
1629 ERROR("invalid reset_config argument, defaulting to none");
1630 jtag_reset_config
= RESET_NONE
;
1631 return ERROR_INVALID_ARGUMENTS
;
1637 if (strcmp(args
[2], "trst_open_drain") == 0)
1638 jtag_reset_config
|= RESET_TRST_OPEN_DRAIN
;
1639 else if (strcmp(args
[2], "trst_push_pull") == 0)
1640 jtag_reset_config
&= ~RESET_TRST_OPEN_DRAIN
;
1643 ERROR("invalid reset_config argument, defaulting to none");
1644 jtag_reset_config
= RESET_NONE
;
1645 return ERROR_INVALID_ARGUMENTS
;
1651 if (strcmp(args
[3], "srst_push_pull") == 0)
1652 jtag_reset_config
|= RESET_SRST_PUSH_PULL
;
1653 else if (strcmp(args
[3], "srst_open_drain") == 0)
1654 jtag_reset_config
&= ~RESET_SRST_PUSH_PULL
;
1657 ERROR("invalid reset_config argument, defaulting to none");
1658 jtag_reset_config
= RESET_NONE
;
1659 return ERROR_INVALID_ARGUMENTS
;
1666 int handle_jtag_nsrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1670 ERROR("jtag_nsrst_delay <ms> command takes one required argument");
1675 jtag_nsrst_delay
= strtoul(args
[0], NULL
, 0);
1681 int handle_jtag_ntrst_delay_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1685 ERROR("jtag_ntrst_delay <ms> command takes one required argument");
1690 jtag_ntrst_delay
= strtoul(args
[0], NULL
, 0);
1696 int handle_jtag_speed_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1699 command_print(cmd_ctx
, "jtag_speed: %i", jtag_speed
);
1703 jtag_speed
= strtoul(args
[0], NULL
, 0);
1704 /* this command can be called during CONFIG,
1705 * in which case jtag isn't initialized */
1707 jtag
->speed(jtag_speed
);
1713 int handle_endstate_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1715 enum tap_state state
;
1719 return ERROR_COMMAND_SYNTAX_ERROR
;
1723 for (state
= 0; state
< 16; state
++)
1725 if (strcmp(args
[0], tap_state_strings
[state
]) == 0)
1727 jtag_add_end_state(state
);
1728 jtag_execute_queue();
1732 command_print(cmd_ctx
, "current endstate: %s", tap_state_strings
[end_state
]);
1737 int handle_jtag_reset_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1744 return ERROR_COMMAND_SYNTAX_ERROR
;
1747 if (args
[0][0] == '1')
1749 else if (args
[0][0] == '0')
1753 return ERROR_COMMAND_SYNTAX_ERROR
;
1756 if (args
[1][0] == '1')
1758 else if (args
[1][0] == '0')
1762 return ERROR_COMMAND_SYNTAX_ERROR
;
1765 if (!jtag
&& jtag_interface_init(cmd_ctx
) != ERROR_OK
)
1766 return ERROR_JTAG_INIT_FAILED
;
1768 jtag_add_reset(trst
, srst
);
1769 jtag_execute_queue();
1774 int handle_runtest_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1778 return ERROR_COMMAND_SYNTAX_ERROR
;
1781 jtag_add_runtest(strtol(args
[0], NULL
, 0), -1);
1782 jtag_execute_queue();
1788 int handle_statemove_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1790 enum tap_state state
;
1795 for (state
= 0; state
< 16; state
++)
1797 if (strcmp(args
[0], tap_state_strings
[state
]) == 0)
1804 jtag_add_statemove(state
);
1805 jtag_execute_queue();
1811 int handle_irscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1814 scan_field_t
*fields
;
1816 if ((argc
< 2) || (argc
% 2))
1818 return ERROR_COMMAND_SYNTAX_ERROR
;
1821 fields
= malloc(sizeof(scan_field_t
) * argc
/ 2);
1823 for (i
= 0; i
< argc
/ 2; i
++)
1825 int device
= strtoul(args
[i
*2], NULL
, 0);
1826 int field_size
= jtag_get_device(device
)->ir_length
;
1827 fields
[i
].device
= device
;
1828 fields
[i
].out_value
= malloc(CEIL(field_size
, 8));
1829 buf_set_u32(fields
[i
].out_value
, 0, field_size
, strtoul(args
[i
*2+1], NULL
, 0));
1830 fields
[i
].out_mask
= NULL
;
1831 fields
[i
].in_value
= NULL
;
1832 fields
[i
].in_check_mask
= NULL
;
1833 fields
[i
].in_handler
= NULL
;
1834 fields
[i
].in_handler_priv
= NULL
;
1837 jtag_add_ir_scan(argc
/ 2, fields
, -1);
1838 jtag_execute_queue();
1840 for (i
= 0; i
< argc
/ 2; i
++)
1841 free(fields
[i
].out_value
);
1848 int handle_drscan_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1850 scan_field_t
*fields
;
1852 int field_count
= 0;
1856 if ((argc
< 2) || (argc
% 2))
1858 return ERROR_COMMAND_SYNTAX_ERROR
;
1861 for (i
= 0; i
< argc
; i
+=2)
1863 var
= get_var_by_namenum(args
[i
+1]);
1866 num_fields
+= var
->num_fields
;
1870 command_print(cmd_ctx
, "variable %s doesn't exist", args
[i
+1]);
1875 fields
= malloc(sizeof(scan_field_t
) * num_fields
);
1877 for (i
= 0; i
< argc
; i
+=2)
1879 var
= get_var_by_namenum(args
[i
+1]);
1881 for (j
= 0; j
< var
->num_fields
; j
++)
1883 fields
[field_count
].device
= strtol(args
[i
], NULL
, 0);
1884 fields
[field_count
].num_bits
= var
->fields
[j
].num_bits
;
1885 fields
[field_count
].out_value
= malloc(CEIL(var
->fields
[j
].num_bits
, 8));
1886 buf_set_u32(fields
[field_count
].out_value
, 0, var
->fields
[j
].num_bits
, var
->fields
[j
].value
);
1887 fields
[field_count
].out_mask
= NULL
;
1888 fields
[field_count
].in_value
= fields
[field_count
].out_value
;
1889 fields
[field_count
].in_check_mask
= NULL
;
1890 fields
[field_count
].in_check_value
= NULL
;
1891 fields
[field_count
].in_handler
= field_le_to_host
;
1892 fields
[field_count
++].in_handler_priv
= &(var
->fields
[j
]);
1896 jtag_add_dr_scan(num_fields
, fields
, -1);
1897 jtag_execute_queue();
1899 for (i
= 0; i
< argc
/ 2; i
++)
1900 free(fields
[i
].out_value
);
1907 int handle_verify_ircapture_command(struct command_context_s
*cmd_ctx
, char *cmd
, char **args
, int argc
)
1911 if (strcmp(args
[0], "enable") == 0)
1913 jtag_verify_capture_ir
= 1;
1915 else if (strcmp(args
[0], "disable") == 0)
1917 jtag_verify_capture_ir
= 0;
1920 return ERROR_COMMAND_SYNTAX_ERROR
;
1922 } else if (argc
!= 0)
1924 return ERROR_COMMAND_SYNTAX_ERROR
;
1927 command_print(cmd_ctx
, "verify Capture-IR is %s", (jtag_verify_capture_ir
) ? "enabled": "disabled");
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)