aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-05-01 14:29:43 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2012-05-14 09:32:57 +0000
commit57260831dd0172c1dd7fe25e364e393612af0d00 (patch)
tree4ae4ee0fee4c402a14c7ef9d8ee67de7ea61803c /src
parentcaeb05720595287e9a9865ff5f9e764c92be152d (diff)
mips: support connecting under reset
Some targets support connecting while the target's srst is asserted. Tested on pic32 family. Change-Id: I0d20c40af6d031d1306043893e95e61f484c0a87 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/608 Tested-by: jenkins
Diffstat (limited to 'src')
-rw-r--r--src/target/mips_m4k.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c
index c64d5cf6..1a10d5a9 100644
--- a/src/target/mips_m4k.c
+++ b/src/target/mips_m4k.c
@@ -222,15 +222,22 @@ static int mips_m4k_assert_reset(struct target *target)
{
struct mips_m4k_common *mips_m4k = target_to_m4k(target);
struct mips_ejtag *ejtag_info = &mips_m4k->mips32.ejtag_info;
- int assert_srst = 1;
LOG_DEBUG("target->state: %s",
target_state_name(target));
enum reset_types jtag_reset_config = jtag_get_reset_config();
- if (!(jtag_reset_config & RESET_HAS_SRST))
- assert_srst = 0;
+ /* some cores support connecting while srst is asserted
+ * use that mode is it has been configured */
+
+ bool srst_asserted = false;
+
+ if (!(jtag_reset_config & RESET_SRST_PULLS_TRST) &&
+ (jtag_reset_config & RESET_SRST_NO_GATING)) {
+ jtag_add_reset(0, 1);
+ srst_asserted = true;
+ }
if (target->reset_halt) {
/* use hardware to catch reset */
@@ -238,11 +245,11 @@ static int mips_m4k_assert_reset(struct target *target)
} else
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_NORMALBOOT);
- if (assert_srst) {
+ if (jtag_reset_config & RESET_HAS_SRST) {
/* here we should issue a srst only, but we may have to assert trst as well */
if (jtag_reset_config & RESET_SRST_PULLS_TRST)
jtag_add_reset(1, 1);
- else
+ else if (!srst_asserted)
jtag_add_reset(0, 1);
} else {
if (mips_m4k->is_pic32mx) {