From: Øyvind Harboe Date: Mon, 8 Feb 2010 14:40:53 +0000 (+0100) Subject: zy1000: jtag_add_dr_scan() performance improvement X-Git-Tag: v0.5.0-rc1~917 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=90efc404f3cb9c3f6e7fdb8a2c22fb3e72e9072f;p=openocd zy1000: jtag_add_dr_scan() performance improvement Reduce overhead in jtag_add_dr_scan() a bit. Signed-off-by: Øyvind Harboe --- diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index 2c205b7a..ef4f4821 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 {