diff options
| -rw-r--r-- | flash_rom.c | 2 | ||||
| -rw-r--r-- | sst49lf040.c | 19 | ||||
| -rw-r--r-- | sst49lf040.h | 1 | 
3 files changed, 19 insertions, 3 deletions
| diff --git a/flash_rom.c b/flash_rom.c index 35a9f509..ceb56ad8 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 624a8655..f19b91e1 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 9e3cfa42..79dfec99 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__ */ | 
