cortex_m: use LOG_TARGET_XXX
Change-Id: I8be0f67442644031e6e8df3090d81af195caf82b Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6672 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
f583f338b0
commit
4906176c77
|
@ -185,7 +185,7 @@ static int cortex_m_load_core_reg_u32(struct target *target,
|
||||||
break;
|
break;
|
||||||
cortex_m->slow_register_read = true; /* Polling (still) needed. */
|
cortex_m->slow_register_read = true; /* Polling (still) needed. */
|
||||||
if (timeval_ms() > then + DHCSR_S_REGRDY_TIMEOUT) {
|
if (timeval_ms() > then + DHCSR_S_REGRDY_TIMEOUT) {
|
||||||
LOG_ERROR("Timeout waiting for DCRDR transfer ready");
|
LOG_TARGET_ERROR(target, "Timeout waiting for DCRDR transfer ready");
|
||||||
return ERROR_TIMEOUT_REACHED;
|
return ERROR_TIMEOUT_REACHED;
|
||||||
}
|
}
|
||||||
keep_alive();
|
keep_alive();
|
||||||
|
@ -223,7 +223,7 @@ static int cortex_m_slow_read_all_regs(struct target *target)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cortex_m->slow_register_read)
|
if (!cortex_m->slow_register_read)
|
||||||
LOG_DEBUG("Switching back to fast register reads");
|
LOG_TARGET_DEBUG(target, "Switching back to fast register reads");
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ static int cortex_m_fast_read_all_regs(struct target *target)
|
||||||
for (unsigned int i = 0; i < wi; i++) {
|
for (unsigned int i = 0; i < wi; i++) {
|
||||||
if ((dhcsr[i] & S_REGRDY) == 0) {
|
if ((dhcsr[i] & S_REGRDY) == 0) {
|
||||||
not_ready = true;
|
not_ready = true;
|
||||||
LOG_DEBUG("Register %u was not ready during fast read", i);
|
LOG_TARGET_DEBUG(target, "Register %u was not ready during fast read", i);
|
||||||
}
|
}
|
||||||
cortex_m_cumulate_dhcsr_sticky(cortex_m, dhcsr[i]);
|
cortex_m_cumulate_dhcsr_sticky(cortex_m, dhcsr[i]);
|
||||||
}
|
}
|
||||||
|
@ -330,7 +330,7 @@ static int cortex_m_fast_read_all_regs(struct target *target)
|
||||||
return ERROR_TIMEOUT_REACHED;
|
return ERROR_TIMEOUT_REACHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("read %u 32-bit registers", wi);
|
LOG_TARGET_DEBUG(target, "read %u 32-bit registers", wi);
|
||||||
|
|
||||||
unsigned int ri = 0; /* read index from r_vals array */
|
unsigned int ri = 0; /* read index from r_vals array */
|
||||||
for (reg_id = 0; reg_id < num_regs; reg_id++) {
|
for (reg_id = 0; reg_id < num_regs; reg_id++) {
|
||||||
|
@ -403,7 +403,7 @@ static int cortex_m_store_core_reg_u32(struct target *target,
|
||||||
if (cortex_m->dcb_dhcsr & S_REGRDY)
|
if (cortex_m->dcb_dhcsr & S_REGRDY)
|
||||||
break;
|
break;
|
||||||
if (timeval_ms() > then + DHCSR_S_REGRDY_TIMEOUT) {
|
if (timeval_ms() > then + DHCSR_S_REGRDY_TIMEOUT) {
|
||||||
LOG_ERROR("Timeout waiting for DCRDR transfer ready");
|
LOG_TARGET_ERROR(target, "Timeout waiting for DCRDR transfer ready");
|
||||||
return ERROR_TIMEOUT_REACHED;
|
return ERROR_TIMEOUT_REACHED;
|
||||||
}
|
}
|
||||||
keep_alive();
|
keep_alive();
|
||||||
|
@ -528,7 +528,7 @@ static int cortex_m_clear_halt(struct target *target)
|
||||||
retval = mem_ap_write_atomic_u32(armv7m->debug_ap, NVIC_DFSR, cortex_m->nvic_dfsr);
|
retval = mem_ap_write_atomic_u32(armv7m->debug_ap, NVIC_DFSR, cortex_m->nvic_dfsr);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
LOG_DEBUG(" NVIC_DFSR 0x%" PRIx32 "", cortex_m->nvic_dfsr);
|
LOG_TARGET_DEBUG(target, "NVIC_DFSR 0x%" PRIx32 "", cortex_m->nvic_dfsr);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -550,7 +550,7 @@ static int cortex_m_single_step_core(struct target *target)
|
||||||
retval = cortex_m_write_debug_halt_mask(target, C_STEP, C_HALT);
|
retval = cortex_m_write_debug_halt_mask(target, C_STEP, C_HALT);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
LOG_DEBUG(" ");
|
LOG_TARGET_DEBUG(target, "single step");
|
||||||
|
|
||||||
/* restore dhcsr reg */
|
/* restore dhcsr reg */
|
||||||
cortex_m_clear_halt(target);
|
cortex_m_clear_halt(target);
|
||||||
|
@ -590,7 +590,7 @@ static int cortex_m_endreset_event(struct target *target)
|
||||||
retval = mem_ap_read_atomic_u32(armv7m->debug_ap, DCB_DEMCR, &dcb_demcr);
|
retval = mem_ap_read_atomic_u32(armv7m->debug_ap, DCB_DEMCR, &dcb_demcr);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
LOG_DEBUG("DCB_DEMCR = 0x%8.8" PRIx32 "", dcb_demcr);
|
LOG_TARGET_DEBUG(target, "DCB_DEMCR = 0x%8.8" PRIx32 "", dcb_demcr);
|
||||||
|
|
||||||
/* this register is used for emulated dcc channel */
|
/* this register is used for emulated dcc channel */
|
||||||
retval = mem_ap_write_u32(armv7m->debug_ap, DCB_DCRDR, 0);
|
retval = mem_ap_write_u32(armv7m->debug_ap, DCB_DCRDR, 0);
|
||||||
|
@ -629,7 +629,7 @@ static int cortex_m_endreset_event(struct target *target)
|
||||||
/* Enable FPB */
|
/* Enable FPB */
|
||||||
retval = cortex_m_enable_fpb(target);
|
retval = cortex_m_enable_fpb(target);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Failed to enable the FPB");
|
LOG_TARGET_ERROR(target, "Failed to enable the FPB");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -766,7 +766,7 @@ static int cortex_m_examine_exception_reason(struct target *target)
|
||||||
}
|
}
|
||||||
retval = dap_run(swjdp);
|
retval = dap_run(swjdp);
|
||||||
if (retval == ERROR_OK)
|
if (retval == ERROR_OK)
|
||||||
LOG_DEBUG("%s SHCSR 0x%" PRIx32 ", SR 0x%" PRIx32
|
LOG_TARGET_DEBUG(target, "%s SHCSR 0x%" PRIx32 ", SR 0x%" PRIx32
|
||||||
", CFSR 0x%" PRIx32 ", AR 0x%" PRIx32,
|
", CFSR 0x%" PRIx32 ", AR 0x%" PRIx32,
|
||||||
armv7m_exception_string(armv7m->exception_number),
|
armv7m_exception_string(armv7m->exception_number),
|
||||||
shcsr, except_sr, cfsr, except_ar);
|
shcsr, except_sr, cfsr, except_ar);
|
||||||
|
@ -782,7 +782,7 @@ static int cortex_m_debug_entry(struct target *target)
|
||||||
struct arm *arm = &armv7m->arm;
|
struct arm *arm = &armv7m->arm;
|
||||||
struct reg *r;
|
struct reg *r;
|
||||||
|
|
||||||
LOG_DEBUG(" ");
|
LOG_TARGET_DEBUG(target, " ");
|
||||||
|
|
||||||
/* Do this really early to minimize the window where the MASKINTS erratum
|
/* Do this really early to minimize the window where the MASKINTS erratum
|
||||||
* can pile up pending interrupts. */
|
* can pile up pending interrupts. */
|
||||||
|
@ -815,7 +815,7 @@ static int cortex_m_debug_entry(struct target *target)
|
||||||
retval = cortex_m_fast_read_all_regs(target);
|
retval = cortex_m_fast_read_all_regs(target);
|
||||||
if (retval == ERROR_TIMEOUT_REACHED) {
|
if (retval == ERROR_TIMEOUT_REACHED) {
|
||||||
cortex_m->slow_register_read = true;
|
cortex_m->slow_register_read = true;
|
||||||
LOG_DEBUG("Switched to slow register read");
|
LOG_TARGET_DEBUG(target, "Switched to slow register read");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -855,7 +855,8 @@ static int cortex_m_debug_entry(struct target *target)
|
||||||
if (armv7m->exception_number)
|
if (armv7m->exception_number)
|
||||||
cortex_m_examine_exception_reason(target);
|
cortex_m_examine_exception_reason(target);
|
||||||
|
|
||||||
LOG_DEBUG("entered debug state in core mode: %s at PC 0x%" PRIx32 ", cpu in %s state, target->state: %s",
|
LOG_TARGET_DEBUG(target, "entered debug state in core mode: %s at PC 0x%" PRIx32
|
||||||
|
", cpu in %s state, target->state: %s",
|
||||||
arm_mode_name(arm->core_mode),
|
arm_mode_name(arm->core_mode),
|
||||||
buf_get_u32(arm->pc->value, 0, 32),
|
buf_get_u32(arm->pc->value, 0, 32),
|
||||||
secure_state ? "Secure" : "Non-Secure",
|
secure_state ? "Secure" : "Non-Secure",
|
||||||
|
@ -889,8 +890,7 @@ static int cortex_m_poll(struct target *target)
|
||||||
* section B1.5.15 "Unrecoverable exception cases".
|
* section B1.5.15 "Unrecoverable exception cases".
|
||||||
*/
|
*/
|
||||||
if (cortex_m->dcb_dhcsr & S_LOCKUP) {
|
if (cortex_m->dcb_dhcsr & S_LOCKUP) {
|
||||||
LOG_ERROR("%s -- clearing lockup after double fault",
|
LOG_TARGET_ERROR(target, "clearing lockup after double fault");
|
||||||
target_name(target));
|
|
||||||
cortex_m_write_debug_halt_mask(target, C_HALT, 0);
|
cortex_m_write_debug_halt_mask(target, C_HALT, 0);
|
||||||
target->debug_reason = DBG_REASON_DBGRQ;
|
target->debug_reason = DBG_REASON_DBGRQ;
|
||||||
|
|
||||||
|
@ -909,7 +909,7 @@ static int cortex_m_poll(struct target *target)
|
||||||
cortex_m->dcb_dhcsr_cumulated_sticky &= ~S_RESET_ST;
|
cortex_m->dcb_dhcsr_cumulated_sticky &= ~S_RESET_ST;
|
||||||
if (target->state != TARGET_RESET) {
|
if (target->state != TARGET_RESET) {
|
||||||
target->state = TARGET_RESET;
|
target->state = TARGET_RESET;
|
||||||
LOG_INFO("%s: external reset detected", target_name(target));
|
LOG_TARGET_INFO(target, "external reset detected");
|
||||||
}
|
}
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -918,7 +918,7 @@ static int cortex_m_poll(struct target *target)
|
||||||
/* Cannot switch context while running so endreset is
|
/* Cannot switch context while running so endreset is
|
||||||
* called with target->state == TARGET_RESET
|
* called with target->state == TARGET_RESET
|
||||||
*/
|
*/
|
||||||
LOG_DEBUG("Exit from reset with dcb_dhcsr 0x%" PRIx32,
|
LOG_TARGET_DEBUG(target, "Exit from reset with dcb_dhcsr 0x%" PRIx32,
|
||||||
cortex_m->dcb_dhcsr);
|
cortex_m->dcb_dhcsr);
|
||||||
retval = cortex_m_endreset_event(target);
|
retval = cortex_m_endreset_event(target);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
|
@ -943,7 +943,6 @@ static int cortex_m_poll(struct target *target)
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_HALTED);
|
target_call_event_callbacks(target, TARGET_EVENT_HALTED);
|
||||||
}
|
}
|
||||||
if (prev_target_state == TARGET_DEBUG_RUNNING) {
|
if (prev_target_state == TARGET_DEBUG_RUNNING) {
|
||||||
LOG_DEBUG(" ");
|
|
||||||
retval = cortex_m_debug_entry(target);
|
retval = cortex_m_debug_entry(target);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -971,7 +970,7 @@ static int cortex_m_poll(struct target *target)
|
||||||
register_cache_invalidate(armv7m->arm.core_cache);
|
register_cache_invalidate(armv7m->arm.core_cache);
|
||||||
|
|
||||||
target->state = TARGET_RUNNING;
|
target->state = TARGET_RUNNING;
|
||||||
LOG_WARNING("%s: external resume detected", target_name(target));
|
LOG_TARGET_WARNING(target, "external resume detected");
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
|
target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
|
||||||
retval = ERROR_OK;
|
retval = ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -984,20 +983,19 @@ static int cortex_m_poll(struct target *target)
|
||||||
|
|
||||||
static int cortex_m_halt(struct target *target)
|
static int cortex_m_halt(struct target *target)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_TARGET_DEBUG(target, "target->state: %s", target_state_name(target));
|
||||||
target_state_name(target));
|
|
||||||
|
|
||||||
if (target->state == TARGET_HALTED) {
|
if (target->state == TARGET_HALTED) {
|
||||||
LOG_DEBUG("target was already halted");
|
LOG_TARGET_DEBUG(target, "target was already halted");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target->state == TARGET_UNKNOWN)
|
if (target->state == TARGET_UNKNOWN)
|
||||||
LOG_WARNING("target was in unknown state when halt was requested");
|
LOG_TARGET_WARNING(target, "target was in unknown state when halt was requested");
|
||||||
|
|
||||||
if (target->state == TARGET_RESET) {
|
if (target->state == TARGET_RESET) {
|
||||||
if ((jtag_get_reset_config() & RESET_SRST_PULLS_TRST) && jtag_get_srst()) {
|
if ((jtag_get_reset_config() & RESET_SRST_PULLS_TRST) && jtag_get_srst()) {
|
||||||
LOG_ERROR("can't request a halt while in reset if nSRST pulls nTRST");
|
LOG_TARGET_ERROR(target, "can't request a halt while in reset if nSRST pulls nTRST");
|
||||||
return ERROR_TARGET_FAILURE;
|
return ERROR_TARGET_FAILURE;
|
||||||
} else {
|
} else {
|
||||||
/* we came here in a reset_halt or reset_init sequence
|
/* we came here in a reset_halt or reset_init sequence
|
||||||
|
@ -1031,10 +1029,10 @@ static int cortex_m_soft_reset_halt(struct target *target)
|
||||||
* can be obtained by using 'reset halt' and 'cortex_m reset_config vectreset'.
|
* can be obtained by using 'reset halt' and 'cortex_m reset_config vectreset'.
|
||||||
* As this reset only uses VC_CORERESET it would only ever reset the cortex_m
|
* As this reset only uses VC_CORERESET it would only ever reset the cortex_m
|
||||||
* core, not the peripherals */
|
* core, not the peripherals */
|
||||||
LOG_DEBUG("soft_reset_halt is discouraged, please use 'reset halt' instead.");
|
LOG_TARGET_DEBUG(target, "soft_reset_halt is discouraged, please use 'reset halt' instead.");
|
||||||
|
|
||||||
if (!cortex_m->vectreset_supported) {
|
if (!cortex_m->vectreset_supported) {
|
||||||
LOG_ERROR("VECTRESET is not supported on this Cortex-M core");
|
LOG_TARGET_ERROR(target, "VECTRESET is not supported on this Cortex-M core");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1068,15 +1066,16 @@ static int cortex_m_soft_reset_halt(struct target *target)
|
||||||
return retval;
|
return retval;
|
||||||
if ((cortex_m->dcb_dhcsr & S_HALT)
|
if ((cortex_m->dcb_dhcsr & S_HALT)
|
||||||
&& (cortex_m->nvic_dfsr & DFSR_VCATCH)) {
|
&& (cortex_m->nvic_dfsr & DFSR_VCATCH)) {
|
||||||
LOG_DEBUG("system reset-halted, DHCSR 0x%08" PRIx32 ", DFSR 0x%08" PRIx32,
|
LOG_TARGET_DEBUG(target, "system reset-halted, DHCSR 0x%08" PRIx32 ", DFSR 0x%08" PRIx32,
|
||||||
cortex_m->dcb_dhcsr, cortex_m->nvic_dfsr);
|
cortex_m->dcb_dhcsr, cortex_m->nvic_dfsr);
|
||||||
cortex_m_poll(target);
|
cortex_m_poll(target);
|
||||||
/* FIXME restore user's vector catch config */
|
/* FIXME restore user's vector catch config */
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
} else
|
} else {
|
||||||
LOG_DEBUG("waiting for system reset-halt, "
|
LOG_TARGET_DEBUG(target, "waiting for system reset-halt, "
|
||||||
"DHCSR 0x%08" PRIx32 ", %d ms",
|
"DHCSR 0x%08" PRIx32 ", %d ms",
|
||||||
cortex_m->dcb_dhcsr, timeout);
|
cortex_m->dcb_dhcsr, timeout);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
timeout++;
|
timeout++;
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
|
@ -1106,7 +1105,7 @@ static int cortex_m_resume(struct target *target, int current,
|
||||||
struct reg *r;
|
struct reg *r;
|
||||||
|
|
||||||
if (target->state != TARGET_HALTED) {
|
if (target->state != TARGET_HALTED) {
|
||||||
LOG_WARNING("target not halted");
|
LOG_TARGET_WARNING(target, "target not halted");
|
||||||
return ERROR_TARGET_NOT_HALTED;
|
return ERROR_TARGET_NOT_HALTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1170,7 +1169,7 @@ static int cortex_m_resume(struct target *target, int current,
|
||||||
/* Single step past breakpoint at current address */
|
/* Single step past breakpoint at current address */
|
||||||
breakpoint = breakpoint_find(target, resume_pc);
|
breakpoint = breakpoint_find(target, resume_pc);
|
||||||
if (breakpoint) {
|
if (breakpoint) {
|
||||||
LOG_DEBUG("unset breakpoint at " TARGET_ADDR_FMT " (ID: %" PRIu32 ")",
|
LOG_TARGET_DEBUG(target, "unset breakpoint at " TARGET_ADDR_FMT " (ID: %" PRIu32 ")",
|
||||||
breakpoint->address,
|
breakpoint->address,
|
||||||
breakpoint->unique_id);
|
breakpoint->unique_id);
|
||||||
cortex_m_unset_breakpoint(target, breakpoint);
|
cortex_m_unset_breakpoint(target, breakpoint);
|
||||||
|
@ -1191,11 +1190,11 @@ static int cortex_m_resume(struct target *target, int current,
|
||||||
if (!debug_execution) {
|
if (!debug_execution) {
|
||||||
target->state = TARGET_RUNNING;
|
target->state = TARGET_RUNNING;
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
|
target_call_event_callbacks(target, TARGET_EVENT_RESUMED);
|
||||||
LOG_DEBUG("target resumed at 0x%" PRIx32 "", resume_pc);
|
LOG_TARGET_DEBUG(target, "target resumed at 0x%" PRIx32 "", resume_pc);
|
||||||
} else {
|
} else {
|
||||||
target->state = TARGET_DEBUG_RUNNING;
|
target->state = TARGET_DEBUG_RUNNING;
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_DEBUG_RESUMED);
|
target_call_event_callbacks(target, TARGET_EVENT_DEBUG_RESUMED);
|
||||||
LOG_DEBUG("target debug resumed at 0x%" PRIx32 "", resume_pc);
|
LOG_TARGET_DEBUG(target, "target debug resumed at 0x%" PRIx32 "", resume_pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -1214,7 +1213,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
bool isr_timed_out = false;
|
bool isr_timed_out = false;
|
||||||
|
|
||||||
if (target->state != TARGET_HALTED) {
|
if (target->state != TARGET_HALTED) {
|
||||||
LOG_WARNING("target not halted");
|
LOG_TARGET_WARNING(target, "target not halted");
|
||||||
return ERROR_TARGET_NOT_HALTED;
|
return ERROR_TARGET_NOT_HALTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1287,7 +1286,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if ((pc_value & 0x02) && breakpoint_find(target, pc_value & ~0x03)) {
|
if ((pc_value & 0x02) && breakpoint_find(target, pc_value & ~0x03)) {
|
||||||
LOG_DEBUG("Stepping over next instruction with interrupts disabled");
|
LOG_TARGET_DEBUG(target, "Stepping over next instruction with interrupts disabled");
|
||||||
cortex_m_write_debug_halt_mask(target, C_HALT | C_MASKINTS, 0);
|
cortex_m_write_debug_halt_mask(target, C_HALT | C_MASKINTS, 0);
|
||||||
cortex_m_write_debug_halt_mask(target, C_STEP, C_HALT);
|
cortex_m_write_debug_halt_mask(target, C_STEP, C_HALT);
|
||||||
/* Re-enable interrupts if appropriate */
|
/* Re-enable interrupts if appropriate */
|
||||||
|
@ -1318,7 +1317,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
cortex_m_set_maskints_for_halt(target);
|
cortex_m_set_maskints_for_halt(target);
|
||||||
} else {
|
} else {
|
||||||
/* Start the core */
|
/* Start the core */
|
||||||
LOG_DEBUG("Starting core to serve pending interrupts");
|
LOG_TARGET_DEBUG(target, "Starting core to serve pending interrupts");
|
||||||
int64_t t_start = timeval_ms();
|
int64_t t_start = timeval_ms();
|
||||||
cortex_m_set_maskints_for_run(target);
|
cortex_m_set_maskints_for_run(target);
|
||||||
cortex_m_write_debug_halt_mask(target, 0, C_HALT | C_STEP);
|
cortex_m_write_debug_halt_mask(target, 0, C_HALT | C_STEP);
|
||||||
|
@ -1342,7 +1341,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isr_timed_out) {
|
if (isr_timed_out) {
|
||||||
LOG_DEBUG("Interrupt handlers didn't complete within time, "
|
LOG_TARGET_DEBUG(target, "Interrupt handlers didn't complete within time, "
|
||||||
"leaving target running");
|
"leaving target running");
|
||||||
} else {
|
} else {
|
||||||
/* Step over next instruction with interrupts disabled */
|
/* Step over next instruction with interrupts disabled */
|
||||||
|
@ -1377,7 +1376,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("target stepped dcb_dhcsr = 0x%" PRIx32
|
LOG_TARGET_DEBUG(target, "target stepped dcb_dhcsr = 0x%" PRIx32
|
||||||
" nvic_icsr = 0x%" PRIx32,
|
" nvic_icsr = 0x%" PRIx32,
|
||||||
cortex_m->dcb_dhcsr, cortex_m->nvic_icsr);
|
cortex_m->dcb_dhcsr, cortex_m->nvic_icsr);
|
||||||
|
|
||||||
|
@ -1386,7 +1385,7 @@ static int cortex_m_step(struct target *target, int current,
|
||||||
return retval;
|
return retval;
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_HALTED);
|
target_call_event_callbacks(target, TARGET_EVENT_HALTED);
|
||||||
|
|
||||||
LOG_DEBUG("target stepped dcb_dhcsr = 0x%" PRIx32
|
LOG_TARGET_DEBUG(target, "target stepped dcb_dhcsr = 0x%" PRIx32
|
||||||
" nvic_icsr = 0x%" PRIx32,
|
" nvic_icsr = 0x%" PRIx32,
|
||||||
cortex_m->dcb_dhcsr, cortex_m->nvic_icsr);
|
cortex_m->dcb_dhcsr, cortex_m->nvic_icsr);
|
||||||
|
|
||||||
|
@ -1399,7 +1398,7 @@ static int cortex_m_assert_reset(struct target *target)
|
||||||
struct armv7m_common *armv7m = &cortex_m->armv7m;
|
struct armv7m_common *armv7m = &cortex_m->armv7m;
|
||||||
enum cortex_m_soft_reset_config reset_config = cortex_m->soft_reset_config;
|
enum cortex_m_soft_reset_config reset_config = cortex_m->soft_reset_config;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_TARGET_DEBUG(target, "target->state: %s",
|
||||||
target_state_name(target));
|
target_state_name(target));
|
||||||
|
|
||||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||||
|
@ -1423,10 +1422,10 @@ static int cortex_m_assert_reset(struct target *target)
|
||||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||||
adapter_assert_reset();
|
adapter_assert_reset();
|
||||||
if (target->reset_halt)
|
if (target->reset_halt)
|
||||||
LOG_ERROR("Target not examined, will not halt after reset!");
|
LOG_TARGET_ERROR(target, "Target not examined, will not halt after reset!");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR("Target not examined, reset NOT asserted!");
|
LOG_TARGET_ERROR(target, "Target not examined, reset NOT asserted!");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1473,7 +1472,7 @@ static int cortex_m_assert_reset(struct target *target)
|
||||||
retval2 = mem_ap_write_atomic_u32(armv7m->debug_ap, DCB_DEMCR,
|
retval2 = mem_ap_write_atomic_u32(armv7m->debug_ap, DCB_DEMCR,
|
||||||
TRCENA | VC_HARDERR | VC_BUSERR | VC_CORERESET);
|
TRCENA | VC_HARDERR | VC_BUSERR | VC_CORERESET);
|
||||||
if (retval != ERROR_OK || retval2 != ERROR_OK)
|
if (retval != ERROR_OK || retval2 != ERROR_OK)
|
||||||
LOG_INFO("AP write error, reset will not halt");
|
LOG_TARGET_INFO(target, "AP write error, reset will not halt");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jtag_reset_config & RESET_HAS_SRST) {
|
if (jtag_reset_config & RESET_HAS_SRST) {
|
||||||
|
@ -1493,15 +1492,15 @@ static int cortex_m_assert_reset(struct target *target)
|
||||||
if (!cortex_m->vectreset_supported
|
if (!cortex_m->vectreset_supported
|
||||||
&& reset_config == CORTEX_M_RESET_VECTRESET) {
|
&& reset_config == CORTEX_M_RESET_VECTRESET) {
|
||||||
reset_config = CORTEX_M_RESET_SYSRESETREQ;
|
reset_config = CORTEX_M_RESET_SYSRESETREQ;
|
||||||
LOG_WARNING("VECTRESET is not supported on this Cortex-M core, using SYSRESETREQ instead.");
|
LOG_TARGET_WARNING(target, "VECTRESET is not supported on this Cortex-M core, using SYSRESETREQ instead.");
|
||||||
LOG_WARNING("Set 'cortex_m reset_config sysresetreq'.");
|
LOG_TARGET_WARNING(target, "Set 'cortex_m reset_config sysresetreq'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("Using Cortex-M %s", (reset_config == CORTEX_M_RESET_SYSRESETREQ)
|
LOG_TARGET_DEBUG(target, "Using Cortex-M %s", (reset_config == CORTEX_M_RESET_SYSRESETREQ)
|
||||||
? "SYSRESETREQ" : "VECTRESET");
|
? "SYSRESETREQ" : "VECTRESET");
|
||||||
|
|
||||||
if (reset_config == CORTEX_M_RESET_VECTRESET) {
|
if (reset_config == CORTEX_M_RESET_VECTRESET) {
|
||||||
LOG_WARNING("Only resetting the Cortex-M core, use a reset-init event "
|
LOG_TARGET_WARNING(target, "Only resetting the Cortex-M core, use a reset-init event "
|
||||||
"handler to reset any peripherals or configure hardware srst support.");
|
"handler to reset any peripherals or configure hardware srst support.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1510,11 +1509,11 @@ static int cortex_m_assert_reset(struct target *target)
|
||||||
AIRCR_VECTKEY | ((reset_config == CORTEX_M_RESET_SYSRESETREQ)
|
AIRCR_VECTKEY | ((reset_config == CORTEX_M_RESET_SYSRESETREQ)
|
||||||
? AIRCR_SYSRESETREQ : AIRCR_VECTRESET));
|
? AIRCR_SYSRESETREQ : AIRCR_VECTRESET));
|
||||||
if (retval3 != ERROR_OK)
|
if (retval3 != ERROR_OK)
|
||||||
LOG_DEBUG("Ignoring AP write error right after reset");
|
LOG_TARGET_DEBUG(target, "Ignoring AP write error right after reset");
|
||||||
|
|
||||||
retval3 = dap_dp_init_or_reconnect(armv7m->debug_ap->dap);
|
retval3 = dap_dp_init_or_reconnect(armv7m->debug_ap->dap);
|
||||||
if (retval3 != ERROR_OK) {
|
if (retval3 != ERROR_OK) {
|
||||||
LOG_ERROR("DP initialisation failed");
|
LOG_TARGET_ERROR(target, "DP initialisation failed");
|
||||||
/* The error return value must not be propagated in this case.
|
/* The error return value must not be propagated in this case.
|
||||||
* SYSRESETREQ or VECTRESET have been possibly triggered
|
* SYSRESETREQ or VECTRESET have been possibly triggered
|
||||||
* so reset processing should continue */
|
* so reset processing should continue */
|
||||||
|
@ -1550,7 +1549,7 @@ static int cortex_m_deassert_reset(struct target *target)
|
||||||
{
|
{
|
||||||
struct armv7m_common *armv7m = &target_to_cm(target)->armv7m;
|
struct armv7m_common *armv7m = &target_to_cm(target)->armv7m;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_TARGET_DEBUG(target, "target->state: %s",
|
||||||
target_state_name(target));
|
target_state_name(target));
|
||||||
|
|
||||||
/* deassert reset lines */
|
/* deassert reset lines */
|
||||||
|
@ -1564,7 +1563,7 @@ static int cortex_m_deassert_reset(struct target *target)
|
||||||
|
|
||||||
int retval = dap_dp_init_or_reconnect(armv7m->debug_ap->dap);
|
int retval = dap_dp_init_or_reconnect(armv7m->debug_ap->dap);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("DP initialisation failed");
|
LOG_TARGET_ERROR(target, "DP initialisation failed");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1580,7 +1579,7 @@ int cortex_m_set_breakpoint(struct target *target, struct breakpoint *breakpoint
|
||||||
struct cortex_m_fp_comparator *comparator_list = cortex_m->fp_comparator_list;
|
struct cortex_m_fp_comparator *comparator_list = cortex_m->fp_comparator_list;
|
||||||
|
|
||||||
if (breakpoint->set) {
|
if (breakpoint->set) {
|
||||||
LOG_WARNING("breakpoint (BPID: %" PRIu32 ") already set", breakpoint->unique_id);
|
LOG_TARGET_WARNING(target, "breakpoint (BPID: %" PRIu32 ") already set", breakpoint->unique_id);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1589,35 +1588,36 @@ int cortex_m_set_breakpoint(struct target *target, struct breakpoint *breakpoint
|
||||||
while (comparator_list[fp_num].used && (fp_num < cortex_m->fp_num_code))
|
while (comparator_list[fp_num].used && (fp_num < cortex_m->fp_num_code))
|
||||||
fp_num++;
|
fp_num++;
|
||||||
if (fp_num >= cortex_m->fp_num_code) {
|
if (fp_num >= cortex_m->fp_num_code) {
|
||||||
LOG_ERROR("Can not find free FPB Comparator!");
|
LOG_TARGET_ERROR(target, "Can not find free FPB Comparator!");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
breakpoint->set = fp_num + 1;
|
breakpoint->set = fp_num + 1;
|
||||||
fpcr_value = breakpoint->address | 1;
|
fpcr_value = breakpoint->address | 1;
|
||||||
if (cortex_m->fp_rev == 0) {
|
if (cortex_m->fp_rev == 0) {
|
||||||
if (breakpoint->address > 0x1FFFFFFF) {
|
if (breakpoint->address > 0x1FFFFFFF) {
|
||||||
LOG_ERROR("Cortex-M Flash Patch Breakpoint rev.1 cannot handle HW breakpoint above address 0x1FFFFFFE");
|
LOG_TARGET_ERROR(target, "Cortex-M Flash Patch Breakpoint rev.1 "
|
||||||
|
"cannot handle HW breakpoint above address 0x1FFFFFFE");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
uint32_t hilo;
|
uint32_t hilo;
|
||||||
hilo = (breakpoint->address & 0x2) ? FPCR_REPLACE_BKPT_HIGH : FPCR_REPLACE_BKPT_LOW;
|
hilo = (breakpoint->address & 0x2) ? FPCR_REPLACE_BKPT_HIGH : FPCR_REPLACE_BKPT_LOW;
|
||||||
fpcr_value = (fpcr_value & 0x1FFFFFFC) | hilo | 1;
|
fpcr_value = (fpcr_value & 0x1FFFFFFC) | hilo | 1;
|
||||||
} else if (cortex_m->fp_rev > 1) {
|
} else if (cortex_m->fp_rev > 1) {
|
||||||
LOG_ERROR("Unhandled Cortex-M Flash Patch Breakpoint architecture revision");
|
LOG_TARGET_ERROR(target, "Unhandled Cortex-M Flash Patch Breakpoint architecture revision");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
comparator_list[fp_num].used = true;
|
comparator_list[fp_num].used = true;
|
||||||
comparator_list[fp_num].fpcr_value = fpcr_value;
|
comparator_list[fp_num].fpcr_value = fpcr_value;
|
||||||
target_write_u32(target, comparator_list[fp_num].fpcr_address,
|
target_write_u32(target, comparator_list[fp_num].fpcr_address,
|
||||||
comparator_list[fp_num].fpcr_value);
|
comparator_list[fp_num].fpcr_value);
|
||||||
LOG_DEBUG("fpc_num %i fpcr_value 0x%" PRIx32 "",
|
LOG_TARGET_DEBUG(target, "fpc_num %i fpcr_value 0x%" PRIx32 "",
|
||||||
fp_num,
|
fp_num,
|
||||||
comparator_list[fp_num].fpcr_value);
|
comparator_list[fp_num].fpcr_value);
|
||||||
if (!cortex_m->fpb_enabled) {
|
if (!cortex_m->fpb_enabled) {
|
||||||
LOG_DEBUG("FPB wasn't enabled, do it now");
|
LOG_TARGET_DEBUG(target, "FPB wasn't enabled, do it now");
|
||||||
retval = cortex_m_enable_fpb(target);
|
retval = cortex_m_enable_fpb(target);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Failed to enable the FPB");
|
LOG_TARGET_ERROR(target, "Failed to enable the FPB");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1646,7 +1646,7 @@ int cortex_m_set_breakpoint(struct target *target, struct breakpoint *breakpoint
|
||||||
breakpoint->set = true;
|
breakpoint->set = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("BPID: %" PRIu32 ", Type: %d, Address: " TARGET_ADDR_FMT " Length: %d (set=%d)",
|
LOG_TARGET_DEBUG(target, "BPID: %" PRIu32 ", Type: %d, Address: " TARGET_ADDR_FMT " Length: %d (set=%d)",
|
||||||
breakpoint->unique_id,
|
breakpoint->unique_id,
|
||||||
(int)(breakpoint->type),
|
(int)(breakpoint->type),
|
||||||
breakpoint->address,
|
breakpoint->address,
|
||||||
|
@ -1663,11 +1663,11 @@ int cortex_m_unset_breakpoint(struct target *target, struct breakpoint *breakpoi
|
||||||
struct cortex_m_fp_comparator *comparator_list = cortex_m->fp_comparator_list;
|
struct cortex_m_fp_comparator *comparator_list = cortex_m->fp_comparator_list;
|
||||||
|
|
||||||
if (breakpoint->set <= 0) {
|
if (breakpoint->set <= 0) {
|
||||||
LOG_WARNING("breakpoint not set");
|
LOG_TARGET_WARNING(target, "breakpoint not set");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("BPID: %" PRIu32 ", Type: %d, Address: " TARGET_ADDR_FMT " Length: %d (set=%d)",
|
LOG_TARGET_DEBUG(target, "BPID: %" PRIu32 ", Type: %d, Address: " TARGET_ADDR_FMT " Length: %d (set=%d)",
|
||||||
breakpoint->unique_id,
|
breakpoint->unique_id,
|
||||||
(int)(breakpoint->type),
|
(int)(breakpoint->type),
|
||||||
breakpoint->address,
|
breakpoint->address,
|
||||||
|
@ -1677,7 +1677,7 @@ int cortex_m_unset_breakpoint(struct target *target, struct breakpoint *breakpoi
|
||||||
if (breakpoint->type == BKPT_HARD) {
|
if (breakpoint->type == BKPT_HARD) {
|
||||||
unsigned int fp_num = breakpoint->set - 1;
|
unsigned int fp_num = breakpoint->set - 1;
|
||||||
if (fp_num >= cortex_m->fp_num_code) {
|
if (fp_num >= cortex_m->fp_num_code) {
|
||||||
LOG_DEBUG("Invalid FP Comparator number in breakpoint");
|
LOG_TARGET_DEBUG(target, "Invalid FP Comparator number in breakpoint");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
comparator_list[fp_num].used = false;
|
comparator_list[fp_num].used = false;
|
||||||
|
@ -1700,12 +1700,12 @@ int cortex_m_unset_breakpoint(struct target *target, struct breakpoint *breakpoi
|
||||||
int cortex_m_add_breakpoint(struct target *target, struct breakpoint *breakpoint)
|
int cortex_m_add_breakpoint(struct target *target, struct breakpoint *breakpoint)
|
||||||
{
|
{
|
||||||
if (breakpoint->length == 3) {
|
if (breakpoint->length == 3) {
|
||||||
LOG_DEBUG("Using a two byte breakpoint for 32bit Thumb-2 request");
|
LOG_TARGET_DEBUG(target, "Using a two byte breakpoint for 32bit Thumb-2 request");
|
||||||
breakpoint->length = 2;
|
breakpoint->length = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((breakpoint->length != 2)) {
|
if ((breakpoint->length != 2)) {
|
||||||
LOG_INFO("only breakpoints of two bytes length supported");
|
LOG_TARGET_INFO(target, "only breakpoints of two bytes length supported");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1737,7 +1737,7 @@ static int cortex_m_set_watchpoint(struct target *target, struct watchpoint *wat
|
||||||
comparator++, dwt_num++)
|
comparator++, dwt_num++)
|
||||||
continue;
|
continue;
|
||||||
if (dwt_num >= cortex_m->dwt_num_comp) {
|
if (dwt_num >= cortex_m->dwt_num_comp) {
|
||||||
LOG_ERROR("Can not find free DWT Comparator");
|
LOG_TARGET_ERROR(target, "Can not find free DWT Comparator");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
comparator->used = true;
|
comparator->used = true;
|
||||||
|
@ -1795,7 +1795,7 @@ static int cortex_m_set_watchpoint(struct target *target, struct watchpoint *wat
|
||||||
target_write_u32(target, comparator->dwt_comparator_address + 8,
|
target_write_u32(target, comparator->dwt_comparator_address + 8,
|
||||||
comparator->function);
|
comparator->function);
|
||||||
|
|
||||||
LOG_DEBUG("Watchpoint (ID %d) DWT%d 0x%08x 0x%x 0x%05x",
|
LOG_TARGET_DEBUG(target, "Watchpoint (ID %d) DWT%d 0x%08x 0x%x 0x%05x",
|
||||||
watchpoint->unique_id, dwt_num,
|
watchpoint->unique_id, dwt_num,
|
||||||
(unsigned) comparator->comp,
|
(unsigned) comparator->comp,
|
||||||
(unsigned) comparator->mask,
|
(unsigned) comparator->mask,
|
||||||
|
@ -1809,19 +1809,19 @@ static int cortex_m_unset_watchpoint(struct target *target, struct watchpoint *w
|
||||||
struct cortex_m_dwt_comparator *comparator;
|
struct cortex_m_dwt_comparator *comparator;
|
||||||
|
|
||||||
if (watchpoint->set <= 0) {
|
if (watchpoint->set <= 0) {
|
||||||
LOG_WARNING("watchpoint (wpid: %d) not set",
|
LOG_TARGET_WARNING(target, "watchpoint (wpid: %d) not set",
|
||||||
watchpoint->unique_id);
|
watchpoint->unique_id);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int dwt_num = watchpoint->set - 1;
|
unsigned int dwt_num = watchpoint->set - 1;
|
||||||
|
|
||||||
LOG_DEBUG("Watchpoint (ID %d) DWT%d address: 0x%08x clear",
|
LOG_TARGET_DEBUG(target, "Watchpoint (ID %d) DWT%d address: 0x%08x clear",
|
||||||
watchpoint->unique_id, dwt_num,
|
watchpoint->unique_id, dwt_num,
|
||||||
(unsigned) watchpoint->address);
|
(unsigned) watchpoint->address);
|
||||||
|
|
||||||
if (dwt_num >= cortex_m->dwt_num_comp) {
|
if (dwt_num >= cortex_m->dwt_num_comp) {
|
||||||
LOG_DEBUG("Invalid DWT Comparator number in watchpoint");
|
LOG_TARGET_DEBUG(target, "Invalid DWT Comparator number in watchpoint");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1841,13 +1841,13 @@ int cortex_m_add_watchpoint(struct target *target, struct watchpoint *watchpoint
|
||||||
struct cortex_m_common *cortex_m = target_to_cm(target);
|
struct cortex_m_common *cortex_m = target_to_cm(target);
|
||||||
|
|
||||||
if (cortex_m->dwt_comp_available < 1) {
|
if (cortex_m->dwt_comp_available < 1) {
|
||||||
LOG_DEBUG("no comparators?");
|
LOG_TARGET_DEBUG(target, "no comparators?");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hardware doesn't support data value masking */
|
/* hardware doesn't support data value masking */
|
||||||
if (watchpoint->mask != ~(uint32_t)0) {
|
if (watchpoint->mask != ~(uint32_t)0) {
|
||||||
LOG_DEBUG("watchpoint value masks not supported");
|
LOG_TARGET_DEBUG(target, "watchpoint value masks not supported");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1859,11 +1859,11 @@ int cortex_m_add_watchpoint(struct target *target, struct watchpoint *watchpoint
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (mask == 16) {
|
if (mask == 16) {
|
||||||
LOG_DEBUG("unsupported watchpoint length");
|
LOG_TARGET_DEBUG(target, "unsupported watchpoint length");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
if (watchpoint->address & ((1 << mask) - 1)) {
|
if (watchpoint->address & ((1 << mask) - 1)) {
|
||||||
LOG_DEBUG("watchpoint address is unaligned");
|
LOG_TARGET_DEBUG(target, "watchpoint address is unaligned");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1875,12 +1875,12 @@ int cortex_m_add_watchpoint(struct target *target, struct watchpoint *watchpoint
|
||||||
* the data, and another comparator (DATAVADDR0) matching addr.
|
* the data, and another comparator (DATAVADDR0) matching addr.
|
||||||
*/
|
*/
|
||||||
if (watchpoint->value) {
|
if (watchpoint->value) {
|
||||||
LOG_DEBUG("data value watchpoint not YET supported");
|
LOG_TARGET_DEBUG(target, "data value watchpoint not YET supported");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
cortex_m->dwt_comp_available--;
|
cortex_m->dwt_comp_available--;
|
||||||
LOG_DEBUG("dwt_comp_available: %d", cortex_m->dwt_comp_available);
|
LOG_TARGET_DEBUG(target, "dwt_comp_available: %d", cortex_m->dwt_comp_available);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -1891,7 +1891,7 @@ int cortex_m_remove_watchpoint(struct target *target, struct watchpoint *watchpo
|
||||||
|
|
||||||
/* REVISIT why check? DWT can be updated with core running ... */
|
/* REVISIT why check? DWT can be updated with core running ... */
|
||||||
if (target->state != TARGET_HALTED) {
|
if (target->state != TARGET_HALTED) {
|
||||||
LOG_WARNING("target not halted");
|
LOG_TARGET_WARNING(target, "target not halted");
|
||||||
return ERROR_TARGET_NOT_HALTED;
|
return ERROR_TARGET_NOT_HALTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1899,7 +1899,7 @@ int cortex_m_remove_watchpoint(struct target *target, struct watchpoint *watchpo
|
||||||
cortex_m_unset_watchpoint(target, watchpoint);
|
cortex_m_unset_watchpoint(target, watchpoint);
|
||||||
|
|
||||||
cortex_m->dwt_comp_available++;
|
cortex_m->dwt_comp_available++;
|
||||||
LOG_DEBUG("dwt_comp_available: %d", cortex_m->dwt_comp_available);
|
LOG_TARGET_DEBUG(target, "dwt_comp_available: %d", cortex_m->dwt_comp_available);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -2004,18 +2004,18 @@ int cortex_m_profiling(struct target *target, uint32_t *samples,
|
||||||
|
|
||||||
retval = target_read_u32(target, DWT_PCSR, ®_value);
|
retval = target_read_u32(target, DWT_PCSR, ®_value);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Error while reading PCSR");
|
LOG_TARGET_ERROR(target, "Error while reading PCSR");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
if (reg_value == 0) {
|
if (reg_value == 0) {
|
||||||
LOG_INFO("PCSR sampling not supported on this processor.");
|
LOG_TARGET_INFO(target, "PCSR sampling not supported on this processor.");
|
||||||
return target_profiling_default(target, samples, max_num_samples, num_samples, seconds);
|
return target_profiling_default(target, samples, max_num_samples, num_samples, seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
gettimeofday(&timeout, NULL);
|
gettimeofday(&timeout, NULL);
|
||||||
timeval_add_time(&timeout, seconds, 0);
|
timeval_add_time(&timeout, seconds, 0);
|
||||||
|
|
||||||
LOG_INFO("Starting Cortex-M profiling. Sampling DWT_PCSR as fast as we can...");
|
LOG_TARGET_INFO(target, "Starting Cortex-M profiling. Sampling DWT_PCSR as fast as we can...");
|
||||||
|
|
||||||
/* Make sure the target is running */
|
/* Make sure the target is running */
|
||||||
target_poll(target);
|
target_poll(target);
|
||||||
|
@ -2023,7 +2023,7 @@ int cortex_m_profiling(struct target *target, uint32_t *samples,
|
||||||
retval = target_resume(target, 1, 0, 0, 0);
|
retval = target_resume(target, 1, 0, 0, 0);
|
||||||
|
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Error while resuming target");
|
LOG_TARGET_ERROR(target, "Error while resuming target");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2044,14 +2044,14 @@ int cortex_m_profiling(struct target *target, uint32_t *samples,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Error while reading PCSR");
|
LOG_TARGET_ERROR(target, "Error while reading PCSR");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
if (sample_count >= max_num_samples || timeval_compare(&now, &timeout) > 0) {
|
if (sample_count >= max_num_samples || timeval_compare(&now, &timeout) > 0) {
|
||||||
LOG_INFO("Profiling completed. %" PRIu32 " samples.", sample_count);
|
LOG_TARGET_INFO(target, "Profiling completed. %" PRIu32 " samples.", sample_count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2162,14 +2162,14 @@ static void cortex_m_dwt_setup(struct cortex_m_common *cm, struct target *target
|
||||||
int reg;
|
int reg;
|
||||||
|
|
||||||
target_read_u32(target, DWT_CTRL, &dwtcr);
|
target_read_u32(target, DWT_CTRL, &dwtcr);
|
||||||
LOG_DEBUG("DWT_CTRL: 0x%" PRIx32, dwtcr);
|
LOG_TARGET_DEBUG(target, "DWT_CTRL: 0x%" PRIx32, dwtcr);
|
||||||
if (!dwtcr) {
|
if (!dwtcr) {
|
||||||
LOG_DEBUG("no DWT");
|
LOG_TARGET_DEBUG(target, "no DWT");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_read_u32(target, DWT_DEVARCH, &cm->dwt_devarch);
|
target_read_u32(target, DWT_DEVARCH, &cm->dwt_devarch);
|
||||||
LOG_DEBUG("DWT_DEVARCH: 0x%" PRIx32, cm->dwt_devarch);
|
LOG_TARGET_DEBUG(target, "DWT_DEVARCH: 0x%" PRIx32, cm->dwt_devarch);
|
||||||
|
|
||||||
cm->dwt_num_comp = (dwtcr >> 28) & 0xF;
|
cm->dwt_num_comp = (dwtcr >> 28) & 0xF;
|
||||||
cm->dwt_comp_available = cm->dwt_num_comp;
|
cm->dwt_comp_available = cm->dwt_num_comp;
|
||||||
|
@ -2178,7 +2178,7 @@ static void cortex_m_dwt_setup(struct cortex_m_common *cm, struct target *target
|
||||||
if (!cm->dwt_comparator_list) {
|
if (!cm->dwt_comparator_list) {
|
||||||
fail0:
|
fail0:
|
||||||
cm->dwt_num_comp = 0;
|
cm->dwt_num_comp = 0;
|
||||||
LOG_ERROR("out of mem");
|
LOG_TARGET_ERROR(target, "out of mem");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2216,7 +2216,7 @@ fail1:
|
||||||
*register_get_last_cache_p(&target->reg_cache) = cache;
|
*register_get_last_cache_p(&target->reg_cache) = cache;
|
||||||
cm->dwt_cache = cache;
|
cm->dwt_cache = cache;
|
||||||
|
|
||||||
LOG_DEBUG("DWT dwtcr 0x%" PRIx32 ", comp %d, watch%s",
|
LOG_TARGET_DEBUG(target, "DWT dwtcr 0x%" PRIx32 ", comp %d, watch%s",
|
||||||
dwtcr, cm->dwt_num_comp,
|
dwtcr, cm->dwt_num_comp,
|
||||||
(dwtcr & (0xf << 24)) ? " only" : "/trigger");
|
(dwtcr & (0xf << 24)) ? " only" : "/trigger");
|
||||||
|
|
||||||
|
@ -2283,7 +2283,7 @@ int cortex_m_examine(struct target *target)
|
||||||
/* Search for the MEM-AP */
|
/* Search for the MEM-AP */
|
||||||
retval = cortex_m_find_mem_ap(swjdp, &armv7m->debug_ap);
|
retval = cortex_m_find_mem_ap(swjdp, &armv7m->debug_ap);
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
LOG_ERROR("Could not find MEM-AP to control the core");
|
LOG_TARGET_ERROR(target, "Could not find MEM-AP to control the core");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2316,14 +2316,13 @@ int cortex_m_examine(struct target *target)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cortex_m->core_info) {
|
if (!cortex_m->core_info) {
|
||||||
LOG_ERROR("Cortex-M PARTNO 0x%x is unrecognized", core_partno);
|
LOG_TARGET_ERROR(target, "Cortex-M PARTNO 0x%x is unrecognized", core_partno);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
armv7m->arm.arch = cortex_m->core_info->arch;
|
armv7m->arm.arch = cortex_m->core_info->arch;
|
||||||
|
|
||||||
LOG_INFO("%s: %s r%" PRId8 "p%" PRId8 " processor detected",
|
LOG_TARGET_INFO(target, "%s r%" PRId8 "p%" PRId8 " processor detected",
|
||||||
target_name(target),
|
|
||||||
cortex_m->core_info->name,
|
cortex_m->core_info->name,
|
||||||
(uint8_t)((cpuid >> 20) & 0xf),
|
(uint8_t)((cpuid >> 20) & 0xf),
|
||||||
(uint8_t)((cpuid >> 0) & 0xf));
|
(uint8_t)((cpuid >> 0) & 0xf));
|
||||||
|
@ -2334,11 +2333,11 @@ int cortex_m_examine(struct target *target)
|
||||||
rev = (cpuid >> 20) & 0xf;
|
rev = (cpuid >> 20) & 0xf;
|
||||||
patch = (cpuid >> 0) & 0xf;
|
patch = (cpuid >> 0) & 0xf;
|
||||||
if ((rev == 0) && (patch < 2)) {
|
if ((rev == 0) && (patch < 2)) {
|
||||||
LOG_WARNING("Silicon bug: single stepping may enter pending exception handler!");
|
LOG_TARGET_WARNING(target, "Silicon bug: single stepping may enter pending exception handler!");
|
||||||
cortex_m->maskints_erratum = true;
|
cortex_m->maskints_erratum = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_DEBUG("cpuid: 0x%8.8" PRIx32 "", cpuid);
|
LOG_TARGET_DEBUG(target, "cpuid: 0x%8.8" PRIx32 "", cpuid);
|
||||||
|
|
||||||
if (cortex_m->core_info->flags & CORTEX_M_F_HAS_FPV4) {
|
if (cortex_m->core_info->flags & CORTEX_M_F_HAS_FPV4) {
|
||||||
target_read_u32(target, MVFR0, &mvfr0);
|
target_read_u32(target, MVFR0, &mvfr0);
|
||||||
|
@ -2346,7 +2345,7 @@ int cortex_m_examine(struct target *target)
|
||||||
|
|
||||||
/* test for floating point feature on Cortex-M4 */
|
/* test for floating point feature on Cortex-M4 */
|
||||||
if ((mvfr0 == MVFR0_DEFAULT_M4) && (mvfr1 == MVFR1_DEFAULT_M4)) {
|
if ((mvfr0 == MVFR0_DEFAULT_M4) && (mvfr1 == MVFR1_DEFAULT_M4)) {
|
||||||
LOG_DEBUG("%s floating point feature FPv4_SP found", cortex_m->core_info->name);
|
LOG_TARGET_DEBUG(target, "%s floating point feature FPv4_SP found", cortex_m->core_info->name);
|
||||||
armv7m->fp_feature = FPV4_SP;
|
armv7m->fp_feature = FPV4_SP;
|
||||||
}
|
}
|
||||||
} else if (cortex_m->core_info->flags & CORTEX_M_F_HAS_FPV5) {
|
} else if (cortex_m->core_info->flags & CORTEX_M_F_HAS_FPV5) {
|
||||||
|
@ -2355,10 +2354,10 @@ int cortex_m_examine(struct target *target)
|
||||||
|
|
||||||
/* test for floating point features on Cortex-M7 */
|
/* test for floating point features on Cortex-M7 */
|
||||||
if ((mvfr0 == MVFR0_DEFAULT_M7_SP) && (mvfr1 == MVFR1_DEFAULT_M7_SP)) {
|
if ((mvfr0 == MVFR0_DEFAULT_M7_SP) && (mvfr1 == MVFR1_DEFAULT_M7_SP)) {
|
||||||
LOG_DEBUG("%s floating point feature FPv5_SP found", cortex_m->core_info->name);
|
LOG_TARGET_DEBUG(target, "%s floating point feature FPv5_SP found", cortex_m->core_info->name);
|
||||||
armv7m->fp_feature = FPV5_SP;
|
armv7m->fp_feature = FPV5_SP;
|
||||||
} else if ((mvfr0 == MVFR0_DEFAULT_M7_DP) && (mvfr1 == MVFR1_DEFAULT_M7_DP)) {
|
} else if ((mvfr0 == MVFR0_DEFAULT_M7_DP) && (mvfr1 == MVFR1_DEFAULT_M7_DP)) {
|
||||||
LOG_DEBUG("%s floating point feature FPv5_DP found", cortex_m->core_info->name);
|
LOG_TARGET_DEBUG(target, "%s floating point feature FPv5_DP found", cortex_m->core_info->name);
|
||||||
armv7m->fp_feature = FPV5_DP;
|
armv7m->fp_feature = FPV5_DP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2428,7 +2427,7 @@ int cortex_m_examine(struct target *target)
|
||||||
/* make sure we clear any breakpoints enabled on the target */
|
/* make sure we clear any breakpoints enabled on the target */
|
||||||
target_write_u32(target, cortex_m->fp_comparator_list[i].fpcr_address, 0);
|
target_write_u32(target, cortex_m->fp_comparator_list[i].fpcr_address, 0);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("FPB fpcr 0x%" PRIx32 ", numcode %i, numlit %i",
|
LOG_TARGET_DEBUG(target, "FPB fpcr 0x%" PRIx32 ", numcode %i, numlit %i",
|
||||||
fpcr,
|
fpcr,
|
||||||
cortex_m->fp_num_code,
|
cortex_m->fp_num_code,
|
||||||
cortex_m->fp_num_lit);
|
cortex_m->fp_num_lit);
|
||||||
|
@ -2438,8 +2437,7 @@ int cortex_m_examine(struct target *target)
|
||||||
cortex_m_dwt_setup(cortex_m, target);
|
cortex_m_dwt_setup(cortex_m, target);
|
||||||
|
|
||||||
/* These hardware breakpoints only work for code in flash! */
|
/* These hardware breakpoints only work for code in flash! */
|
||||||
LOG_INFO("%s: target has %d breakpoints, %d watchpoints",
|
LOG_TARGET_INFO(target, "target has %d breakpoints, %d watchpoints",
|
||||||
target_name(target),
|
|
||||||
cortex_m->fp_num_code,
|
cortex_m->fp_num_code,
|
||||||
cortex_m->dwt_num_comp);
|
cortex_m->dwt_num_comp);
|
||||||
}
|
}
|
||||||
|
@ -2462,7 +2460,7 @@ static int cortex_m_dcc_read(struct target *target, uint8_t *value, uint8_t *ctr
|
||||||
*ctrl = (uint8_t)dcrdr;
|
*ctrl = (uint8_t)dcrdr;
|
||||||
*value = (uint8_t)(dcrdr >> 8);
|
*value = (uint8_t)(dcrdr >> 8);
|
||||||
|
|
||||||
LOG_DEBUG("data 0x%x ctrl 0x%x", *value, *ctrl);
|
LOG_TARGET_DEBUG(target, "data 0x%x ctrl 0x%x", *value, *ctrl);
|
||||||
|
|
||||||
/* write ack back to software dcc register
|
/* write ack back to software dcc register
|
||||||
* signify we have read data */
|
* signify we have read data */
|
||||||
|
@ -2569,7 +2567,7 @@ static int cortex_m_target_create(struct target *target, Jim_Interp *interp)
|
||||||
|
|
||||||
struct cortex_m_common *cortex_m = calloc(1, sizeof(struct cortex_m_common));
|
struct cortex_m_common *cortex_m = calloc(1, sizeof(struct cortex_m_common));
|
||||||
if (!cortex_m) {
|
if (!cortex_m) {
|
||||||
LOG_ERROR("No memory creating target");
|
LOG_TARGET_ERROR(target, "No memory creating target");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2626,7 +2624,7 @@ COMMAND_HANDLER(handle_cortex_m_vector_catch_command)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (!target_was_examined(target)) {
|
if (!target_was_examined(target)) {
|
||||||
LOG_ERROR("Target not examined yet");
|
LOG_TARGET_ERROR(target, "Target not examined yet");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2655,7 +2653,7 @@ COMMAND_HANDLER(handle_cortex_m_vector_catch_command)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == ARRAY_SIZE(vec_ids)) {
|
if (i == ARRAY_SIZE(vec_ids)) {
|
||||||
LOG_ERROR("No CM3 vector '%s'", CMD_ARGV[CMD_ARGC]);
|
LOG_TARGET_ERROR(target, "No CM3 vector '%s'", CMD_ARGV[CMD_ARGC]);
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2745,7 +2743,7 @@ COMMAND_HANDLER(handle_cortex_m_reset_config_command)
|
||||||
else if (strcmp(*CMD_ARGV, "vectreset") == 0) {
|
else if (strcmp(*CMD_ARGV, "vectreset") == 0) {
|
||||||
if (target_was_examined(target)
|
if (target_was_examined(target)
|
||||||
&& !cortex_m->vectreset_supported)
|
&& !cortex_m->vectreset_supported)
|
||||||
LOG_WARNING("VECTRESET is not supported on your Cortex-M core!");
|
LOG_TARGET_WARNING(target, "VECTRESET is not supported on your Cortex-M core!");
|
||||||
else
|
else
|
||||||
cortex_m->soft_reset_config = CORTEX_M_RESET_VECTRESET;
|
cortex_m->soft_reset_config = CORTEX_M_RESET_VECTRESET;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue