diff --git a/flash_rom.c b/flash_rom.c
index 35a9f50984449b5235274080ef51b8caf07641e5..ceb56ad8f6f4feb525b12db2c7fbf8665d1060b0 100644
--- a/flash_rom.c
+++ b/flash_rom.c
@@ -66,7 +66,7 @@ struct flashchip flashchips[] = {
 	{"SST39VF020",	SST_ID,		SST_39VF020,	NULL, 256, 4096,
 	 probe_jedec,	erase_chip_jedec, write_39sf020,NULL},
 	{"SST49LF040",	SST_ID,		SST_49LF040, 	NULL, 512, 4096,
-	 probe_jedec, 	erase_chip_jedec, write_49lf040,NULL},
+	 probe_jedec, 	erase_49lf040, write_49lf040,NULL},
 	{"SST49LF080A",	SST_ID,		SST_49LF080A,	NULL, 1024, 4096,
 	 probe_jedec,	erase_chip_jedec, write_49lf040,NULL},
 	{"SST49LF002A/B", SST_ID,	SST_49LF002A,	NULL, 256, 16 * 1024,
diff --git a/sst49lf040.c b/sst49lf040.c
index 624a8655efaea7b1b12c6cba7660cc027bbaa05e..f19b91e1c256c1c6903c143b6713041e586ba0bf 100644
--- a/sst49lf040.c
+++ b/sst49lf040.c
@@ -30,6 +30,21 @@
 #include "jedec.h"
 #include "sst49lf040.h"
 
+int erase_49lf040(struct flashchip *flash)
+{
+        int i;
+        int total_size = flash->total_size * 1024;
+        int page_size = flash->page_size;
+        volatile char *bios = flash->virt_addr;
+
+        for (i = 0; i < total_size / page_size; i++) {
+		/* Chip erase only works in parallel programming mode
+		 * for the 49lf040. Use sector-erase instead */
+		erase_sector_jedec(bios, i * page_size);
+	}         
+	return 0;
+}
+
 int write_49lf040(struct flashchip *flash, unsigned char *buf)
 {
 	int i;
@@ -40,8 +55,8 @@ int write_49lf040(struct flashchip *flash, unsigned char *buf)
 	printf("Programming Page: ");
 	for (i = 0; i < total_size / page_size; i++) {
 		/* erase the page before programming
-		 * Chip erase only works in parallel programming mode for the 49lf040.
-		 * Use sector-erase instead */
+		 * Chip erase only works in parallel programming mode
+		 * for the 49lf040. Use sector-erase instead */
 		erase_sector_jedec(bios, i * page_size);
 
 		/* write to the sector */
diff --git a/sst49lf040.h b/sst49lf040.h
index 9e3cfa42364f398e2da279a388cd1717efe08764..79dfec99f23b0c35a30f8802494e2c1aacf680b1 100644
--- a/sst49lf040.h
+++ b/sst49lf040.h
@@ -1,6 +1,7 @@
 #ifndef __SST49LF040_H__
 #define __SST49LF040_H__ 1
 
+extern int erase_49lf040(struct flashchip *flash);
 extern int write_49lf040(struct flashchip *flash, unsigned char *buf);
 
 #endif				/* !__SST49LF040_H__ */