aboutsummaryrefslogtreecommitdiff
path: root/src/flash
diff options
context:
space:
mode:
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>2012-07-19 00:02:46 +0200
committerFreddie Chopin <freddie.chopin@gmail.com>2012-08-29 06:26:02 +0000
commit73d87c6210bcd049b738583973fefdea0e32c6fa (patch)
treecbeb133354e00fc2cbb810988e1a533a9d7977a3 /src/flash
parent4c3972c1df759564343aa63a424f7791a8ab9b19 (diff)
downloadriscv-openocd-73d87c6210bcd049b738583973fefdea0e32c6fa.zip
riscv-openocd-73d87c6210bcd049b738583973fefdea0e32c6fa.tar.gz
riscv-openocd-73d87c6210bcd049b738583973fefdea0e32c6fa.tar.bz2
kinetis: bugfix in kinetis_write() fallback path
Offset calculation into buffer was wrong and code would read outside buffer if count was not a multiple of four. Change-Id: Ied625b10221423d5a5f25d27ce1edd8c2c3eca8a Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/749 Reviewed-by: Peter Stuge <peter@stuge.se> Tested-by: jenkins Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Diffstat (limited to 'src/flash')
-rw-r--r--src/flash/nor/kinetis.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/flash/nor/kinetis.c b/src/flash/nor/kinetis.c
index 71722c6..433d91e 100644
--- a/src/flash/nor/kinetis.c
+++ b/src/flash/nor/kinetis.c
@@ -435,7 +435,13 @@ static int kinetis_write(struct flash_bank *bank, uint8_t *buffer,
LOG_DEBUG("write longword @ %08X", offset + i);
w0 = (0x06 << 24) | (bank->base + offset + i);
- w1 = buf_get_u32(buffer + offset + i, 0, 32);
+ if (count - i < 4) {
+ uint32_t padding = 0xffffffff;
+ memcpy(&padding, buffer + i, count - i);
+ w1 = buf_get_u32(&padding, 0, 32);
+ } else {
+ w1 = buf_get_u32(buffer + i, 0, 32);
+ }
result = kinetis_ftfx_command(bank, w0, w1, w2, &ftfx_fstat);