diff options
Diffstat (limited to 'src/jtag/jtag.c')
-rw-r--r-- | src/jtag/jtag.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index 1db8247e..c1c52fe4 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -1345,7 +1345,7 @@ int jtag_validate_chain() char *cbuf = buf_to_str(ir_test, total_ir_length, 16); ERROR("Error validating JTAG scan chain, IR mismatch, scan returned 0x%s", cbuf); free(cbuf); - exit(-1); + return ERROR_JTAG_INIT_FAILED; } chain_pos += device->ir_length; device = device->next; @@ -1356,7 +1356,7 @@ int jtag_validate_chain() char *cbuf = buf_to_str(ir_test, total_ir_length, 16); ERROR("Error validating JTAG scan chain, IR mismatch, scan returned 0x%s", cbuf); free(cbuf); - exit(-1); + return ERROR_JTAG_INIT_FAILED; } free(ir_test); @@ -1402,7 +1402,7 @@ int jtag_register_commands(struct command_context_s *cmd_ctx) int jtag_init(struct command_context_s *cmd_ctx) { - int i; + int i, validate_tries = 0; DEBUG("-"); @@ -1433,11 +1433,20 @@ int jtag_init(struct command_context_s *cmd_ctx) jtag_add_statemove(TAP_TLR); jtag_execute_queue(); - + + while (jtag_validate_chain() != ERROR_OK) + { + validate_tries++; + if (validate_tries > 5) + { + ERROR("Could not validate JTAG chain, exit"); + exit(-1); + } + usleep(10000); + } + jtag_examine_chain(); - jtag_validate_chain(); - return ERROR_OK; } } |