jtag: Add an option to ignore the bypass bit 02/6802/3
authorAdrien Grassein <adrien.grassein@gmail.com>
Thu, 6 Jan 2022 18:06:47 +0000 (19:06 +0100)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 22 Jan 2022 10:20:17 +0000 (10:20 +0000)
Some CPU wrongly indicate the bypas bit in the codeid.
It's the case of the NanoXplore NG-ULTRA chip that export a
configurable (and potentially invalid) ID for one of
its component.
Add an option to ignore it.

Signed-off-by: Adrien Grassein <adrien.grassein@gmail.com>
Change-Id: Ic59743f23bfc4d4e23da0e8535fec8ca9e87ff1a
Reviewed-on: https://review.openocd.org/c/openocd/+/6802
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-by: Oleksij Rempel <linux@rempel-privat.de>
doc/openocd.texi
src/jtag/core.c
src/jtag/hla/hla_tcl.c
src/jtag/jtag.h
src/jtag/tcl.c

index cee54ebf7a26902a56928d476edabb146e926b72..ed92eb4ec5bff5b2ca17e5e8d4d074de82eda9a3 100644 (file)
@@ -4153,6 +4153,10 @@ option. When vendors put out multiple versions of a chip, or use the same
 JTAG-level ID for several largely-compatible chips, it may be more practical
 to ignore the version field than to update config files to handle all of
 the various chip IDs. The version field is defined as bit 28-31 of the IDCODE.
+@item @code{-ignore-bypass}
+@*Specify this to ignore the 'bypass' bit of the idcode. Some vendor put
+an invalid idcode regarding this bit. Specify this to ignore this bit and
+to not consider this tap in bypass mode.
 @item @code{-ircapture} @var{NUMBER}
 @*The bit pattern loaded by the TAP into the JTAG shift register
 on entry to the @sc{ircapture} state, such as 0x01.
index 29ab6cc1cc7d3f38ac54f08615d50902a097ebd6..bbc9877ee9ee48db02632f2a0a8a21bdffef5c02 100644 (file)
@@ -1273,7 +1273,7 @@ static int jtag_examine_chain(void)
                        jtag_tap_init(tap);
                }
 
-               if ((idcode & 1) == 0) {
+               if ((idcode & 1) == 0 && !tap->ignore_bypass) {
                        /* Zero for LSB indicates a device in bypass */
                        LOG_INFO("TAP %s does not have valid IDCODE (idcode=0x%" PRIx32 ")",
                                        tap->dotted_name, idcode);
index 5aa330145452b9f34a30453127167bd1501ab085..6b206d2316631f3b1feebe1de7cad1598acccb62 100644 (file)
@@ -59,6 +59,7 @@ static int jim_newtap_expected_id(struct jim_nvp *n, struct jim_getopt_info *goi
 #define NTAP_OPT_DISABLED  4
 #define NTAP_OPT_EXPECTED_ID 5
 #define NTAP_OPT_VERSION   6
+#define NTAP_OPT_BYPASS    7
 
 static int jim_hl_newtap_cmd(struct jim_getopt_info *goi)
 {
@@ -75,6 +76,7 @@ static int jim_hl_newtap_cmd(struct jim_getopt_info *goi)
                { .name = "-disable",       .value = NTAP_OPT_DISABLED },
                { .name = "-expected-id",       .value = NTAP_OPT_EXPECTED_ID },
                { .name = "-ignore-version",       .value = NTAP_OPT_VERSION },
+               { .name = "-ignore-bypass",       .value = NTAP_OPT_BYPASS },
                { .name = NULL, .value = -1},
        };
 
index d7d7d977c2dc72de9be436bb56251c5f473742bd..def594ee3ff5fb86dd3ddbee33b84afeaacd719b 100644 (file)
@@ -135,6 +135,9 @@ struct jtag_tap {
        /** Flag saying whether to ignore version field in expected_ids[] */
        bool ignore_version;
 
+       /** Flag saying whether to ignore the bypass bit in the code */
+       bool ignore_bypass;
+
        /** current instruction */
        uint8_t *cur_instr;
        /** Bypass register selected */
index 566c406b93f08face78671603fbc9b7a8f84d924..e6e976d77d0ab05f08b5088e46273faed2588fc5 100644 (file)
@@ -470,6 +470,7 @@ static int jim_newtap_expected_id(struct jim_nvp *n, struct jim_getopt_info *goi
 #define NTAP_OPT_DISABLED  4
 #define NTAP_OPT_EXPECTED_ID 5
 #define NTAP_OPT_VERSION   6
+#define NTAP_OPT_BYPASS    7
 
 static int jim_newtap_ir_param(struct jim_nvp *n, struct jim_getopt_info *goi,
        struct jtag_tap *tap)
@@ -532,6 +533,7 @@ static int jim_newtap_cmd(struct jim_getopt_info *goi)
                { .name = "-disable",       .value = NTAP_OPT_DISABLED },
                { .name = "-expected-id",       .value = NTAP_OPT_EXPECTED_ID },
                { .name = "-ignore-version",       .value = NTAP_OPT_VERSION },
+               { .name = "-ignore-bypass",       .value = NTAP_OPT_BYPASS },
                { .name = NULL,       .value = -1 },
        };
 
@@ -617,6 +619,9 @@ static int jim_newtap_cmd(struct jim_getopt_info *goi)
                    case NTAP_OPT_VERSION:
                            tap->ignore_version = true;
                            break;
+                   case NTAP_OPT_BYPASS:
+                           tap->ignore_bypass = true;
+                           break;
                }       /* switch (n->value) */
        }       /* while (goi->argc) */
 
@@ -887,6 +892,7 @@ static const struct command_registration jtag_subcommand_handlers[] = {
                        "['-enable'|'-disable'] "
                        "['-expected_id' number] "
                        "['-ignore-version'] "
+                       "['-ignore-bypass'] "
                        "['-ircapture' number] "
                        "['-mask' number]",
        },

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)