svf: implement sleep for RUNTEST min_time

Signed-off-by: Jon Povey <jon.povey@racelogic.co.uk>

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)
This commit is contained in:
Jon Povey 2011-01-02 23:52:48 +09:00 committed by Øyvind Harboe
parent 18a5a46bd9
commit d356034f03
1 changed files with 33 additions and 35 deletions

View File

@ -1478,21 +1478,14 @@ static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str)
} }
i += 2; i += 2;
} }
// calculate run_count
if ((0 == run_count) && (min_time > 0))
{
run_count = min_time * svf_para.frequency;
}
// all parameter should be parsed // all parameter should be parsed
if (i == num_of_argu) 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 #if 1
/* FIXME handle statemove failures */ /* FIXME handle statemove failures */
int retval; int retval;
uint32_t min_usec = 1000000 * min_time;
// enter into run_state if necessary // enter into run_state if necessary
if (cmd_queue_cur_state != svf_para.runtest_run_state) if (cmd_queue_cur_state != svf_para.runtest_run_state)
@ -1500,8 +1493,14 @@ static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str)
retval = svf_add_statemove(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); jtag_add_clocks(run_count);
}
if (min_usec > 0) {
jtag_add_sleep(min_usec);
}
// move to end_state if necessary // move to end_state if necessary
if (svf_para.runtest_end_state != svf_para.runtest_run_state) if (svf_para.runtest_end_state != svf_para.runtest_run_state)
@ -1519,7 +1518,6 @@ static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str)
jtag_add_runtest(run_count, svf_para.runtest_end_state); jtag_add_runtest(run_count, svf_para.runtest_end_state);
#endif #endif
} }
}
else else
{ {
LOG_ERROR("fail to parse parameter of RUNTEST, %d out of %d is parsed", i, num_of_argu); LOG_ERROR("fail to parse parameter of RUNTEST, %d out of %d is parsed", i, num_of_argu);