NOR: add FIXMEs for writing ones
authorDavid Brownell <dbrownell@users.sourceforge.net>
Sat, 9 Jan 2010 00:47:58 +0000 (16:47 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sat, 9 Jan 2010 00:47:58 +0000 (16:47 -0800)
It can invalidate ECC codes, and in general is not guaranteed
to work.  (However on some chips it _appears_ to behave.)  Just
don't do it; don't write in those cases.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
TODO
src/flash/nor/core.c

diff --git a/TODO b/TODO
index 8fed264..73e4aa7 100644 (file)
--- a/TODO
+++ b/TODO
@@ -209,6 +209,12 @@ https://lists.berlios.de/pipermail/openocd-development/2009-October/011506.html
   - ocl
   - str9xpec
 
+- Don't expect writing all-ones to be a safe way to write without
+  changing bit values.  Minimally it loses on flash modules with
+  internal ECC, where it may change the ECC.
+  - NOR flash_write_unlock() does that between sectors
+  - there may be other cases too
+
 @subsection thelistflashcfi CFI
 
 - finish implementing bus width/chip width handling (suggested by NC)
index 01088f3..7e783d4 100644 (file)
@@ -449,9 +449,12 @@ int flash_write_unlock(struct target *target, struct image *image,
                                break;
                        }
 
-                       /* REVISIT This needlessly touches sectors BETWEEN the
+                       /* FIXME This needlessly touches sectors BETWEEN the
                         * sections it's writing.  Without auto erase, it just
-                        * writes ones; unlikely to destroy data.
+                        * writes ones.  That WILL INVALIDATE data in cases
+                        * like Stellaris Tempest chips, corrupting internal
+                        * ECC codes; and at least FreeScale suggests issues
+                        * with that approach (in HC11 documentation).
                         *
                         * With auto erase enabled, data in those sectors will
                         * be needlessly destroyed; and some of the limited