summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO6
-rw-r--r--src/flash/nor/core.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/TODO b/TODO
index 8fed264b..73e4aa7b 100644
--- 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)
diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c
index 01088f3c..7e783d42 100644
--- a/src/flash/nor/core.c
+++ b/src/flash/nor/core.c
@@ -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