flash/nor: Do not update 'is_erased'
[fw/openocd] / src / flash / nor / mdr.c
index f3916ded98fe9f4a5e02397fcb167cd0a2960b28..f3c85525a1a315a0162a5da36b112a5b449de054 100644 (file)
@@ -62,7 +62,7 @@
 #define KEY            0x8AAA5551
 
 struct mdr_flash_bank {
-       int probed;
+       bool probed;
        unsigned int mem_type;
        unsigned int page_count;
        unsigned int sec_count;
@@ -79,18 +79,13 @@ FLASH_BANK_COMMAND_HANDLER(mdr_flash_bank_command)
        mdr_info = malloc(sizeof(struct mdr_flash_bank));
 
        bank->driver_priv = mdr_info;
-       mdr_info->probed = 0;
+       mdr_info->probed = false;
        COMMAND_PARSE_NUMBER(uint, CMD_ARGV[6], mdr_info->mem_type);
        COMMAND_PARSE_NUMBER(uint, CMD_ARGV[7], mdr_info->page_count);
        COMMAND_PARSE_NUMBER(uint, CMD_ARGV[8], mdr_info->sec_count);
        return ERROR_OK;
 }
 
-static int mdr_protect_check(struct flash_bank *bank)
-{
-       return ERROR_OK;
-}
-
 static int mdr_mass_erase(struct flash_bank *bank)
 {
        struct target *target = bank->target;
@@ -129,11 +124,12 @@ static int mdr_mass_erase(struct flash_bank *bank)
        return retval;
 }
 
-static int mdr_erase(struct flash_bank *bank, int first, int last)
+static int mdr_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        struct target *target = bank->target;
        struct mdr_flash_bank *mdr_info = bank->driver_priv;
-       int i, retval, retval2;
+       int retval, retval2;
        unsigned int j;
        uint32_t flash_cmd, cur_per_clock;
 
@@ -178,7 +174,7 @@ static int mdr_erase(struct flash_bank *bank, int first, int last)
        }
 
        unsigned int page_size = bank->size / mdr_info->page_count;
-       for (i = first; i <= last; i++) {
+       for (unsigned int i = first; i <= last; i++) {
                for (j = 0; j < mdr_info->sec_count; j++) {
                        retval = target_write_u32(target, FLASH_ADR, (i * page_size) | (j << 2));
                        if (retval != ERROR_OK)
@@ -201,7 +197,6 @@ static int mdr_erase(struct flash_bank *bank, int first, int last)
                        if (retval != ERROR_OK)
                                goto reset_pg_and_lock;
                }
-               bank->sectors[i].is_erased = 1;
        }
 
 reset_pg_and_lock:
@@ -217,11 +212,6 @@ reset_pg_and_lock:
        return retval;
 }
 
-static int mdr_protect(struct flash_bank *bank, int set, int first, int last)
-{
-       return ERROR_OK;
-}
-
 static int mdr_write_block(struct flash_bank *bank, const uint8_t *buffer,
                uint32_t offset, uint32_t count)
 {
@@ -337,7 +327,7 @@ static int mdr_write(struct flash_bank *bank, const uint8_t *buffer,
        int rem = count % 4;
        if (rem) {
                new_buffer = malloc(count + rem);
-               if (new_buffer == NULL) {
+               if (!new_buffer) {
                        LOG_ERROR("odd number of bytes to write and no memory for padding buffer");
                        return ERROR_FAIL;
                }
@@ -467,8 +457,7 @@ reset_pg_and_lock:
                retval = retval2;
 
 free_buffer:
-       if (new_buffer)
-               free(new_buffer);
+       free(new_buffer);
 
        /* read some bytes bytes to flush buffer in flash accelerator.
         * See errata for 1986VE1T and 1986VE3. Error 0007 */
@@ -582,10 +571,7 @@ static int mdr_probe(struct flash_bank *bank)
        page_count = mdr_info->page_count;
        page_size = bank->size / page_count;
 
-       if (bank->sectors) {
-               free(bank->sectors);
-               bank->sectors = NULL;
-       }
+       free(bank->sectors);
 
        bank->num_sectors = page_count;
        bank->sectors = malloc(sizeof(struct flash_sector) * page_count);
@@ -597,7 +583,7 @@ static int mdr_probe(struct flash_bank *bank)
                bank->sectors[i].is_protected = 0;
        }
 
-       mdr_info->probed = 1;
+       mdr_info->probed = true;
 
        return ERROR_OK;
 }
@@ -610,28 +596,26 @@ static int mdr_auto_probe(struct flash_bank *bank)
        return mdr_probe(bank);
 }
 
-static int get_mdr_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_mdr_info(struct flash_bank *bank, struct command_invocation *cmd)
 {
        struct mdr_flash_bank *mdr_info = bank->driver_priv;
-       snprintf(buf, buf_size, "MDR32Fx - %s",
-                mdr_info->mem_type ? "info memory" : "main memory");
+       command_print_sameline(cmd, "MDR32Fx - %s",
+                       mdr_info->mem_type ? "info memory" : "main memory");
 
        return ERROR_OK;
 }
 
-struct flash_driver mdr_flash = {
+const struct flash_driver mdr_flash = {
        .name = "mdr",
        .usage = "flash bank <name> mdr <base> <size> 0 0 <target#> <type> <page_count> <sec_count>\n"
        "<type>: 0 for main memory, 1 for info memory",
        .flash_bank_command = mdr_flash_bank_command,
        .erase = mdr_erase,
-       .protect = mdr_protect,
        .write = mdr_write,
        .read = mdr_read,
        .probe = mdr_probe,
        .auto_probe = mdr_auto_probe,
        .erase_check = default_flash_blank_check,
-       .protect_check = mdr_protect_check,
        .info = get_mdr_info,
        .free_driver_priv = default_flash_free_driver_priv,
 };