]> git.sur5r.net Git - openocd/blobdiff - src/flash/nor/at91sam4.c
Changed SAM4S Erase for effective Sector erase
[openocd] / src / flash / nor / at91sam4.c
index 4bc511c2aa6e8b6bccbbcfb75cda0de631bdc1d4..fd98b7f0da850370e77d91add82cb5ce4d0e78f4 100644 (file)
@@ -849,9 +849,9 @@ static int FLASHD_GetLockBits(struct sam4_bank_private *pPrivate, uint32_t *v)
        LOG_DEBUG("Here");
        r = EFC_PerformCommand(pPrivate, AT91C_EFC_FCMD_GLB, 0, NULL);
        if (r == ERROR_OK)      {
-               r = EFC_GetResult(pPrivate, v);
-               r = EFC_GetResult(pPrivate, v);
-               r = EFC_GetResult(pPrivate, v);
+               EFC_GetResult(pPrivate, v);
+               EFC_GetResult(pPrivate, v);
+               EFC_GetResult(pPrivate, v);
                r = EFC_GetResult(pPrivate, v);
        }
        LOG_DEBUG("End: %d", r);
@@ -1678,6 +1678,9 @@ static int sam4_erase(struct flash_bank *bank, int first, int last)
        struct sam4_bank_private *pPrivate;
        int r;
        int i;
+       int pageCount;
+       /*16 pages equals 8KB - Same size as a lock region*/
+       pageCount = 16;
        uint32_t status;
 
        LOG_DEBUG("Here");
@@ -1705,7 +1708,7 @@ static int sam4_erase(struct flash_bank *bank, int first, int last)
        LOG_INFO("sam4 First: 0x%08x Last: 0x%08x", (unsigned int)(first), (unsigned int)(last));
        for (i = first; i <= last; i++) {
                /*16 pages equals 8KB - Same size as a lock region*/
-               r = FLASHD_ErasePages(pPrivate, i, 16, &status);
+               r = FLASHD_ErasePages(pPrivate, (i * pageCount), pageCount, &status);
                LOG_INFO("Erasing sector: 0x%08x", (unsigned int)(i));
                if (r != ERROR_OK)
                        LOG_ERROR("SAM4: Error performing Erase page @ lock region number %d",
@@ -2066,7 +2069,6 @@ static int sam4_write(struct flash_bank *bank,
                r = sam4_page_write(pPrivate, page_cur, pagebuffer);
                if (r != ERROR_OK)
                        goto done;
-               buffer += count;
        }
        LOG_DEBUG("Done!");
        r = ERROR_OK;