aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorChristopher Head <chead@zaber.com>2018-07-17 13:55:55 -0700
committerTomas Vanek <vanekt@fbl.cz>2018-08-14 04:31:38 +0100
commitc6cc60e0e13590433162a8ebefa4861226ca2b4d (patch)
treef37b29f8d7ebac99fee19e082d4d702e2dd8470b /src/target/cortex_m.c
parent45f0c1591253f0c18fb8d41c6a572e1d81331053 (diff)
target/cortex_m: restore C_MASKINTS after reset
The cortex_m maskisr user-facing setting is not changed across a target reset. However, the in-core C_MASKINTS bit was always cleared as part of reset processing, meaning that a cortex_m maskisr on setting would not be respected after a reset. Set C_MASKINTS based on the user-facing setting value rather than always clearing it after reset. Change-Id: I5aa5b9dfde04a0fb9c6816fa55b5ef1faf39f8de Signed-off-by: Christopher Head <chead@zaber.com> Reviewed-on: http://openocd.zylin.com/4605 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r--src/target/cortex_m.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index f1869467..ca3dbec7 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -237,8 +237,11 @@ static int cortex_m_endreset_event(struct target *target)
return retval;
}
- /* clear any interrupt masking */
- cortex_m_write_debug_halt_mask(target, 0, C_MASKINTS);
+ /* Restore proper interrupt masking setting. */
+ if (cortex_m->isrmasking_mode == CORTEX_M_ISRMASK_ON)
+ cortex_m_write_debug_halt_mask(target, C_MASKINTS, 0);
+ else
+ cortex_m_write_debug_halt_mask(target, 0, C_MASKINTS);
/* Enable features controlled by ITM and DWT blocks, and catch only
* the vectors we were told to pay attention to.