aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f (patch)
treee5bd9a93613878a8a3b272152d4cba05aeb42636
parentc21c740a895438832ed7e945ee4943da3eb733f9 (diff)
downloadriscv-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.c23
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
{