Skip to content
This repository has been archived by the owner on Apr 9, 2023. It is now read-only.

Commit

Permalink
jtag: Add an option to ignore the bypass bit
Browse files Browse the repository at this point in the history
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 <[email protected]>
Change-Id: Ic59743f23bfc4d4e23da0e8535fec8ca9e87ff1a
Reviewed-on: https://review.openocd.org/c/openocd/+/6802
Tested-by: jenkins
Reviewed-by: Antonio Borneo <[email protected]>
Reviewed-by: Oleksij Rempel <[email protected]>
  • Loading branch information
grassead authored and borneoa committed Jan 22, 2022
1 parent e3bda57 commit 666ff82
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 1 deletion.
4 changes: 4 additions & 0 deletions doc/openocd.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion src/jtag/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions src/jtag/hla/hla_tcl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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},
};

Expand Down
3 changes: 3 additions & 0 deletions src/jtag/jtag.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
6 changes: 6 additions & 0 deletions src/jtag/tcl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 },
};

Expand Down Expand Up @@ -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) */

Expand Down Expand Up @@ -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]",
},
Expand Down

0 comments on commit 666ff82

Please sign in to comment.