Skip to content

Commit 02279e2

Browse files
Cypress-OpenOCDtom-van
authored andcommitted
flash/nor/core: Fix chunk size calculation in default_flash_mem_blank_check
Slow version of blank check procedure reads target memory sector-by-sector using 1 KB chunks. Due to bug in chunk size calculation algorithm the actual size of the chunk is always 1 KB even if sector size is smaller. This causes out-of-boundary read of the last sector. Steps to reproduce: 1) Use target with small sectors (e.g. psoc6 with 512-byte sectors) 2) set WORKAREASIZE_CM0 0 3) flash erase_check 1 Running slow fallback erase check - add working memory Info : SWD DPIDR 0x6ba02477 Error: Failed to read memory at 0x14008000 unknown error when checking erase state of flash bank #1 at 0x14000000 Bank is erased Change-Id: I03d0d5fb3a1950ae6aac425f5e24c7fd94b38325 Signed-off-by: Bohdan Tymkiv <[email protected]> Reviewed-on: http://openocd.zylin.com/4785 Reviewed-by: Tomas Vanek <[email protected]> Tested-by: jenkins Reviewed-by: Antonio Borneo <[email protected]>
1 parent f197483 commit 02279e2

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/flash/nor/core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,8 @@ static int default_flash_mem_blank_check(struct flash_bank *bank)
322322
for (j = 0; j < bank->sectors[i].size; j += buffer_size) {
323323
uint32_t chunk;
324324
chunk = buffer_size;
325-
if (chunk > (j - bank->sectors[i].size))
326-
chunk = (j - bank->sectors[i].size);
325+
if (chunk > (bank->sectors[i].size - j))
326+
chunk = (bank->sectors[i].size - j);
327327

328328
retval = target_read_memory(target,
329329
bank->base + bank->sectors[i].offset + j,

0 commit comments

Comments
 (0)