diff options
author | Mathias K <kesmtp@freenet.de> | 2013-02-26 17:24:41 +0100 |
---|---|---|
committer | Freddie Chopin <freddie.chopin@gmail.com> | 2014-06-28 18:50:53 +0000 |
commit | 7c101b9e31e454b25d88adeca7440ae6ce7620f5 (patch) | |
tree | db4952c4622e3d10c743c3be2e554cff376344b2 /src/target/cortex_m.c | |
parent | 52b80fbd82d80425863823b3fe26d47a702febb0 (diff) |
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.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 103ce502..aafc097a 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; } |