openocd: fix SPDX tag format for files .c
[fw/openocd] / src / xsvf / xsvf.c
index 63c891511e9077ed525966b42630e82708244954..0266c2120cc15d2d80c6347ef31172ee51b50874 100644 (file)
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
  *   Copyright (C) 2009 SoftPLC Corporation. http://softplc.com            *
  *   Dick Hollenbeck <dick@softplc.com>                                    *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   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, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 /* 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
@@ -39,6 +28,7 @@
 #endif
 
 #include "xsvf.h"
+#include "helper/system.h"
 #include <jtag/jtag.h>
 #include <svf/svf.h>
 
@@ -230,7 +220,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;
 
@@ -249,14 +239,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;
        }
 
@@ -411,12 +401,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);
@@ -456,7 +443,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
@@ -489,7 +476,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,
@@ -698,7 +685,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
@@ -918,8 +905,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);
 
@@ -930,7 +919,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,
@@ -1005,7 +994,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);
 
@@ -1014,29 +1003,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;
 }
@@ -1062,7 +1046,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.