From 567b3d6531ab9fa71064185a67efe884946a3754 Mon Sep 17 00:00:00 2001 From: Parshintsev Anatoly Date: Mon, 2 Sep 2024 20:50:33 +0300 Subject: [PATCH] target/riscv: do not check tdata1 readback when trigger is disabled when trigger is disabled - there is no point in reading the value back Signed-off-by: Parshintsev Anatoly --- src/target/riscv/riscv.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index 512f27bd4..d9d2839d8 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -669,6 +669,19 @@ static int stdtrig_set_tx_impl(struct target *target, unsigned int idx, return ERROR_OK; } +static int sdtrig_disable_trigger(struct target *target, unsigned int idx) +{ + // Select which trigger to use + if (riscv_reg_set(target, GDB_REGNO_TSELECT, idx) != ERROR_OK) + return ERROR_FAIL; + + // Disable the trigger by writing 0 to it + if (riscv_reg_set(target, GDB_REGNO_TDATA1, 0) != ERROR_OK) + return ERROR_FAIL; + + return ERROR_OK; +} + static int sdtrig_set_t1(struct target *target, unsigned int idx, riscv_reg_t tdata1, riscv_reg_t tdata1_ignore_mask) { @@ -897,10 +910,7 @@ static int try_setup_chained_match_triggers(struct target *target, return ERROR_OK; } /* Undo the setting of the previous trigger */ - // BUG: fixme. once tdata1 is written with zero - // we should not readback tdata1 - int ret_undo = sdtrig_set_t1t2(target, idx, - /* tdata1 */ 0, /* tdata2 */0, /* tdata1_mask */ 0); + int ret_undo = sdtrig_disable_trigger(target, idx); if (ret_undo != ERROR_OK) return ret_undo;