target/target.c: fixed rp check bug in asynchronous flash write algorithm.
authorDmitryShpak <disona@yandex.ru>
Wed, 25 Mar 2015 11:31:16 +0000 (14:31 +0300)
committerSpencer Oliver <spen@spen-soft.co.uk>
Wed, 1 Apr 2015 23:18:25 +0000 (00:18 +0100)
Bug in read pointer check within flash write algorithm made incorrect check
if block size is more than 4 bytes (bug was detected with 16 bytes block size).

Change-Id: I5b8e7ebca619a0a85ae6e9e496ff792248134d81
Signed-off-by: DmitryShpak <disona@yandex.ru>
Reviewed-on: http://openocd.zylin.com/2657
Tested-by: jenkins
Reviewed-by: Jens Bauer <jens@gpio.dk>
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
src/target/target.c

index a8d3cba96f1fc536eb364f4f0c5c4998e66b5eba..8a7547b8a706a46332928b1bad6c4d81f054883b 100644 (file)
@@ -938,7 +938,7 @@ int target_run_flash_async_algorithm(struct target *target,
                        break;
                }
 
-               if ((rp & (block_size - 1)) || rp < fifo_start_addr || rp >= fifo_end_addr) {
+               if (((rp - fifo_start_addr) & (block_size - 1)) || rp < fifo_start_addr || rp >= fifo_end_addr) {
                        LOG_ERROR("corrupted fifo read pointer 0x%" PRIx32, rp);
                        break;
                }