cortex_a/r/m: fix handling of un-examined cores
On multi-core systems, with some cores in power-down state, examination will fail for these cores. Make sure assert- and deassert_reset functions don't crash due to uninitialized variables. Change-Id: I472f8d19af2cd3c770c05f3e57a31b35a863b687 Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com> Reviewed-on: http://openocd.zylin.com/3552 Tested-by: jenkins Reviewed-by: Jiri Kastner <cz172638@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
committed by
Freddie Chopin
parent
75c3f4a25c
commit
0099430104
@@ -981,6 +981,18 @@ static int cortex_m_assert_reset(struct target *target)
|
||||
|
||||
bool srst_asserted = false;
|
||||
|
||||
if (!target_was_examined(target)) {
|
||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||
adapter_assert_reset();
|
||||
if (target->reset_halt)
|
||||
LOG_ERROR("Target not examined, will not halt after reset!");
|
||||
return ERROR_OK;
|
||||
} else {
|
||||
LOG_ERROR("Target not examined, reset NOT asserted!");
|
||||
return ERROR_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
if ((jtag_reset_config & RESET_HAS_SRST) &&
|
||||
(jtag_reset_config & RESET_SRST_NO_GATING)) {
|
||||
adapter_assert_reset();
|
||||
@@ -1101,7 +1113,8 @@ static int cortex_m_deassert_reset(struct target *target)
|
||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||
|
||||
if ((jtag_reset_config & RESET_HAS_SRST) &&
|
||||
!(jtag_reset_config & RESET_SRST_NO_GATING)) {
|
||||
!(jtag_reset_config & RESET_SRST_NO_GATING) &&
|
||||
target_was_examined(target)) {
|
||||
int retval = dap_dp_init(armv7m->debug_ap->dap);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_ERROR("DP initialisation failed");
|
||||
|
||||
Reference in New Issue
Block a user