From 0d055602c3fcf81e42a3928328e763f80a73097b Mon Sep 17 00:00:00 2001 From: Simon Smiganovski Date: Wed, 9 Nov 2022 16:32:26 +0100 Subject: [PATCH] flash/nor/stm32f1x: adjust size of the flash loader buffer target_run_flash_async_algorithm expects the source_buffer to have at least 2 words reserved for read and write pointers in addition to the FIFO buffer. If the size of the data to be flashed is <= 8 bytes then the flash function will fail with "corrupted fifo read pointer" error. Ensure the allocated buffer is big enough to hold both FIFO buffer and read/write pointers. Change-Id: I09c22eaac517b8cfea8e0b463f5deb6b98afd267 Signed-off-by: Simon Smiganovski Signed-off-by: Paul Fertser Reviewed-on: https://review.openocd.org/c/openocd/+/7342 Tested-by: jenkins Reviewed-by: Tomas Vanek Reviewed-by: Antonio Borneo --- src/flash/nor/stm32f1x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index e882d7f795..ab1ef2aefe 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -473,7 +473,7 @@ static int stm32x_write_block_async(struct flash_bank *bank, const uint8_t *buff /* memory buffer */ buffer_size = target_get_working_area_avail(target); - buffer_size = MIN(hwords_count * 2, MAX(buffer_size, 256)); + buffer_size = MIN(hwords_count * 2 + 8, MAX(buffer_size, 256)); /* Normally we allocate all available working area. * MIN shrinks buffer_size if the size of the written block is smaller. * MAX prevents using async algo if the available working area is smaller -- 2.30.2