bcm2835gpio: enable only the transport specific gpio 58/5558/3
authorAntonio Borneo <borneo.antonio@gmail.com>
Wed, 1 Apr 2020 10:03:47 +0000 (12:03 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Mon, 13 Jul 2020 23:38:42 +0000 (00:38 +0100)
Change-Id: Ice6744600079d5994d628bb3b782aa36e71f862e
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5558
Tested-by: jenkins
src/jtag/drivers/bcm2835gpio.c

index 77ae5668f0cb4cae7ec4d45fa9c84cefa864f5ea..f868516d9a0d4ef0d12933f5fd4dc71cc92c86b6 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include <jtag/interface.h>
+#include <transport/transport.h>
 #include "bitbang.h"
 
 #include <sys/mman.h>
@@ -456,15 +457,13 @@ static int bcm2835gpio_init(void)
 
        LOG_INFO("BCM2835 GPIO JTAG/SWD bitbang driver");
 
-       if (bcm2835gpio_jtag_mode_possible()) {
-               if (bcm2835gpio_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 (bcm2835gpio_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() && !bcm2835gpio_jtag_mode_possible()) {
+               LOG_ERROR("Require tck, tms, tdi and tdo gpios for JTAG mode");
+               return ERROR_JTAG_INIT_FAILED;
+       }
+
+       if (transport_is_swd() && !bcm2835gpio_swd_mode_possible()) {
+               LOG_ERROR("Require swclk and swdio gpio for SWD mode");
                return ERROR_JTAG_INIT_FAILED;
        }
 
@@ -500,31 +499,42 @@ static int bcm2835gpio_init(void)
        /* set 4mA drive strength, slew rate limited, hysteresis on */
        pads_base[BCM2835_PADS_GPIO_0_27_OFFSET] = 0x5a000008 + 1;
 
-       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);
-       swclk_gpio_mode = MODE_GPIO(swclk_gpio);
-       swdio_gpio_mode = MODE_GPIO(swdio_gpio);
        /*
         * Configure TDO as an input, and TDI, TCK, TMS, TRST, SRST
         * as outputs.  Drive TDI and TCK low, and TMS/TRST/SRST high.
         */
-       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 (trst_gpio != -1) {
+                       trst_gpio_mode = MODE_GPIO(trst_gpio);
+                       GPIO_SET = 1 << trst_gpio;
+                       OUT_GPIO(trst_gpio);
+               }
        }
+
+       if (transport_is_swd()) {
+               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);
+       }
+
        if (srst_gpio != -1) {
                srst_gpio_mode = MODE_GPIO(srst_gpio);
                GPIO_SET = 1 << srst_gpio;
@@ -540,14 +550,20 @@ static int bcm2835gpio_init(void)
 
 static int bcm2835gpio_quit(void)
 {
-       SET_MODE_GPIO(tdo_gpio, tdo_gpio_mode);
-       SET_MODE_GPIO(tdi_gpio, tdi_gpio_mode);
-       SET_MODE_GPIO(tck_gpio, tck_gpio_mode);
-       SET_MODE_GPIO(tms_gpio, tms_gpio_mode);
-       SET_MODE_GPIO(swclk_gpio, swclk_gpio_mode);
-       SET_MODE_GPIO(swdio_gpio, swdio_gpio_mode);
-       if (trst_gpio != -1)
-               SET_MODE_GPIO(trst_gpio, trst_gpio_mode);
+       if (transport_is_jtag()) {
+               SET_MODE_GPIO(tdo_gpio, tdo_gpio_mode);
+               SET_MODE_GPIO(tdi_gpio, tdi_gpio_mode);
+               SET_MODE_GPIO(tck_gpio, tck_gpio_mode);
+               SET_MODE_GPIO(tms_gpio, tms_gpio_mode);
+               if (trst_gpio != -1)
+                       SET_MODE_GPIO(trst_gpio, trst_gpio_mode);
+       }
+
+       if (transport_is_swd()) {
+               SET_MODE_GPIO(swclk_gpio, swclk_gpio_mode);
+               SET_MODE_GPIO(swdio_gpio, swdio_gpio_mode);
+       }
+
        if (srst_gpio != -1)
                SET_MODE_GPIO(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)