X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fcore.c;h=f82b05e1e36a4890109964dfddd8489ef75237b4;hb=47eceaa229c98db9a308f6f890bc8740320903f0;hp=2f7effe377b690e8b3158706061f9200b2c16581;hpb=08d4411b59dd8bd0e7d8009003b71d23acbf6eee;p=openocd.git diff --git a/src/jtag/core.c b/src/jtag/core.c index 2f7effe377..f82b05e1e3 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -134,8 +134,6 @@ static int jtag_speed; static struct jtag_interface *jtag; -const struct swd_driver *swd; - /* configuration */ struct jtag_interface *jtag_interface; @@ -168,6 +166,9 @@ bool is_jtag_poll_safe(void) * 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); @@ -1177,7 +1178,7 @@ static int jtag_validate_ircapture(void) 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; @@ -1236,8 +1237,8 @@ static int jtag_validate_ircapture(void) */ 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\"", @@ -1251,25 +1252,23 @@ static int jtag_validate_ircapture(void) * 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); @@ -1328,11 +1327,11 @@ void jtag_tap_free(struct jtag_tap *tap) 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_ids); + free(tap->chip); + free(tap->tapname); + free(tap->dotted_name); free(tap); } @@ -1826,6 +1825,8 @@ void adapter_assert_reset(void) 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); @@ -1839,6 +1840,8 @@ void adapter_deassert_reset(void) 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);