Subject: ADIv5: fix more diagnostics

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>
This commit is contained in:
David Brownell 2010-01-31 00:26:21 -08:00
parent 695666d294
commit e11ce3e6b0

View 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 */ /* Check for STICKYERR and STICKYORUN */
if (ctrlstat & (SSTICKYORUN | SSTICKYERR)) if (ctrlstat & (SSTICKYORUN | SSTICKYERR))
{ {
LOG_DEBUG("jtag-dp: CTRL/STAT error, 0x%" PRIx32, ctrlstat); LOG_DEBUG("jtag-dp: CTRL/STAT error, 0x%" PRIx32, ctrlstat);
/* Check power to debug regions */ /* Check power to debug regions */
if ((ctrlstat & 0xf0000000) != 0xf0000000) if ((ctrlstat & 0xf0000000) != 0xf0000000)
{
ahbap_debugport_init(swjdp); ahbap_debugport_init(swjdp);
}
else else
{ {
uint32_t mem_ap_csw, mem_ap_tar; uint32_t mem_ap_csw, mem_ap_tar;
/* Print information about last AHBAP access */ /* Maybe print information about last MEM-AP access */
LOG_ERROR("AHBAP Cached values: dp_select 0x%" PRIx32 if (swjdp->ap_tar_value != (uint32_t) -1)
", ap_csw 0x%" PRIx32 ", ap_tar 0x%" PRIx32, LOG_DEBUG("MEM-AP Cached values: "
swjdp->dp_select_value, swjdp->ap_csw_value, "ap_bank 0x%" PRIx32
swjdp->ap_tar_value); ", 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) if (ctrlstat & SSTICKYORUN)
LOG_ERROR("JTAG-DP OVERRUN - " LOG_ERROR("JTAG-DP OVERRUN - check clock, "
"check clock or reduce jtag speed"); "memaccess, or reduce jtag speed");
if (ctrlstat & SSTICKYERR) if (ctrlstat & SSTICKYERR)
LOG_ERROR("JTAG-DP STICKY ERROR"); LOG_ERROR("JTAG-DP STICKY ERROR");