Browse Source

rlink: fix reply counter to enable sending full buffers

dtc_queue.reply_index was wrongly being increased during out scans, causing
the queue to be sent before the out buffer was full. This patch increases
raw upload speed by 50% or so.

Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
tags/v0.6.0-rc1
Andreas Fritiofson 12 years ago
committed by Øyvind Harboe
parent
commit
5812ef2b73
1 changed files with 9 additions and 7 deletions
  1. +9
    -7
      src/jtag/drivers/rlink.c

+ 9
- 7
src/jtag/drivers/rlink.c View File

@@ -678,6 +678,10 @@ dtc_queue_run(void) {
uint8_t dtc_mask, tdo_mask;
uint8_t reply_buffer[USB_EP2IN_SIZE];

assert((dtc_queue.rq_head != 0) == (dtc_queue.reply_index > 0));
assert(dtc_queue.cmd_index < USB_EP2BANK_SIZE);
assert(dtc_queue.reply_index <= USB_EP2IN_SIZE);

retval = ERROR_OK;

if (dtc_queue.cmd_index < 1) return(retval);
@@ -807,8 +811,6 @@ dtc_queue_run(void) {
return(retval);
}



static
int
tap_state_queue_init(void) {
@@ -1232,6 +1234,7 @@ rlink_scan(
LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno));
exit(1);
}
dtc_queue.reply_index += (chunk_bits + 7) / 8;

tdi_bit_offset += chunk_bits;
}
@@ -1264,7 +1267,6 @@ rlink_scan(
dtc_mask >>= 1;
if (dtc_mask == 0) {
dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
dtc_queue.reply_index++;
x = 0;
dtc_mask = 1 << (8 - 1);
}
@@ -1298,6 +1300,8 @@ rlink_scan(
exit(1);
}

dtc_queue.reply_index++;

tdi_bit_offset += extra_bits;

if (type == SCAN_IN) {
@@ -1327,8 +1331,6 @@ rlink_scan(

dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
}

dtc_queue.reply_index++;
}

/* Schedule the last bit into the DTC command buffer */
@@ -1355,10 +1357,10 @@ rlink_scan(
exit(1);
}

dtc_queue.reply_index++;

dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1);

dtc_queue.reply_index++;
}

/* Move to pause state */


Loading…
Cancel
Save