flash: at91samd: fix use of is_erased in check
authorAndrey Yurovsky <yurovsky@gmail.com>
Thu, 30 Oct 2014 18:56:08 +0000 (11:56 -0700)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 24 Nov 2014 22:18:59 +0000 (22:18 +0000)
is_erased can be one of -1, 0, or 1 so it must not be checked like a
boolean value.  In this case we want to erase a page unless we know it's
already erased so we just check for is_erased != 1.

Thanks to Jim Paris for pointing this out on another driver.

Change-Id: I4591186228153b64e5a9608a2aac18745e578d4a
Signed-off-by: Andrey Yurovsky <yurovsky@gmail.com>
Reviewed-on: http://openocd.zylin.com/2368
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/at91samd.c

index 7c877c0ff87d0b99a62ed5bf1fa7c267d341eb67..ece1fd20f6d6d9bf6d3b147264377dd10df55289 100644 (file)
@@ -590,7 +590,7 @@ static int samd_erase(struct flash_bank *bank, int first, int last)
                        return ERROR_FLASH_OPERATION_FAILED;
                }
 
-               if (!bank->sectors[s].is_erased) {
+               if (bank->sectors[s].is_erased != 1) {
                        /* For each row in that sector */
                        for (int r = s * rows_in_sector; r < (s + 1) * rows_in_sector; r++) {
                                res = samd_erase_row(bank->target, r * chip->page_size * 4);