From: Jon Povey Date: Sun, 2 Jan 2011 14:52:48 +0000 (+0900) Subject: svf: implement sleep for RUNTEST min_time X-Git-Tag: v0.5.0-rc1~235 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=d356034f03eb60fd4e8b3537bd979d9e7e5e25f8 svf: implement sleep for RUNTEST min_time Signed-off-by: Jon Povey min_time was effectively ignored, I needed it to program a Lattice MachXO which uses a RUNTEST to wait for an erase operation, amongst other things. With this patch pauses happen and I can program the device with an SVF generated in LSC ispVM (with "Rev D Standard" checked to suppress nonstandard LOOP statements) --- diff --git a/src/svf/svf.c b/src/svf/svf.c index a6f2f6f312..53994a2d13 100644 --- a/src/svf/svf.c +++ b/src/svf/svf.c @@ -1478,47 +1478,45 @@ static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str) } i += 2; } - // calculate run_count - if ((0 == run_count) && (min_time > 0)) - { - run_count = min_time * svf_para.frequency; - } + // all parameter should be parsed if (i == num_of_argu) { - if (run_count > 0) - { - // run_state and end_state is checked to be stable state - // TODO: do runtest #if 1 - /* FIXME handle statemove failures */ - int retval; + /* FIXME handle statemove failures */ + int retval; + uint32_t min_usec = 1000000 * min_time; - // enter into run_state if necessary - if (cmd_queue_cur_state != svf_para.runtest_run_state) - { - retval = svf_add_statemove(svf_para.runtest_run_state); - } + // enter into run_state if necessary + if (cmd_queue_cur_state != svf_para.runtest_run_state) + { + retval = svf_add_statemove(svf_para.runtest_run_state); + } - // call jtag_add_clocks + // add clocks and/or min wait + if (run_count > 0) { jtag_add_clocks(run_count); + } - // move to end_state if necessary - if (svf_para.runtest_end_state != svf_para.runtest_run_state) - { - retval = svf_add_statemove(svf_para.runtest_end_state); - } + if (min_usec > 0) { + jtag_add_sleep(min_usec); + } + + // move to end_state if necessary + if (svf_para.runtest_end_state != svf_para.runtest_run_state) + { + retval = svf_add_statemove(svf_para.runtest_end_state); + } #else - if (svf_para.runtest_run_state != TAP_IDLE) - { - LOG_ERROR("cannot runtest in %s state", - tap_state_name(svf_para.runtest_run_state)); - return ERROR_FAIL; - } + if (svf_para.runtest_run_state != TAP_IDLE) + { + LOG_ERROR("cannot runtest in %s state", + tap_state_name(svf_para.runtest_run_state)); + return ERROR_FAIL; + } - jtag_add_runtest(run_count, svf_para.runtest_end_state); + jtag_add_runtest(run_count, svf_para.runtest_end_state); #endif - } } else {