diff --git a/src/target/riscv/batch.c b/src/target/riscv/batch.c index ec68b3798..0c18a0ad0 100644 --- a/src/target/riscv/batch.c +++ b/src/target/riscv/batch.c @@ -11,7 +11,7 @@ #include "field_helpers.h" // TODO: DTM_DMI_MAX_ADDRESS_LENGTH should be reduced to 32 (per the debug spec) -#define DTM_DMI_MAX_ADDRESS_LENGTH ((1<used_scans; ++i) { if (bscan_tunnel_ir_width != 0) riscv_add_bscan_tunneled_scan(batch->target->tap, batch->fields + i, - batch->bscan_ctxt + i); + batch->bscan_ctxt + i); else jtag_add_dr_scan(batch->target->tap, 1, batch->fields + i, TAP_IDLE); - delay = get_delay(batch, i, delays, resets_delays, - reset_delays_after); - if (delay > 0) - jtag_add_runtest(delay, TAP_IDLE); + //conditional execution + const unsigned int out_op = buf_get_u32(batch->fields->out_value, + DTM_DMI_OP_OFFSET, DTM_DMI_OP_LENGTH); + + if (out_op == DTM_DMI_OP_NOP) { + LOG_TARGET_DEBUG(batch->target, "Skipping RTI for DMI NOP at scan %zu", i); + /* leave delay == 0 so batch->last_scan_delay becomes 0 for this run */ + delay = 0; + } else { + delay = get_delay(batch, i, delays, resets_delays, + reset_delays_after); + if (delay > 0) + jtag_add_runtest(delay, TAP_IDLE); + } } keep_alive();