]> git.sur5r.net Git - openocd/blobdiff - src/flash/nor/mdr.c
flash: Constify write buffer
[openocd] / src / flash / nor / mdr.c
index 46ad75281065a057fe57c43de2997c033c4bed08..ed76aab097cb78b0ee45bbfbefd187188eb71b1b 100644 (file)
@@ -159,7 +159,7 @@ static int mdr_erase(struct flash_bank *bank, int first, int last)
 
        retval = target_write_u32(target, FLASH_KEY, KEY);
        if (retval != ERROR_OK)
-               goto reset_pg_and_lock;
+               return retval;
 
        retval = target_read_u32(target, FLASH_CMD, &flash_cmd);
        if (retval != ERROR_OK)
@@ -223,7 +223,7 @@ 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, uint8_t *buffer,
+static int mdr_write_block(struct flash_bank *bank, const uint8_t *buffer,
                uint32_t offset, uint32_t count)
 {
        struct target *target = bank->target;
@@ -258,7 +258,7 @@ static int mdr_write_block(struct flash_bank *bank, uint8_t *buffer,
        };
 
        retval = target_write_buffer(target, write_algorithm->address,
-                       sizeof(mdr32fx_flash_write_code), (uint8_t *)mdr32fx_flash_write_code);
+                       sizeof(mdr32fx_flash_write_code), mdr32fx_flash_write_code);
        if (retval != ERROR_OK)
                return retval;
 
@@ -314,7 +314,7 @@ static int mdr_write_block(struct flash_bank *bank, uint8_t *buffer,
        return retval;
 }
 
-static int mdr_write(struct flash_bank *bank, uint8_t *buffer,
+static int mdr_write(struct flash_bank *bank, const uint8_t *buffer,
                uint32_t offset, uint32_t count)
 {
        struct target *target = bank->target;
@@ -345,7 +345,7 @@ static int mdr_write(struct flash_bank *bank, uint8_t *buffer,
                LOG_INFO("odd number of bytes to write, padding with 0xff");
                buffer = memcpy(new_buffer, buffer, count);
                while (rem--)
-                       buffer[count++] = 0xff;
+                       new_buffer[count++] = 0xff;
        }
 
        uint32_t flash_cmd, cur_per_clock;
@@ -353,21 +353,22 @@ static int mdr_write(struct flash_bank *bank, uint8_t *buffer,
 
        retval = target_read_u32(target, MD_PER_CLOCK, &cur_per_clock);
        if (retval != ERROR_OK)
-               return retval;
+               goto free_buffer;
 
        if (!(cur_per_clock & MD_PER_CLOCK_RST_CLK)) {
                /* Something's very wrong if the RST_CLK module is not clocked */
                LOG_ERROR("Target needs reset before flash operations");
-               return ERROR_FLASH_OPERATION_FAILED;
+               retval = ERROR_FLASH_OPERATION_FAILED;
+               goto free_buffer;
        }
 
        retval = target_write_u32(target, MD_PER_CLOCK, cur_per_clock | MD_PER_CLOCK_EEPROM);
        if (retval != ERROR_OK)
-               return retval;
+               goto free_buffer;
 
        retval = target_write_u32(target, FLASH_KEY, KEY);
        if (retval != ERROR_OK)
-               goto reset_pg_and_lock;
+               goto free_buffer;
 
        retval = target_read_u32(target, FLASH_CMD, &flash_cmd);
        if (retval != ERROR_OK)
@@ -466,6 +467,7 @@ reset_pg_and_lock:
        if (retval == ERROR_OK)
                retval = retval2;
 
+free_buffer:
        if (new_buffer)
                free(new_buffer);