diff options
author | Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> | 2015-11-30 12:21:12 +0100 |
---|---|---|
committer | Freddie Chopin <freddie.chopin@gmail.com> | 2016-05-04 22:55:22 +0100 |
commit | 934ed07b0d05448a553d19daa14ad6196fc0c0fe (patch) | |
tree | 69330feb9edce4a32d4bdb4f9c37890baded77aa | |
parent | a28b94e9ab00c63951f68ac44833e9d51200f7db (diff) | |
download | riscv-openocd-934ed07b0d05448a553d19daa14ad6196fc0c0fe.zip riscv-openocd-934ed07b0d05448a553d19daa14ad6196fc0c0fe.tar.gz riscv-openocd-934ed07b0d05448a553d19daa14ad6196fc0c0fe.tar.bz2 |
stm32l4x.c: Correct waiting for data.
Old code waited only for 7 bytes and didn't handle buffer wrap-around, but
was functional despite.
Change-Id: Iceaf7be1e51368b2ec0a8722cc9ac16d12f9aa63
Signed-off-by: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Reviewed-on: http://openocd.zylin.com/3140
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r-- | contrib/loaders/flash/stm32l4x.S | 5 | ||||
-rw-r--r-- | src/flash/nor/stm32l4x.c | 15 |
2 files changed, 12 insertions, 8 deletions
diff --git a/contrib/loaders/flash/stm32l4x.S b/contrib/loaders/flash/stm32l4x.S index 045f9d0..799dec5 100644 --- a/contrib/loaders/flash/stm32l4x.S +++ b/contrib/loaders/flash/stm32l4x.S @@ -65,7 +65,10 @@ wait_fifo: beq exit ldr r5, [r0, #4] /* read rp */ subs r6, r8, r5 /* number of bytes available for read in r6*/ - cmp r6, #7 /* wait until 8 bytes are available */ + itt mi /* if wrapped around*/ + addmi r6, r1 /* add size of buffer */ + submi r6, r0 + cmp r6, #8 /* wait until 8 bytes are available */ bcc wait_fifo ldr r6, STM32_PROG diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c index 42e90bc..32d5a0e 100644 --- a/src/flash/nor/stm32l4x.c +++ b/src/flash/nor/stm32l4x.c @@ -463,13 +463,14 @@ static int stm32l4_write_block(struct flash_bank *bank, const uint8_t *buffer, */ static const uint8_t stm32l4_flash_write_code[] = { - 0xd0, 0xf8, 0x00, 0x80, 0xb8, 0xf1, 0x00, 0x0f, 0x1e, 0xd0, 0x45, 0x68, - 0xb8, 0xeb, 0x05, 0x06, 0x07, 0x2e, 0xf5, 0xd3, 0xdf, 0xf8, 0x34, 0x60, - 0x66, 0x61, 0xf5, 0xe8, 0x02, 0x67, 0xe2, 0xe8, 0x02, 0x67, 0xbf, 0xf3, - 0x4f, 0x8f, 0x26, 0x69, 0x16, 0xf4, 0x80, 0x3f, 0xfb, 0xd1, 0x16, 0xf0, - 0xfa, 0x0f, 0x07, 0xd1, 0x8d, 0x42, 0x28, 0xbf, 0x00, 0xf1, 0x08, 0x05, - 0x45, 0x60, 0x01, 0x3b, 0x13, 0xb1, 0xdd, 0xe7, 0x00, 0x21, 0x41, 0x60, - 0x30, 0x46, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x00 + 0xd0, 0xf8, 0x00, 0x80, 0xb8, 0xf1, 0x00, 0x0f, 0x21, 0xd0, 0x45, 0x68, + 0xb8, 0xeb, 0x05, 0x06, 0x44, 0xbf, 0x76, 0x18, 0x36, 0x1a, 0x08, 0x2e, + 0xf2, 0xd3, 0xdf, 0xf8, 0x36, 0x60, 0x66, 0x61, 0xf5, 0xe8, 0x02, 0x67, + 0xe2, 0xe8, 0x02, 0x67, 0xbf, 0xf3, 0x4f, 0x8f, 0x26, 0x69, 0x16, 0xf4, + 0x80, 0x3f, 0xfb, 0xd1, 0x16, 0xf0, 0xfa, 0x0f, 0x07, 0xd1, 0x8d, 0x42, + 0x28, 0xbf, 0x00, 0xf1, 0x08, 0x05, 0x45, 0x60, 0x01, 0x3b, 0x13, 0xb1, + 0xda, 0xe7, 0x00, 0x21, 0x41, 0x60, 0x30, 0x46, 0x00, 0xbe, 0x01, 0x00, + 0x00, 0x00 }; if (target_alloc_working_area(target, sizeof(stm32l4_flash_write_code), |