This is an automated email from Gerrit.

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

-- gerrit

commit 4a20aaba3a2d95a85a15b9d2a811deb32b87f238
Author: Andrey Smirnov <[email protected]>
Date:   Sat Feb 8 11:58:22 2014 -0800

    at91samd: Bail early if trying to erase protected sector
    
    Bail early if trying to erase protected sector and also do not double-erase 
already
    erased sectors.
    
    Change-Id: Ic2d39af48c3b8e10e78d52dd978b9bc01f671c6a
    Signed-off-by: Andrey Smirnov <[email protected]>

diff --git a/src/flash/nor/at91samd.c b/src/flash/nor/at91samd.c
index 2c816c9..883e53a 100644
--- a/src/flash/nor/at91samd.c
+++ b/src/flash/nor/at91samd.c
@@ -360,16 +360,24 @@ static int samd_erase(struct flash_bank *bank, int first, 
int last)
 
        /* For each sector to be erased */
        for (int s = first; s <= last; s++) {
-               /* 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, r * chip->page_size * 4);
-                       if (res != ERROR_OK) {
-                               LOG_ERROR("SAMD: failed to erase sector %d", s);
-                               return res;
-                       }
+               if (bank->sectors[s].is_protected)
+               {
+                       LOG_ERROR("SAMD: failed to erase sector %d. That sector 
is write-protected", s);
+                       return ERROR_FLASH_OPERATION_FAILED;
                }
 
-               bank->sectors[s].is_erased = 1;
+               if (!bank->sectors[s].is_erased) {
+                       /* 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, r * chip->page_size 
* 4);
+                               if (res != ERROR_OK) {
+                                       LOG_ERROR("SAMD: failed to erase sector 
%d", s);
+                                       return res;
+                               }
+                       }
+
+                       bank->sectors[s].is_erased = 1;
+               }
        }
 
        return ERROR_OK;

-- 

------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to