- versaloon_interface.adaptors.gpio.config(0, GPIO_SRST | GPIO_TRST,
- GPIO_TRST, GPIO_SRST, GPIO_SRST);
- if (ERROR_OK != versaloon_interface.adaptors.peripheral_commit())
- {
- return ERROR_FAIL;
+ versaloon_interface.adaptors.gpio.config(0, GPIO_SRST, 0, GPIO_SRST,
+ GPIO_SRST);
+ versaloon_interface.adaptors.delay.delayms(100);
+ versaloon_interface.adaptors.peripheral_commit();
+
+ if (swd_mode) {
+ versaloon_interface.adaptors.gpio.config(0, GPIO_TRST, 0,
+ GPIO_TRST, GPIO_TRST);
+ versaloon_interface.adaptors.swd.init(0);
+ vsllink_swd_frequency(jtag_get_speed_khz() * 1000);
+ vsllink_swd_switch_seq(JTAG_TO_SWD);
+
+ } else {
+ /* malloc buffer size for tap */
+ tap_buffer_size = versaloon_interface.usb_setting.buf_size / 2 - 32;
+ vsllink_free_buffer();
+ tdi_buffer = malloc(tap_buffer_size);
+ tdo_buffer = malloc(tap_buffer_size);
+ tms_buffer = malloc(tap_buffer_size);
+ if ((!tdi_buffer) || (!tdo_buffer) || (!tms_buffer)) {
+ vsllink_quit();
+ return ERROR_FAIL;
+ }
+
+ versaloon_interface.adaptors.jtag_raw.init(0);
+ versaloon_interface.adaptors.jtag_raw.config(0, jtag_get_speed_khz());
+ versaloon_interface.adaptors.gpio.config(0, GPIO_SRST | GPIO_TRST,
+ GPIO_TRST, GPIO_SRST, GPIO_SRST);