>From 86cfac22b213abf73ee27ee1524d6fe90754585f Mon Sep 17 00:00:00 2001
From: Stefan Tauner <stefan.tauner@student.tuwien.ac.at>
Date: Sun, 26 Jun 2011 18:18:44 +0200
Subject: [PATCH] Move erase checks out of chip drivers

Erase functions are no longer called from chip drivers and thus their
internal erase verification can be moved to generic code.
This also makes it easier to skip the verify step if desired and to

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at>
---
 82802ab.c       |    6 +-----
 flashrom.c      |    4 ++++
 jedec.c         |   16 +++-------------
 m29f400bt.c     |   10 ++--------
 sharplhf00l04.c |    5 +----
 spi25.c         |   30 ++++++------------------------
 sst28sf040.c    |   10 ++--------
 sst49lfxxxc.c   |    5 +----
 stm50flw0x0x.c  |    6 +-----
 9 files changed, 21 insertions(+), 71 deletions(-)

diff --git a/82802ab.c b/82802ab.c
index 09b95e6..2580706 100644
--- a/82802ab.c
+++ b/82802ab.c
@@ -136,11 +136,7 @@ int erase_block_82802ab(struct flashchip *flash, unsigned int page, unsigned int
 	status = wait_82802ab(flash);
 	print_status_82802ab(status);
 
-	if (check_erased_range(flash, page, pagesize)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
-
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
diff --git a/flashrom.c b/flashrom.c
index 6979d84..13dd581 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -1400,6 +1400,10 @@ static int erase_and_write_block_helper(struct flashchip *flash,
 		ret = erasefn(flash, start, len);
 		if (ret)
 			return ret;
+		if (check_erased_range(flash, start, len)) {
+			msg_cerr("ERASE FAILED!\n");
+			return -1;
+		}
 		/* Erase was successful. Adjust curcontents. */
 		memset(curcontents, 0xff, len);
 		skip = 0;
diff --git a/jedec.c b/jedec.c
index f23cf53..b96f5fd 100644
--- a/jedec.c
+++ b/jedec.c
@@ -264,10 +264,7 @@ static int erase_sector_jedec_common(struct flashchip *flash, unsigned int page,
 	/* wait for Toggle bit ready         */
 	toggle_ready_jedec_slow(bios);
 
-	if (check_erased_range(flash, page, pagesize)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -297,16 +294,12 @@ static int erase_block_jedec_common(struct flashchip *flash, unsigned int block,
 	/* wait for Toggle bit ready         */
 	toggle_ready_jedec_slow(bios);
 
-	if (check_erased_range(flash, block, blocksize)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
 static int erase_chip_jedec_common(struct flashchip *flash, unsigned int mask)
 {
-	int total_size = flash->total_size * 1024;
 	chipaddr bios = flash->virtual_memory;
 	int delay_us = 0;
 	if(flash->probe_timing != TIMING_ZERO)
@@ -329,10 +322,7 @@ static int erase_chip_jedec_common(struct flashchip *flash, unsigned int mask)
 
 	toggle_ready_jedec_slow(bios);
 
-	if (check_erased_range(flash, 0, total_size)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
diff --git a/m29f400bt.c b/m29f400bt.c
index 7e4f51c..e0d41d4 100644
--- a/m29f400bt.c
+++ b/m29f400bt.c
@@ -101,10 +101,7 @@ int erase_m29f400bt(struct flashchip *flash)
 	programmer_delay(10);
 	toggle_ready_jedec(bios);
 
-	if (check_erased_range(flash, 0, flash->total_size * 1024)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -124,10 +121,7 @@ int block_erase_m29f400bt(struct flashchip *flash, unsigned int start, unsigned
 	programmer_delay(10);
 	toggle_ready_jedec(bios);
 
-	if (check_erased_range(flash, start, len)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
diff --git a/sharplhf00l04.c b/sharplhf00l04.c
index f21950a..4865fc2 100644
--- a/sharplhf00l04.c
+++ b/sharplhf00l04.c
@@ -50,9 +50,6 @@ int erase_lhf00l04_block(struct flashchip *flash, unsigned int blockaddr, unsign
 	status = wait_82802ab(flash);
 	print_status_82802ab(status);
 
-	if (check_erased_range(flash, blockaddr, blocklen)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
diff --git a/spi25.c b/spi25.c
index d3680fb..b26f533 100644
--- a/spi25.c
+++ b/spi25.c
@@ -481,10 +481,7 @@ int spi_chip_erase_60(struct flashchip *flash)
 	/* FIXME: We assume spi_read_status_register will never fail. */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(1000 * 1000);
-	if (check_erased_range(flash, 0, flash->total_size * 1024)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -520,10 +517,7 @@ int spi_chip_erase_c7(struct flashchip *flash)
 	/* FIXME: We assume spi_read_status_register will never fail. */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(1000 * 1000);
-	if (check_erased_range(flash, 0, flash->total_size * 1024)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -564,10 +558,7 @@ int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int
 	 */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(100 * 1000);
-	if (check_erased_range(flash, addr, blocklen)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -613,10 +604,7 @@ int spi_block_erase_d8(struct flashchip *flash, unsigned int addr, unsigned int
 	 */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(100 * 1000);
-	if (check_erased_range(flash, addr, blocklen)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -660,10 +648,7 @@ int spi_block_erase_d7(struct flashchip *flash, unsigned int addr, unsigned int
 	 */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(100 * 1000);
-	if (check_erased_range(flash, addr, blocklen)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -705,10 +690,7 @@ int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int
 	 */
 	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 		programmer_delay(10 * 1000);
-	if (check_erased_range(flash, addr, blocklen)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
diff --git a/sst28sf040.c b/sst28sf040.c
index 0fbf098..d621cc7 100644
--- a/sst28sf040.c
+++ b/sst28sf040.c
@@ -71,10 +71,7 @@ int erase_sector_28sf040(struct flashchip *flash, unsigned int address, unsigned
 	/* wait for Toggle bit ready */
 	toggle_ready_jedec(bios);
 
-	if (check_erased_range(flash, address, sector_size)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
@@ -113,10 +110,7 @@ static int erase_28sf040(struct flashchip *flash)
 	programmer_delay(10);
 	toggle_ready_jedec(bios);
 
-	if (check_erased_range(flash, 0, flash->total_size * 1024)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
 
diff --git a/sst49lfxxxc.c b/sst49lfxxxc.c
index 392d7a8..28f6cd0 100644
--- a/sst49lfxxxc.c
+++ b/sst49lfxxxc.c
@@ -70,9 +70,6 @@ int erase_sector_49lfxxxc(struct flashchip *flash, unsigned int address, unsigne
 	status = wait_82802ab(flash);
 	print_status_82802ab(status);
 
-	if (check_erased_range(flash, address, sector_size)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
diff --git a/stm50flw0x0x.c b/stm50flw0x0x.c
index 726a882..f3fc4d8 100644
--- a/stm50flw0x0x.c
+++ b/stm50flw0x0x.c
@@ -107,10 +107,6 @@ int erase_sector_stm50flw0x0x(struct flashchip *flash, unsigned int sector, unsi
 
 	wait_82802ab(flash);
 
-	if (check_erased_range(flash, sector, sectorsize)) {
-		msg_cerr("ERASE FAILED!\n");
-		return -1;
-	}
-
+	/* FIXME: Check the status register for errors. */
 	return 0;
 }
-- 
1.7.1

