Change tap_state naming to be consistent with SVF documentation.
[fw/openocd] / src / jtag / jlink.c
index 7f16f365e0c8b25256d22f394f2ab8addd537fd6..6d40b56dbd0d6304c5286a38de9e3629b553a721 100644 (file)
@@ -146,92 +146,92 @@ int jlink_execute_queue(void)
        int scan_size;
        enum scan_type type;
        u8 *buffer;
-       
+
        while (cmd != NULL)
        {
                switch (cmd->type)
                {
                        case JTAG_END_STATE:
                                DEBUG_JTAG_IO("end_state: %i", cmd->cmd.end_state->end_state);
-                       
+
                                if (cmd->cmd.end_state->end_state != -1)
                                {
                                        jlink_end_state(cmd->cmd.end_state->end_state);
                                }
                                break;
-       
+
                        case JTAG_RUNTEST:
                                DEBUG_JTAG_IO( "runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, \
                                        cmd->cmd.runtest->end_state);
-                               
+
                                if (cmd->cmd.runtest->end_state != -1)
                                {
                                        jlink_end_state(cmd->cmd.runtest->end_state);
                                }
                                jlink_runtest(cmd->cmd.runtest->num_cycles);
                                break;
-       
+
                        case JTAG_STATEMOVE:
                                DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
-                       
+
                                if (cmd->cmd.statemove->end_state != -1)
                                {
                                        jlink_end_state(cmd->cmd.statemove->end_state);
                                }
                                jlink_state_move();
                                break;
-       
+
                        case JTAG_PATHMOVE:
                                DEBUG_JTAG_IO("pathmove: %i states, end in %i", \
                                        cmd->cmd.pathmove->num_states, \
                                        cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
-                       
+
                                jlink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path);
                                break;
-       
+
                        case JTAG_SCAN:
                                DEBUG_JTAG_IO("scan end in %i", cmd->cmd.scan->end_state);
-                       
+
                                if (cmd->cmd.scan->end_state != -1)
                                {
                                        jlink_end_state(cmd->cmd.scan->end_state);
                                }
-                       
+
                                scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
                                DEBUG_JTAG_IO("scan input, length = %d", scan_size);
-                               
+
 #ifdef _DEBUG_USB_COMMS_
                                jlink_debug_buffer(buffer, (scan_size + 7) / 8);
 #endif
                                type = jtag_scan_type(cmd->cmd.scan);
                                jlink_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size, cmd->cmd.scan);
                                break;
-       
+
                        case JTAG_RESET:
                                DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
-                       
+
                                jlink_tap_execute();
-                       
+
                                if (cmd->cmd.reset->trst == 1)
                                {
-                                       cur_state = TAP_TLR;
+                                       cur_state = TAP_RESET;
                                }
                                jlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
                                break;
-       
+
                        case JTAG_SLEEP:
                                DEBUG_JTAG_IO("sleep %i", cmd->cmd.sleep->us);
                                jlink_tap_execute();
                                jtag_sleep(cmd->cmd.sleep->us);
                                break;
-       
+
                        default:
                                LOG_ERROR("BUG: unknown JTAG command type encountered");
                                exit(-1);
                }
                cmd = cmd->next;
        }
-       
+
        return jlink_tap_execute();
 }
 
