Kinetis: new devices K02, K26, K63, K64, K66, correct K21 and K22 variants
[fw/openocd] / src / flash / nor / stm32f1x.c
index c9757d8f1b00f2161b0bd3c293956e5f0caff27a..82f112ef7b39cc0d66f74958cf435de079fbe353 100644 (file)
@@ -894,7 +894,7 @@ static int stm32x_probe(struct flash_bank *bank)
                stm32x_info->ppage_size = 4;
                max_flash_size_in_kb = 128;
                break;
-       case 0x422: /* stm32f302xb/c */
+       case 0x422: /* stm32f302/3xb/c */
                page_size = 2048;
                stm32x_info->ppage_size = 2;
                max_flash_size_in_kb = 256;
@@ -902,6 +902,14 @@ static int stm32x_probe(struct flash_bank *bank)
                stm32x_info->option_offset = 6;
                stm32x_info->default_rdp = 0x55AA;
                break;
+       case 0x446: /* stm32f303xD/E */
+               page_size = 2048;
+               stm32x_info->ppage_size = 2;
+               max_flash_size_in_kb = 512;
+               stm32x_info->user_data_offset = 16;
+               stm32x_info->option_offset = 6;
+               stm32x_info->default_rdp = 0x55AA;
+               break;
        case 0x428: /* value line High density */
                page_size = 2048;
                stm32x_info->ppage_size = 4;
@@ -941,9 +949,10 @@ static int stm32x_probe(struct flash_bank *bank)
                stm32x_info->default_rdp = 0x55AA;
                break;
        case 0x448: /* stm32f07x */
+       case 0x442: /* stm32f09x */
                page_size = 2048;
                stm32x_info->ppage_size = 4;
-               max_flash_size_in_kb = 128;
+               max_flash_size_in_kb = 256;
                stm32x_info->user_data_offset = 16;
                stm32x_info->option_offset = 6;
                stm32x_info->default_rdp = 0x55AA;
@@ -1032,6 +1041,21 @@ COMMAND_HANDLER(stm32x_handle_part_id_command)
 }
 #endif
 
+static const char *get_stm32f0_revision(uint16_t rev_id)
+{
+       const char *rev_str = NULL;
+
+       switch (rev_id) {
+       case 0x1000:
+               rev_str = "1.0";
+               break;
+       case 0x2000:
+               rev_str = "2.0";
+               break;
+       }
+       return rev_str;
+}
+
 static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        uint32_t dbgmcu_idcode;
@@ -1211,58 +1235,36 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size)
 
        case 0x444:
                device_str = "STM32F03x";
-
-               switch (rev_id) {
-               case 0x1000:
-                       rev_str = "1.0";
-                       break;
-
-               case 0x2000:
-                       rev_str = "2.0";
-                       break;
-               }
+               rev_str = get_stm32f0_revision(rev_id);
                break;
 
        case 0x440:
                device_str = "STM32F05x";
-
-               switch (rev_id) {
-               case 0x1000:
-                       rev_str = "1.0";
-                       break;
-
-               case 0x2000:
-                       rev_str = "2.0";
-                       break;
-               }
+               rev_str = get_stm32f0_revision(rev_id);
                break;
 
        case 0x445:
                device_str = "STM32F04x";
+               rev_str = get_stm32f0_revision(rev_id);
+               break;
 
+       case 0x446:
+               device_str = "STM32F303xD/E";
                switch (rev_id) {
                case 0x1000:
-                       rev_str = "1.0";
-                       break;
-
-               case 0x2000:
-                       rev_str = "2.0";
+                       rev_str = "A";
                        break;
                }
                break;
 
        case 0x448:
                device_str = "STM32F07x";
+               rev_str = get_stm32f0_revision(rev_id);
+               break;
 
-               switch (rev_id) {
-               case 0x1000:
-                       rev_str = "1.0";
-                       break;
-
-               case 0x2000:
-                       rev_str = "2.0";
-                       break;
-               }
+       case 0x442:
+               device_str = "STM32F09x";
+               rev_str = get_stm32f0_revision(rev_id);
                break;
 
        default: