summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-07-12 19:29:08 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-07-12 19:29:08 +0000
commit519896811600849b27f0803e08ee5f9152423f24 (patch)
tree399a279880246e825561d6f0ebaadd4d14544bce /src/target
parent14ed84fdbec4ec29665caac29a40fcff6c4ffd80 (diff)
downloadopenocd+libswd-519896811600849b27f0803e08ee5f9152423f24.tar.gz
openocd+libswd-519896811600849b27f0803e08ee5f9152423f24.tar.bz2
openocd+libswd-519896811600849b27f0803e08ee5f9152423f24.tar.xz
openocd+libswd-519896811600849b27f0803e08ee5f9152423f24.zip
Magnus Lundin Thc cortex_m3_poll function does not identify that a target is running unless we transition from RESET.
This patch correctly identifies a running target. Patch made a tad more palatable by David Brownell <david-b@pacbell.net> git-svn-id: svn://svn.berlios.de/openocd/trunk@2510 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target')
-rw-r--r--src/target/cortex_m3.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c
index 5789870f..53ecd0a9 100644
--- a/src/target/cortex_m3.c
+++ b/src/target/cortex_m3.c
@@ -512,16 +512,19 @@ int cortex_m3_poll(target_t *target)
}
}
- /*
- if (cortex_m3->dcb_dhcsr & S_SLEEP)
- target->state = TARGET_SLEEP;
- */
+ /* REVISIT when S_SLEEP is set, it's in a Sleep or DeepSleep state.
+ * How best to model low power modes?
+ */
-#if 0
- /* Read Debug Fault Status Register, added to figure out the lockup when running flashtest.script */
- mem_ap_read_atomic_u32(swjdp, NVIC_DFSR, &cortex_m3->nvic_dfsr);
- LOG_DEBUG("dcb_dhcsr 0x%x, nvic_dfsr 0x%x, target->state: %s", cortex_m3->dcb_dhcsr, cortex_m3->nvic_dfsr, target_state_name(target));
-#endif
+ if (target->state == TARGET_UNKNOWN)
+ {
+ /* check if processor is retiring instructions */
+ if (cortex_m3->dcb_dhcsr & S_RETIRE_ST)
+ {
+ target->state = TARGET_RUNNING;
+ return ERROR_OK;
+ }
+ }
return ERROR_OK;
}