@@ -239,19 +239,19 @@ int jlink_execute_queue(void)
 int jlink_speed(int speed)
 {
        int result;
-       
+
        if (speed <= JLINK_MAX_SPEED)
        {
                /* check for RTCK setting */
                if (speed == 0)
                        speed = -1;
-               
+
                usb_out_buffer[0] = EMU_CMD_SET_SPEED;
                usb_out_buffer[1] = (speed >> 0) & 0xff;
                usb_out_buffer[2] = (speed >> 8) & 0xff;
-               
+
                result = jlink_usb_write(jlink_jtag_handle, 3);
-               
+
                if (result == 3)
                {
                        return ERROR_OK;
@@ -266,14 +266,14 @@ int jlink_speed(int speed)
        {
                LOG_INFO("Requested speed %dkHz exceeds maximum of %dkHz, ignored", speed, JLINK_MAX_SPEED);
        }
-       
+
        return ERROR_OK;
 }
 
 int jlink_khz(int khz, int *jtag_speed)
 {
        *jtag_speed = khz;
-       
+
        return ERROR_OK;
 }
 
@@ -286,16 +286,16 @@ int jlink_register_commands(struct command_context_s *cmd_ctx)
 
 int jlink_init(void)
 {
-       int check_cnt;  
-       
+       int check_cnt;
+
        jlink_jtag_handle = jlink_usb_open();
-       
+
        if (jlink_jtag_handle == 0)
        {
                LOG_ERROR("Cannot find jlink Interface! Please check connection and permissions.");
                return ERROR_JTAG_INIT_FAILED;
        }
-               
+
        check_cnt = 0;
        while (check_cnt < 3)
        {
@@ -305,7 +305,7 @@ int jlink_init(void)
                        jlink_get_status();
                        break;
                }
-               
+
                check_cnt++;
        }
 
@@ -313,12 +313,12 @@ int jlink_init(void)
        {
                LOG_INFO("J-Link initial read failed, don't worry");
        }
-       
+
        LOG_INFO("J-Link JTAG Interface ready");
-       
+
        jlink_reset(0, 0);
        jlink_tap_init();
-       
+
        return ERROR_OK;
 }
 
@@ -350,20 +350,20 @@ void jlink_state_move(void)
        int i;
        int tms = 0;
        u8 tms_scan = TAP_MOVE(cur_state, end_state);
-       
+
        for (i = 0; i < 7; i++)
        {
                tms = (tms_scan >> i) & 1;
                jlink_tap_append_step(tms, 0);
        }
-       
+
        cur_state = end_state;
 }
 
 void jlink_path_move(int num_states, enum tap_state *path)
 {
        int i;
-       
+
        for (i = 0; i < num_states; i++)
        {
                if (path[i] == tap_transitions[cur_state].low)
@@ -379,32 +379,32 @@ void jlink_path_move(int num_states, enum tap_state *path)
                        LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_strings[cur_state], tap_state_strings[path[i]]);
                        exit(-1);
                }
-               
+
                cur_state = path[i];
        }
