Rename jtag_add_end_state to jtag_set_end_state since "add" implies that
[openocd.git] / src / jtag / jtag.c
index fca603657ff53630484a125c84b6eda715c02f49..dd0d27f3b66fc85f849914fd215fbc432a984639 100644 (file)
@@ -385,22 +385,18 @@ int jtag_call_event_callbacks(enum jtag_event event)
        return ERROR_OK;
 }
 
-static void jtag_prelude1(void)
+static void jtag_checks(void)
 {
        assert(jtag_trst == 0);
-
-       if (cmd_queue_end_state == TAP_RESET)
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
 }
 
 static void jtag_prelude(tap_state_t state)
 {
-       jtag_prelude1();
+       jtag_checks();
 
-       if (state != TAP_INVALID)
-               jtag_add_end_state(state);
+       assert(state!=TAP_INVALID);
 
-       cmd_queue_cur_state = cmd_queue_end_state;
+       cmd_queue_cur_state = state;
 }
 
 void jtag_alloc_in_value32(scan_field_t *field)
@@ -413,7 +409,7 @@ void jtag_add_ir_scan_noverify(int in_num_fields, const scan_field_t *in_fields,
        int retval;
        jtag_prelude(state);
 
-       retval=interface_jtag_add_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
+       retval=interface_jtag_add_ir_scan(in_num_fields, in_fields, state);
        if (retval!=ERROR_OK)
                jtag_error=retval;
 
@@ -462,7 +458,7 @@ void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields, ta
 
        jtag_prelude(state);
 
-       retval=interface_jtag_add_plain_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
+       retval=interface_jtag_add_plain_ir_scan(in_num_fields, in_fields, state);
        if (retval!=ERROR_OK)
                jtag_error=retval;
 }
@@ -550,7 +546,7 @@ void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields, tap_stat
 
        jtag_prelude(state);
 
-       retval=interface_jtag_add_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
+       retval=interface_jtag_add_dr_scan(in_num_fields, in_fields, state);
        if (retval!=ERROR_OK)
                jtag_error=retval;
 }
@@ -569,7 +565,7 @@ void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields, ta
 
        jtag_prelude(state);
 
-       retval=interface_jtag_add_plain_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
+       retval=interface_jtag_add_plain_dr_scan(in_num_fields, in_fields, state);
        if (retval!=ERROR_OK)
                jtag_error=retval;
 }
@@ -578,14 +574,13 @@ void jtag_add_dr_out(jtag_tap_t* tap,
                int num_fields, const int* num_bits, const u32* value,
                tap_state_t end_state)
 {
-       if (end_state != TAP_INVALID)
-               cmd_queue_end_state = end_state;
+       assert(end_state != TAP_INVALID);
 
-       cmd_queue_cur_state = cmd_queue_end_state;
+       cmd_queue_cur_state = end_state;
 
        interface_jtag_add_dr_out(tap,
                        num_fields, num_bits, value,
-                       cmd_queue_end_state);
+                       end_state);
 }
 
 void jtag_add_tlr(void)
@@ -596,6 +591,8 @@ void jtag_add_tlr(void)
        retval=interface_jtag_add_tlr();
        if (retval!=ERROR_OK)
                jtag_error=retval;
+       
+       jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
 }
 
 void jtag_add_pathmove(int num_states, const tap_state_t *path)
@@ -628,7 +625,7 @@ void jtag_add_pathmove(int num_states, const tap_state_t *path)
                cur_state = path[i];
        }
 
-       jtag_prelude1();
+       jtag_checks();
 
        retval = interface_jtag_add_pathmove(num_states, path);
        cmd_queue_cur_state = path[num_states - 1];
@@ -643,7 +640,7 @@ void jtag_add_runtest(int num_cycles, tap_state_t state)
        jtag_prelude(state);
 
        /* executed by sw or hw fifo */
-       retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);
+       retval=interface_jtag_add_runtest(num_cycles, state);
        if (retval!=ERROR_OK)
                jtag_error=retval;
 }
@@ -663,7 +660,7 @@ void jtag_add_clocks( int num_cycles )
 
        if( num_cycles > 0 )
        {
-               jtag_prelude1();
+               jtag_checks();
 
                retval = interface_jtag_add_clocks(num_cycles);
                if (retval != ERROR_OK)
@@ -753,9 +750,8 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
        if (trst_with_tlr)
        {
                LOG_DEBUG("JTAG reset with RESET instead of TRST");
-               jtag_add_end_state(TAP_RESET);
+               jtag_set_end_state(TAP_RESET);
                jtag_add_tlr();
-               jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
                return;
        }
 
@@ -775,13 +771,21 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
        }
 }
 
-void jtag_add_end_state(tap_state_t state)
+tap_state_t jtag_set_end_state(tap_state_t state)
 {
-       cmd_queue_end_state = state;
-       if ((cmd_queue_end_state == TAP_DRSHIFT)||(cmd_queue_end_state == TAP_IRSHIFT))
+       if ((state == TAP_DRSHIFT)||(state == TAP_IRSHIFT))
        {
                LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
        }
+
+       if (state!=TAP_INVALID)
+               cmd_queue_end_state = state;
+       return cmd_queue_end_state;
+}
+
+tap_state_t jtag_get_end_state(void)
+{
+       return cmd_queue_end_state;
 }
 
 void jtag_add_sleep(u32 us)
@@ -2175,7 +2179,7 @@ static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd,
                        command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
-               jtag_add_end_state(state);
+               jtag_set_end_state(state);
                jtag_execute_queue();
        }
        command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state));
@@ -2227,7 +2231,7 @@ static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd,
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       jtag_add_runtest(strtol(args[0], NULL, 0), TAP_INVALID);
+       jtag_add_runtest(strtol(args[0], NULL, 0), jtag_get_end_state());
        jtag_execute_queue();
 
        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)