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;
|
struct target *target = bank->target;
|
||||||
uint32_t timeout, status;
|
uint32_t timeout, status;
|
||||||
uint8_t *new_buffer = NULL;
|
|
||||||
int retval = ERROR_OK;
|
int retval = ERROR_OK;
|
||||||
|
|
||||||
if (target->state != TARGET_HALTED) {
|
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)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (count & 0x3) {
|
assert(offset % 4 == 0);
|
||||||
uint32_t old_count = count;
|
assert(count % 4 == 0);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t words_remaining = count / 4;
|
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);
|
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);
|
retval = target_write_u32(target, NUMICRO_FLASH_ISPADR, bank->base + offset + i);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
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)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
retval = target_write_u32(target, NUMICRO_FLASH_ISPTRG, ISPTRG_ISPGO);
|
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));
|
memset(bank_info, 0, sizeof(struct numicro_flash_bank));
|
||||||
|
|
||||||
bank->driver_priv = bank_info;
|
bank->driver_priv = bank_info;
|
||||||
|
bank->write_start_alignment = bank->write_end_alignment = 4;
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue