From 296a011db5833b8a3258a058e6a805cc5ddb2bfe Mon Sep 17 00:00:00 2001 From: David Brownell Date: Fri, 8 Jan 2010 16:47:58 -0800 Subject: [PATCH] NOR: add FIXMEs for writing ones 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 --- TODO | 6 ++++++ src/flash/nor/core.c | 7 +++++-- 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 -- 2.39.5