* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
static struct jtag_interface *jtag;
-const struct swd_driver *swd;
-
/* configuration */
struct jtag_interface *jtag_interface;
* It is also implicitly disabled while TRST is active and
* while SRST is gating the JTAG clock.
*/
+ if (!transport_is_jtag())
+ return jtag_poll;
+
if (!jtag_poll || jtag_trst != 0)
return false;
return jtag_srst == 0 || (jtag_reset_config & RESET_SRST_NO_GATING);
int total_ir_length = 0;
uint8_t *ir_test = NULL;
struct scan_field field;
- int val;
+ uint64_t val;
int chain_pos = 0;
int retval;
*/
if (tap->ir_length == 0) {
tap->ir_length = 2;
- while ((val = buf_get_u32(ir_test, chain_pos, tap->ir_length + 1)) == 1
- && tap->ir_length <= 32) {
+ while ((val = buf_get_u64(ir_test, chain_pos, tap->ir_length + 1)) == 1
+ && tap->ir_length <= 64) {
tap->ir_length++;
}
LOG_WARNING("AUTO %s - use \"... -irlen %d\"",
* this part of the JTAG spec, so their capture mask/value
* attributes might disable this test.
*/
- val = buf_get_u32(ir_test, chain_pos, tap->ir_length);
+ val = buf_get_u64(ir_test, chain_pos, tap->ir_length);
if ((val & tap->ir_capture_mask) != tap->ir_capture_value) {
- LOG_ERROR("%s: IR capture error; saw 0x%0*x not 0x%0*x",
+ LOG_ERROR("%s: IR capture error; saw 0x%0*" PRIx64 " not 0x%0*" PRIx32,
jtag_tap_name(tap),
- (tap->ir_length + 7) / tap->ir_length,
- val,
- (tap->ir_length + 7) / tap->ir_length,
- (unsigned) tap->ir_capture_value);
+ (tap->ir_length + 7) / tap->ir_length, val,
+ (tap->ir_length + 7) / tap->ir_length, tap->ir_capture_value);
retval = ERROR_JTAG_INIT_FAILED;
goto done;
}
- LOG_DEBUG("%s: IR capture 0x%0*x", jtag_tap_name(tap),
+ LOG_DEBUG("%s: IR capture 0x%0*" PRIx64, jtag_tap_name(tap),
(tap->ir_length + 7) / tap->ir_length, val);
chain_pos += tap->ir_length;
}
/* verify the '11' sentinel we wrote is returned at the end */
- val = buf_get_u32(ir_test, chain_pos, 2);
+ val = buf_get_u64(ir_test, chain_pos, 2);
if (val != 0x3) {
char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
{
jtag_unregister_event_callback(&jtag_reset_callback, tap);
- /** @todo is anything missing? no memory leaks please */
- free((void *)tap->expected);
- free((void *)tap->expected_ids);
- free((void *)tap->chip);
- free((void *)tap->tapname);
- free((void *)tap->dotted_name);
+ free(tap->expected);
+ free(tap->expected_mask);
+ free(tap->expected_ids);
+ free(tap->cur_instr);
+ free(tap->chip);
+ free(tap->tapname);
+ free(tap->dotted_name);
free(tap);
}
jtag_add_reset(0, 1);
} else if (transport_is_swd())
swd_add_reset(1);
+ else if (transport_is_cmsis_dap())
+ swd_add_reset(1); /* FIXME */
else if (get_current_transport() != NULL)
LOG_ERROR("reset is not supported on %s",
get_current_transport()->name);
jtag_add_reset(0, 0);
else if (transport_is_swd())
swd_add_reset(0);
+ else if (transport_is_cmsis_dap())
+ swd_add_reset(0); /* FIXME */
else if (get_current_transport() != NULL)
LOG_ERROR("reset is not supported on %s",
get_current_transport()->name);