diff options
author | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-11 09:39:58 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-05-14 09:38:59 +0000 |
commit | ec5e4bae251e01d2b7681e370a6c5e82a81e5962 (patch) | |
tree | e1afef97b527c1807e4bc53ed4b0194527f28a96 /src | |
parent | f9ea791e9b89bed91200f27202f9a95dd4e8640b (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/target/arm_adi_v5.c | 8 | ||||
-rw-r--r-- | src/target/armv7m.h | 4 | ||||
-rw-r--r-- | src/target/cortex_m.c | 10 | ||||
-rw-r--r-- | src/target/stm32_stlink.c | 1 |
4 files changed, 11 insertions, 12 deletions
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c index 9a98f61d..fd3a92ce 100644 --- a/src/target/arm_adi_v5.c +++ b/src/target/arm_adi_v5.c @@ -1096,14 +1096,6 @@ int ahbap_debugport_init(struct adiv5_dap *dap) 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 * ... for SWD mode this is patched as part * of link switchover diff --git a/src/target/armv7m.h b/src/target/armv7m.h index 6002b571..bcf0ee1a 100644 --- a/src/target/armv7m.h +++ b/src/target/armv7m.h @@ -171,9 +171,11 @@ struct armv7m_common { struct adiv5_dap dap; int fp_feature; - uint32_t demcr; + /* stlink is a high level adapter, does not support all functions */ + bool stlink; + /* Direct processor core register read and writes */ int (*load_core_reg_u32)(struct target *target, enum armv7m_regtype type, uint32_t num, uint32_t *value); diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index f992bde4..acf28050 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -1780,9 +1780,13 @@ int cortex_m3_examine(struct target *target) struct adiv5_dap *swjdp = &cortex_m3->armv7m.dap; struct armv7m_common *armv7m = target_to_armv7m(target); - retval = ahbap_debugport_init(swjdp); - if (retval != ERROR_OK) - return retval; + /* stlink shares the examine handler but does not support + * all its calls */ + if (!armv7m->stlink) { + retval = ahbap_debugport_init(swjdp); + if (retval != ERROR_OK) + return retval; + } if (!target_was_examined(target)) { target_set_examined(target); diff --git a/src/target/stm32_stlink.c b/src/target/stm32_stlink.c index 4044654c..9afaae0b 100644 --- a/src/target/stm32_stlink.c +++ b/src/target/stm32_stlink.c @@ -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->examine_debug_reason = stm32_stlink_examine_debug_reason; + armv7m->stlink = true; return ERROR_OK; } |