update files to correct FSF address
[openocd.git] / src / jtag / drivers / amt_jtagaccel.c
index 552d04d20ef82002c0b396b485353880d5623acc..45f2d5c4ff1e0b6a92763305d8e17d8ec1305c2f 100644 (file)
@@ -15,8 +15,9 @@
  *   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.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -27,7 +28,7 @@
 #include <linux/parport.h>
 #include <linux/ppdev.h>
 #include <sys/ioctl.h>
-#else /* not PARPORT_USE_PPDEV */
+#else  /* not PARPORT_USE_PPDEV */
 #ifndef _WIN32
 #include <sys/io.h>
 #endif
@@ -53,11 +54,11 @@ static uint16_t amt_jtagaccel_port;
 
 /* interface variables
  */
-static uint8_t aw_control_rst = 0x00;
+static uint8_t aw_control_rst;
 static uint8_t aw_control_fsm = 0x10;
 static uint8_t aw_control_baudrate = 0x20;
 
-static int rtck_enabled = 0;
+static int rtck_enabled;
 
 #if PARPORT_USE_PPDEV == 1
 static int device_handle;
@@ -70,15 +71,19 @@ static const int addr_mode = IEEE1284_MODE_EPP | IEEE1284_ADDR;
        do { \
                int __retval; \
                \
-               __retval = ioctl(device_handle, PPSETMODE, &addr_mode); \
+               __retval = ioctl(device_handle, PPSETMODE, &addr_mode); \
+               assert(__retval >= 0); \
                __retval = write(device_handle, &val, 1); \
+               assert(__retval >= 0); \
        } while (0)
 #define AMT_AR(val) \
        do { \
                int __retval; \
                \
-               __retval = ioctl(device_handle, PPSETMODE, &addr_mode); \
+               __retval = ioctl(device_handle, PPSETMODE, &addr_mode); \
+               assert(__retval >= 0); \
                __retval = read(device_handle, &val, 1); \
+               assert(__retval >= 0); \
        } while (0)
 
 static const int data_mode = IEEE1284_MODE_EPP | IEEE1284_DATA;
@@ -87,25 +92,29 @@ static const int data_mode = IEEE1284_MODE_EPP | IEEE1284_DATA;
        do { \
                int __retval; \
                \
-               __retval = ioctl(device_handle, PPSETMODE, &data_mode); \
+               __retval = ioctl(device_handle, PPSETMODE, &data_mode); \
+               assert(__retval >= 0); \
                __retval = write(device_handle, &val, 1); \
+               assert(__retval >= 0); \
        } while (0)
 #define AMT_DR(val) \
        do { \
                int __retval; \
                \
-               __retval = ioctl(device_handle, PPSETMODE, &data_mode); \
+               __retval = ioctl(device_handle, PPSETMODE, &data_mode); \
+               assert(__retval >= 0); \
                __retval = read(device_handle, &val, 1); \
+               assert(__retval >= 0); \
        } while (0)
 
 #else
 
-#define AMT_AW(val)    do { outb(val, amt_jtagaccel_port + 3); } while (0)
-#define AMT_AR(val)    do { val = inb(amt_jtagaccel_port + 3); } while (0)
-#define AMT_DW(val)    do { outb(val, amt_jtagaccel_port + 4); } while (0)
-#define AMT_DR(val)    do { val = inb(amt_jtagaccel_port + 4); } while (0)
+#define AMT_AW(val) do { outb(val, amt_jtagaccel_port + 3); } while (0)
+#define AMT_AR(val) do { val = inb(amt_jtagaccel_port + 3); } while (0)
+#define AMT_DW(val) do { outb(val, amt_jtagaccel_port + 4); } while (0)
+#define AMT_DR(val) do { val = inb(amt_jtagaccel_port + 4); } while (0)
 
-#endif // PARPORT_USE_PPDEV
+#endif /* PARPORT_USE_PPDEV */
 
 /* tap_move[i][j]: tap movement command to go from state i to state j
  * 0: Test-Logic-Reset
@@ -115,18 +124,16 @@ static const int data_mode = IEEE1284_MODE_EPP | IEEE1284_DATA;
  * 4: Shift-IR
  * 5: Pause-IR
  */
