]> git.sur5r.net Git - openocd/commitdiff
flash/nor/efm32: Support flash size smaller than 32k
authorkevin <software@klystron.com>
Mon, 17 Oct 2016 11:46:26 +0000 (12:46 +0100)
committerPaul Fertser <fercerpav@gmail.com>
Thu, 8 Dec 2016 13:30:24 +0000 (13:30 +0000)
The current implementation fails on devices with less than 32k of
flash (such as several devices in the Zero Gecko family) because
the 'assert' assumes (incorrectly) that the number of flash banks
will always be >= 32.

This change ensures that at least one word of lock bits is always read
in order to support devices with less than 32k of flash.

Signed-off-by: Kevlar Harness <software@klystron.com>
Change-Id: I59febe2cb690c893a5057a5f72918e146cf2afe4
Reviewed-on: http://openocd.zylin.com/3806
Tested-by: jenkins
Reviewed-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
src/flash/nor/efm32.c

index 0b33829bae2534d309ae90489abb8f3bce206377..81c1a379cc3a7261ab24d8642d7e02f6a8d47576 100644 (file)
@@ -456,10 +456,10 @@ static int efm32x_read_lock_data(struct flash_bank *bank)
        uint32_t *ptr = NULL;
        int ret = 0;
 
-       assert(!(bank->num_sectors & 0x1f));
+       assert(bank->num_sectors > 0);
 
-       data_size = bank->num_sectors / 8; /* number of data bytes */
-       data_size /= 4; /* ...and data dwords */
+       /* calculate the number of 32-bit words to read (one lock bit per sector) */
+       data_size = (bank->num_sectors + 31) / 32;
 
        ptr = efm32x_info->lb_page;