- more fixes to high density stm32x flash driver
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 23 Jul 2008 14:49:41 +0000 (14:49 +0000)
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Wed, 23 Jul 2008 14:49:41 +0000 (14:49 +0000)
- updated copyright for original author

git-svn-id: svn://svn.berlios.de/openocd/trunk@859 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/stm32x.c
src/flash/stm32x.h
src/flash/str7x.c
src/flash/str7x.h
src/flash/str9x.c
src/flash/str9x.h
src/flash/str9xpec.c
src/flash/str9xpec.h

index 899dad99b1d17004a683bab5c85074f590ac58cd..4b25e74cacf1ced0269f49b74ebbe273e436b89b 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
@@ -286,6 +289,7 @@ int stm32x_protect_check(struct flash_bank_s *bank)
        u32 protection;
        int i, s;
        int num_bits;
+       int set;
        
        if (target->state != TARGET_HALTED)
        {
@@ -300,17 +304,50 @@ int stm32x_protect_check(struct flash_bank_s *bank)
         * high density - each protection bit is for 2 * 2K pages */
        num_bits = (bank->num_sectors / stm32x_info->ppage_size);
        
-       for (i = 0; i < num_bits; i++)
+       if (stm32x_info->ppage_size == 2)
        {
-               int set = 1;
+               /* high density flash */
+               
+               set = 1;
                
-               if( protection & (1 << i))
+               if (protection & (1 << 31))
                        set = 0;
                
-               for (s = 0; s < stm32x_info->ppage_size; s++)
-                       bank->sectors[(i * stm32x_info->ppage_size) + s].is_protected = set;
+               /* bit 31 controls sector 62 - 255 protection */        
+               for (s = 62; s < bank->num_sectors; s++)
+               {
+                       bank->sectors[s].is_protected = set;
+               }
+               
+               if (bank->num_sectors > 61)
+                       num_bits = 31;
+               
+               for (i = 0; i < num_bits; i++)
+               {
+                       set = 1;
+                       
+                       if (protection & (1 << i))
+                               set = 0;
+                       
+                       for (s = 0; s < stm32x_info->ppage_size; s++)
+                               bank->sectors[(i * stm32x_info->ppage_size) + s].is_protected = set;
+               }
        }
-
+       else
+       {               
+               /* medium density flash */
+               for (i = 0; i < num_bits; i++)
+               {
+                       set = 1;
+                       
+                       if( protection & (1 << i))
+                               set = 0;
+                       
+                       for (s = 0; s < stm32x_info->ppage_size; s++)
+                               bank->sectors[(i * stm32x_info->ppage_size) + s].is_protected = set;
+               }
+       }
+       
        return ERROR_OK;
 }
 
@@ -390,11 +427,16 @@ int stm32x_protect(struct flash_bank_s *bank, int set, int first, int last)
                /* high density flash */
                
                /* bit 7 controls sector 62 - 255 protection */
-               if (first > 61 || last <= 255)
-                       prot_reg[3] |= (1 << 7);
+               if (last > 61)
+               {
+                       if (set)
+                               prot_reg[3] &= ~(1 << 7);
+                       else
+                               prot_reg[3] |= (1 << 7);
+               }
                
                if (first > 61)
-                       first = 61;
+                       first = 62;
                if (last > 61)
                        last = 61;
                
@@ -739,7 +781,69 @@ int stm32x_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd,
 
 int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size)
 {
-       snprintf(buf, buf_size, "stm32x flash driver info" );
+       target_t *target = bank->target;
+       u32 device_id;
+       int printed;
+       
+       /* read stm32 device id register */
+       target_read_u32(target, 0xE0042000, &device_id);
+       
+       if ((device_id & 0x7ff) == 0x410)
+       {
+               printed = snprintf(buf, buf_size, "stm32x (Medium Density) - Rev: ");
+               buf += printed;
+               buf_size -= printed;
+               
+               switch(device_id >> 16)
+               {
+                       case 0x0000:
+                               snprintf(buf, buf_size, "A");
+                               break;
+                       
+                       case 0x2000:
+                               snprintf(buf, buf_size, "B");
+                               break;
+                       
+                       case 0x2001:
+                               snprintf(buf, buf_size, "Z");
+                               break;
+                       
+                       case 0x2003:
+                               snprintf(buf, buf_size, "Y");
+                               break;
+                       
+                       default:
+                               snprintf(buf, buf_size, "unknown");
+                               break;
+               }
+       }
+       else if ((device_id & 0x7ff) == 0x414)
+       {
+               printed = snprintf(buf, buf_size, "stm32x (High Density) - Rev: ");
+               buf += printed;
+               buf_size -= printed;
+               
+               switch(device_id >> 16)
+               {
+                       case 0x1000:
+                               snprintf(buf, buf_size, "A");
+                               break;
+                       
+                       case 0x1001:
+                               snprintf(buf, buf_size, "Z");
+                               break;
+                       
+                       default:
+                               snprintf(buf, buf_size, "unknown");
+                               break;
+               }
+       }
+       else
+       {
+               snprintf(buf, buf_size, "Cannot identify target as a stm32x\n");
+               return ERROR_FLASH_OPERATION_FAILED;
+       }
+       
        return ERROR_OK;
 }
 
index e4aca6092584f95790c6ddb6f88ec8206c84ef3a..04f813aa9dcb1448c749ba319febd4d5433dd688 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index 5c17a6c5e4e1a4dfb5057d1b519cd7b6aacb75c5..facd873d600a23e561a994b2c951c7a1ee29b514 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index a3372f59bad77f5ccb78d04adb267e759a0b3c52..7e48f4a421f25d6da384855cefcb47df97f72323 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index fbae6c688e35a43e5830dd5df3097d3534c7a8a0..7468c3fb8d2a8982c887eba2eb1c7a273bd0716e 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index f3100ce38aed6b2452123cef67319d6601aa85fc..a2a67ef268e4007ba889a550a9a60dab6e6f94ab 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index b6f966f64aeaff7490defa7d1b23da379af3bf6d..f508e0bf8d96006a69385b573b9296b895176913 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
index dcc90118ad1f2eae14d160c73b8c7837372c806a..4e34f6c7a3fafe135e5e57022128f4bf1172da54 100644 (file)
@@ -2,6 +2,9 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
+ *   Copyright (C) 2008 by Spencer Oliver                                  *
+ *   spen@spen-soft.co.uk                                                  *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)