Signed-off-by: Jon Povey <jon.po...@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)
---

 src/svf/svf.c |   58 +++++++++++++++++++++++++++-----------------------------
 1 files changed, 28 insertions(+), 30 deletions(-)

diff --git a/src/svf/svf.c b/src/svf/svf.c
index a6f2f6f..53994a2 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
                {
-- 
1.6.3.3

_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to