-static uint8_t amt_jtagaccel_tap_move[6][6][2] =
-{
+static uint8_t amt_jtagaccel_tap_move[6][6][2] = {
        /*         RESET         IDLE        DRSHIFT       DRPAUSE       IRSHIFT       IRPAUSE             */
-       {{0x1f, 0x00}, {0x0f, 0x00}, {0x05, 0x00}, {0x0a, 0x00}, {0x06, 0x00}, {0x96, 0x00}},   /* RESET */
-       {{0x1f, 0x00}, {0x00, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x0b, 0x00}},   /* IDLE */
-       {{0x1f, 0x00}, {0x0d, 0x00}, {0x00, 0x00}, {0x01, 0x00}, {0x8f, 0x09}, {0x8f, 0x01}},   /* DRSHIFT  */
-       {{0x1f, 0x00}, {0x0c, 0x00}, {0x08, 0x00}, {0x00, 0x00}, {0x8f, 0x09}, {0x8f, 0x01}},   /* DRPAUSE  */
-       {{0x1f, 0x00}, {0x0d, 0x00}, {0x07, 0x00}, {0x97, 0x00}, {0x00, 0x00}, {0x01, 0x00}},   /* IRSHIFT  */
-       {{0x1f, 0x00}, {0x0c, 0x00}, {0x07, 0x00}, {0x97, 0x00}, {0x08, 0x00}, {0x00, 0x00}},   /* IRPAUSE  */
+       { {0x1f, 0x00}, {0x0f, 0x00}, {0x05, 0x00}, {0x0a, 0x00}, {0x06, 0x00}, {0x96, 0x00} }, /* RESET */
+       { {0x1f, 0x00}, {0x00, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x00}, {0x0b, 0x00} }, /* IDLE */
+       { {0x1f, 0x00}, {0x0d, 0x00}, {0x00, 0x00}, {0x01, 0x00}, {0x8f, 0x09}, {0x8f, 0x01} }, /* DRSHIFT  */
+       { {0x1f, 0x00}, {0x0c, 0x00}, {0x08, 0x00}, {0x00, 0x00}, {0x8f, 0x09}, {0x8f, 0x01} }, /* DRPAUSE  */
+       { {0x1f, 0x00}, {0x0d, 0x00}, {0x07, 0x00}, {0x97, 0x00}, {0x00, 0x00}, {0x01, 0x00} }, /* IRSHIFT  */
+       { {0x1f, 0x00}, {0x0c, 0x00}, {0x07, 0x00}, {0x97, 0x00}, {0x08, 0x00}, {0x00, 0x00} }, /* IRPAUSE  */
 };
 
-
 static void amt_jtagaccel_reset(int trst, int srst)
 {
        if (trst == 1)
@@ -155,8 +162,7 @@ static void amt_jtagaccel_end_state(tap_state_t state)
 {
        if (tap_is_state_stable(state))
                tap_set_end_state(state);
-       else
-       {
+       else {
                LOG_ERROR("BUG: %i is not a valid end state", state);
                exit(-1);
        }
@@ -171,9 +177,11 @@ static void amt_wait_scan_busy(void)
        while (((ar_status) & 0x80) && (timeout-- > 0))
                AMT_AR(ar_status);
 
-       if (ar_status & 0x80)
-       {
-               LOG_ERROR("amt_jtagaccel timed out while waiting for end of scan, rtck was %s, last AR_STATUS: 0x%2.2x", (rtck_enabled) ? "enabled" : "disabled", ar_status);
+       if (ar_status & 0x80) {
+               LOG_ERROR(
+                       "amt_jtagaccel timed out while waiting for end of scan, rtck was %s, last AR_STATUS: 0x%2.2x",
+                       (rtck_enabled) ? "enabled" : "disabled",
+                       ar_status);
                exit(-1);
        }
 }
@@ -183,21 +191,21 @@ static void amt_jtagaccel_state_move(void)
        uint8_t aw_scan_tms_5;
        uint8_t tms_scan[2];
 
-       tap_state_t     cur_state = tap_get_state();
-       tap_state_t     end_state = tap_get_end_state();
+       tap_state_t cur_state = tap_get_state();
+       tap_state_t end_state = tap_get_end_state();
 
        tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][0];
        tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][1];
 
        aw_scan_tms_5 = 0x40 | (tms_scan[0] & 0x1f);
        AMT_AW(aw_scan_tms_5);
+       int jtag_speed = 0;
        int retval = jtag_get_speed(&jtag_speed);
        assert(retval == ERROR_OK);
        if (jtag_speed > 3 || rtck_enabled)
                amt_wait_scan_busy();
 
-       if (tms_scan[0] & 0x80)
-       {
+       if (tms_scan[0] & 0x80) {
                aw_scan_tms_5 = 0x40 | (tms_scan[1] & 0x1f);
                AMT_AW(aw_scan_tms_5);
                if (jtag_speed > 3 || rtck_enabled)
@@ -216,21 +224,18 @@ static void amt_jtagaccel_runtest(int num_cycles)
        tap_state_t saved_end_state = tap_get_end_state();
 
        /* only do a state_move when we're not already in IDLE */
-       if (tap_get_state() != TAP_IDLE)
-       {
+       if (tap_get_state() != TAP_IDLE) {
                amt_jtagaccel_end_state(TAP_IDLE);
                amt_jtagaccel_state_move();
        }
 
-       while (num_cycles - i >= 5)
-       {
+       while (num_cycles - i >= 5) {
                aw_scan_tms_5 = 0x40;
                AMT_AW(aw_scan_tms_5);
                i += 5;
        }
 
-       if (num_cycles - i > 0)
-       {
+       if (num_cycles - i > 0) {
                aw_scan_tms_1to4 = 0x80 | ((num_cycles - i - 1) & 0x3) << 4;
                AMT_AW(aw_scan_tms_1to4);
        }
@@ -259,12 +264,14 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe
        else
                amt_jtagaccel_end_state(TAP_DRSHIFT);
 
-       amt_jtagaccel_state_move();
+       /* Only move if we're not already there */
+       if (tap_get_state() != tap_get_end_state())
+               amt_jtagaccel_state_move();
+
        amt_jtagaccel_end_state(saved_end_state);
 
        /* handle unaligned bits at the beginning */
-       if ((scan_size - 1) % 8)
-       {
+       if ((scan_size - 1) % 8) {
                aw_tdi_option = 0x30 | (((scan_size - 1) % 8) - 1);
                AMT_AW(aw_tdi_option);
 
@@ -273,8 +280,7 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe
                if (jtag_speed_var > 3 || rtck_enabled)
                        amt_wait_scan_busy();
 
-               if ((type == SCAN_IN) || (type == SCAN_IO))
-               {
+               if ((type == SCAN_IN) || (type == SCAN_IO)) {
                        AMT_DR(dr_tdo);
                        dr_tdo = dr_tdo >> (8 - ((scan_size - 1) % 8));
                        buf_set_u32(buffer, bit_count, (scan_size - 1) % 8, dr_tdo);
@@ -284,15 +290,13 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe
                bits_left -= (scan_size - 1) % 8;
        }
 
-       while (bits_left - 1 >= 8)
-       {
+       while (bits_left - 1 >= 8) {
                dw_tdi_scan = buf_get_u32(buffer, bit_count, 8) & 0xff;
                AMT_DW(dw_tdi_scan);
                if (jtag_speed_var > 3 || rtck_enabled)
                        amt_wait_scan_busy();
 
-               if ((type == SCAN_IN) || (type == SCAN_IO))
-               {
+               if ((type == SCAN_IN) || (type == SCAN_IO)) {
                        AMT_DR(dr_tdo);
                        buf_set_u32(buffer, bit_count, 8, dr_tdo);
                }
@@ -301,22 +305,22 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe
                bits_left -= 8;
        }
 
-       tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][0];
-       tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][1];
+       tms_scan[0] =
+               amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][0];
+       tms_scan[1] =
+               amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][1];
        aw_tms_scan = 0x40 | (tms_scan[0] & 0x1f) | (buf_get_u32(buffer, bit_count, 1) << 5);
        AMT_AW(aw_tms_scan);
        if (jtag_speed_var > 3 || rtck_enabled)
                amt_wait_scan_busy();
 
-       if ((type == SCAN_IN) || (type == SCAN_IO))
-       {
+       if ((type == SCAN_IN) || (type == SCAN_IO)) {
                AMT_DR(dr_tdo);
                dr_tdo = dr_tdo >> 7;
                buf_set_u32(buffer, bit_count, 1, dr_tdo);
        }
 
-       if (tms_scan[0] & 0x80)
-       {
+       if (tms_scan[0] & 0x80) {
                aw_tms_scan = 0x40 | (tms_scan[1] & 0x1f);
                AMT_AW(aw_tms_scan);
                if (jtag_speed_var > 3 || rtck_enabled)
@@ -327,7 +331,7 @@ static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffe
 
 static int amt_jtagaccel_execute_queue(void)
 {
-       struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
+       struct jtag_command *cmd = jtag_command_queue;  /* currently processed command */
        int scan_size;
        enum scan_type type;
        uint8_t *buffer;
@@ -338,23 +342,23 @@ static int amt_jtagaccel_execute_queue(void)
         */
        retval = ERROR_OK;
 
-       while (cmd)
-       {
-               switch (cmd->type)
-               {
+       while (cmd) {
+               switch (cmd->type) {
                        case JTAG_RESET:
 #ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
+                               LOG_DEBUG("reset trst: %i srst %i",
+                               cmd->cmd.reset->trst,
+                               cmd->cmd.reset->srst);
 #endif
                                if (cmd->cmd.reset->trst == 1)
-                               {
                                        tap_set_state(TAP_RESET);
-                               }
                                amt_jtagaccel_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
                                break;
                        case JTAG_RUNTEST:
 #ifdef _DEBUG_JTAG_IO_
-                               LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state);
+                               LOG_DEBUG("runtest %i cycles, end in %i",
+                               cmd->cmd.runtest->num_cycles,
+                               cmd->cmd.runtest->end_state);
 #endif
                                amt_jtagaccel_end_state(cmd->cmd.runtest->end_state);
                                amt_jtagaccel_runtest(cmd->cmd.runtest->num_cycles);
@@ -403,16 +407,22 @@ int amt_jtagaccel_get_giveio_access(void)
 
        version.dwOSVersionInfoSize = sizeof version;
        if (!GetVersionEx(&version)) {
-       errno = EINVAL;
-       return -1;
+               errno = EINVAL;
+               return -1;
        }
        if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
-       return 0;
-
-       h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+               return 0;
+
+       h = CreateFile("\\\\.\\giveio",
+                       GENERIC_READ,
+                       0,
+                       NULL,
+                       OPEN_EXISTING,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL);
        if (h == INVALID_HANDLE_VALUE) {
-       errno = ENODEV;
-       return -1;
+               errno = ENODEV;
+               return -1;
        }
 
        CloseHandle(h);
@@ -433,8 +443,7 @@ static int amt_jtagaccel_init(void)
        uint8_t ar_status;
 
 #if PARPORT_USE_PPDEV == 1
-       if (device_handle > 0)
-       {
+       if (device_handle > 0) {
                LOG_ERROR("device is already opened");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -442,23 +451,21 @@ static int amt_jtagaccel_init(void)
        snprintf(buffer, 256, "/dev/parport%d", amt_jtagaccel_port);
        device_handle = open(buffer, O_RDWR);
 
-       if (device_handle < 0)
-       {
-               LOG_ERROR("cannot open device. check it exists and that user read and write rights are set");
+       if (device_handle < 0) {
+               LOG_ERROR(
+                       "cannot open device. check it exists and that user read and write rights are set");
                return ERROR_JTAG_INIT_FAILED;
        }
 
        i = ioctl(device_handle, PPCLAIM);
-       if (i < 0)
-       {
+       if (i < 0) {
                LOG_ERROR("cannot claim device");
                return ERROR_JTAG_INIT_FAILED;
        }
 
        i = IEEE1284_MODE_EPP;
-       i = ioctl(device_handle, PPSETMODE, & i);
-       if (i < 0)
-       {
+       i = ioctl(device_handle, PPSETMODE, &i);
+       if (i < 0) {
                LOG_ERROR(" cannot set compatible mode to device");
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -470,23 +477,22 @@ static int amt_jtagaccel_init(void)
        i = ioctl(device_handle, PPWCONTROL, &control_port);
 
 #else
-       if (amt_jtagaccel_port == 0)
-       {
+       if (amt_jtagaccel_port == 0) {
                amt_jtagaccel_port = 0x378;
                LOG_WARNING("No parport port specified, using default '0x378' (LPT1)");
        }
 
 #if PARPORT_USE_GIVEIO == 1
        if (amt_jtagaccel_get_giveio_access() != 0) {
-#else /* PARPORT_USE_GIVEIO */
+#else  /* PARPORT_USE_GIVEIO */
        if (ioperm(amt_jtagaccel_port, 5, 1) != 0) {
-#endif /* PARPORT_USE_GIVEIO */
+#endif /* PARPORT_USE_GIVEIO */
                LOG_ERROR("missing privileges for direct i/o");
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       /* prepare epp port */
-       /* clear timeout */
+       /* prepare epp port
+        * clear timeout */
        status_port = inb(amt_jtagaccel_port + 1);
        outb(status_port | 0x1, amt_jtagaccel_port + 1);
 
@@ -495,8 +501,7 @@ static int amt_jtagaccel_init(void)
        outb(0x04, amt_jtagaccel_port + 2);
 #endif
 
-       if (rtck_enabled)
-       {
+       if (rtck_enabled) {
                /* set RTCK enable bit */
                aw_control_fsm |= 0x02;
        }
@@ -505,10 +510,6 @@ static int amt_jtagaccel_init(void)
        aw_control_fsm |= 0x04;
        AMT_AW(aw_control_fsm);
 
-       int jtag_speed_var;
-       int retval = jtag_get_speed(&jtag_speed_var);
-       amt_jtagaccel_speed(jtag_speed_var);
-
        enum reset_types jtag_reset_config = jtag_get_reset_config();
        if (jtag_reset_config & RESET_TRST_OPEN_DRAIN)
                aw_control_rst &= ~0x8;
@@ -537,17 +538,13 @@ static int amt_jtagaccel_quit(void)
 
 COMMAND_HANDLER(amt_jtagaccel_handle_parport_port_command)
 {
-       if (CMD_ARGC == 1)
-       {
+       if (CMD_ARGC == 1) {
                /* only if the port wasn't overwritten by cmdline */
-               if (amt_jtagaccel_port == 0)
-               {
+               if (amt_jtagaccel_port == 0) {
                        uint16_t port;
                        COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], port);
                        amt_jtagaccel_port = port;
-               }
-               else
-               {
+               } else {
                        LOG_ERROR("The parport port was already configured!");
                        return ERROR_FAIL;
                }
@@ -560,21 +557,16 @@ COMMAND_HANDLER(amt_jtagaccel_handle_parport_port_command)
 
 COMMAND_HANDLER(amt_jtagaccel_handle_rtck_command)
 {
-       if (CMD_ARGC == 0)
-       {
-               command_print(CMD_CTX, "amt_jtagaccel RTCK feature %s", (rtck_enabled) ? "enabled" : "disabled");
+       if (CMD_ARGC == 0) {
+               command_print(CMD_CTX,
+                       "amt_jtagaccel RTCK feature %s",
+                       (rtck_enabled) ? "enabled" : "disabled");
                return ERROR_OK;
-       }
-       else
-       {
+       } else {
                if (strcmp(CMD_ARGV[0], "enabled") == 0)
-               {
                        rtck_enabled = 1;
-               }
                else
-               {
                        rtck_enabled = 0;
-               }
        }
 
        return ERROR_OK;

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)