diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-02-08 15:40:53 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-02-22 08:00:10 +0100 |
commit | 90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f (patch) | |
tree | e5bd9a93613878a8a3b272152d4cba05aeb42636 | |
parent | c21c740a895438832ed7e945ee4943da3eb733f9 (diff) | |
download | riscv-openocd-90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f.zip riscv-openocd-90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f.tar.gz riscv-openocd-90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f.tar.bz2 |
zy1000: jtag_add_dr_scan() performance improvement
Reduce overhead in jtag_add_dr_scan() a bit.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
-rw-r--r-- | src/jtag/zy1000/zy1000.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index 2c205b7..ef4f482 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -650,22 +650,29 @@ int interface_jtag_add_dr_scan(int num_fields, const struct scan_field *fields, for (j = 0; j < num_fields; j++) { + /* Find a range of fields to write to this tap */ if (tap == fields[j].tap) { found = 1; + int i; + for (i = j + 1; i < num_fields; i++) + { + if (tap != fields[j].tap) + { + break; + } + } + + scanFields(i - j, fields + j, TAP_DRSHIFT, pause); - scanFields(1, fields+j, TAP_DRSHIFT, pause); + j = i; } } + if (!found) { - struct scan_field tmp; - /* program the scan field to 1 bit length, and ignore it's value */ - tmp.num_bits = 1; - tmp.out_value = NULL; - tmp.in_value = NULL; - - scanFields(1, &tmp, TAP_DRSHIFT, pause); + /* Shift out a 0 for disabled tap's */ + shiftValueInner(TAP_DRSHIFT, pause?TAP_DRPAUSE:TAP_DRSHIFT, 1, 0); } else { |