From afca2e817dbc7592abd49a32e3457772afc98cd7 Mon Sep 17 00:00:00 2001
From: Paul Fertser <fercerpav@gmail.com>
Date: Sat, 11 May 2013 15:55:20 +0400
Subject: [PATCH] cortex_m, hla_target: do not try asserting SRST if it's not
 present

This should cover all the cases when RESET_SRST_NO_GATING is set
without RESET_HAS_SRST. This might happen when RESET_SRST_NO_GATING is
automatically set by a target code (and not from tcl).

However, there're some other places (mips_m4k, arm7_9_common) where
adding RESET_SRST_PULLS_TRST would lead to trying to use SRST even if
it's not present. Currently it's impossible for the user to enable
that flag without enabling SRST.

Change-Id: Ib1c6f68feed0b8057d55afd5f260bb22ab332ced
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/1405
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
---
 src/target/cortex_m.c   | 3 ++-
 src/target/hla_target.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 6fba9259b..9521085b1 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -989,7 +989,8 @@ static int cortex_m3_assert_reset(struct target *target)
 
 	bool srst_asserted = false;
 
-	if (jtag_reset_config & RESET_SRST_NO_GATING) {
+	if ((jtag_reset_config & RESET_HAS_SRST) &&
+	    (jtag_reset_config & RESET_SRST_NO_GATING)) {
 		adapter_assert_reset();
 		srst_asserted = true;
 	}
diff --git a/src/target/hla_target.c b/src/target/hla_target.c
index 65e056863..4564d46c9 100644
--- a/src/target/hla_target.c
+++ b/src/target/hla_target.c
@@ -428,7 +428,8 @@ static int adapter_assert_reset(struct target *target)
 
 	bool srst_asserted = false;
 
-	if (jtag_reset_config & RESET_SRST_NO_GATING) {
+	if ((jtag_reset_config & RESET_HAS_SRST) &&
+	    (jtag_reset_config & RESET_SRST_NO_GATING)) {
 		jtag_add_reset(0, 1);
 		res = adapter->layout->api->assert_srst(adapter->fd, 0);
 		srst_asserted = true;