stlink: add armv7m stlink handling
This enables us to better handle some of the low level functions that the stlink does not support. It also enables us to share a few more of the standard cortex_m3 functions if necessary. Change-Id: I7a2c57450122012ec189245d8879d8967913e00e Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/637 Tested-by: jenkins__archive__
parent
f9ea791e9b
commit
ec5e4bae25
|
@ -1096,14 +1096,6 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
|
||||||
|
|
||||||
LOG_DEBUG(" ");
|
LOG_DEBUG(" ");
|
||||||
|
|
||||||
/* test for initialized low level jtag hardware
|
|
||||||
* this always fails for stlink hardware
|
|
||||||
*/
|
|
||||||
if (!dap->jtag_info) {
|
|
||||||
LOG_DEBUG("No low level jtag hardware found");
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* JTAG-DP or SWJ-DP, in JTAG mode
|
/* JTAG-DP or SWJ-DP, in JTAG mode
|
||||||
* ... for SWD mode this is patched as part
|
* ... for SWD mode this is patched as part
|
||||||
* of link switchover
|
* of link switchover
|
||||||
|
|
|
@ -171,9 +171,11 @@ struct armv7m_common {
|
||||||
struct adiv5_dap dap;
|
struct adiv5_dap dap;
|
||||||
|
|
||||||
int fp_feature;
|
int fp_feature;
|
||||||
|
|
||||||
uint32_t demcr;
|
uint32_t demcr;
|
||||||
|
|
||||||
|
/* stlink is a high level adapter, does not support all functions */
|
||||||
|
bool stlink;
|
||||||
|
|
||||||
/* Direct processor core register read and writes */
|
/* Direct processor core register read and writes */
|
||||||
int (*load_core_reg_u32)(struct target *target,
|
int (*load_core_reg_u32)(struct target *target,
|
||||||
enum armv7m_regtype type, uint32_t num, uint32_t *value);
|
enum armv7m_regtype type, uint32_t num, uint32_t *value);
|
||||||
|
|
|
@ -1780,9 +1780,13 @@ int cortex_m3_examine(struct target *target)
|
||||||
struct adiv5_dap *swjdp = &cortex_m3->armv7m.dap;
|
struct adiv5_dap *swjdp = &cortex_m3->armv7m.dap;
|
||||||
struct armv7m_common *armv7m = target_to_armv7m(target);
|
struct armv7m_common *armv7m = target_to_armv7m(target);
|
||||||
|
|
||||||
retval = ahbap_debugport_init(swjdp);
|
/* stlink shares the examine handler but does not support
|
||||||
if (retval != ERROR_OK)
|
* all its calls */
|
||||||
return retval;
|
if (!armv7m->stlink) {
|
||||||
|
retval = ahbap_debugport_init(swjdp);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
if (!target_was_examined(target)) {
|
if (!target_was_examined(target)) {
|
||||||
target_set_examined(target);
|
target_set_examined(target);
|
||||||
|
|
|
@ -278,6 +278,7 @@ static int stm32_stlink_init_arch_info(struct target *target,
|
||||||
armv7m->store_core_reg_u32 = stm32_stlink_store_core_reg_u32;
|
armv7m->store_core_reg_u32 = stm32_stlink_store_core_reg_u32;
|
||||||
|
|
||||||
armv7m->examine_debug_reason = stm32_stlink_examine_debug_reason;
|
armv7m->examine_debug_reason = stm32_stlink_examine_debug_reason;
|
||||||
|
armv7m->stlink = true;
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue