X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ftarget%2Farm_adi_v5.c;h=b9666fcb3078324732f298a9e46ac62de5e599b5;hb=b840546895145fa6f8048d742281c74baf312e54;hp=c1555d9f8807abd3955e4904f4600ecc6d892dc6;hpb=15f15cdddbef41f3c8472ade096f310dead1fc97;p=openocd diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c index c1555d9f..b9666fcb 100644 --- a/src/target/arm_adi_v5.c +++ b/src/target/arm_adi_v5.c @@ -38,14 +38,8 @@ #include "config.h" #endif -#include "replacements.h" - #include "arm_adi_v5.h" -#include "jtag.h" -#include "log.h" #include "time_support.h" -#include -#include /* * Transaction Mode: @@ -81,7 +75,7 @@ int adi_jtag_dp_scan(arm_jtag_t *jtag_info, u8 instr, u8 reg_addr, u8 RnW, u8 *o fields[0].in_value = ack; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -89,7 +83,7 @@ int adi_jtag_dp_scan(arm_jtag_t *jtag_info, u8 instr, u8 reg_addr, u8 RnW, u8 *o fields[1].out_value = outvalue; fields[1].in_value = invalue; - fields[1].in_handler = NULL; + @@ -114,7 +108,7 @@ int adi_jtag_dp_scan_u32(arm_jtag_t *jtag_info, u8 instr, u8 reg_addr, u8 RnW, u buf_set_u32(&out_addr_buf, 0, 3, ((reg_addr >> 1) & 0x6) | (RnW & 0x1)); fields[0].out_value = &out_addr_buf; fields[0].in_value = ack; - fields[0].in_handler = NULL; + fields[1].tap = jtag_info->tap; @@ -122,15 +116,14 @@ int adi_jtag_dp_scan_u32(arm_jtag_t *jtag_info, u8 instr, u8 reg_addr, u8 RnW, u buf_set_u32(out_value_buf, 0, 32, outvalue); fields[1].out_value = out_value_buf; fields[1].in_value = NULL; - fields[1].in_handler = NULL; + if (invalue) { - u8 tmp[4]; - fields[1].in_value = tmp; - jtag_add_dr_scan_now(2, fields, TAP_INVALID); + fields[1].in_value = (u8 *)invalue; + jtag_add_dr_scan(2, fields, TAP_INVALID); - *invalue=le_to_h_u32(tmp); + jtag_add_callback(arm_le_to_h_u32, (u8 *)invalue); } else { @@ -867,6 +860,12 @@ int mem_ap_read_buf_u16(swjdp_common_t *swjdp, u8 *buffer, int count, u32 addres return retval; } +/* FIX!!! is this a potential performance bottleneck w.r.t. requiring too many + * roundtrips when jtag_execute_queue() has a large overhead(e.g. for USB)s? + * + * The solution is to arrange for a large out/in scan in this loop and + * and convert data afterwards. + */ int mem_ap_read_buf_packed_u8(swjdp_common_t *swjdp, u8 *buffer, int count, u32 address) { u32 invalue;