flash/nor/atsamv: Use 'bool' data type
[fw/openocd] / src / flash / nor / atsamv.c
index 0658c5906f60729780b1bc965a851564c0f0e945..1ad37c1ab357d53d4fe8dacd262aa1caf7b90a33 100644 (file)
 #define SAMV_PAGE_SIZE                 512
 #define SAMV_FLASH_BASE         0x00400000
 
-extern struct flash_driver atsamv_flash;
+extern const struct flash_driver atsamv_flash;
 
 struct samv_flash_bank {
-       int      probed;
+       bool      probed;
        unsigned size_bytes;
        unsigned gpnvm[SAMV_NUM_GPNVM_BITS];
 };
@@ -147,7 +147,7 @@ static int samv_efc_perform_command(struct target *target,
 {
        int r;
        uint32_t v;
-       long long ms_now, ms_end;
+       int64_t ms_now, ms_end;
 
        if (status)
                *status = 0;
@@ -328,7 +328,7 @@ static int samv_protect_check(struct flash_bank *bank)
        if (r != ERROR_OK)
                return r;
 
-       for (int x = 0; x < bank->num_sectors; x++)
+       for (unsigned int x = 0; x < bank->num_sectors; x++)
                bank->sectors[x].is_protected = (!!(v[x >> 5] & (1 << (x % 32))));
        return ERROR_OK;
 }
@@ -363,6 +363,9 @@ static int samv_probe(struct flash_bank *bank)
 
        uint8_t nvm_size_code = (device_id >> 8) & 0xf;
        switch (nvm_size_code) {
+               case 10:
+                       bank->size = 512 * 1024;
+                       break;
                case 12:
                        bank->size = 1024 * 1024;
                        break;
@@ -372,17 +375,16 @@ static int samv_probe(struct flash_bank *bank)
                default:
                        LOG_ERROR("unrecognized flash size code: %d", nvm_size_code);
                        return ERROR_FAIL;
-                       break;
        }
 
        struct samv_flash_bank *samv_info = bank->driver_priv;
        samv_info->size_bytes = bank->size;
-       samv_info->probed = 1;
+       samv_info->probed = true;
 
        bank->base = SAMV_FLASH_BASE;
        bank->num_sectors = bank->size / SAMV_SECTOR_SIZE;
        bank->sectors = calloc(bank->num_sectors, sizeof(struct flash_sector));
-       for (int s = 0; s < (int)bank->num_sectors; s++) {
+       for (unsigned int s = 0; s < bank->num_sectors; s++) {
                bank->sectors[s].size = SAMV_SECTOR_SIZE;
                bank->sectors[s].offset = s * SAMV_SECTOR_SIZE;
                bank->sectors[s].is_erased = -1;
@@ -404,7 +406,8 @@ static int samv_auto_probe(struct flash_bank *bank)
        return samv_probe(bank);
 }
 
-static int samv_erase(struct flash_bank *bank, int first, int last)
+static int samv_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        const int page_count = 32; /* 32 pages equals 16 KB lock region */
 
@@ -418,31 +421,31 @@ static int samv_erase(struct flash_bank *bank, int first, int last)
                return r;
 
        /* easy case: we've been requested to erase the entire flash */
-       if ((first == 0) && ((last + 1) == (int)(bank->num_sectors)))
+       if ((first == 0) && ((last + 1) == bank->num_sectors))
                return samv_efc_perform_command(bank->target, SAMV_EFC_FCMD_EA, 0, NULL);
 
-       LOG_INFO("erasing lock regions %d-%d...", first, last);
+       LOG_INFO("erasing lock regions %u-%u...", first, last);
 
-       for (int i = first; i <= last; i++) {
+       for (unsigned int i = first; i <= last; i++) {
                uint32_t status;
                r = samv_erase_pages(bank->target, (i * page_count), page_count, &status);
-               LOG_INFO("erasing lock region %d", i);
+               LOG_INFO("erasing lock region %u", i);
                if (r != ERROR_OK)
-                       LOG_ERROR("error performing erase page @ lock region number %d",
-                                       (unsigned int)(i));
+                       LOG_ERROR("error performing erase page @ lock region number %u", i);
                if (status & (1 << 2)) {
-                       LOG_ERROR("lock region %d is locked", (unsigned int)(i));
+                       LOG_ERROR("lock region %u is locked", i);
                        return ERROR_FAIL;
                }
                if (status & (1 << 1)) {
-                       LOG_ERROR("flash command error @lock region %d", (unsigned int)(i));
+                       LOG_ERROR("flash command error @lock region %u", i);
                        return ERROR_FAIL;
                }
        }
        return ERROR_OK;
 }
 
-static int samv_protect(struct flash_bank *bank, int set, int first, int last)
+static int samv_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last)
 {
        if (bank->target->state != TARGET_HALTED) {
                LOG_ERROR("Target not halted");
@@ -451,9 +454,9 @@ static int samv_protect(struct flash_bank *bank, int set, int first, int last)
 
        int r;
        if (set)
-               r = samv_flash_lock(bank->target, (unsigned)(first), (unsigned)(last));
+               r = samv_flash_lock(bank->target, first, last);
        else
-               r = samv_flash_unlock(bank->target, (unsigned)(first), (unsigned)(last));
+               r = samv_flash_unlock(bank->target, first, last);
 
        return r;
 }
@@ -642,7 +645,6 @@ COMMAND_HANDLER(samv_handle_gpnvm_command)
        switch (CMD_ARGC) {
                case 0:
                        goto showall;
-                       break;
                case 1:
                        who = -1;
                        break;
@@ -657,7 +659,6 @@ COMMAND_HANDLER(samv_handle_gpnvm_command)
                        break;
                default:
                        return ERROR_COMMAND_SYNTAX_ERROR;
-                       break;
        }
 
        uint32_t v;
@@ -669,22 +670,22 @@ showall:
                                r = samv_get_gpnvm(target, x, &v);
                                if (r != ERROR_OK)
                                        break;
-                               command_print(CMD_CTX, "samv-gpnvm%u: %u", x, v);
+                               command_print(CMD, "samv-gpnvm%u: %u", x, v);
                        }
                        return r;
                }
                if ((who >= 0) && (((unsigned)who) < SAMV_NUM_GPNVM_BITS)) {
                        r = samv_get_gpnvm(target, who, &v);
-                       command_print(CMD_CTX, "samv-gpnvm%u: %u", who, v);
+                       command_print(CMD, "samv-gpnvm%u: %u", who, v);
                        return r;
                } else {
-                       command_print(CMD_CTX, "invalid gpnvm: %u", who);
+                       command_print(CMD, "invalid gpnvm: %u", who);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
        }
 
        if (who == -1) {
-               command_print(CMD_CTX, "missing gpnvm number");
+               command_print(CMD, "missing gpnvm number");
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
@@ -693,7 +694,7 @@ showall:
        else if (!strcmp("clr", CMD_ARGV[0]) || !strcmp("clear", CMD_ARGV[0]))
                r = samv_clear_gpnvm(target, who);
        else {
-               command_print(CMD_CTX, "unknown command: %s", CMD_ARGV[0]);
+               command_print(CMD, "unknown command: %s", CMD_ARGV[0]);
                r = ERROR_COMMAND_SYNTAX_ERROR;
        }
        return r;
@@ -723,7 +724,7 @@ static const struct command_registration atsamv_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct flash_driver atsamv_flash = {
+const struct flash_driver atsamv_flash = {
        .name = "atsamv",
        .commands = atsamv_command_handlers,
        .flash_bank_command = samv_flash_bank_command,
@@ -736,4 +737,5 @@ struct flash_driver atsamv_flash = {
        .erase_check = default_flash_blank_check,
        .protect_check = samv_protect_check,
        .info = samv_get_info,
+       .free_driver_priv = default_flash_free_driver_priv,
 };