From fe0240125293a4535cd8eb966d899595a9b4d3ad Mon Sep 17 00:00:00 2001
From: ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Thu, 20 Dec 2007 22:20:45 +0000
Subject: [PATCH] - fixed problem when write_image is called multiple times

git-svn-id: svn://svn.berlios.de/openocd/trunk@244 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/flash/flash.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/flash/flash.c b/src/flash/flash.c
index fe225f0cc..efd16c34c 100644
--- a/src/flash/flash.c
+++ b/src/flash/flash.c
@@ -836,7 +836,8 @@ int flash_write(target_t *target, image_t *image, u32 *written, char **error_str
 
 	int section;
 	u32 section_offset;
-
+	flash_bank_t *c;
+	
 	section = 0;
 	section_offset = 0;
 
@@ -846,11 +847,24 @@ int flash_write(target_t *target, image_t *image, u32 *written, char **error_str
 	if (failed != NULL)
 		for (i = 0; i < image->num_sections; i++)
 			failed[i] = 0;
-
+	
+	if (erase)
+	{
+		/* assume all sectors need erasing - stops any problems
+		 * when flash_write is called multiple times */
+		 
+		for (c = flash_banks; c; c = c->next)
+		{
+			for (i = 0; i < c->num_sectors; i++)
+			{
+				c->sectors[i].is_erased = 0; 
+			}
+		}
+	}
+	
 	/* loop until we reach end of the image */
 	while (section < image->num_sections)
 	{
-		flash_bank_t *c;
 		u32 buffer_size;
 		u8 *buffer;
 		int section_first;
-- 
GitLab