X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Fadi_v5_jtag.c;h=3ab53994e1b77ba848f903307b834302d56e1860;hb=5ae2fbda2b8744752f9a8d5dbdb0090df812a894;hp=62eb7d12ffed0155d9db3cc3d7762159fad913db;hpb=08d4411b59dd8bd0e7d8009003b71d23acbf6eee;p=openocd.git diff --git a/src/target/adi_v5_jtag.c b/src/target/adi_v5_jtag.c index 62eb7d12ff..3ab53994e1 100644 --- a/src/target/adi_v5_jtag.c +++ b/src/target/adi_v5_jtag.c @@ -81,12 +81,12 @@ static int adi_jtag_dp_scan(struct adiv5_dap *dap, uint8_t instr, uint8_t reg_addr, uint8_t RnW, uint8_t *outvalue, uint8_t *invalue, uint8_t *ack) { - struct arm_jtag *jtag_info = dap->jtag_info; + struct jtag_tap *tap = dap->tap; struct scan_field fields[2]; uint8_t out_addr_buf; int retval; - retval = arm_jtag_set_instr(jtag_info, instr, NULL, TAP_IDLE); + retval = arm_jtag_set_instr(tap, instr, NULL, TAP_IDLE); if (retval != ERROR_OK) return retval; @@ -107,7 +107,7 @@ static int adi_jtag_dp_scan(struct adiv5_dap *dap, fields[1].out_value = outvalue; fields[1].in_value = invalue; - jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE); + jtag_add_dr_scan(tap, 2, fields, TAP_IDLE); /* Add specified number of tck clocks after starting memory bus * access, giving the hardware time to complete the access. @@ -115,10 +115,10 @@ static int adi_jtag_dp_scan(struct adiv5_dap *dap, * See "Minimum Response Time" for JTAG-DP, in the ADIv5 spec. */ if ((instr == JTAG_DP_APACC) - && ((reg_addr == AP_REG_DRW) - || ((reg_addr & 0xF0) == AP_REG_BD0)) - && (dap->memaccess_tck != 0)) - jtag_add_runtest(dap->memaccess_tck, + && ((reg_addr == MEM_AP_REG_DRW) + || ((reg_addr & 0xF0) == MEM_AP_REG_BD0)) + && (dap->ap[dap_ap_get_select(dap)].memaccess_tck != 0)) + jtag_add_runtest(dap->ap[dap_ap_get_select(dap)].memaccess_tck, TAP_IDLE); return ERROR_OK; @@ -271,9 +271,8 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap) LOG_DEBUG("jtag-dp: CTRL/STAT error, 0x%" PRIx32, ctrlstat); /* Check power to debug regions */ if ((ctrlstat & 0xf0000000) != 0xf0000000) { - retval = ahbap_debugport_init(dap); - if (retval != ERROR_OK) - return retval; + LOG_ERROR("Debug regions are unpowered, an unexpected reset might have happened"); + return ERROR_JTAG_DEVICE_ERROR; } else { uint32_t mem_ap_csw, mem_ap_tar; @@ -281,14 +280,14 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap) * MEM-AP access; but not if autoincrementing. * *Real* CSW and TAR values are always shown. */ - if (dap->ap_tar_value != (uint32_t) -1) + if (dap->ap[dap_ap_get_select(dap)].tar_value != (uint32_t) -1) LOG_DEBUG("MEM-AP Cached values: " "ap_bank 0x%" PRIx32 ", ap_csw 0x%" PRIx32 ", ap_tar 0x%" PRIx32, dap->ap_bank_value, - dap->ap_csw_value, - dap->ap_tar_value); + dap->ap[dap_ap_get_select(dap)].csw_value, + dap->ap[dap_ap_get_select(dap)].tar_value); if (ctrlstat & SSTICKYORUN) LOG_ERROR("JTAG-DP OVERRUN - check clock, " @@ -315,12 +314,12 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap) LOG_DEBUG("jtag-dp: CTRL/STAT 0x%" PRIx32, ctrlstat); retval = dap_queue_ap_read(dap, - AP_REG_CSW, &mem_ap_csw); + MEM_AP_REG_CSW, &mem_ap_csw); if (retval != ERROR_OK) return retval; retval = dap_queue_ap_read(dap, - AP_REG_TAR, &mem_ap_tar); + MEM_AP_REG_TAR, &mem_ap_tar); if (retval != ERROR_OK) return retval; @@ -342,30 +341,6 @@ static int jtagdp_transaction_endcheck(struct adiv5_dap *dap) /*--------------------------------------------------------------------------*/ -static int jtag_idcode_q_read(struct adiv5_dap *dap, - uint8_t *ack, uint32_t *data) -{ - struct arm_jtag *jtag_info = dap->jtag_info; - int retval; - struct scan_field fields[1]; - - /* This is a standard JTAG operation -- no DAP tweakage */ - retval = arm_jtag_set_instr(jtag_info, JTAG_DP_IDCODE, NULL, TAP_IDLE); - if (retval != ERROR_OK) - return retval; - - fields[0].num_bits = 32; - fields[0].out_value = NULL; - fields[0].in_value = (void *) data; - - jtag_add_dr_scan(jtag_info->tap, 1, fields, TAP_IDLE); - - jtag_add_callback(arm_le_to_h_u32, - (jtag_callback_data_t) data); - - return ERROR_OK; -} - static int jtag_dp_q_read(struct adiv5_dap *dap, unsigned reg, uint32_t *data) { @@ -420,40 +395,6 @@ static int jtag_ap_q_write(struct adiv5_dap *dap, unsigned reg, return adi_jtag_ap_write_check(dap, reg, out_value_buf); } -static int jtag_ap_q_read_block(struct adiv5_dap *dap, unsigned reg, - uint32_t blocksize, uint8_t *buffer) -{ - uint32_t readcount; - int retval = ERROR_OK; - - /* Scan out first read */ - retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, reg, - DPAP_READ, 0, NULL, NULL); - if (retval != ERROR_OK) - return retval; - - for (readcount = 0; readcount < blocksize - 1; readcount++) { - /* Scan out next read; scan in posted value for the - * previous one. Assumes read is acked "OK/FAULT", - * and CTRL_STAT says that meant "OK". - */ - retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, reg, - DPAP_READ, 0, buffer + 4 * readcount, - &dap->ack); - if (retval != ERROR_OK) - return retval; - } - - /* Scan in last posted value; RDBUFF has no other effect, - * assuming ack is OK/FAULT and CTRL_STAT says "OK". - */ - retval = adi_jtag_dp_scan(dap, JTAG_DP_DPACC, DP_RDBUFF, - DPAP_READ, 0, buffer + 4 * readcount, - &dap->ack); - - return retval; -} - static int jtag_ap_q_abort(struct adiv5_dap *dap, uint8_t *ack) { /* for JTAG, this is the only valid ABORT register operation */ @@ -470,12 +411,10 @@ static int jtag_dp_run(struct adiv5_dap *dap) * part of DAP setup */ const struct dap_ops jtag_dp_ops = { - .queue_idcode_read = jtag_idcode_q_read, .queue_dp_read = jtag_dp_q_read, .queue_dp_write = jtag_dp_q_write, .queue_ap_read = jtag_ap_q_read, .queue_ap_write = jtag_ap_q_write, - .queue_ap_read_block = jtag_ap_q_read_block, .queue_ap_abort = jtag_ap_q_abort, .run = jtag_dp_run, };