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) 2008 Peter Hettkamp *
9 * peter.hettkamp@htp-tel.de *
11 * Copyright (C) 2009 SoftPLC Corporation. http://softplc.com *
12 * Dick Hollenbeck <dick@softplc.com> *
14 * This program is free software; you can redistribute it and/or modify *
15 * it under the terms of the GNU General Public License as published by *
16 * the Free Software Foundation; either version 2 of the License, or *
17 * (at your option) any later version. *
19 * This program is distributed in the hope that it will be useful, *
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
22 * GNU General Public License for more details. *
24 * You should have received a copy of the GNU General Public License *
25 * along with this program; if not, write to the *
26 * Free Software Foundation, Inc., *
27 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
28 ***************************************************************************/
31 /* The specification for SVF is available here:
32 * http://www.asset-intertech.com/support/svf.pdf
33 * Below, this document is refered to as the "SVF spec".
35 * The specification for XSVF is available here:
36 * http://www.xilinx.com/support/documentation/application_notes/xapp503.pdf
37 * Below, this document is refered to as the "XSVF spec".
44 #define INCLUDE_JTAG_INTERFACE_H
49 /* XSVF commands, from appendix B of xapp503.pdf */
50 #define XCOMPLETE 0x00
58 #define XSETSDRMASKS 0x0A
73 /* XWAITSTATE is not in the xilinx XSVF spec, but the svf2xsvf.py translator
74 * generates this. Arguably it is needed because the XSVF XRUNTEST command
75 * was ill conceived and does not directly flow out of the SVF RUNTEST command.
76 * This XWAITSTATE does map directly from the SVF RUNTEST command.
78 #define XWAITSTATE 0x18
80 /* Lattice has extended the SVF file format, and Dick Hollenbeck's python based
81 * SVF2XSVF converter supports these 3 additional XSVF opcodes, LCOUNT, LDELAY, LSDR.
82 * Here is an example of usage of the 3 lattice opcode extensions:
84 ! Set the maximum loop count to 25.
86 ! Step to DRPAUSE give 5 clocks and wait for 1.00e+000 SEC.
87 LDELAY DRPAUSE 5 TCK 1.00E-003 SEC;
88 ! Test for the completed status. Match means pass.
89 ! Loop back to LDELAY line if not match and loop count less than 25.
101 /* XSVF valid state values for the XSTATE command, from appendix B of xapp503.pdf */
102 #define XSV_RESET 0x00
103 #define XSV_IDLE 0x01
104 #define XSV_DRSELECT 0x02
105 #define XSV_DRCAPTURE 0x03
106 #define XSV_DRSHIFT 0x04
107 #define XSV_DREXIT1 0x05
108 #define XSV_DRPAUSE 0x06
109 #define XSV_DREXIT2 0x07
110 #define XSV_DRUPDATE 0x08
111 #define XSV_IRSELECT 0x09
112 #define XSV_IRCAPTURE 0x0A
113 #define XSV_IRSHIFT 0x0B
114 #define XSV_IREXIT1 0x0C
115 #define XSV_IRPAUSE 0x0D
116 #define XSV_IREXIT2 0x0E
117 #define XSV_IRUPDATE 0x0F
119 /* arguments to XTRST */
123 #define XTRST_ABSENT 3
125 #define XSTATE_MAX_PATH 12
127 static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
129 static int xsvf_fd = 0;
132 /* map xsvf tap state to an openocd "tap_state_t" */
133 static tap_state_t xsvf_to_tap( int xsvf_state )
139 case XSV_RESET: ret = TAP_RESET; break;
140 case XSV_IDLE: ret = TAP_IDLE; break;
141 case XSV_DRSELECT: ret = TAP_DRSELECT; break;
142 case XSV_DRCAPTURE: ret = TAP_DRCAPTURE; break;
143 case XSV_DRSHIFT: ret = TAP_DRSHIFT; break;
144 case XSV_DREXIT1: ret = TAP_DREXIT1; break;
145 case XSV_DRPAUSE: ret = TAP_DRPAUSE; break;
146 case XSV_DREXIT2: ret = TAP_DREXIT2; break;
147 case XSV_DRUPDATE: ret = TAP_DRUPDATE; break;
148 case XSV_IRSELECT: ret = TAP_IRSELECT; break;
149 case XSV_IRCAPTURE: ret = TAP_IRCAPTURE; break;
150 case XSV_IRSHIFT: ret = TAP_IRSHIFT; break;
151 case XSV_IREXIT1: ret = TAP_IREXIT1; break;
152 case XSV_IRPAUSE: ret = TAP_IRPAUSE; break;
153 case XSV_IREXIT2: ret = TAP_IREXIT2; break;
154 case XSV_IRUPDATE: ret = TAP_IRUPDATE; break;
156 LOG_ERROR( "UNKNOWN XSVF STATE 0x%02X", xsvf_state );
165 int xsvf_register_commands(struct command_context_s *cmd_ctx)
167 register_command(cmd_ctx, NULL, "xsvf", handle_xsvf_command,
168 COMMAND_EXEC, "run xsvf <file> [virt2] [quiet]");
173 static int xsvf_read_buffer(int num_bits, int fd, u8* buf)
177 for (num_bytes = (num_bits + 7) / 8; num_bytes > 0; num_bytes--)
179 /* reverse the order of bytes as they are read sequentially from file */
180 if (read(fd, buf + num_bytes - 1, 1) < 0)
181 return ERROR_XSVF_EOF;
188 static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
190 u8 *dr_out_buf = NULL; /* from host to device (TDI) */
191 u8 *dr_in_buf = NULL; /* from device to host (TDO) */
192 u8 *dr_in_mask = NULL;
195 int xruntest = 0; /* number of TCK cycles OR microseconds */
196 int xrepeat = 0; /* number of retries */
198 tap_state_t xendir = TAP_IDLE; /* see page 8 of the SVF spec, initial xendir to be TAP_IDLE */
199 tap_state_t xenddr = TAP_IDLE;
203 long file_offset = 0;
206 tap_state_t loop_state = TAP_IDLE;
212 int tdo_mismatch = 0;
217 int runtest_requires_tck = 0; /* a flag telling whether to clock TCK during waits, or simply sleep, controled by virt2 */
220 /* use NULL to indicate a "plain" xsvf file which accounts for
221 additional devices in the scan chain, otherwise the device
222 that should be affected
224 jtag_tap_t *tap = NULL;
228 command_print(cmd_ctx, "usage: xsvf <device#|plain> <file> [<variant>] [quiet]");
232 filename = args[1]; /* we mess with args starting point below, snapshot filename here */
234 if (strcmp(args[0], "plain") != 0)
236 tap = jtag_TapByString( args[0] );
239 command_print( cmd_ctx, "Tap: %s unknown", args[0] );
244 if ((xsvf_fd = open(filename, O_RDONLY)) < 0)
246 command_print(cmd_ctx, "file \"%s\" not found", filename);
250 /* if this argument is present, then interpret xruntest counts as TCK cycles rather than as usecs */
251 if ((argc > 2) && (strcmp(args[2], "virt2") == 0))
253 runtest_requires_tck = 1;
258 if ((argc > 2) && (strcmp(args[2], "quiet") == 0))
263 LOG_USER("xsvf processing file: \"%s\"", filename);
265 while( read(xsvf_fd, &opcode, 1) > 0 )
267 /* record the position of the just read opcode within the file */
268 file_offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
273 LOG_DEBUG("XCOMPLETE");
275 result = jtag_execute_queue();
276 if (result != ERROR_OK)
284 LOG_DEBUG("XTDOMASK");
285 if (dr_in_mask && (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_mask) != ERROR_OK))
293 if (read(xsvf_fd, xruntest_buf, 4) < 0)
299 xruntest = be_to_h_u32(xruntest_buf);
300 LOG_DEBUG("XRUNTEST %d 0x%08X", xruntest, xruntest);
308 if (read(xsvf_fd, &myrepeat, 1) < 0)
313 LOG_DEBUG("XREPEAT %d", xrepeat );
322 if (read(xsvf_fd, xsdrsize_buf, 4) < 0)
328 xsdrsize = be_to_h_u32(xsdrsize_buf);
329 LOG_DEBUG("XSDRSIZE %d", xsdrsize);
331 if( dr_out_buf ) free(dr_out_buf);
332 if( dr_in_buf) free(dr_in_buf);
333 if( dr_in_mask) free(dr_in_mask);
335 dr_out_buf = malloc((xsdrsize + 7) / 8);
336 dr_in_buf = malloc((xsdrsize + 7) / 8);
337 dr_in_mask = malloc((xsdrsize + 7) / 8);
341 case XSDR: /* these two are identical except for the dr_in_buf */
348 const char* op_name = (opcode == XSDR ? "XSDR" : "XSDRTDO");
350 if (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_out_buf) != ERROR_OK)
356 if (opcode == XSDRTDO)
358 if(xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK )
368 LOG_DEBUG("%s %d", op_name, xsdrsize);
370 for( attempt=0; attempt<limit; ++attempt )
376 /* perform the XC9500 exception handling sequence shown in xapp067.pdf and
377 illustrated in psuedo code at end of this file. We start from state
385 This sequence should be harmless for other devices, and it
386 will be skipped entirely if xrepeat is set to zero.
389 static tap_state_t exception_path[] = {
397 jtag_add_pathmove( DIM(exception_path), exception_path );
400 LOG_USER("%s mismatch, xsdrsize=%d retry=%d", op_name, xsdrsize, attempt);
404 field.num_bits = xsdrsize;
405 field.out_value = dr_out_buf;
406 field.in_value = calloc(CEIL(field.num_bits, 8), 1);
409 jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE);
411 jtag_add_dr_scan(1, &field, TAP_DRPAUSE);
413 jtag_check_value_mask(&field, dr_in_buf, dr_in_mask);
415 free(field.in_value);
418 /* LOG_DEBUG("FLUSHING QUEUE"); */
419 result = jtag_execute_queue();
420 if (result == ERROR_OK)
429 LOG_USER( "%s mismatch", op_name);
434 /* See page 19 of XSVF spec regarding opcode "XSDR" */
437 jtag_add_statemove(TAP_IDLE);
439 if (runtest_requires_tck)
440 jtag_add_clocks(xruntest);
442 jtag_add_sleep(xruntest);
444 else if (xendir != TAP_DRPAUSE) /* we are already in TAP_DRPAUSE */
445 jtag_add_statemove(xenddr);
450 LOG_ERROR("unsupported XSETSDRMASKS\n");
455 LOG_ERROR("unsupported XSDRINC\n");
460 LOG_ERROR("unsupported XSDRB\n");
465 LOG_ERROR("unsupported XSDRC\n");
470 LOG_ERROR("unsupported XSDRE\n");
475 LOG_ERROR("unsupported XSDRTDOB\n");
480 LOG_ERROR("unsupported XSDRTDOC\n");
485 LOG_ERROR("unsupported XSDRTDOE\n");
494 if (read(xsvf_fd, &uc, 1) < 0)
500 mystate = xsvf_to_tap(uc);
502 LOG_DEBUG("XSTATE 0x%02X %s", uc, tap_state_name(mystate) );
504 /* there is no need for the lookahead code that was here since we
505 queue up the jtag commands anyway. This is a simple way to handle
509 if( jtag_add_statemove( mystate ) != ERROR_OK )
511 /* For special states known as stable states
512 (Test-Logic-Reset, Run-Test/Idle, Pause-DR, Pause- IR),
513 an XSVF interpreter follows predefined TAP state paths
514 when the starting state is a stable state and when the
515 XSTATE specifies a new stable state (see the STATE
516 command in the [Ref 5] for the TAP state paths between
517 stable states). For non-stable states, XSTATE should
518 specify a state that is only one TAP state transition
519 distance from the current TAP state to avoid undefined
520 TAP state paths. A sequence of multiple XSTATE commands
521 can be issued to transition the TAP through a specific
525 LOG_ERROR("XSTATE %s is not reachable from current state %s in one clock cycle",
526 tap_state_name(mystate),
527 tap_state_name(cmd_queue_cur_state)
535 if (read(xsvf_fd, &uc, 1) < 0)
541 /* see page 22 of XSVF spec */
545 xendir = TAP_IRPAUSE;
548 LOG_ERROR("illegial XENDIR argument: 0x%02X", uc);
553 LOG_DEBUG("XENDIR 0x%02X %s", uc, tap_state_name(xendir));
558 if (read(xsvf_fd, &uc, 1) < 0)
564 /* see page 22 of XSVF spec */
568 xenddr = TAP_DRPAUSE;
571 LOG_ERROR("illegial XENDDR argument: 0x%02X", uc);
576 LOG_DEBUG("XENDDR %02X %s", uc, tap_state_name(xenddr));
585 tap_state_t my_end_state = xruntest ? TAP_IDLE : xendir;
589 /* one byte bitcount */
590 if (read(xsvf_fd, short_buf, 1) < 0)
595 bitcount = short_buf[0];
596 LOG_DEBUG("XSIR %d", bitcount);
600 if (read(xsvf_fd, short_buf, 2) < 0)
605 bitcount = be_to_h_u16(short_buf);
606 LOG_DEBUG("XSIR2 %d", bitcount);
609 ir_buf = malloc((bitcount+7) / 8);
611 if (xsvf_read_buffer(bitcount, xsvf_fd, ir_buf) != ERROR_OK)
618 field.num_bits = bitcount;
619 field.out_value = ir_buf;
621 field.in_value = NULL;
627 jtag_add_plain_ir_scan(1, &field, my_end_state);
629 jtag_add_ir_scan(1, &field, my_end_state);
633 if (runtest_requires_tck)
634 jtag_add_clocks(xruntest);
636 jtag_add_sleep(xruntest);
639 /* Note that an -irmask of non-zero in your config file
640 * can cause this to fail. Setting -irmask to zero cand work
641 * around the problem.
644 /* LOG_DEBUG("FLUSHING QUEUE"); */
645 result = jtag_execute_queue();
646 if(result != ERROR_OK)
657 unsigned int ndx = 0;
662 if (read(xsvf_fd, &uc, 1) < 0)
668 if ( ndx < sizeof(comment)-1 )
673 comment[sizeof(comment)-1] = 0; /* regardless, terminate */
675 LOG_USER("# %s", comment);
681 /* expected in stream:
682 XWAIT <u8 wait_state> <u8 end_state> <u32 usecs>
689 tap_state_t wait_state;
690 tap_state_t end_state;
693 if ( read(xsvf_fd, &wait, 1) < 0
694 || read(xsvf_fd, &end, 1) < 0
695 || read(xsvf_fd, delay_buf, 4) < 0)
701 wait_state = xsvf_to_tap(wait);
702 end_state = xsvf_to_tap(end);
703 delay = be_to_h_u32(delay_buf);
705 LOG_DEBUG("XWAIT %s %s usecs:%d", tap_state_name(wait_state), tap_state_name(end_state), delay);
707 if (runtest_requires_tck && wait_state == TAP_IDLE )
709 jtag_add_runtest(delay, end_state);
713 jtag_add_statemove( wait_state );
714 jtag_add_sleep(delay);
715 jtag_add_statemove( end_state );
722 /* expected in stream:
723 XWAITSTATE <u8 wait_state> <u8 end_state> <u32 clock_count> <u32 usecs>
730 tap_state_t wait_state;
731 tap_state_t end_state;
735 if ( read(xsvf_fd, &wait, 1) < 0
736 || read(xsvf_fd, &end, 1) < 0
737 || read(xsvf_fd, clock_buf, 4) < 0
738 || read(xsvf_fd, usecs_buf, 4) < 0 )
744 wait_state = xsvf_to_tap( wait );
745 end_state = xsvf_to_tap( end );
747 clock_count = be_to_h_u32(clock_buf);
748 usecs = be_to_h_u32(usecs_buf);
750 LOG_DEBUG("XWAITSTATE %s %s clocks:%i usecs:%i",
751 tap_state_name(wait_state),
752 tap_state_name(end_state),
755 /* the following states are 'stable', meaning that they have a transition
756 * in the state diagram back to themselves. This is necessary because we will
757 * be issuing a number of clocks in this state. This set of allowed states is also
758 * determined by the SVF RUNTEST command's allowed states.
760 if (wait_state != TAP_IRPAUSE && wait_state != TAP_DRPAUSE && wait_state != TAP_RESET && wait_state != TAP_IDLE)
762 LOG_ERROR("illegal XWAITSTATE wait_state: \"%s\"", tap_state_name( wait_state ));
766 jtag_add_statemove( wait_state );
768 jtag_add_clocks( clock_count );
770 jtag_add_sleep( usecs );
772 jtag_add_statemove( end_state );
778 /* expected in stream:
779 LCOUNT <u32 loop_count>
783 if ( read(xsvf_fd, count_buf, 4) < 0 )
789 loop_count = be_to_h_u32(count_buf);
790 LOG_DEBUG("LCOUNT %d", loop_count);
796 /* expected in stream:
797 LDELAY <u8 wait_state> <u32 clock_count> <u32 usecs_to_sleep>
803 if ( read(xsvf_fd, &state, 1) < 0
804 || read(xsvf_fd, clock_buf, 4) < 0
805 || read(xsvf_fd, usecs_buf, 4) < 0 )
811 loop_state = xsvf_to_tap(state);
812 loop_clocks = be_to_h_u32(clock_buf);
813 loop_usecs = be_to_h_u32(usecs_buf);
815 LOG_DEBUG("LDELAY %s clocks:%d usecs:%d", tap_state_name(loop_state), loop_clocks, loop_usecs);
819 /* LSDR is more like XSDRTDO than it is like XSDR. It uses LDELAY which
820 * comes with clocks !AND! sleep requirements.
824 int limit = loop_count;
830 if ( xsvf_read_buffer(xsdrsize, xsvf_fd, dr_out_buf) != ERROR_OK
831 || xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK )
840 for( attempt=0; attempt<limit; ++attempt )
844 jtag_add_statemove( loop_state );
845 jtag_add_clocks(loop_clocks);
846 jtag_add_sleep(loop_usecs);
849 field.num_bits = xsdrsize;
850 field.out_value = dr_out_buf;
851 field.in_value = calloc(CEIL(field.num_bits, 8), 1);
853 if (attempt > 0 && verbose)
854 LOG_USER("LSDR retry %d", attempt);
857 jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE);
859 jtag_add_dr_scan(1, &field, TAP_DRPAUSE);
861 jtag_check_value_mask(&field, dr_in_buf, dr_in_mask);
863 free(field.in_value);
866 /* LOG_DEBUG("FLUSHING QUEUE"); */
867 result = jtag_execute_queue();
868 if(result == ERROR_OK)
877 LOG_USER( "LSDR mismatch" );
888 if (read(xsvf_fd, &trst_mode, 1) < 0)
897 jtag_add_reset(1, 0);
901 jtag_add_reset(0, 0);
906 LOG_ERROR( "XTRST mode argument (0x%02X) out of range", trst_mode );
913 LOG_ERROR("unknown xsvf command (0x%02X)\n", uc);
917 if (do_abort || unsupported || tdo_mismatch)
919 LOG_DEBUG("xsvf failed, setting taps to reasonable state");
921 /* upon error, return the TAPs to a reasonable state */
922 jtag_add_statemove( TAP_IDLE );
923 jtag_execute_queue();
930 command_print(cmd_ctx, "TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
939 off_t offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
940 command_print(cmd_ctx,
941 "unsupported xsvf command (0x%02X) at offset %jd, aborting",
942 uc, (intmax_t)offset);
948 command_print(cmd_ctx, "premature end of xsvf file detected, aborting");
963 command_print(cmd_ctx, "XSVF file programmed successfully");
969 #if 0 /* this comment style used to try and keep uncrustify from adding * at begin of line */
971 PSUEDO-Code from Xilinx Appnote XAPP067.pdf:
973 the following pseudo code clarifies the intent of the xrepeat support. The
974 flow given is for the entire processing of an SVF file, not an XSVF file.
975 No idea if this is just for the XC9500/XL/XV devices or all Xilinx parts.
977 "Pseudo-Code Algorithm for SVF-Based ISP"
979 1. Go to Test-Logic-Reset state
980 2. Go to Run-Test Idle state
983 4. if SIR record then
987 5. else if SDR record then
988 set <repeat count> to 0
989 store <TDI value> as <current TDI value>
990 store <TDO value> as <current TDO value>
991 6. go to Shift-DR state
992 scan in <current TDI value>
993 if <current TDO value> is specified then
994 if <current TDO value> does not equal <actual TDO value> then
995 if <repeat count> > 32 then
997 go to Run-Test Idle state
1006 increment <repeat count> by 1
1007 pause <current pause time> microseconds
1011 go to Run-Test Idle state
1014 else if RUNTEST record then
1015 pause tester for <TCK value> microseconds
1016 store <TCK value> as <current pause time>