flash/nor/numicro: use flash infrastructure to align write
The aligning code generated a clang static analyzer warning and imposed huge memory leak. This part of code was removed and flash infrastructure to alignment is used instead. Not tested on hw! Change-Id: I7c71da87547e71d595a7e7071ae5adcc1cecc827 Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-on: http://openocd.zylin.com/5367 Tested-by: jenkins Reviewed-by: Oleksij Rempel <linux@rempel-privat.de>
This commit is contained in:
parent
e1051e1090
commit
c84f75de81
|
@ -1548,7 +1548,6 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
|
|||
{
|
||||
struct target *target = bank->target;
|
||||
uint32_t timeout, status;
|
||||
uint8_t *new_buffer = NULL;
|
||||
int retval = ERROR_OK;
|
||||
|
||||
if (target->state != TARGET_HALTED) {
|
||||
|
@ -1566,20 +1565,8 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
|
|||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
|
||||
if (count & 0x3) {
|
||||
uint32_t old_count = count;
|
||||
count = (old_count | 3) + 1;
|
||||
new_buffer = malloc(count);
|
||||
if (new_buffer == NULL) {
|
||||
LOG_ERROR("odd number of bytes to write and no memory "
|
||||
"for padding buffer");
|
||||
return ERROR_FAIL;
|
||||
}
|
||||
LOG_INFO("odd number of bytes to write (%d), extending to %d "
|
||||
"and padding with 0xff", old_count, count);
|
||||
memset(new_buffer, 0xff, count);
|
||||
buffer = memcpy(new_buffer, buffer, old_count);
|
||||
}
|
||||
assert(offset % 4 == 0);
|
||||
assert(count % 4 == 0);
|
||||
|
||||
uint32_t words_remaining = count / 4;
|
||||
|
||||
|
@ -1597,13 +1584,10 @@ static int numicro_write(struct flash_bank *bank, const uint8_t *buffer,
|
|||
|
||||
LOG_DEBUG("write longword @ %08X", offset + i);
|
||||
|
||||
uint8_t padding[4] = {0xff, 0xff, 0xff, 0xff};
|
||||
memcpy(padding, buffer + i, MIN(4, count-i));
|
||||
|
||||
retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + offset + i);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
retval = target_write_memory(target, NUMICRO_FLASH_ISPDAT, 4, 1, padding);
|
||||
retval = target_write_memory(target, NUMICRO_FLASH_ISPDAT, 4, 1, buffer + i);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
|
||||
|
@ -1754,6 +1738,7 @@ FLASH_BANK_COMMAND_HANDLER(numicro_flash_bank_command)
|
|||
memset(bank_info, 0, sizeof(struct numicro_flash_bank));
|
||||
|
||||
bank->driver_priv = bank_info;
|
||||
bank->write_start_alignment = bank->write_end_alignment = 4;
|
||||
|
||||
return ERROR_OK;
|
||||
|
||||
|
|
Loading…
Reference in New Issue