-       
+
        end_state = cur_state;
 }
 
 void jlink_runtest(int num_cycles)
 {
        int i;
-       
+
        enum tap_state saved_end_state = end_state;
-       
+
        /* only do a state_move when we're not already in RTI */
-       if (cur_state != TAP_RTI)
+       if (cur_state != TAP_IDLE)
        {
-               jlink_end_state(TAP_RTI);
+               jlink_end_state(TAP_IDLE);
                jlink_state_move();
        }
-       
+
        /* execute num_cycles */
        for (i = 0; i < num_cycles; i++)
        {
                jlink_tap_append_step(0, 0);
        }
-       
+
        /* finish in end_state */
        jlink_end_state(saved_end_state);
        if (cur_state != end_state)
@@ -416,25 +416,25 @@ void jlink_runtest(int num_cycles)
 void jlink_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command)
 {
        enum tap_state saved_end_state;
-       
+
        jlink_tap_ensure_space(1, scan_size + 8);
-       
+
        saved_end_state = end_state;
-       
+
        /* Move to appropriate scan state */
-       jlink_end_state(ir_scan ? TAP_SI : TAP_SD);
-       
+       jlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
+
        jlink_state_move();
        jlink_end_state(saved_end_state);
-       
+
        /* Scan */
        jlink_tap_append_scan(scan_size, buffer, command);
-       
+
        /* We are in Exit1, go to Pause */
        jlink_tap_append_step(0, 0);
-       
-       cur_state = ir_scan ? TAP_PI : TAP_PD;
-       
+
+       cur_state = ir_scan ? TAP_IRPAUSE : TAP_DRPAUSE;
+
        if (cur_state != end_state)
        {
                jlink_state_move();
@@ -444,7 +444,7 @@ void jlink_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size, sca
 void jlink_reset(int trst, int srst)
 {
        LOG_DEBUG("trst: %i, srst: %i", trst, srst);
-       
+
        /* Signals are active low */
        if (srst == 0)
        {
@@ -454,7 +454,7 @@ void jlink_reset(int trst, int srst)
        {
                jlink_simple_command(EMU_CMD_HW_RESET0);
        }
-       
+
        if (trst == 0)
        {
                jlink_simple_command(EMU_CMD_HW_TRST1);
@@ -468,12 +468,12 @@ void jlink_reset(int trst, int srst)
 void jlink_simple_command(u8 command)
 {
        int result;
-       
+
        DEBUG_JTAG_IO("0x%02x", command);
-       
+
        usb_out_buffer[0] = command;
        result = jlink_usb_write(jlink_jtag_handle, 1);
-       
+
        if (result != 1)
        {
                LOG_ERROR("J-Link command 0x%02x failed (%d)", command, result);
@@ -483,10 +483,10 @@ void jlink_simple_command(u8 command)
 int jlink_get_status(void)
 {
        int result;
-       
+
        jlink_simple_command(EMU_CMD_GET_STATE);
        result = jlink_usb_read(jlink_jtag_handle);
-       
+
        if (result == 8)
        {
                int vref = usb_in_buffer[0] + (usb_in_buffer[1] << 8);
@@ -494,7 +494,7 @@ int jlink_get_status(void)
                        vref / 1000, vref % 1000, \
                        usb_in_buffer[2], usb_in_buffer[3], usb_in_buffer[4], \
                        usb_in_buffer[5], usb_in_buffer[6], usb_in_buffer[7]);
-               
+
                if (vref < 1500)
                {
                        LOG_ERROR("Vref too low. Check Target Power\n");
@@ -504,7 +504,7 @@ int jlink_get_status(void)
        {
                LOG_ERROR("J-Link command EMU_CMD_GET_STATE failed (%d)\n", result);
        }
-       
+
        return ERROR_OK;
 }
 
@@ -512,16 +512,16 @@ int jlink_get_version_info(void)
 {
        int result;
        int len = 0;
-       
+
        /* query hardware version */
        jlink_simple_command(EMU_CMD_VERSION);
        result = jlink_usb_read(jlink_jtag_handle);
-       
+
        if (result == 2)
        {
                len = buf_get_u32(usb_in_buffer, 0, 16);
                result = jlink_usb_read(jlink_jtag_handle);
-               
+
                if (result == len)
                {
                        usb_in_buffer[result] = 0;
@@ -529,7 +529,7 @@ int jlink_get_version_info(void)
                        return ERROR_OK;
                }
        }
-       
+
        LOG_ERROR("J-Link command EMU_CMD_VERSION failed (%d)\n", result);
        return ERROR_JTAG_DEVICE_ERROR;
 }
@@ -541,7 +541,7 @@ int jlink_handle_jlink_info_command(struct command_context_s *cmd_ctx, char *cmd
                /* attempt to get status */
                jlink_get_status();
        }
-       
+
        return ERROR_OK;
 }
 
@@ -581,7 +581,7 @@ void jlink_tap_ensure_space(int scans, int bits)
 {
        int available_scans = MAX_PENDING_SCAN_RESULTS - pending_scan_results_length;
        int available_bits = JLINK_TAP_BUFFER_SIZE * 8 - tap_length;
-       
+
        if (scans > available_scans || bits > available_bits)
        {
                jlink_tap_execute();
@@ -592,12 +592,12 @@ void jlink_tap_append_step(int tms, int tdi)
 {
        last_tms = tms;
        int index = tap_length / 8;
-       
+
        if (index < JLINK_TAP_BUFFER_SIZE)
        {
                int bit_index = tap_length % 8;
                u8 bit = 1 << bit_index;
-               
+
                if (tms)
                {
                        tms_buffer[index] |= bit;
@@ -606,7 +606,7 @@ void jlink_tap_append_step(int tms, int tdi)
                {
                        tms_buffer[index] &= ~bit;
                }
-               
+
                if (tdi)
                {
                        tdi_buffer[index] |= bit;
@@ -615,7 +615,7 @@ void jlink_tap_append_step(int tms, int tdi)
                {
                        tdi_buffer[index] &= ~bit;
                }
-               
+
                tap_length++;
        }
        else
@@ -628,12 +628,12 @@ void jlink_tap_append_scan(int length, u8 *buffer, scan_command_t *command)
 {
        pending_scan_result_t *pending_scan_result = &pending_scan_results_buffer[pending_scan_results_length];
        int i;
-       
+
        pending_scan_result->first = tap_length;
        pending_scan_result->length = length;
        pending_scan_result->command = command;
        pending_scan_result->buffer = buffer;
-       
+
        for (i = 0; i < length; i++)
        {
                jlink_tap_append_step((i < length-1 ? 0 : 1), (buffer[i/8] >> (i%8)) & 1);
@@ -650,7 +650,7 @@ int jlink_tap_execute(void)
        int tdi_offset;
        int i;
        int result;
-       
+
        if (tap_length > 0)
        {
                /* Pad last byte so that tap_length is divisible by 8 */
@@ -660,35 +660,35 @@ int jlink_tap_execute(void)
                         * analogous to free-running JTAG interfaces. */
                        jlink_tap_append_step(last_tms, 0);
                }
-       
+
                byte_length = tap_length / 8;
-       
+
                usb_out_buffer[0] = EMU_CMD_HW_JTAG3;
                usb_out_buffer[1] = 0;
                usb_out_buffer[2] = (tap_length >> 0) & 0xff;
                usb_out_buffer[3] = (tap_length >> 8) & 0xff;
-       
+
                tms_offset = 4;
                for (i = 0; i < byte_length; i++)
                {
                        usb_out_buffer[tms_offset + i] = tms_buffer[i];
                }
-               
+
                tdi_offset = tms_offset + byte_length;
                for (i = 0; i < byte_length; i++)
                {
                        usb_out_buffer[tdi_offset + i] = tdi_buffer[i];
                }
-       
+
                result = jlink_usb_message(jlink_jtag_handle, 4 + 2 * byte_length, byte_length);
-       
+
                if (result == byte_length)
                {
                        for (i = 0; i < byte_length; i++)
                        {
                                tdo_buffer[i] = usb_in_buffer[i];
                        }
-                       
+
                        for (i = 0; i < pending_scan_results_length; i++)
                        {
                                pending_scan_result_t *pending_scan_result = &pending_scan_results_buffer[i];
@@ -696,22 +696,22 @@ int jlink_tap_execute(void)
                                int length = pending_scan_result->length;
                                int first = pending_scan_result->first;
                                scan_command_t *command = pending_scan_result->command;
-       
+
                                /* Copy to buffer */
                                buf_set_buf(tdo_buffer, first, buffer, 0, length);
-       
+
                                DEBUG_JTAG_IO("pending scan result, length = %d", length);
-                               
+
 #ifdef _DEBUG_USB_COMMS_
                                jlink_debug_buffer(buffer, byte_length);
 #endif
-       
+
                                if (jtag_read_buffer(buffer, command) != ERROR_OK)
                                {
                                        jlink_tap_init();
                                        return ERROR_JTAG_QUEUE_FAILED;
                                }
-               
+
                                if (pending_scan_result->buffer != NULL)
                                {
                                        free(pending_scan_result->buffer);
@@ -723,10 +723,10 @@ int jlink_tap_execute(void)
                        LOG_ERROR("jlink_tap_execute, wrong result %d, expected %d", result, byte_length);
                        return ERROR_JTAG_QUEUE_FAILED;
                }
-               
+
                jlink_tap_init();
        }
-       
+
        return ERROR_OK;
 }
 
@@ -738,19 +738,19 @@ jlink_jtag_t* jlink_usb_open()
        struct usb_bus *busses;
        struct usb_bus *bus;
        struct usb_device *dev;
-       
+
        jlink_jtag_t *result;
-       
+
        result = (jlink_jtag_t*) malloc(sizeof(jlink_jtag_t));
-       
+
        usb_init();
        usb_find_busses();
        usb_find_devices();
-       
+
        busses = usb_get_busses();
-       
+
        /* find jlink_jtag device in usb bus */
-       
+
        for (bus = busses; bus; bus = bus->next)
        {
                for (dev = bus->devices; dev; dev = dev->next)
@@ -758,23 +758,23 @@ jlink_jtag_t* jlink_usb_open()
                        if ((dev->descriptor.idVendor == VID) && (dev->descriptor.idProduct == PID))
                        {
                                result->usb_handle = usb_open(dev);
-                               
+
                                /* usb_set_configuration required under win32 */
                                usb_set_configuration(result->usb_handle, dev->config[0].bConfigurationValue);
                                usb_claim_interface(result->usb_handle, 0);
-                               
+
 #if 0
-                               /* 
+                               /*
                                 * This makes problems under Mac OS X. And is not needed
                                 * under Windows. Hopefully this will not break a linux build
                                 */
                                usb_set_altinterface(result->usb_handle, 0);
-#endif                         
+#endif
                                return result;
                        }
                }
        }
-       
+
        free(result);
        return NULL;
 }
@@ -790,7 +790,7 @@ int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_length)
 {
        int result;
        int result2;
-       
+
        result = jlink_usb_write(jlink_jtag, out_length);
        if (result == out_length)
        {
@@ -811,7 +811,7 @@ int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_length)
                                        else
                                        {
                                                LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]);
-                                               return -1;                              
+                                               return -1;
                                        }
                                }
                                else
@@ -830,7 +830,7 @@ int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_length)
                                else
                                {
                                        LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_in_buffer[result]);
-                                       return -1;                              
+                                       return -1;
                                }
                        }
                }
@@ -851,18 +851,18 @@ int jlink_usb_message(jlink_jtag_t *jlink_jtag, int out_length, int in_length)
 int jlink_usb_write(jlink_jtag_t *jlink_jtag, int out_length)
 {
        int result;
-       
+
        if (out_length > JLINK_OUT_BUFFER_SIZE)
        {
                LOG_ERROR("jlink_jtag_write illegal out_length=%d (max=%d)", out_length, JLINK_OUT_BUFFER_SIZE);
                return -1;
        }
-       
+
        result = usb_bulk_write(jlink_jtag->usb_handle, JLINK_WRITE_ENDPOINT, \
                usb_out_buffer, out_length, JLINK_USB_TIMEOUT);
-       
+
        DEBUG_JTAG_IO("jlink_usb_write, out_length = %d, result = %d", out_length, result);
-       
+
 #ifdef _DEBUG_USB_COMMS_
        jlink_debug_buffer(usb_out_buffer, out_length);
 #endif
@@ -876,7 +876,7 @@ int jlink_usb_read(jlink_jtag_t *jlink_jtag)
                usb_in_buffer, JLINK_IN_BUFFER_SIZE, JLINK_USB_TIMEOUT);
 
        DEBUG_JTAG_IO("jlink_usb_read, result = %d", result);
-       
+
 #ifdef _DEBUG_USB_COMMS_
        jlink_debug_buffer(usb_in_buffer, result);
 #endif
@@ -890,7 +890,7 @@ int jlink_usb_read_emu_result(jlink_jtag_t *jlink_jtag)
                usb_emu_result_buffer, JLINK_EMU_RESULT_BUFFER_SIZE, JLINK_USB_TIMEOUT);
 
        DEBUG_JTAG_IO("jlink_usb_read_result, result = %d", result);
-       
+
 #ifdef _DEBUG_USB_COMMS_
        jlink_debug_buffer(usb_emu_result_buffer, result);
 #endif
@@ -906,7 +906,7 @@ void jlink_debug_buffer(u8 *buffer, int length)
        char s[4];
        int i;
        int j;
-       
+
        for (i = 0; i < length; i += BYTES_PER_LINE)
        {
                snprintf(line, 5, "%04x", i);