flash: handle zero when reading stm32 flash size reg
authorSpencer Oliver <spen@spen-soft.co.uk>
Thu, 12 Jul 2012 11:29:38 +0000 (12:29 +0100)
committerFreddie Chopin <freddie.chopin@gmail.com>
Mon, 30 Jul 2012 06:27:39 +0000 (06:27 +0000)
Some variants read 0 for the flash size register, rather than
failing lets assume we have max flash fitted.

Change-Id: Ie1fb4e73606f49268a6fd5921c3aef75bc4790d3
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/744
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
src/flash/nor/stm32f1x.c
src/flash/nor/stm32f2x.c
src/flash/nor/stm32lx.c

index 938785ef1b5826475f95718dfb5d815ffc1247e9..b6359a0a86ce1ed7c08c8aa45687a4938c0d4f3b 100644 (file)
@@ -902,6 +902,11 @@ static int stm32x_probe(struct flash_bank *bank)
                flash_size_in_kb = 0xffff;
        }
 
+       /* some variants read 0 for flash size register
+        * use a max flash size as a default */
+       if (flash_size_in_kb == 0)
+               flash_size_in_kb = 0xffff;
+
        if ((device_id & 0xfff) == 0x410) {
                /* medium density - we have 1k pages
                 * 4 pages for a protection area */
index c7e050d0d7cf25abdac8dd22609d47e500de9607..5f5bfb853aa5f01d6a1a8908fb2fe861ca20b661 100644 (file)
@@ -605,6 +605,11 @@ static int stm32x_probe(struct flash_bank *bank)
                flash_size_in_kb = 0xffff;
        }
 
+       /* some variants read 0 for flash size register
+        * use a max flash size as a default */
+       if (flash_size_in_kb == 0)
+               flash_size_in_kb = 0xffff;
+
        if ((device_id & 0xfff) == 0x411) {
                /* check for early silicon */
                if (flash_size_in_kb == 0xffff) {
index 3863144029959d4c9461189a34dd90ec9871c71c..27a446de19b4522f5494ab8e54fa3ed00f591099 100644 (file)
@@ -482,6 +482,11 @@ static int stm32lx_probe(struct flash_bank *bank)
                flash_size_in_kb = 0xffff;
        }
 
+       /* some variants read 0 for flash size register
+        * use a max flash size as a default */
+       if (flash_size_in_kb == 0)
+               flash_size_in_kb = 0xffff;
+
        if ((device_id & 0xfff) == 0x416) {
                /* check for early silicon */
                if (flash_size_in_kb == 0xffff) {