target/cortex_a: fix waiting for target halted after step 11/5111/3
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 15 Apr 2019 21:47:50 +0000 (23:47 +0200)
committerMatthias Welwarsky <matthias@welwarsky.de>
Wed, 24 Apr 2019 13:09:26 +0000 (14:09 +0100)
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 <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5111
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/target/cortex_a.c

index 6eb6aa9..8ed81b7 100644 (file)
@@ -1206,6 +1206,8 @@ static int cortex_a_step(struct target *target, int current, target_addr_t addre
                retval = cortex_a_poll(target);
                if (retval != ERROR_OK)
                        return retval;
+               if (target->state == TARGET_HALTED)
+                       break;
                if (timeval_ms() > then + 1000) {
                        LOG_ERROR("timeout waiting for target halt");
                        return ERROR_FAIL;