diff --git a/flash.h b/flash.h index 286e2199ca7603dd9de6ef481f766c628394c6a4..959ef0be5ae131ded2d6bde28e371159852fc8cd 100644 --- a/flash.h +++ b/flash.h @@ -28,6 +28,7 @@ struct flashchip { #define SST_29EE020A 0x10 /* SST 29EE020 device code */ #define SST_28SF040 0x04 /* SST 29EE040 device code */ #define SST_39SF020 0xB6 /* SST 39SF020 device */ +#define SST_39VF020 0xD6 /* SST 39SF020 device */ #define WINBOND_ID 0xDA /* Winbond Manufacture ID code */ #define W_29C020C 0x45 /* Winbond w29c020c device code*/ diff --git a/flash_rom.c b/flash_rom.c index 8f05c255094295a5787884d875d877fbca9ff8b7..fe1bdf781baca5b8f8bc5590b309e7db61365985 100644 --- a/flash_rom.c +++ b/flash_rom.c @@ -50,6 +50,8 @@ struct flashchip flashchips[] = { probe_28sf040, erase_28sf040, write_28sf040}, {"SST39SF020A", SST_ID, SST_39SF020, NULL, 256, 4096, probe_39sf020, erase_39sf020, write_39sf020}, + {"SST39VF020", SST_ID, SST_39VF020, NULL, 256, 4096, + probe_39sf020, erase_39sf020, write_39sf020}, {"W29C020C", WINBOND_ID, W_29C020C, NULL, 256, 128, probe_jedec, erase_jedec, write_jedec}, {"M29F400BT", ST_ID, ST_M29F400BT , NULL, 512, 64*1024, diff --git a/sst39sf020.c b/sst39sf020.c index 49e695f890c2b74e3700e48f165286ef6cb7f10e..48a1d596a6cebe213496abeee6895525b43c41ad 100644 --- a/sst39sf020.c +++ b/sst39sf020.c @@ -81,26 +81,27 @@ static __inline__ write_sector_39sf020(volatile char * bios, volatile char *Temp; for (i = 0; i < page_size; i++) { - if (*dst != 0xff) { - printf("FATAL: dst %p not erased (val 0x%x\n", dst, *dst); - return; - } + if (*dst != 0xff) { + printf("FATAL: dst %p not erased (val 0x%x\n", dst, *dst); + return; + } /* transfer data from source to destination */ if (*src == 0xFF) { dst++, src++; /* If the data is 0xFF, don't program it */ continue; } - Temp = (bios + 0x5555); - *Temp = 0xAA; - Temp = bios + 0x2AAA; - *Temp = 0x55; - Temp = bios + 0x5555; - *Temp = 0xA0; + Temp = (bios + 0x5555); + *Temp = 0xAA; + Temp = bios + 0x2AAA; + *Temp = 0x55; + Temp = bios + 0x5555; + *Temp = 0xA0; *dst = *src; toggle_ready_jedec(bios); - if (*dst != *src) printf("BAD! dst 0x%x val 0x%x src 0x%x\n", - dst, *dst, *src); + if (*dst != *src) + printf("BAD! dst 0x%x val 0x%x src 0x%x\n", + dst, *dst, *src); dst++, src++; } } @@ -137,9 +138,9 @@ int probe_39sf020 (struct flashchip * flash) int erase_39sf020 (struct flashchip * flash) { volatile unsigned char * bios = flash->virt_addr; - volatile unsigned char *Temp; + volatile unsigned char *Temp; + /* Issue the Sector Erase command to 39SF020 */ - printf(__FUNCTION__ " bios is %p\n", bios); Temp = bios + 0x5555; /* set up address to be C000:5555h */ *Temp = 0xAA; /* write data 0xAA to the address */ myusec_delay(10);