imx_gpio: enable only the transport specific gpio 57/5557/3
authorAntonio Borneo <borneo.antonio@gmail.com>
Wed, 1 Apr 2020 09:53:30 +0000 (11:53 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Mon, 13 Jul 2020 23:38:36 +0000 (00:38 +0100)
Change-Id: Idb1fabbc1e9385f8c23b643584bf7863ea91ffbf
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5557
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/jtag/drivers/imx_gpio.c

index b96b433f7e2195bee37b824fea996393d454200c..c80e842186985b25d3d9c1f08b6aa2221d16307c 100644 (file)
@@ -22,6 +22,7 @@
 #endif
 
 #include <jtag/interface.h>
+#include <transport/transport.h>
 #include "bitbang.h"
 
 #include <sys/mman.h>
@@ -478,15 +479,13 @@ static int imx_gpio_init(void)
 
        LOG_INFO("imx_gpio GPIO JTAG/SWD bitbang driver");
 
-       if (imx_gpio_jtag_mode_possible()) {
-               if (imx_gpio_swd_mode_possible())
-                       LOG_INFO("JTAG and SWD modes enabled");
-               else
-                       LOG_INFO("JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)");
-       } else if (imx_gpio_swd_mode_possible()) {
-               LOG_INFO("SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)");
-       } else {
-               LOG_ERROR("Require tck, tms, tdi and tdo gpios for JTAG mode and/or swclk and swdio gpio for SWD mode");
+       if (transport_is_jtag() && !imx_gpio_jtag_mode_possible()) {
+               LOG_ERROR("Require tck, tms, tdi and tdo gpios for JTAG mode");
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+       if (transport_is_swd() && !imx_gpio_swd_mode_possible()) {
+               LOG_ERROR("Require swclk and swdio gpio for SWD mode");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -496,7 +495,6 @@ static int imx_gpio_init(void)
                return ERROR_JTAG_INIT_FAILED;
        }
 
-
        LOG_INFO("imx_gpio mmap: pagesize: %u, regionsize: %u",
                        (unsigned int) sysconf(_SC_PAGE_SIZE), IMX_GPIO_REGS_COUNT * IMX_GPIO_SIZE);
        pio_base = mmap(NULL, IMX_GPIO_REGS_COUNT * IMX_GPIO_SIZE,
@@ -513,7 +511,7 @@ static int imx_gpio_init(void)
         * Configure TDO as an input, and TDI, TCK, TMS, TRST, SRST
         * as outputs.  Drive TDI and TCK low, and TMS/TRST/SRST high.
         */
-       if (imx_gpio_jtag_mode_possible()) {
+       if (transport_is_jtag()) {
                tdo_gpio_mode = gpio_mode_get(tdo_gpio);
                tdi_gpio_mode = gpio_mode_get(tdi_gpio);
                tck_gpio_mode = gpio_mode_get(tck_gpio);
@@ -527,8 +525,15 @@ static int imx_gpio_init(void)
                gpio_mode_output_set(tdi_gpio);
                gpio_mode_output_set(tck_gpio);
                gpio_mode_output_set(tms_gpio);
+
+               if (trst_gpio != -1) {
+                       trst_gpio_mode = gpio_mode_get(trst_gpio);
+                       gpio_set(trst_gpio);
+                       gpio_mode_output_set(trst_gpio);
+               }
        }
-       if (imx_gpio_swd_mode_possible()) {
+
+       if (transport_is_swd()) {
                swclk_gpio_mode = gpio_mode_get(swclk_gpio);
                swdio_gpio_mode = gpio_mode_get(swdio_gpio);
 
@@ -537,11 +542,7 @@ static int imx_gpio_init(void)
                gpio_mode_output_set(swclk_gpio);
                gpio_mode_output_set(swdio_gpio);
        }
-       if (trst_gpio != -1) {
-               trst_gpio_mode = gpio_mode_get(trst_gpio);
-               gpio_set(trst_gpio);
-               gpio_mode_output_set(trst_gpio);
-       }
+
        if (srst_gpio != -1) {
                srst_gpio_mode = gpio_mode_get(srst_gpio);
                gpio_set(srst_gpio);
@@ -557,18 +558,21 @@ static int imx_gpio_init(void)
 
 static int imx_gpio_quit(void)
 {
-       if (imx_gpio_jtag_mode_possible()) {
+       if (transport_is_jtag()) {
                gpio_mode_set(tdo_gpio, tdo_gpio_mode);
                gpio_mode_set(tdi_gpio, tdi_gpio_mode);
                gpio_mode_set(tck_gpio, tck_gpio_mode);
                gpio_mode_set(tms_gpio, tms_gpio_mode);
+
+               if (trst_gpio != -1)
+                       gpio_mode_set(trst_gpio, trst_gpio_mode);
        }
-       if (imx_gpio_swd_mode_possible()) {
+
+       if (transport_is_swd()) {
                gpio_mode_set(swclk_gpio, swclk_gpio_mode);
                gpio_mode_set(swdio_gpio, swdio_gpio_mode);
        }
-       if (trst_gpio != -1)
-               gpio_mode_set(trst_gpio, trst_gpio_mode);
+
        if (srst_gpio != -1)
                gpio_mode_set(srst_gpio, srst_gpio_mode);
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)