aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/flash/nor/stellaris.c9
-rw-r--r--src/flash/nor/stm32lx.c15
-rw-r--r--src/flash/nor/str7x.c9
-rw-r--r--src/flash/nor/str9x.c9
-rw-r--r--src/flash/nor/str9xpec.c9
5 files changed, 13 insertions, 38 deletions
diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c
index c855995f..13b7071e 100644
--- a/src/flash/nor/stellaris.c
+++ b/src/flash/nor/stellaris.c
@@ -1214,14 +1214,9 @@ static int stellaris_write(struct flash_bank *bank, uint8_t *buffer, uint32_t of
if (bytes_remaining)
{
uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff};
- int i = 0;
- while (bytes_remaining > 0)
- {
- last_word[i++] = *(buffer + bytes_written);
- bytes_remaining--;
- bytes_written++;
- }
+ /* copy the last remaining bytes into the write buffer */
+ memcpy(last_word, buffer+bytes_written, bytes_remaining);
if (!(address & 0xff))
LOG_DEBUG("0x%" PRIx32 "", address);
diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c
index 8a6ad7bc..29a7aac9 100644
--- a/src/flash/nor/stm32lx.c
+++ b/src/flash/nor/stm32lx.c
@@ -464,17 +464,12 @@ static int stm32lx_write(struct flash_bank *bank, uint8_t *buffer,
if (bytes_remaining)
{
- uint32_t value = 0;
- for (int i = 0; i < 4; i++)
- {
- if (bytes_remaining)
- {
- value += (buffer[i] << (8 * i));
- bytes_remaining--;
- }
- }
+ uint8_t last_word[4] = {0xff, 0xff, 0xff, 0xff};
- 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)
return retval;
diff --git a/src/flash/nor/str7x.c b/src/flash/nor/str7x.c
index 57f860d6..0bfe7c9e 100644
--- a/src/flash/nor/str7x.c
+++ b/src/flash/nor/str7x.c
@@ -707,14 +707,9 @@ static int str7x_write(struct flash_bank *bank, uint8_t *buffer,
if (bytes_remaining)
{
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- i = 0;
- while (bytes_remaining > 0)
- {
- last_dword[i++] = *(buffer + bytes_written);
- bytes_remaining--;
- bytes_written++;
- }
+ /* copy the last remaining bytes into the write buffer */
+ memcpy(last_dword, buffer+bytes_written, bytes_remaining);
/* command */
cmd = FLASH_DWPG;
diff --git a/src/flash/nor/str9x.c b/src/flash/nor/str9x.c
index 5bea2068..674522c7 100644
--- a/src/flash/nor/str9x.c
+++ b/src/flash/nor/str9x.c
@@ -618,14 +618,9 @@ static int str9x_write(struct flash_bank *bank,
if (bytes_remaining)
{
uint8_t last_halfword[2] = {0xff, 0xff};
- i = 0;
- while (bytes_remaining > 0)
- {
- last_halfword[i++] = *(buffer + bytes_written);
- bytes_remaining--;
- bytes_written++;
- }
+ /* copy the last remaining bytes into the write buffer */
+ memcpy(last_halfword, buffer+bytes_written, bytes_remaining);
bank_adr = address & ~0x03;
diff --git a/src/flash/nor/str9xpec.c b/src/flash/nor/str9xpec.c
index 6fa66a09..0e095a30 100644
--- a/src/flash/nor/str9xpec.c
+++ b/src/flash/nor/str9xpec.c
@@ -714,14 +714,9 @@ static int str9xpec_write(struct flash_bank *bank, uint8_t *buffer,
if (bytes_remaining)
{
uint8_t last_dword[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- i = 0;
- while (bytes_remaining > 0)
- {
- last_dword[i++] = *(buffer + bytes_written);
- bytes_remaining--;
- bytes_written++;
- }
+ /* copy the last remaining bytes into the write buffer */
+ memcpy(last_dword, buffer+bytes_written, bytes_remaining);
str9xpec_set_instr(tap, ISC_PROGRAM, TAP_IRPAUSE);