From 5766efe0c3d02ae13256617bee7f39d76ed2fe41 Mon Sep 17 00:00:00 2001 From: Megan Wachs Date: Wed, 25 Jan 2017 11:35:57 -0800 Subject: [PATCH] riscv: Globally disable interrupts when running algorithms. --- src/target/riscv/riscv.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index e7ca09924..0987e6693 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -2696,6 +2696,18 @@ static int riscv_run_algorithm(struct target *target, int num_mem_params, } } + + // Disable Interrupts before attempting to run the algorithm. + // Is it possible/desirable to do this in the calling code instead? + uint64_t current_mstatus; + + register_get(&target->reg_cache->reg_list[REG_MSTATUS]); + current_mstatus = info->mstatus_actual; + current_mstatus = current_mstatus & ~((uint64_t) 0x8); + register_set((&target->reg_cache->reg_list[REG_MSTATUS]), (uint8_t*) ¤t_mstatus); + info->mstatus_actual = current_mstatus; + + /// Run algorithm LOG_DEBUG("resume at 0x%x", entry_point); if (riscv_resume(target, 0, entry_point, 0, 0) != ERROR_OK) {