This is an automated email from Gerrit.

Romain Goyet ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/4926

-- gerrit

commit 68fe5eeb801147d2c7d7dffa9632683670ad90bc
Author: Romain Goyet <[email protected]>
Date:   Mon Feb 18 17:29:59 2019 +0100

    flash/nor/stm32f2x: Support value line chips with trimmed flash
    
    Change-Id: If00e5d7a328d11b399babc0bb2111e3ad8a3217e
    Signed-off-by: Romain Goyet <[email protected]>

diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c
index b46fb07..00b1555 100644
--- a/src/flash/nor/stm32f2x.c
+++ b/src/flash/nor/stm32f2x.c
@@ -766,31 +766,38 @@ static int stm32x_write(struct flash_bank *bank, const 
uint8_t *buffer,
        return target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
 }
 
-static int setup_sector(struct flash_bank *bank, int start, int num, int size)
+static void setup_sector(struct flash_bank *bank, int i, int size)
 {
+       assert(i < bank->num_sectors);
+       bank->sectors[i].offset = bank->size;
+       bank->sectors[i].size = size;
+       bank->size += bank->sectors[i].size;
+       LOG_DEBUG("sector %d: %dkBytes", i, size >> 10);
+}
 
-       for (int i = start; i < (start + num) ; i++) {
-               assert(i < bank->num_sectors);
-               bank->sectors[i].offset = bank->size;
-               bank->sectors[i].size = size;
-               bank->size += bank->sectors[i].size;
-           LOG_DEBUG("sector %d: %dkBytes", i, size >> 10);
+static int sector_size_in_kb(int i, int max_sector_size_in_kb) {
+       assert(i >= 0);
+       if (i < 4) {
+               return (max_sector_size_in_kb / 8);
+       } else if (i == 4) {
+               return (max_sector_size_in_kb / 2);
+       } else {
+               return max_sector_size_in_kb;
        }
-
-       return start + num;
 }
 
 static void setup_bank(struct flash_bank *bank, int start,
        uint16_t flash_size_in_kb, uint16_t max_sector_size_in_kb)
 {
-       int remain;
-
-       start = setup_sector(bank, start, 4, (max_sector_size_in_kb / 8) * 
1024);
-       start = setup_sector(bank, start, 1, (max_sector_size_in_kb / 2) * 
1024);
-
-       /* remaining sectors all of size max_sector_size_in_kb */
-       remain = (flash_size_in_kb / max_sector_size_in_kb) - 1;
-       start = setup_sector(bank, start, remain, max_sector_size_in_kb * 1024);
+       int remaining_flash_size_in_kb = flash_size_in_kb;
+       int sector_index = 0;
+       while (remaining_flash_size_in_kb > 0) {
+               int size_in_kb = sector_size_in_kb(sector_index, 
max_sector_size_in_kb);
+               setup_sector(bank, sector_index, size_in_kb * 1024);
+               assert(size_in_kb <= remaining_flash_size_in_kb);
+               remaining_flash_size_in_kb -= size_in_kb;
+               sector_index++;
+       }
 }
 
 static int stm32x_get_device_id(struct flash_bank *bank, uint32_t *device_id)

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to