diff options
author | Megan Wachs <megan@sifive.com> | 2017-01-25 21:51:02 -0800 |
---|---|---|
committer | Megan Wachs <megan@sifive.com> | 2017-01-25 21:51:02 -0800 |
commit | 5d82a395f13c70f44398d7a9cc44564806441a6e (patch) | |
tree | d80e9e8ade646ac8d2c328eef5ed4005a7edbfdc | |
parent | d5892f0ee5a30a1d6787d5e1a4114a976d9ce205 (diff) | |
download | riscv-openocd-5d82a395f13c70f44398d7a9cc44564806441a6e.zip riscv-openocd-5d82a395f13c70f44398d7a9cc44564806441a6e.tar.gz riscv-openocd-5d82a395f13c70f44398d7a9cc44564806441a6e.tar.bz2 |
riscv: disable interrupts for all priviledge levels
-rw-r--r-- | src/target/riscv/riscv.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index 11183ae..fb48ca6 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -2704,10 +2704,10 @@ static int riscv_run_algorithm(struct target *target, int num_mem_params, LOG_DEBUG("Disabling Interrupts"); register_get(&target->reg_cache->reg_list[REG_MSTATUS]); current_mstatus = buf_get_u64(target->reg_cache->reg_list[REG_MSTATUS].value, 0, info->xlen); - buf_set_u64(mstatus_bytes, 0, info->xlen, (current_mstatus & (~((uint64_t)MSTATUS_MIE))) ); + uint64_t ie_mask = MSTATUS_MIE | MSTATUS_HIE | MSTATUS_SIE | MSTATUS_UIE; + buf_set_u64(mstatus_bytes, 0, info->xlen, set_field(current_mstatus, ie_mask, 0)); register_set(&target->reg_cache->reg_list[REG_MSTATUS], mstatus_bytes); - info->mstatus_actual = current_mstatus & ~MSTATUS_MIE; /// Run algorithm LOG_DEBUG("resume at 0x%x", entry_point); @@ -2746,7 +2746,6 @@ static int riscv_run_algorithm(struct target *target, int num_mem_params, LOG_DEBUG("Restoring Interrupts"); buf_set_u64(mstatus_bytes, 0, info->xlen, current_mstatus); register_set(&target->reg_cache->reg_list[REG_MSTATUS], mstatus_bytes); - info->mstatus_actual = current_mstatus; /// Restore registers uint8_t buf[8]; |