jtag: add jtag_flush_queue_sleep debug command
authorØyvind Harboe <oyvind.harboe@zylin.com>
Sat, 31 Jul 2010 19:45:56 +0000 (21:45 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 2 Aug 2010 07:54:06 +0000 (09:54 +0200)
it can be useful to throttle performance: test
differences in behavior, test performance effect
of long roundtrips.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/jtag/core.c
src/jtag/jtag.h
src/jtag/tcl.c

index 352985ff3f790d115b3028100d424ddc720ba640..1068681964ee379a858078f434c31174cd4f1f82 100644 (file)
@@ -46,6 +46,9 @@
 /// The number of JTAG queue flushes (for profiling and debugging purposes).
 static int jtag_flush_queue_count;
 
+// Sleep this # of ms after flushing the queue
+static int jtag_flush_queue_sleep = 0;
+
 static void jtag_add_scan_check(struct jtag_tap *active,
                void (*jtag_add_scan)(struct jtag_tap *active, int in_num_fields, const struct scan_field *in_fields, tap_state_t state),
                int in_num_fields, struct scan_field *in_fields, tap_state_t state);
@@ -129,6 +132,11 @@ static struct jtag_interface *jtag = NULL;
 /* configuration */
 struct jtag_interface *jtag_interface = NULL;
 
+void jtag_set_flush_queue_sleep(int ms)
+{
+       jtag_flush_queue_sleep = ms;
+}
+
 void jtag_set_error(int error)
 {
        if ((error == ERROR_OK) || (jtag_error != ERROR_OK))
@@ -826,6 +834,15 @@ void jtag_execute_queue_noclear(void)
 {
        jtag_flush_queue_count++;
        jtag_set_error(interface_jtag_execute_queue());
+
+       if (jtag_flush_queue_sleep > 0)
+       {
+               /* For debug purposes it can be useful to test performance
+                * or behavior when delaying after flushing the queue,
+                * e.g. to simulate long roundtrip times.
+                */
+               usleep(jtag_flush_queue_sleep * 1000);
+       }
 }
 
 int jtag_get_flush_queue_count(void)
index 3b0a145bb47af4413284824c01b35ad94f2d52bf..d6e49e0ac237a035307beff7b35033b347cb1849 100644 (file)
@@ -311,6 +311,10 @@ int  adapter_init(struct command_context* cmd_ctx);
 /// Shutdown the debug adapter upon program exit.
 int  adapter_quit(void);
 
+/// Set ms to sleep after jtag_execute_queue() flushes queue. Debug
+/// purposes.
+void jtag_set_flush_queue_sleep(int ms);
+
 /**
  * Initialize JTAG chain using only a RESET reset. If init fails,
  * try reset + init.
index ea6d07e341a34bf8a1eb6de45b8fc5416bed320b..69045c6001aaca6078575fd5be965ceaad7ec892 100644 (file)
@@ -1248,7 +1248,31 @@ COMMAND_HANDLER(handle_tms_sequence_command)
        return ERROR_OK;
 }
 
+COMMAND_HANDLER(handle_jtag_flush_queue_sleep)
+{
+       if (CMD_ARGC != 1)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+
+       int sleep_ms;
+       COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], sleep_ms);
+
+       jtag_set_flush_queue_sleep(sleep_ms);
+
+       return ERROR_OK;
+}
+
+
+
 static const struct command_registration jtag_command_handlers[] = {
+
+       {
+               .name = "jtag_flush_queue_sleep",
+               .handler = handle_jtag_flush_queue_sleep,
+               .mode = COMMAND_ANY,
+               .help = "For debug purposes(simulate long delays of interface) "
+                               "to test performance or change in behavior. Default 0ms.",
+               .usage = "[sleep in ms]",
+       },
        {
                .name = "jtag_rclk",
                .handler = handle_jtag_rclk_command,

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)