flash/nor/stm32f1x: lock flash in case of error
[fw/openocd] / src / flash / nor / aducm360.c
index 0f85254a86af887cf02c8aa778fc8373d1620f42..4e816fd618f3cef46a02ea2ba51d694a70de29dc 100644 (file)
@@ -85,13 +85,12 @@ FLASH_BANK_COMMAND_HANDLER(aducm360_flash_bank_command)
 /* ----------------------------------------------------------------------- */
 static int aducm360_build_sector_list(struct flash_bank *bank)
 {
-       int i = 0;
        uint32_t offset = 0;
 
        /* sector size is 512 */
        bank->num_sectors = bank->size / FLASH_SECTOR_SIZE;
        bank->sectors = malloc(sizeof(struct flash_sector) * bank->num_sectors);
-       for (i = 0; i < bank->num_sectors; ++i) {
+       for (unsigned i = 0; i < bank->num_sectors; ++i) {
                bank->sectors[i].offset = offset;
                bank->sectors[i].size = FLASH_SECTOR_SIZE;
                offset += bank->sectors[i].size;
@@ -102,13 +101,6 @@ static int aducm360_build_sector_list(struct flash_bank *bank)
        return ERROR_OK;
 }
 
-/* ----------------------------------------------------------------------- */
-static int aducm360_protect_check(struct flash_bank *bank)
-{
-       LOG_WARNING("aducm360_protect_check not implemented.");
-       return ERROR_OK;
-}
-
 /* ----------------------------------------------------------------------- */
 static int aducm360_mass_erase(struct target *target)
 {
@@ -171,7 +163,8 @@ static int aducm360_page_erase(struct target *target, uint32_t padd)
 }
 
 /* ----------------------------------------------------------------------- */
-static int aducm360_erase(struct flash_bank *bank, int first, int last)
+static int aducm360_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        int             res = ERROR_OK;
        int             i;
@@ -194,13 +187,6 @@ static int aducm360_erase(struct flash_bank *bank, int first, int last)
        return res;
 }
 
-/* ----------------------------------------------------------------------- */
-static int aducm360_protect(struct flash_bank *bank, int set, int first, int last)
-{
-       LOG_ERROR("aducm360_protect not implemented.");
-       return ERROR_FLASH_OPERATION_FAILED;
-}
-
 /* ----------------------------------------------------------------------- */
 static int aducm360_write_block_sync(
                struct flash_bank *bank,
@@ -299,7 +285,7 @@ static int aducm360_write_block_sync(
 
                res = buf_get_u32(reg_params[4].value, 0, 32);
                if (res) {
-                       LOG_ERROR("aducm360 fast sync algorithm reports an error (%02X)", res);
+                       LOG_ERROR("aducm360 fast sync algorithm reports an error (%02" PRIX32 ")", res);
                        retval = ERROR_FAIL;
                        break;
                }
@@ -415,7 +401,7 @@ static int aducm360_write_block_async(
        } else {
                res = buf_get_u32(reg_params[4].value, 0, 32);  /*RESULT*/
                if (res) {
-                       LOG_ERROR("aducm360 fast async algorithm reports an error (%02X)", res);
+                       LOG_ERROR("aducm360 fast async algorithm reports an error (%02" PRIX32 ")", res);
                        retval = ERROR_FAIL;
                }
        }
@@ -448,10 +434,8 @@ static int aducm360_write_block(struct flash_bank *bank,
        switch (choice) {
        case 0:
                return aducm360_write_block_sync(bank, buffer, offset, count);
-               break;
        case 1:
                return aducm360_write_block_async(bank, buffer, offset, count);
-               break;
        default:
                LOG_ERROR("aducm360_write_block was cancelled (no writing method was chosen)!");
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
@@ -551,7 +535,7 @@ static int aducm360_check_flash_completion(struct target *target, unsigned int t
 {
        uint32_t v = 1;
 
-       long long endtime = timeval_ms() + timeout_ms;
+       int64_t endtime = timeval_ms() + timeout_ms;
        while (1) {
                target_read_u32(target, ADUCM360_FLASH_BASE+ADUCM360_FLASH_FEESTA, &v);
                if ((v & 0x00000001) == 0)
@@ -568,15 +552,13 @@ static int aducm360_check_flash_completion(struct target *target, unsigned int t
 }
 
 /* ----------------------------------------------------------------------- */
-struct flash_driver aducm360_flash = {
+const struct flash_driver aducm360_flash = {
        .name = "aducm360",
        .flash_bank_command = aducm360_flash_bank_command,
        .erase = aducm360_erase,
-       .protect = aducm360_protect,
        .write = aducm360_write,
        .read = default_flash_read,
        .probe = aducm360_probe,
        .auto_probe = aducm360_probe,
        .erase_check = default_flash_blank_check,
-       .protect_check = aducm360_protect_check,
 };