From: <oh...@ma...> - 2009-07-12 21:29:11
|
Author: oharboe Date: 2009-07-12 21:29:08 +0200 (Sun, 12 Jul 2009) New Revision: 2510 Modified: trunk/src/target/cortex_m3.c Log: 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 <da...@pa...> Modified: trunk/src/target/cortex_m3.c =================================================================== --- trunk/src/target/cortex_m3.c 2009-07-12 14:11:43 UTC (rev 2509) +++ trunk/src/target/cortex_m3.c 2009-07-12 19:29:08 UTC (rev 2510) @@ -512,16 +512,19 @@ } } - /* - 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; } |