- INP_GPIO(tdo_gpio);
-
- GPIO_CLR = 1<<tdi_gpio | 1<<tck_gpio | 1<<swdio_gpio | 1<<swclk_gpio;
- GPIO_SET = 1<<tms_gpio;
-
- OUT_GPIO(tdi_gpio);
- OUT_GPIO(tck_gpio);
- OUT_GPIO(tms_gpio);
- OUT_GPIO(swclk_gpio);
- OUT_GPIO(swdio_gpio);
- if (trst_gpio != -1) {
- trst_gpio_mode = MODE_GPIO(trst_gpio);
- GPIO_SET = 1 << trst_gpio;
- OUT_GPIO(trst_gpio);
+ if (transport_is_jtag()) {
+ tdo_gpio_mode = MODE_GPIO(tdo_gpio);
+ tdi_gpio_mode = MODE_GPIO(tdi_gpio);
+ tck_gpio_mode = MODE_GPIO(tck_gpio);
+ tms_gpio_mode = MODE_GPIO(tms_gpio);
+
+ INP_GPIO(tdo_gpio);
+
+ GPIO_CLR = 1<<tdi_gpio | 1<<tck_gpio;
+ GPIO_SET = 1<<tms_gpio;
+
+ OUT_GPIO(tdi_gpio);
+ OUT_GPIO(tck_gpio);
+ OUT_GPIO(tms_gpio);
+
+ if (is_gpio_valid(trst_gpio)) {
+ trst_gpio_mode = MODE_GPIO(trst_gpio);
+ GPIO_SET = 1 << trst_gpio;
+ OUT_GPIO(trst_gpio);
+ }
+ }
+
+ if (transport_is_swd()) {
+ /* Make buffer an output before the GPIO connected to it */
+ if (is_gpio_valid(swdio_dir_gpio)) {
+ swdio_dir_gpio_mode = MODE_GPIO(swdio_dir_gpio);
+ GPIO_SET = 1 << swdio_dir_gpio;
+ OUT_GPIO(swdio_dir_gpio);
+ }
+
+ swclk_gpio_mode = MODE_GPIO(swclk_gpio);
+ swdio_gpio_mode = MODE_GPIO(swdio_gpio);
+
+ GPIO_CLR = 1<<swdio_gpio | 1<<swclk_gpio;
+
+ OUT_GPIO(swclk_gpio);
+ OUT_GPIO(swdio_gpio);