From 3e90b63b1f54330de7ea3b6454ff5810ac861961 Mon Sep 17 00:00:00 2001 From: Andreas Fritiofson Date: Wed, 5 Jun 2013 23:44:42 +0200 Subject: [PATCH 1/1] Allow autoscan up to 64 bit IR lengths Change-Id: Ib15ff67b57606fe6c7997f3f9bd90e096acd5f3d Signed-off-by: Evan Hunter Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/832 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/jtag/core.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/jtag/core.c b/src/jtag/core.c index 2f7effe377..b61280cc0c 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -1177,7 +1177,7 @@ static int jtag_validate_ircapture(void) int total_ir_length = 0; uint8_t *ir_test = NULL; struct scan_field field; - int val; + uint64_t val; int chain_pos = 0; int retval; @@ -1236,8 +1236,8 @@ static int jtag_validate_ircapture(void) */ if (tap->ir_length == 0) { tap->ir_length = 2; - while ((val = buf_get_u32(ir_test, chain_pos, tap->ir_length + 1)) == 1 - && tap->ir_length <= 32) { + while ((val = buf_get_u64(ir_test, chain_pos, tap->ir_length + 1)) == 1 + && tap->ir_length <= 64) { tap->ir_length++; } LOG_WARNING("AUTO %s - use \"... -irlen %d\"", @@ -1251,25 +1251,23 @@ static int jtag_validate_ircapture(void) * this part of the JTAG spec, so their capture mask/value * attributes might disable this test. */ - val = buf_get_u32(ir_test, chain_pos, tap->ir_length); + val = buf_get_u64(ir_test, chain_pos, tap->ir_length); if ((val & tap->ir_capture_mask) != tap->ir_capture_value) { - LOG_ERROR("%s: IR capture error; saw 0x%0*x not 0x%0*x", + LOG_ERROR("%s: IR capture error; saw 0x%0*" PRIx64 " not 0x%0*" PRIx32, jtag_tap_name(tap), - (tap->ir_length + 7) / tap->ir_length, - val, - (tap->ir_length + 7) / tap->ir_length, - (unsigned) tap->ir_capture_value); + (tap->ir_length + 7) / tap->ir_length, val, + (tap->ir_length + 7) / tap->ir_length, tap->ir_capture_value); retval = ERROR_JTAG_INIT_FAILED; goto done; } - LOG_DEBUG("%s: IR capture 0x%0*x", jtag_tap_name(tap), + LOG_DEBUG("%s: IR capture 0x%0*" PRIx64, jtag_tap_name(tap), (tap->ir_length + 7) / tap->ir_length, val); chain_pos += tap->ir_length; } /* verify the '11' sentinel we wrote is returned at the end */ - val = buf_get_u32(ir_test, chain_pos, 2); + val = buf_get_u64(ir_test, chain_pos, 2); if (val != 0x3) { char *cbuf = buf_to_str(ir_test, total_ir_length, 16); -- 2.30.2