X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fmdr.c;h=ed76aab097cb78b0ee45bbfbefd187188eb71b1b;hb=c92a605e2622e5598c737a699d3164b9934bbd8c;hp=46ad75281065a057fe57c43de2997c033c4bed08;hpb=fccc55225a7f874ee9d795286e9d92dc051b5b9d;p=openocd.git diff --git a/src/flash/nor/mdr.c b/src/flash/nor/mdr.c index 46ad752810..ed76aab097 100644 --- a/src/flash/nor/mdr.c +++ b/src/flash/nor/mdr.c @@ -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);