diff options
author | Andreas Fritiofson <andreas.fritiofson@gmail.com> | 2011-07-16 14:30:20 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2011-08-10 06:52:09 +0200 |
commit | 5812ef2b73db2f513f9c42d6cf4b695268d04d69 (patch) | |
tree | efe68c5534e17d266218981d2d1f222b94630e80 /src | |
parent | 6f1641a5cc132fa88fa18f5571d2d29330308a55 (diff) |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/drivers/rlink.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/jtag/drivers/rlink.c b/src/jtag/drivers/rlink.c index ae3431be..d0b18b1b 100644 --- a/src/jtag/drivers/rlink.c +++ b/src/jtag/drivers/rlink.c @@ -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 */ |