X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fxsvf%2Fxsvf.c;h=c4ce55adcad2b99ee4c7940984b5f7614ba29e1f;hb=0a36acbf6ac67cf6e95077aa25a001e2638f2798;hp=137dd63ac0bb45c175f0aa64dde8dacef4a0b441;hpb=f7772ccb490c3f26a17a0fd15a251ffc5f49e262;p=fw%2Fopenocd
diff --git a/src/xsvf/xsvf.c b/src/xsvf/xsvf.c
index 137dd63ac..c4ce55adc 100644
--- a/src/xsvf/xsvf.c
+++ b/src/xsvf/xsvf.c
@@ -22,18 +22,16 @@
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * along with this program. If not, see . *
***************************************************************************/
/* The specification for SVF is available here:
* http://www.asset-intertech.com/support/svf.pdf
- * Below, this document is refered to as the "SVF spec".
+ * Below, this document is referred to as the "SVF spec".
*
* The specification for XSVF is available here:
* http://www.xilinx.com/support/documentation/application_notes/xapp503.pdf
- * Below, this document is refered to as the "XSVF spec".
+ * Below, this document is referred to as the "XSVF spec".
*/
#ifdef HAVE_CONFIG_H
@@ -41,6 +39,7 @@
#endif
#include "xsvf.h"
+#include "helper/system.h"
#include
#include
@@ -232,7 +231,7 @@ COMMAND_HANDLER(handle_xsvf_command)
unsigned pathlen = 0;
/* a flag telling whether to clock TCK during waits,
- * or simply sleep, controled by virt2
+ * or simply sleep, controlled by virt2
*/
int runtest_requires_tck = 0;
@@ -251,14 +250,14 @@ COMMAND_HANDLER(handle_xsvf_command)
if (strcmp(CMD_ARGV[0], "plain") != 0) {
tap = jtag_tap_by_string(CMD_ARGV[0]);
if (!tap) {
- command_print(CMD_CTX, "Tap: %s unknown", CMD_ARGV[0]);
+ command_print(CMD, "Tap: %s unknown", CMD_ARGV[0]);
return ERROR_FAIL;
}
}
xsvf_fd = open(filename, O_RDONLY);
if (xsvf_fd < 0) {
- command_print(CMD_CTX, "file \"%s\" not found", filename);
+ command_print(CMD, "file \"%s\" not found", filename);
return ERROR_FAIL;
}
@@ -273,6 +272,7 @@ COMMAND_HANDLER(handle_xsvf_command)
if ((CMD_ARGC > 2) && (strcmp(CMD_ARGV[2], "quiet") == 0))
verbose = 0;
+ LOG_WARNING("XSVF support in OpenOCD is limited. Consider using SVF instead");
LOG_USER("xsvf processing file: \"%s\"", filename);
while (read(xsvf_fd, &opcode, 1) > 0) {
@@ -412,12 +412,9 @@ COMMAND_HANDLER(handle_xsvf_command)
xsdrsize = be_to_h_u32(xsdrsize_buf);
LOG_DEBUG("XSDRSIZE %d", xsdrsize);
- if (dr_out_buf)
- free(dr_out_buf);
- if (dr_in_buf)
- free(dr_in_buf);
- if (dr_in_mask)
- free(dr_in_mask);
+ free(dr_out_buf);
+ free(dr_in_buf);
+ free(dr_in_mask);
dr_out_buf = malloc((xsdrsize + 7) / 8);
dr_in_buf = malloc((xsdrsize + 7) / 8);
@@ -457,7 +454,7 @@ COMMAND_HANDLER(handle_xsvf_command)
if (attempt > 0) {
/* perform the XC9500 exception handling sequence shown in xapp067.pdf and
- * illustrated in psuedo code at end of this file. We start from state
+ * illustrated in pseudo code at end of this file. We start from state
* DRPAUSE:
* go to Exit2-DR
* go to Shift-DR
@@ -490,7 +487,7 @@ COMMAND_HANDLER(handle_xsvf_command)
field.out_value = dr_out_buf;
field.in_value = calloc(DIV_ROUND_UP(field.num_bits, 8), 1);
- if (tap == NULL)
+ if (!tap)
jtag_add_plain_dr_scan(field.num_bits,
field.out_value,
field.in_value,
@@ -699,7 +696,7 @@ COMMAND_HANDLER(handle_xsvf_command)
field.in_value = NULL;
- if (tap == NULL)
+ if (!tap)
jtag_add_plain_ir_scan(field.num_bits,
field.out_value, field.in_value, my_end_state);
else
@@ -919,8 +916,10 @@ COMMAND_HANDLER(handle_xsvf_command)
struct scan_field field;
result = svf_add_statemove(loop_state);
- if (result != ERROR_OK)
+ if (result != ERROR_OK) {
+ free(dr_in_mask);
return result;
+ }
jtag_add_clocks(loop_clocks);
jtag_add_sleep(loop_usecs);
@@ -931,7 +930,7 @@ COMMAND_HANDLER(handle_xsvf_command)
if (attempt > 0 && verbose)
LOG_USER("LSDR retry %d", attempt);
- if (tap == NULL)
+ if (!tap)
jtag_add_plain_dr_scan(field.num_bits,
field.out_value,
field.in_value,
@@ -1006,7 +1005,7 @@ COMMAND_HANDLER(handle_xsvf_command)
}
if (tdo_mismatch) {
- command_print(CMD_CTX,
+ command_print(CMD,
"TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
file_offset);
@@ -1015,29 +1014,24 @@ COMMAND_HANDLER(handle_xsvf_command)
if (unsupported) {
off_t offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
- command_print(CMD_CTX,
+ command_print(CMD,
"unsupported xsvf command (0x%02X) at offset %jd, aborting",
uc, (intmax_t)offset);
return ERROR_FAIL;
}
if (do_abort) {
- command_print(CMD_CTX, "premature end of xsvf file detected, aborting");
+ command_print(CMD, "premature end of xsvf file detected, aborting");
return ERROR_FAIL;
}
- if (dr_out_buf)
- free(dr_out_buf);
-
- if (dr_in_buf)
- free(dr_in_buf);
-
- if (dr_in_mask)
- free(dr_in_mask);
+ free(dr_out_buf);
+ free(dr_in_buf);
+ free(dr_in_mask);
close(xsvf_fd);
- command_print(CMD_CTX, "XSVF file programmed successfully");
+ command_print(CMD, "XSVF file programmed successfully");
return ERROR_OK;
}
@@ -1063,7 +1057,7 @@ int xsvf_register_commands(struct command_context *cmd_ctx)
/*
-PSUEDO-Code from Xilinx Appnote XAPP067.pdf :
+PSEUDO-Code from Xilinx Appnote XAPP067.pdf :
the following pseudo code clarifies the intent of the xrepeat support.The
flow given is for the entire processing of an SVF file, not an XSVF file.