This is an automated email from Gerrit.

Tim Newsome ([email protected]) just uploaded a new patch set to Gerrit, which 
you can find at http://openocd.zylin.com/4311

-- gerrit

commit e73d3fd22f4a20aa764a7b90b73a0c54badcdab4
Author: Tim Newsome <[email protected]>
Date:   Tue Dec 12 15:18:32 2017 -0800

    Add some convenient JTAG debug output
    
    This is helpful whenever you want to know what exactly is being scanned
    on the JTAG interface.
    
    Sample output:
    Debug: 837 11 core.c:847 default_interface_jtag_execute_queue(): JTAG IR 
SCAN to RUN/IDLE
    Debug: 838 11 core.c:852 default_interface_jtag_execute_queue():   5b out: 
11
    Debug: 839 11 core.c:847 default_interface_jtag_execute_queue(): JTAG DR 
SCAN to RUN/IDLE
    Debug: 840 11 core.c:852 default_interface_jtag_execute_queue():   40b out: 
4400000001
    Debug: 841 11 core.c:857 default_interface_jtag_execute_queue():   40b  in: 
4400000000
    
    Change-Id: I8ea773e06eb28e7892ed4da3f5e7d57b9f77d9c3
    Signed-off-by: Tim Newsome <[email protected]>

diff --git a/jimtcl b/jimtcl
index a9bf597..51f65c6 160000
--- a/jimtcl
+++ b/jimtcl
@@ -1 +1 @@
-Subproject commit a9bf5975fd0f89974d689a2d9ebd0873c8d64787
+Subproject commit 51f65c6d38fbf86e1f0b036ad336761fd2ab7fa0
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to