Subject: ADIv5: fix more diagnostics
authorDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 31 Jan 2010 08:26:21 +0000 (00:26 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 31 Jan 2010 08:26:21 +0000 (00:26 -0800)
If the MEM-AP cache is invalid, don't display it; just report that
invalidity as an error.  (This bug has been observed with "mdw 0 32"
after just a "reset halt".  Some code is being wrongly bypassed...)

If it's valid, display that cache at DEBUG level, not ERROR.  Also,
don't assume it's an AHB-AP; it could be another flavor of MEM-AP.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/target/arm_adi_v5.c

index 0e3b34959f6b2f4f06075a2c9c7893a7666ed8b9..bfa5cb4259de7fe431c02e961ade35973fb6d25c 100644 (file)
@@ -321,27 +321,34 @@ int jtagdp_transaction_endcheck(struct swjdp_common *swjdp)
                }
        }
 
+       /* REVISIT also STICKYCMP, for pushed comparisons (nyet used) */
+
        /* Check for STICKYERR and STICKYORUN */
        if (ctrlstat & (SSTICKYORUN | SSTICKYERR))
        {
                LOG_DEBUG("jtag-dp: CTRL/STAT error, 0x%" PRIx32, ctrlstat);
                /* Check power to debug regions */
                if ((ctrlstat & 0xf0000000) != 0xf0000000)
-               {
                         ahbap_debugport_init(swjdp);
-               }
                else
                {
                        uint32_t mem_ap_csw, mem_ap_tar;
 
-                       /* Print information about last AHBAP access */
-                       LOG_ERROR("AHBAP Cached values: dp_select 0x%" PRIx32
-                               ", ap_csw 0x%" PRIx32 ", ap_tar 0x%" PRIx32,
-                               swjdp->dp_select_value, swjdp->ap_csw_value,
-                               swjdp->ap_tar_value);
+                       /* Maybe print information about last MEM-AP access */
+                       if (swjdp->ap_tar_value != (uint32_t) -1)
+                               LOG_DEBUG("MEM-AP Cached values: "
+                                       "ap_bank 0x%" PRIx32
+                                       ", ap_csw 0x%" PRIx32
+                                       ", ap_tar 0x%" PRIx32,
+                                       swjdp->dp_select_value,
+                                       swjdp->ap_csw_value,
+                                       swjdp->ap_tar_value);
+                       else
+                               LOG_ERROR("Invalid MEM-AP TAR cache!");
+
                        if (ctrlstat & SSTICKYORUN)
-                               LOG_ERROR("JTAG-DP OVERRUN - "
-                                       "check clock or reduce jtag speed");
+                               LOG_ERROR("JTAG-DP OVERRUN - check clock, "
+                                       "memaccess, or reduce jtag speed");
 
                        if (ctrlstat & SSTICKYERR)
                                LOG_ERROR("JTAG-DP STICKY ERROR");