flash/nor: Do not update 'is_erased'
[fw/openocd] / src / flash / nor / at91sam4l.c
index d356398dc15ff71cf9c91dda238df7cab84e79ca..f8c6f6490644c384cc2375ff9427116a952230d3 100644 (file)
@@ -125,7 +125,7 @@ struct sam4l_info {
        uint32_t page_size;
        int num_pages;
        int sector_size;
-       int pages_per_sector;
+       unsigned int pages_per_sector;
 
        bool probed;
        struct target *target;
@@ -335,7 +335,7 @@ static int sam4l_probe(struct flash_bank *bank)
 
        /* Fill out the sector information: all SAM4L sectors are the same size and
         * there is always a fixed number of them. */
-       for (int i = 0; i < bank->num_sectors; i++) {
+       for (unsigned int i = 0; i < bank->num_sectors; i++) {
                bank->sectors[i].size = chip->sector_size;
                bank->sectors[i].offset = i * chip->sector_size;
                /* mark as unknown */
@@ -346,7 +346,7 @@ static int sam4l_probe(struct flash_bank *bank)
        /* Done */
        chip->probed = true;
 
-       LOG_INFO("SAM4L MCU: %s (Rev %c) (%" PRIu32 "KB Flash with %d %" PRId32 "B pages, %" PRIu32 "KB RAM)",
+       LOG_INFO("SAM4L MCU: %s (Rev %c) (%" PRIu32 "KB Flash with %d %" PRIu32 "B pages, %" PRIu32 "KB RAM)",
                        chip->details ? chip->details->name : "unknown", (char)('A' + (id & 0xF)),
                        chip->flash_kb, chip->num_pages, chip->page_size, chip->ram_kb);
 
@@ -375,13 +375,14 @@ static int sam4l_protect_check(struct flash_bank *bank)
                return res;
 
        st >>= 16; /* There are 16 lock region bits in the upper half word */
-       for (int i = 0; i < bank->num_sectors; i++)
-                       bank->sectors[i].is_protected = !!(st & (1<<i));
+       for (unsigned int i = 0; i < bank->num_sectors; i++)
+               bank->sectors[i].is_protected = !!(st & (1<<i));
 
        return ERROR_OK;
 }
 
-static int sam4l_protect(struct flash_bank *bank, int set, int first, int last)
+static int sam4l_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last)
 {
        struct sam4l_info *chip = (struct sam4l_info *)bank->driver_priv;
 
@@ -398,7 +399,7 @@ static int sam4l_protect(struct flash_bank *bank, int set, int first, int last)
 
        /* Make sure the pages make sense. */
        if (first >= bank->num_sectors || last >= bank->num_sectors) {
-               LOG_ERROR("Protect range %d - %d not valid (%d sectors total)", first, last,
+               LOG_ERROR("Protect range %u - %u not valid (%u sectors total)", first, last,
                                bank->num_sectors);
                return ERROR_FAIL;
        }
@@ -406,7 +407,7 @@ static int sam4l_protect(struct flash_bank *bank, int set, int first, int last)
        /* Try to lock or unlock each sector in the range.      This is done by locking
         * a region containing one page in that sector, we arbitrarily choose the 0th
         * page in the sector. */
-       for (int i = first; i <= last; i++) {
+       for (unsigned int i = first; i <= last; i++) {
                int res;
 
                res = sam4l_flash_command(bank->target,
@@ -420,7 +421,8 @@ static int sam4l_protect(struct flash_bank *bank, int set, int first, int last)
        return ERROR_OK;
 }
 
-static int sam4l_erase(struct flash_bank *bank, int first, int last)
+static int sam4l_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        int ret;
        struct sam4l_info *chip = (struct sam4l_info *)bank->driver_priv;
@@ -438,7 +440,7 @@ static int sam4l_erase(struct flash_bank *bank, int first, int last)
 
        /* Make sure the pages make sense. */
        if (first >= bank->num_sectors || last >= bank->num_sectors) {
-               LOG_ERROR("Erase range %d - %d not valid (%d sectors total)", first, last,
+               LOG_ERROR("Erase range %u - %u not valid (%u sectors total)", first, last,
                                bank->num_sectors);
                return ERROR_FAIL;
        }
@@ -453,19 +455,19 @@ static int sam4l_erase(struct flash_bank *bank, int first, int last)
                        return ret;
                }
        } else {
-               LOG_DEBUG("Erasing sectors %d through %d...\n", first, last);
+               LOG_DEBUG("Erasing sectors %u through %u...\n", first, last);
 
                /* For each sector... */
-               for (int i = first; i <= last; i++) {
+               for (unsigned int i = first; i <= last; i++) {
                        /* For each page in that sector... */
-                       for (int j = 0; j < chip->pages_per_sector; j++) {
-                               int pn = i * chip->pages_per_sector + j;
+                       for (unsigned int j = 0; j < chip->pages_per_sector; j++) {
+                               unsigned int pn = i * chip->pages_per_sector + j;
                                bool is_erased = false;
 
                                /* Issue the page erase */
                                ret = sam4l_flash_command(bank->target, SAM4L_FCMD_EP, pn);
                                if (ret != ERROR_OK) {
-                                       LOG_ERROR("Erasing page %d failed", pn);
+                                       LOG_ERROR("Erasing page %u failed", pn);
                                        return ret;
                                }
 
@@ -474,13 +476,10 @@ static int sam4l_erase(struct flash_bank *bank, int first, int last)
                                        return ret;
 
                                if (!is_erased) {
-                                       LOG_DEBUG("Page %d was not erased.", pn);
+                                       LOG_DEBUG("Page %u was not erased.", pn);
                                        return ERROR_FAIL;
                                }
                        }
-
-                       /* This sector is definitely erased. */
-                       bank->sectors[i].is_erased = 1;
                }
        }
 
@@ -601,6 +600,7 @@ static int sam4l_write(struct flash_bank *bank, const uint8_t *buffer,
 
        /* There's at least one aligned page to write out. */
        if (count >= chip->page_size) {
+               assert(chip->page_size > 0);
                int np = count / chip->page_size + ((count % chip->page_size) ? 1 : 0);
 
                for (int i = 0; i < np; i++) {