aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorMathias K <kesmtp@freenet.de>2013-02-26 17:24:41 +0100
committerFreddie Chopin <freddie.chopin@gmail.com>2014-06-28 18:50:53 +0000
commit7c101b9e31e454b25d88adeca7440ae6ce7620f5 (patch)
treedb4952c4622e3d10c743c3be2e554cff376344b2 /src/target/cortex_m.c
parent52b80fbd82d80425863823b3fe26d47a702febb0 (diff)
downloadriscv-openocd-7c101b9e31e454b25d88adeca7440ae6ce7620f5.zip
riscv-openocd-7c101b9e31e454b25d88adeca7440ae6ce7620f5.tar.gz
riscv-openocd-7c101b9e31e454b25d88adeca7440ae6ce7620f5.tar.bz2
Add error handling and remove double readout.
Remove double readout of DCB_DHCSR in target poll. The return value of the endreset event is handled and not ignored in target poll. Change-Id: I8fe026418dadcf0b0dcbb09acee871ad950937a2 Signed-off-by: Mathias K <kesmtp@freenet.de> Reviewed-on: http://openocd.zylin.com/1181 Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r--src/target/cortex_m.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 103ce50..aafc097 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -521,15 +521,8 @@ static int cortex_m_poll(struct target *target)
}
if (cortex_m->dcb_dhcsr & S_RESET_ST) {
- /* check if still in reset */
- retval = mem_ap_read_atomic_u32(swjdp, DCB_DHCSR, &cortex_m->dcb_dhcsr);
- if (retval != ERROR_OK)
- return retval;
-
- if (cortex_m->dcb_dhcsr & S_RESET_ST) {
- target->state = TARGET_RESET;
- return ERROR_OK;
- }
+ target->state = TARGET_RESET;
+ return ERROR_OK;
}
if (target->state == TARGET_RESET) {
@@ -538,7 +531,11 @@ static int cortex_m_poll(struct target *target)
*/
LOG_DEBUG("Exit from reset with dcb_dhcsr 0x%" PRIx32,
cortex_m->dcb_dhcsr);
- cortex_m_endreset_event(target);
+ retval = cortex_m_endreset_event(target);
+ if (retval != ERROR_OK) {
+ target->state = TARGET_UNKNOWN;
+ return retval;
+ }
target->state = TARGET_RUNNING;
prev_target_state = TARGET_RUNNING;
}