diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index d55888ca8dc2f7561b7028bc264d7b52baad80d5..cc7082de917b3826dda356f07a84a7da75385d73 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -1570,7 +1570,7 @@ int interface_jtag_execute_queue(void)
 		return ERROR_FAIL;
 	}
 
-	retval = jtag->execute_queue();
+	retval = default_interface_jtag_execute_queue();
 
 	if (retval == ERROR_OK)
 	{
@@ -1592,6 +1592,11 @@ int interface_jtag_execute_queue(void)
 }
 #endif
 
+int default_interface_jtag_execute_queue(void)
+{
+	return jtag->execute_queue();
+}
+
 void jtag_execute_queue_noclear(void)
 {
 	/* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h
index 4a1be9fc20d5cb6f5616ee047f06ea23a2334739..668486332f134e011e04089a63244ba81e36a8c7 100644
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -869,6 +869,13 @@ extern int interface_jtag_add_sleep(u32 us);
 extern int interface_jtag_add_clocks(int num_cycles);
 extern int interface_jtag_execute_queue(void);
 
+/**
+ * Calls the interface callback to execute the queue.  This routine
+ * is used by the JTAG driver layer and should not be called directly.
+ */
+extern int default_interface_jtag_execute_queue(void);
+
+
 #endif // INCLUDE_JTAG_MINIDRIVER_H
 
 /* this allows JTAG devices to implement the entire jtag_xxx() layer in hw/sw */