target: check late abort from target in async_algorithm
authorTomas Vanek <vanekt@fbl.cz>
Thu, 21 Jul 2016 07:27:00 +0000 (09:27 +0200)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sat, 13 Aug 2016 08:39:01 +0000 (09:39 +0100)
target_run_flash_async_algorithm() ignored abort from target
(rp set to 0) when raised after all data have been written in fifo.
I could result e.g. in not reported error during flash write.

The change adds rp test after target algorithm has finished.

Change-Id: Iadd93371e4a4602737be10079479285d81ae41b2
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/3560
Tested-by: jenkins
Reviewed-by: Steven Stallion <stallion@squareup.com>
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
src/target/target.c

index 0dbce9aecdc27cd5e6a4709ac46ace8abc5e7490..56d9eee58fdfcd9db0483b7997aa211d0a2754d9 100644 (file)
@@ -1014,6 +1014,15 @@ int target_run_flash_async_algorithm(struct target *target,
                retval = retval2;
        }
 
+       if (retval == ERROR_OK) {
+               /* check if algorithm set rp = 0 after fifo writer loop finished */
+               retval = target_read_u32(target, rp_addr, &rp);
+               if (retval == ERROR_OK && rp == 0) {
+                       LOG_ERROR("flash write algorithm aborted by target");
+                       retval = ERROR_FLASH_OPERATION_FAILED;
+               }
+       }
+
        return retval;
 }