X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fmdr.c;h=650abfd62d650e6c313ad4d8a0e5d3e7fa83d270;hp=3ecee1c84f779f0dc1e7fed03022884ab208815d;hb=facd0e7827926d0639260be40e9cc4c595794194;hpb=da9bee3ede482556865568b148aecb0ff5f06a62 diff --git a/src/flash/nor/mdr.c b/src/flash/nor/mdr.c index 3ecee1c84f..650abfd62d 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) @@ -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);