From a28b94e9ab00c63951f68ac44833e9d51200f7db Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Mon, 30 Nov 2015 12:12:42 +0100 Subject: [PATCH] stm32l4x.c: Use explicit 64-bit flash access as reference manual implies. Change-Id: I87b540c1ee7158a9d697e9fbc845a603c6bbe74d Signed-off-by: Uwe Bonnes Reviewed-on: http://openocd.zylin.com/3139 Reviewed-by: Freddie Chopin Tested-by: jenkins --- contrib/loaders/flash/stm32l4x.S | 12 +++++------- src/flash/nor/stm32l4x.c | 15 +++++++-------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/contrib/loaders/flash/stm32l4x.S b/contrib/loaders/flash/stm32l4x.S index 587cc33a..045f9d0d 100644 --- a/contrib/loaders/flash/stm32l4x.S +++ b/contrib/loaders/flash/stm32l4x.S @@ -51,9 +51,9 @@ * r4 = flash base * * Clobbered: - * r5 - rp - * r6 - temp - * r8 - wp, tmp + * r5 - rp + * r6/7 - temp (64-bit) + * r8 - wp, tmp */ #define STM32_FLASH_CR_OFFSET 0x14 /* offset of CR register in FLASH struct */ @@ -70,10 +70,8 @@ wait_fifo: ldr r6, STM32_PROG str r6, [r4, #STM32_FLASH_CR_OFFSET] - ldr r6, [r5], #0x04 /* read one word from src, increment ptr */ - str r6, [r2], #0x04 /* write one word to dst, increment ptr */ - ldr r6, [r5], #0x04 /* read one word from src, increment ptr */ - str r6, [r2], #0x04 /* write one word to dst, increment ptr */ + ldrd r6, [r5], #0x08 /* read one word from src, increment ptr */ + strd r6, [r2], #0x08 /* write one word to dst, increment ptr */ dsb busy: ldr r6, [r4, #STM32_FLASH_SR_OFFSET] diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c index 2c9a8bdf..42e90bc7 100644 --- a/src/flash/nor/stm32l4x.c +++ b/src/flash/nor/stm32l4x.c @@ -463,14 +463,13 @@ 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, 0x22, 0xd0, 0x45, 0x68, - 0xb8, 0xeb, 0x05, 0x06, 0x07, 0x2e, 0xf5, 0xd3, 0xdf, 0xf8, 0x3c, 0x60, - 0x66, 0x61, 0x55, 0xf8, 0x04, 0x6b, 0x42, 0xf8, 0x04, 0x6b, 0x55, 0xf8, - 0x04, 0x6b, 0x42, 0xf8, 0x04, 0x6b, 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, 0xd9, 0xe7, 0x00, 0x21, 0x41, 0x60, 0x30, 0x46, 0x00, 0xbe, - 0x01, 0x00, 0x00, 0x00 + 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 }; if (target_alloc_working_area(target, sizeof(stm32l4_flash_write_code), -- 2.39.5