This is an automated email from Gerrit. "Jacek Wuwer <jacek...@gmail.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8068
-- gerrit commit 545ace3a3078d975e46a8e2f330cee615ca28d33 Author: Jacek Wuwer <jacek...@gmail.com> Date: Wed Jan 10 11:11:34 2024 +0100 target/adi_v5_jtag: debug register access Updated register list and removed ifdef DEBUG_WAIT to log DAP register accesses when DEBUG log level or higher is selected. This was necessary to debug responses from slow targets. Change-Id: I7da3538354adf408ce17448cfd009217fd62213c Signed-off-by: Jacek Wuwer <jacek...@gmail.com> diff --git a/src/target/adi_v5_jtag.c b/src/target/adi_v5_jtag.c index 8d54a50fb0..f52d2b4063 100644 --- a/src/target/adi_v5_jtag.c +++ b/src/target/adi_v5_jtag.c @@ -31,8 +31,6 @@ #include <helper/list.h> #include <jtag/swd.h> -/*#define DEBUG_WAIT*/ - /* JTAG instructions/registers for JTAG-DP and SWJ-DP */ #define JTAG_DP_ABORT 0xF8 #define JTAG_DP_DPACC 0xFA @@ -47,66 +45,115 @@ static int jtag_ap_q_abort(struct adiv5_dap *dap, uint8_t *ack); -#ifdef DEBUG_WAIT static const char *dap_reg_name(struct adiv5_dap *dap, uint8_t instr, uint16_t reg_addr) { char *reg_name = "UNK"; if (instr == JTAG_DP_DPACC) { switch (reg_addr) { - case DP_ABORT: - reg_name = "ABORT"; + case DP_DPIDR: + reg_name = "DPIDR"; + break; + case DP_DPIDR1: + reg_name = "DPIDR1"; + break; + case DP_BASEPTR0: + reg_name = "BASEPTR0"; + break; + case DP_BASEPTR1: + reg_name = "BASEPTR1"; break; case DP_CTRL_STAT: reg_name = "CTRL/STAT"; break; + case DP_DLCR: + reg_name = "DLCR"; + break; + case DP_TARGETID: + reg_name = "TARGETID"; + break; + case DP_DLPIDR: + reg_name = "DLPIDR"; + break; + case DP_EVENTSTAT: + reg_name = "EVENTSTAT"; + break; + case DP_SELECT1: + reg_name = "SELECT1"; + break; case DP_SELECT: reg_name = "SELECT"; break; case DP_RDBUFF: reg_name = "RDBUFF"; break; - case DP_DLCR: - reg_name = "DLCR"; - break; default: - reg_name = "UNK"; break; } - } - - if (instr == JTAG_DP_APACC) { - if (reg_addr == MEM_AP_REG_CSW(dap)) + } else if (instr == JTAG_DP_APACC) { + switch (reg_addr) { + case ADIV5_MEM_AP_REG_CSW: + case ADIV6_MEM_AP_REG_CSW: reg_name = "CSW"; - else if (reg_addr == MEM_AP_REG_TAR(dap)) + break; + case ADIV5_MEM_AP_REG_TAR: + case ADIV6_MEM_AP_REG_TAR: reg_name = "TAR"; - else if (reg_addr == MEM_AP_REG_TAR64(dap)) + break; + case ADIV5_MEM_AP_REG_TAR64: + case ADIV6_MEM_AP_REG_TAR64: reg_name = "TAR64"; - else if (reg_addr == MEM_AP_REG_DRW(dap)) + break; + case ADIV5_MEM_AP_REG_DRW: + case ADIV6_MEM_AP_REG_DRW: reg_name = "DRW"; - else if (reg_addr == MEM_AP_REG_BD0(dap)) + break; + case ADIV5_MEM_AP_REG_BD0: + case ADIV6_MEM_AP_REG_BD0: reg_name = "BD0"; - else if (reg_addr == MEM_AP_REG_BD1(dap)) + break; + case ADIV5_MEM_AP_REG_BD1: + case ADIV6_MEM_AP_REG_BD1: reg_name = "BD1"; - else if (reg_addr == MEM_AP_REG_BD2(dap)) + break; + case ADIV5_MEM_AP_REG_BD2: + case ADIV6_MEM_AP_REG_BD2: reg_name = "BD2"; - else if (reg_addr == MEM_AP_REG_BD3(dap)) + break; + case ADIV5_MEM_AP_REG_BD3: + case ADIV6_MEM_AP_REG_BD3: reg_name = "BD3"; - else if (reg_addr == MEM_AP_REG_CFG(dap)) + break; + case ADIV5_MEM_AP_REG_MBT: + case ADIV6_MEM_AP_REG_MBT: + reg_name = "MBT"; + break; + case ADIV5_MEM_AP_REG_BASE64: + case ADIV6_MEM_AP_REG_BASE64: + reg_name = "BASE64"; + break; + case ADIV5_MEM_AP_REG_CFG: + case ADIV6_MEM_AP_REG_CFG: reg_name = "CFG"; - else if (reg_addr == MEM_AP_REG_BASE(dap)) + break; + case ADIV5_MEM_AP_REG_BASE: + case ADIV6_MEM_AP_REG_BASE: reg_name = "BASE"; - else if (reg_addr == MEM_AP_REG_BASE64(dap)) - reg_name = "BASE64"; - else if (reg_addr == AP_REG_IDR(dap)) + break; + case ADIV5_AP_REG_IDR: + case ADIV6_AP_REG_IDR: reg_name = "IDR"; - else - reg_name = "UNK"; + break; + default: + break; + } + } else if (instr == JTAG_DP_IDCODE) { + reg_name = "DPIDR"; + } else if (instr == JTAG_DP_ABORT) { + reg_name = "ABORT"; } - return reg_name; } -#endif struct dap_cmd { struct list_head lh; @@ -133,7 +180,6 @@ struct dap_cmd_pool { static void log_dap_cmd(struct adiv5_dap *dap, const char *header, struct dap_cmd *el) { -#ifdef DEBUG_WAIT const char *ack; switch (el->ack) { case JTAG_ACK_WAIT: /* ADIv5 and ADIv6 */ @@ -163,7 +209,6 @@ static void log_dap_cmd(struct adiv5_dap *dap, const char *header, struct dap_cm buf_get_u32(el->outvalue_buf, 0, 32), buf_get_u32(el->invalue, 0, 32), ack); -#endif } static int jtag_limit_queue_size(struct adiv5_dap *dap) --