v8m: only check relevant bits in DHCSR when polling in cortexm_forced_halt

This commit is contained in:
Fredrik Ahlberg 2020-07-12 12:07:12 +02:00
parent a35e9c8e5c
commit 39a20d78ff

View File

@ -269,16 +269,17 @@ static bool cortexm_forced_halt(target *t)
platform_srst_set_val(false); platform_srst_set_val(false);
uint32_t dhcsr = 0; uint32_t dhcsr = 0;
uint32_t start_time = platform_time_ms(); uint32_t start_time = platform_time_ms();
const uint32_t dhcsr_halted_bits = CORTEXM_DHCSR_S_HALT | CORTEXM_DHCSR_S_REGRDY |
CORTEXM_DHCSR_C_HALT | CORTEXM_DHCSR_C_DEBUGEN;
/* Try hard to halt the target. STM32F7 in WFI /* Try hard to halt the target. STM32F7 in WFI
needs multiple writes!*/ needs multiple writes!*/
while (platform_time_ms() < start_time + cortexm_wait_timeout) { while (platform_time_ms() < start_time + cortexm_wait_timeout) {
dhcsr = target_mem_read32(t, CORTEXM_DHCSR); dhcsr = target_mem_read32(t, CORTEXM_DHCSR);
if (dhcsr == (CORTEXM_DHCSR_S_HALT | CORTEXM_DHCSR_S_REGRDY | if ((dhcsr & dhcsr_halted_bits) == dhcsr_halted_bits)
CORTEXM_DHCSR_C_HALT | CORTEXM_DHCSR_C_DEBUGEN))
break; break;
target_halt_request(t); target_halt_request(t);
} }
if (dhcsr != 0x00030003) if ((dhcsr & dhcsr_halted_bits) != dhcsr_halted_bits)
return false; return false;
return true; return true;
} }