diff options
| author | Ronald G. Minnich <rminnich@gmail.com> | 2003-07-25 04:37:41 +0000 | 
|---|---|---|
| committer | Ronald G. Minnich <rminnich@gmail.com> | 2003-07-25 04:37:41 +0000 | 
| commit | ceec420c3db6c20c4b882e8bf3ad113db7fcd2de (patch) | |
| tree | 94794548466b385e275839754ccd32926792c05d | |
| parent | afe44a97fd98dc47c114031322b9d1b31880c018 (diff) | |
| download | flashrom-ceec420c3db6c20c4b882e8bf3ad113db7fcd2de.tar.gz flashrom-ceec420c3db6c20c4b882e8bf3ad113db7fcd2de.tar.bz2 flashrom-ceec420c3db6c20c4b882e8bf3ad113db7fcd2de.zip | |
SONE's changes
Corresponding to coreboot v1 svn r863.
| -rw-r--r-- | flash_rom.c | 45 | ||||
| -rw-r--r-- | mx29f002.c | 6 | ||||
| -rw-r--r-- | w49f002u.c | 6 | 
3 files changed, 34 insertions, 23 deletions
| diff --git a/flash_rom.c b/flash_rom.c index 758c0e29..e7d49a57 100644 --- a/flash_rom.c +++ b/flash_rom.c @@ -33,6 +33,7 @@  #include <unistd.h>  #include <stdio.h>  #include <pci/pci.h> +#include <string.h>  #include "flash.h"  #include "jedec.h" @@ -69,6 +70,8 @@ struct flashchip flashchips[] = {      {NULL,}  }; +char *chip_to_probe = NULL; +  int enable_flash_sis630 (struct pci_dev *dev, char *name)  {      char b; @@ -127,7 +130,6 @@ int  enable_flash_e7500(struct pci_dev *dev, char *name) {    /* register 4e.b gets or'ed with one */    unsigned char old, new; -  int ok;    /* if it fails, it fails. There are so many variations of broken mobos     * that it is hard to argue that we should quit at this point.      */ @@ -139,11 +141,11 @@ enable_flash_e7500(struct pci_dev *dev, char *name) {    if (new == old)        return 0; -  ok = pci_write_byte(dev, 0x4e, new); +  pci_write_byte(dev, 0x4e, new); -  if (ok != new) { +  if (pci_read_byte(dev, 0x4e) != new) {      printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n",  -	   old, new, name); +	   0x4e, new, name);      return -1;    }    return 0; @@ -189,21 +191,15 @@ enable_flash_vt8235(struct pci_dev *dev, char *name) {  int  enable_flash_vt8231(struct pci_dev *dev, char *name) { -  unsigned char old, new; -  int ok; +  unsigned char val; -  old = pci_read_byte(dev, 0x40); - -  new = old | 0x10; +  val = pci_read_byte(dev, 0x40); +  val |= 0x10; +  pci_write_byte(dev, 0x40, val); -  if (new == old) -      return 0; - -  ok = pci_write_byte(dev, 0x40, new); - -  if (ok != 0) { +  if (pci_read_byte(dev, 0x40) != val) {      printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n",  -	   old, new, name); +	   0x40, val, name);      return -1;    }    return 0; @@ -278,6 +274,10 @@ struct flashchip * probe_flash(struct flashchip * flash)      }      while (flash->name != NULL) { +	if (chip_to_probe && strcmp(flash->name, chip_to_probe) != 0) { +	    flash++; +	    continue; +	}  	printf("Trying %s, %d KB\n", flash->name, flash->total_size);  	size = flash->total_size * 1024;  	bios = mmap (0, size, PROT_WRITE | PROT_READ, MAP_SHARED, @@ -425,10 +425,11 @@ enable_flash_write() {  void usage(const char *name)  { -    printf("usage: %s [-rwv] [file]\n", name); +    printf("usage: %s [-rwv] [-c chipname][file]\n", name);      printf("-r: read flash and save into file\n"          "-w: write file into flash (default when file is specified)\n"          "-v: verify flash against file\n" +        "-c: probe only for specified flash chip\n"          " If no file is specified, then all that happens\n"          " is that flash info is dumped\n");      exit(1); @@ -444,7 +445,10 @@ main (int argc, char * argv[])      int opt;      int read_it = 0, write_it = 0, verify_it = 0;      char *filename = NULL; -    while ((opt = getopt(argc, argv, "rwv")) != EOF) { + +    setbuf(stdout, NULL); + +    while ((opt = getopt(argc, argv, "rwvc:")) != EOF) {          switch (opt) {          case 'r':              read_it = 1; @@ -455,6 +459,9 @@ main (int argc, char * argv[])          case 'v':              verify_it = 1;              break; +        case 'c': +            chip_to_probe = strdup(optarg); +            break;          default:              usage(argv[0]);              break; @@ -509,7 +516,7 @@ main (int argc, char * argv[])          fclose(image);      } -    if (write_it) +    if (write_it || (!read_it && !verify_it))          flash->write (flash, buf);      if (verify_it)          verify_flash (flash, buf, /* verbose = */ 0); @@ -97,7 +97,8 @@ int write_29f002 (struct flashchip * flash, char * buf)     printf ("Programming Page: ");      for (i = 0; i < total_size; i++) {  	/* write to the sector */ -	printf ("address: 0x%08lx", i); +	if ((i & 0xfff) == 0) +	    printf ("address: 0x%08lx", i);  	*(bios + 0x5555) = 0xAA;  	*(bios + 0x2AAA) = 0x55;  	*(bios + 0x5555) = 0xA0; @@ -106,7 +107,8 @@ int write_29f002 (struct flashchip * flash, char * buf)  	/* wait for Toggle bit ready */  	toggle_ready_jedec(dst); -	printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); +	if ((i & 0xfff) == 0) +	    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");      }  #endif      printf("\n"); @@ -97,7 +97,8 @@ int write_49f002 (struct flashchip * flash, char * buf)     printf ("Programming Page: ");      for (i = 0; i < total_size; i++) {  	/* write to the sector */ -	printf ("address: 0x%08lx", i); +	if ((i & 0xfff) == 0) +	    printf ("address: 0x%08lx", i);  	*(bios + 0x5555) = 0xAA;  	*(bios + 0x2AAA) = 0x55;  	*(bios + 0x5555) = 0xA0; @@ -106,7 +107,8 @@ int write_49f002 (struct flashchip * flash, char * buf)  	/* wait for Toggle bit ready */  	toggle_ready_jedec(dst); -	printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); +	if ((i & 0xfff) == 0) +	    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");      }  #endif      printf("\n"); | 
