Browse Source

jtag: add jtag_flush_queue_sleep debug command

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>
tags/v0.5.0-rc1
Øyvind Harboe 13 years ago
parent
commit
803351ec59
3 changed files with 45 additions and 0 deletions
  1. +17
    -0
      src/jtag/core.c
  2. +4
    -0
      src/jtag/jtag.h
  3. +24
    -0
      src/jtag/tcl.c

+ 17
- 0
src/jtag/core.c View 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)


+ 4
- 0
src/jtag/jtag.h View 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.


+ 24
- 0
src/jtag/tcl.c View 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,


Loading…
Cancel
Save