From f9ef41bf7622d65a14066056eda3876a0b9d29cc Mon Sep 17 00:00:00 2001 From: Biancaa Ramesh Date: Fri, 7 Nov 2025 23:47:00 +0530 Subject: [PATCH] riscv: add batch.c and batch.h for skip-rti-nop sequence handling This patch introduces batch.c and batch.h to implement the skip-rti-nop mechanism for RISC-V DTM transactions. The new logic optimizes DMI command batching by skipping redundant RTI and NOP sequences, improving overall debug interface efficiency. Files added: - src/target/riscv/batch.c - src/target/riscv/batch.h Signed-off-by: Biancaa-R --- src/target/riscv/batch.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/target/riscv/batch.c b/src/target/riscv/batch.c index ec68b3798f..0c18a0ad0b 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();