From 73eca80d9b28bfc38fa4b8d2ef9c580840133a38 Mon Sep 17 00:00:00 2001 From: Ollie Lho Date: Fri, 19 Mar 2004 22:10:07 +0000 Subject: Remove duplicated code Corresponding to flashrom svn r14 and coreboot v2 svn r1456. --- jedec.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 71 insertions(+), 26 deletions(-) (limited to 'jedec.c') diff --git a/jedec.c b/jedec.c index bb4a874ab..2f153db60 100644 --- a/jedec.c +++ b/jedec.c @@ -30,44 +30,89 @@ int probe_jedec (struct flashchip * flash) { - volatile char * bios = flash->virt_addr; - unsigned char id1, id2; + volatile char * bios = flash->virt_addr; + unsigned char id1, id2; + + *(volatile char *) (bios + 0x5555) = 0xAA; + myusec_delay(10); + *(volatile char *) (bios + 0x2AAA) = 0x55; + myusec_delay(10); + *(volatile char *) (bios + 0x5555) = 0x90; + myusec_delay(10); + + id1 = *(volatile unsigned char *) bios; + id2 = *(volatile unsigned char *) (bios + 0x01); + + *(volatile char *) (bios + 0x5555) = 0xAA; + myusec_delay(10); + *(volatile char *) (bios + 0x2AAA) = 0x55; + myusec_delay(10); + *(volatile char *) (bios + 0x5555) = 0xF0; + myusec_delay(10); - *(volatile char *) (bios + 0x5555) = 0xAA; - *(volatile char *) (bios + 0x2AAA) = 0x55; - *(volatile char *) (bios + 0x5555) = 0x90; - - myusec_delay(10); + printf("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); + if (id1 == flash->manufacture_id && id2 == flash->model_id) + return 1; - id1 = *(volatile unsigned char *) bios; - id2 = *(volatile unsigned char *) (bios + 0x01); + return 0; +} - *(volatile char *) (bios + 0x5555) = 0xAA; - *(volatile char *) (bios + 0x2AAA) = 0x55; - *(volatile char *) (bios + 0x5555) = 0xF0; +int erase_sector_jedec (volatile char * bios, unsigned int page) +{ + /* Chip erase function does not exist for LPC mode on 49lf040. + * Erase sector-by-sector instead. */ + volatile unsigned char *Temp; + /* Issue the Sector Erase command to 40LF040 */ + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0xAA; /* write data 0xAA to the address */ myusec_delay(10); + Temp = bios + 0x2AAA; /* set up address to be C000:2AAAh */ + *Temp = 0x55; /* write data 0x55 to the address */ + myusec_delay(10); + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0x80; /* write data 0x80 to the address */ + myusec_delay(10); + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0xAA; /* write data 0xAA to the address */ + myusec_delay(10); + Temp = bios + 0x2AAA; /* set up address to be C000:2AAAh */ + *Temp = 0x55; /* write data 0x55 to the address */ + myusec_delay(10); + Temp = bios + page; /* set up address to be the current sector */ + *Temp = 0x30; /* write data 0x30 to the address */ + + /* wait for Toggle bit ready */ + toggle_ready_jedec(bios); - printf("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); - if (id1 == flash->manufacture_id && id2 == flash->model_id) - return 1; - - return 0; + return(0); } int erase_jedec (struct flashchip * flash) { - volatile char * bios = flash->virt_addr; - - *(volatile char *) (bios + 0x5555) = 0xAA; - *(volatile char *) (bios + 0x2AAA) = 0x55; - *(volatile char *) (bios + 0x5555) = 0x80; - - *(volatile char *) (bios + 0x5555) = 0xAA; - *(volatile char *) (bios + 0x2AAA) = 0x55; - *(volatile char *) (bios + 0x5555) = 0x10; + volatile unsigned char * bios = flash->virt_addr; + volatile unsigned char *Temp; + /* Issue the Sector Erase command to 39SF020 */ + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0xAA; /* write data 0xAA to the address */ + myusec_delay(10); + Temp = bios + 0x2AAA; /* set up address to be C000:2AAAh */ + *Temp = 0x55; /* write data 0x55 to the address */ myusec_delay(10); + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0x80; /* write data 0x80 to the address */ + myusec_delay(10); + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0xAA; /* write data 0xAA to the address */ + myusec_delay(10); + Temp = bios + 0x2AAA; /* set up address to be C000:2AAAh */ + *Temp = 0x55; /* write data 0x55 to the address */ + myusec_delay(10); + Temp = bios + 0x5555; /* set up address to be C000:5555h */ + *Temp = 0x10; /* write data 0x55 to the address */ + myusec_delay(10); + toggle_ready_jedec(bios); return(0); -- cgit v1.2.3