This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5111

-- gerrit

commit 0fcb11224a5ffe5e9f6f0082c0d0e30cc0bd8a8d
Author: Antonio Borneo <[email protected]>
Date:   Mon Apr 15 23:47:50 2019 +0200

    target/cortex_a: fix waiting for target halted after step
    
    Depending on adapter speed, the function cortex_a_poll() can take
    time to execute and can complete successfully when the timeout is
    already expired. Checking the timeout at function return causes a
    timeout error while that could be avoided.
    
    Check the target status at cortex_a_poll() return, before checking
    for the timeout.
    
    Change-Id: I4c1581f6e718298c566df7b1359255e16e3955d5
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/target/cortex_a.c b/src/target/cortex_a.c
index 6eb6aa9..b68b030 100644
--- a/src/target/cortex_a.c
+++ b/src/target/cortex_a.c
@@ -1201,14 +1201,18 @@ static int cortex_a_step(struct target *target, int 
current, target_addr_t addre
        if (retval != ERROR_OK)
                return retval;
 
-       int64_t then = timeval_ms();
-       while (target->state != TARGET_HALTED) {
-               retval = cortex_a_poll(target);
-               if (retval != ERROR_OK)
-                       return retval;
-               if (timeval_ms() > then + 1000) {
-                       LOG_ERROR("timeout waiting for target halt");
-                       return ERROR_FAIL;
+       if (target->state != TARGET_HALTED) {
+               int64_t then = timeval_ms() + 1000;
+               while (1) {
+                       retval = cortex_a_poll(target);
+                       if (retval != ERROR_OK)
+                               return retval;
+                       if (target->state == TARGET_HALTED)
+                               break;
+                       if (timeval_ms() > then) {
+                               LOG_ERROR("timeout waiting for target halt");
+                               return ERROR_FAIL;
+                       }
                }
        }
 

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to