This is an automated email from Gerrit. Tim Newsome (t...@sifive.com) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/4451
-- gerrit commit 8eafeec62f78c76fbffec55b3bdc2ca68c44b766 Author: Tim Newsome <t...@sifive.com> Date: Tue Mar 6 13:13:35 2018 -0800 Add complete JTAG debug logging. This is only enabled when OpenOCD is configured with --enable-verbose-jtag-io. Sample output: Debug: 646 18 core.c:847 default_interface_jtag_execute_queue(): JTAG IR SCAN to RUN/IDLE Debug: 647 18 core.c:852 default_interface_jtag_execute_queue(): 5b out: 11 Debug: 648 18 core.c:847 default_interface_jtag_execute_queue(): JTAG DR SCAN to RUN/IDLE Debug: 649 18 core.c:852 default_interface_jtag_execute_queue(): 40b out: 4400000001 Debug: 650 18 core.c:857 default_interface_jtag_execute_queue(): 40b in: 4400000000 Signed-off-by: Tim Newsome <t...@sifive.com> Change-Id: I014e9e3a77755413b36edfcede2ab8f6aa08061b diff --git a/src/jtag/core.c b/src/jtag/core.c index 8c79eb2..71a731d 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -836,7 +836,68 @@ int default_interface_jtag_execute_queue(void) return ERROR_FAIL; } - return jtag->execute_queue(); + int result = jtag->execute_queue(); + + struct jtag_command *cmd = jtag_command_queue; + while (debug_level >= LOG_LVL_DEBUG && cmd) { + switch (cmd->type) { + case JTAG_SCAN: + DEBUG_JTAG_IO("JTAG %s SCAN to %s", + cmd->cmd.scan->ir_scan ? "IR" : "DR", + tap_state_name(cmd->cmd.scan->end_state)); + for (int i = 0; i < cmd->cmd.scan->num_fields; i++) { + struct scan_field *field = cmd->cmd.scan->fields + i; + if (field->out_value) { + char *str = buf_to_str(field->out_value, field->num_bits, 16); + DEBUG_JTAG_IO(" %db out: %s", field->num_bits, str); + free(str); + } + if (field->in_value) { + char *str = buf_to_str(field->in_value, field->num_bits, 16); + DEBUG_JTAG_IO(" %db in: %s", field->num_bits, str); + free(str); + } + } + break; + case JTAG_TLR_RESET: + DEBUG_JTAG_IO("JTAG TLR RESET to %s", + tap_state_name(cmd->cmd.statemove->end_state)); + break; + case JTAG_RUNTEST: + DEBUG_JTAG_IO("JTAG RUNTEST %d cycles to %s", + cmd->cmd.runtest->num_cycles, + tap_state_name(cmd->cmd.runtest->end_state)); + break; + case JTAG_RESET: + { + const char *reset_str[3] = { + "leave", "deassert", "assert" + }; + DEBUG_JTAG_IO("JTAG RESET %s TRST, %s SRST", + reset_str[cmd->cmd.reset->trst + 1], + reset_str[cmd->cmd.reset->srst + 1]); + } + break; + case JTAG_PATHMOVE: + DEBUG_JTAG_IO("JTAG PATHMOVE (TODO)"); + break; + case JTAG_SLEEP: + DEBUG_JTAG_IO("JTAG SLEEP (TODO)"); + break; + case JTAG_STABLECLOCKS: + DEBUG_JTAG_IO("JTAG STABLECLOCKS (TODO)"); + break; + case JTAG_TMS: + DEBUG_JTAG_IO("JTAG STABLECLOCKS (TODO)"); + break; + default: + LOG_ERROR("Unknown JTAG command: %d", cmd->type); + break; + } + cmd = cmd->next; + } + + return result; } void jtag_execute_queue_noclear(void) @@ -1107,7 +1168,8 @@ static int jtag_examine_chain(void) if ((idcode & 1) == 0) { /* Zero for LSB indicates a device in bypass */ - LOG_INFO("TAP %s does not have IDCODE", tap->dotted_name); + LOG_INFO("TAP %s does not have valid IDCODE (idcode=0x%x)", + tap->dotted_name, idcode); tap->hasidcode = false; tap->idcode = 0; -- ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel