optimize: replace while loop by memcpy
There is no need to use a while loop here. This patch simple copy the last bytes with the system function. Change-Id: Ibda72dca449746efeba5a1af2e45c5990f9cf347 Signed-off-by: Mathias K <kesmtp@freenet.de> Reviewed-on: http://openocd.zylin.com/364 Tested-by: jenkins Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>__archive__
parent
5f83378a9c
commit
afe95871c5
|
@ -1214,14 +1214,9 @@ static int stellaris_write(struct flash_bank *bank, uint8_t *buffer, uint32_t of
|
||||||
if (bytes_remaining)
|
if (bytes_remaining)
|
||||||
{
|
{
|
||||||
uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff};
|
uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff};
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while (bytes_remaining > 0)
|
/* copy the last remaining bytes into the write buffer */
|
||||||
{
|
memcpy(last_word, buffer+bytes_written, bytes_remaining);
|
||||||
last_word[i++] = *(buffer + bytes_written);
|
|
||||||
bytes_remaining--;
|
|
||||||
bytes_written++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(address & 0xff))
|
if (!(address & 0xff))
|
||||||
LOG_DEBUG("0x%" PRIx32 "", address);
|
LOG_DEBUG("0x%" PRIx32 "", address);
|
||||||
|
|
|
@ -464,17 +464,12 @@ static int stm32lx_write(struct flash_bank *bank, uint8_t *buffer,
|
||||||
|
|
||||||
if (bytes_remaining)
|
if (bytes_remaining)
|
||||||
{
|
{
|
||||||
uint32_t value = 0;
|
uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff};
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
if (bytes_remaining)
|
|
||||||
{
|
|
||||||
value += (buffer[i] << (8 * i));
|
|
||||||
bytes_remaining--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = target_write_u32(target, address, value);
|
/* copy the last remaining bytes into the write buffer */
|
||||||
|
memcpy(last_word, buffer+bytes_written, bytes_remaining);
|
||||||
|
|
||||||
|
retval = target_write_buffer(target, address, 4, last_word);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
|
|
@ -707,14 +707,9 @@ static int str7x_write(struct flash_bank *bank, uint8_t *buffer,
|
||||||
if (bytes_remaining)
|
if (bytes_remaining)
|
||||||
{
|
{
|
||||||
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
i = 0;
|
|
||||||
|
|
||||||
while (bytes_remaining > 0)
|
/* copy the last remaining bytes into the write buffer */
|
||||||
{
|
memcpy(last_dword, buffer+bytes_written, bytes_remaining);
|
||||||
last_dword[i++] = *(buffer + bytes_written);
|
|
||||||
bytes_remaining--;
|
|
||||||
bytes_written++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* command */
|
/* command */
|
||||||
cmd = FLASH_DWPG;
|
cmd = FLASH_DWPG;
|
||||||
|
|
|
@ -618,14 +618,9 @@ static int str9x_write(struct flash_bank *bank,
|
||||||
if (bytes_remaining)
|
if (bytes_remaining)
|
||||||
{
|
{
|
||||||
uint8_t last_halfword[2] = {0xff, 0xff};
|
uint8_t last_halfword[2] = {0xff, 0xff};
|
||||||
i = 0;
|
|
||||||
|
|
||||||
while (bytes_remaining > 0)
|
/* copy the last remaining bytes into the write buffer */
|
||||||
{
|
memcpy(last_halfword, buffer+bytes_written, bytes_remaining);
|
||||||
last_halfword[i++] = *(buffer + bytes_written);
|
|
||||||
bytes_remaining--;
|
|
||||||
bytes_written++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bank_adr = address & ~0x03;
|
bank_adr = address & ~0x03;
|
||||||
|
|
||||||
|
|
|
@ -714,14 +714,9 @@ static int str9xpec_write(struct flash_bank *bank, uint8_t *buffer,
|
||||||
if (bytes_remaining)
|
if (bytes_remaining)
|
||||||
{
|
{
|
||||||
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
i = 0;
|
|
||||||
|
|
||||||
while (bytes_remaining > 0)
|
/* copy the last remaining bytes into the write buffer */
|
||||||
{
|
memcpy(last_dword, buffer+bytes_written, bytes_remaining);
|
||||||
last_dword[i++] = *(buffer + bytes_written);
|
|
||||||
bytes_remaining--;
|
|
||||||
bytes_written++;
|
|
||||||
}
|
|
||||||
|
|
||||||
str9xpec_set_instr(tap, ISC_PROGRAM, TAP_IRPAUSE);
|
str9xpec_set_instr(tap, ISC_PROGRAM, TAP_IRPAUSE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue