diff --git a/src/jtag/core.c b/src/jtag/core.c
index e6bde518f61659cb9e8aef3f99174433b54ba9a2..f7d55b79301624e889e909d41537593c6b5e66d2 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -68,10 +68,12 @@ static const char *jtag_event_strings[] =
 
 /*
  * JTAG adapters must initialize with TRST and SRST de-asserted
- * (they're negative logic, so that means *high*)
+ * (they're negative logic, so that means *high*).  But some
+ * hardware doesn't necessarily work that way ... so set things
+ * up so that jtag_init() always forces that state.
  */
-static int jtag_trst = 0;
-static int jtag_srst = 0;
+static int jtag_trst = -1;
+static int jtag_srst = -1;
 
 /**
  * List all TAPs that have been created.
@@ -1337,9 +1339,15 @@ int jtag_init_reset(struct command_context_s *cmd_ctx)
 int jtag_init(struct command_context_s *cmd_ctx)
 {
 	int retval;
+
 	if ((retval = jtag_interface_init(cmd_ctx)) != ERROR_OK)
 		return retval;
 
+	/* guard against oddball hardware: force resets to be inactive */
+	jtag_add_reset(0, 0);
+	if ((retval = jtag_execute_queue()) != ERROR_OK)
+		return retval;
+
 	if (Jim_Eval_Named(interp, "jtag_init", __FILE__, __LINE__) != JIM_OK)
 		return ERROR_FAIL;