jtag_vpi: fixed state transitions in "stableclocks"
In jtag_vpi_stableclocks() the TMS line needs to be set properly based on the current JTAG TAP state (TMS=1 in TAP_RESET state vs. TMS=0 in other cases). Change-Id: Id49622ba83015f97b61b6a896edde4448f1fbdc6 Signed-off-by: Jan Matyas <matyas@codasip.com> Reviewed-on: http://openocd.zylin.com/5151 Tested-by: jenkins Reviewed-by: Franck Jullien <franck.jullien@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>bscan_optimization
parent
6dab4c70c8
commit
b3d4c97b9f
|
@ -328,7 +328,27 @@ static int jtag_vpi_runtest(int cycles, tap_state_t state)
|
||||||
|
|
||||||
static int jtag_vpi_stableclocks(int cycles)
|
static int jtag_vpi_stableclocks(int cycles)
|
||||||
{
|
{
|
||||||
return jtag_vpi_queue_tdi(NULL, cycles, TAP_SHIFT);
|
uint8_t tms_bits[4];
|
||||||
|
int cycles_remain = cycles;
|
||||||
|
int nb_bits;
|
||||||
|
int retval;
|
||||||
|
const int CYCLES_ONE_BATCH = sizeof(tms_bits) * 8;
|
||||||
|
|
||||||
|
assert(cycles >= 0);
|
||||||
|
|
||||||
|
/* use TMS=1 in TAP RESET state, TMS=0 in all other stable states */
|
||||||
|
memset(&tms_bits, (tap_get_state() == TAP_RESET) ? 0xff : 0x00, sizeof(tms_bits));
|
||||||
|
|
||||||
|
/* send the TMS bits */
|
||||||
|
while (cycles_remain > 0) {
|
||||||
|
nb_bits = (cycles_remain < CYCLES_ONE_BATCH) ? cycles_remain : CYCLES_ONE_BATCH;
|
||||||
|
retval = jtag_vpi_tms_seq(tms_bits, nb_bits);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
cycles_remain -= nb_bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int jtag_vpi_execute_queue(void)
|
static int jtag_vpi_execute_queue(void)
|
||||||
|
|
Loading…
Reference in New Issue