]> git.sur5r.net Git - openocd/commit
Cortex-M: fix stale DHCSR cache values
authorChristopher Head <chead@zaber.com>
Tue, 3 Oct 2017 19:59:06 +0000 (12:59 -0700)
committerSpencer Oliver <spen@spen-soft.co.uk>
Fri, 27 Oct 2017 10:47:16 +0000 (11:47 +0100)
commit02df0abb547a71e34f7b5bee8ffbc4ded44572de
tree4d2ccabba1c5e702ef4cda7894797156b66ed979
parent079d78f7de917e33b58c5ea6147c818e573b3dc4
Cortex-M: fix stale DHCSR cache values

In cortex_m_assert_reset, in two locations, DHCSR is written directly
using mem_ap_write_u32. This means that the cached version,
target_to_cm(target)->dcb_dhcsr, is not updated when these writes are
performed, so subsequent writes to DHCSR that use
cortex_m_write_debug_halt_mask will change those bits back to their old
values which, unless modified in that particular invocation, come from
the cache. This causes an actual, observable bug on an STM32F7 in which
running “reset run” immediately after “program” can in some cases result
in execution proceeding with C_MASKINTS set (it is cleared on line 1021
but is then set immediately afterward in cortex_m_clear_halt), causing
failure of the application. Replace these mem_ap_write_u32 calls with
cortex_m_write_debug_halt_mask calls to do the same jobs.

Change-Id: Id35ca7f6057c2df2ba9cd67c53a73b50816d0b71
Signed-off-by: Christopher Head <chead@zaber.com>
Reviewed-on: http://openocd.zylin.com/4239
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/target/cortex_m.c