Hi,
I've a chip which is from SST and labeled as PH29EE010 150-3CF.
flashrom doesnt detect this chip although it should as -L stats:
flashrom -L | grep 29EE010
SST SST29EE010 P R W 128
Parallel
if I check for the chip it still fails and reads flash content:
flashrom -V -c SST29EE010
flashrom v0.9.2-r1039 on Linux 2.6.27-3 (i586), built with libpci
2.2.4-pre4, GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21), little endian
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OS timer resolution is 9 usecs, 200M loops per
second, 10 myus = 17 us, 100 myus = 231 us, 1000 myus = 1042 us, 10000
myus = 10133 us, 36 myus = 45 us, OK.
Initializing internal programmer
No coreboot table found.
DMI string system-manufacturer: "System Manufacturer"
DMI string system-product-name: "System Name"
DMI string system-version: "System Version"
DMI string baseboard-manufacturer: "ASUSTeK Computer INC."
DMI string baseboard-product-name: "P5A-B"
DMI string baseboard-version: "REV 1.XX"
DMI string chassis-type: "Unknown"
Found chipset "ALi M1533", enabling flash write... chipset PCI ID is
10b9:1533, OK.
This chipset supports the following protocols: Non-SPI.
Probing for SST SST29EE010, 128 KB: probe_jedec_common: id1 0x25, id2
0xfb, id1 is normal flash content, id2 is normal flash content
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
but if I now probe for Winbond W29C011 then flashrom of course fails but
shows the right flash ID:
flashrom -V -c W29EE011
flashrom v0.9.2-r1039 on Linux 2.6.27-3 (i586), built with libpci
2.2.4-pre4, GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21), little endian
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OS timer resolution is 8 usecs, 29M loops per
second, delay more than 10% too short (got 24% of expected delay),
recalculating... 32M loops per second, delay more than 10% too short
(got 25% of expected delay), recalculating... 34M loops per second,
delay more than 10% too short (got 27% of expected delay),
recalculating... 33M loops per second, delay more than 10% too short
(got 25% of expected delay), recalculating... 32M loops per second,
delay loop is unreliable, trying to continue 10 myus = 11 us, 100 myus =
24 us, 1000 myus = 285 us, 10000 myus = 1605 us, 32 myus = 14 us, OK.
Initializing internal programmer
No coreboot table found.
DMI string system-manufacturer: "System Manufacturer"
DMI string system-product-name: "System Name"
DMI string system-version: "System Version"
DMI string baseboard-manufacturer: "ASUSTeK Computer INC."
DMI string baseboard-product-name: "P5A-B"
DMI string baseboard-version: "REV 1.XX"
DMI string chassis-type: "Unknown"
Found chipset "ALi M1533", enabling flash write... chipset PCI ID is
10b9:1533, OK.
This chipset supports the following protocols: Non-SPI.
Probing for Winbond W29EE011, 128 KB: probe_w29ee011: id1 0xbf, id2 0x07
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
so what is obvious is the huge difference with the calibrating loop, and
then that the probe for W29EE011 gives "id1 0xbf, id2 0x07" which is
exactly what the datasheet from SST outlines for the SST29EE010 ...
I really wonder what goes on there sine - as -L shows - this chip is
marked as "P R W" ...
Gün.
The SPI opcode 0xd8 is not a chip erase opcode on any chip out there.
Besides that, the function as implemented just walks the chip and
ignores sector sizes.
Sector erase with SPI opcode 0xd8 is of course still supported.
Kill a declaration for a nonexisting function while we're at it.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Index: flashrom-kill_fake_spi_chip_erase_d8/spi25.c
===================================================================
--- flashrom-kill_fake_spi_chip_erase_d8/spi25.c (Revision 1028)
+++ flashrom-kill_fake_spi_chip_erase_d8/spi25.c (Arbeitskopie)
@@ -652,29 +652,6 @@
return 0;
}
-int spi_chip_erase_d8(struct flashchip *flash)
-{
- int i, rc = 0;
- int total_size = flash->total_size * 1024;
- int erase_size = 64 * 1024;
-
- spi_disable_blockprotect();
-
- msg_cinfo("Erasing chip: \n");
-
- for (i = 0; i < total_size / erase_size; i++) {
- rc = spi_block_erase_d8(flash, i * erase_size, erase_size);
- if (rc) {
- msg_cerr("Error erasing block at 0x%x\n", i);
- break;
- }
- }
-
- msg_cinfo("\n");
-
- return rc;
-}
-
/* Sector size is usually 4k, though Macronix eliteflash has 64k */
int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen)
{
Index: flashrom-kill_fake_spi_chip_erase_d8/chipdrivers.h
===================================================================
--- flashrom-kill_fake_spi_chip_erase_d8/chipdrivers.h (Revision 1028)
+++ flashrom-kill_fake_spi_chip_erase_d8/chipdrivers.h (Arbeitskopie)
@@ -35,8 +35,6 @@
int spi_write_disable(void);
int spi_chip_erase_60(struct flashchip *flash);
int spi_chip_erase_c7(struct flashchip *flash);
-int spi_chip_erase_60_c7(struct flashchip *flash);
-int spi_chip_erase_d8(struct flashchip *flash);
int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
int spi_block_erase_d7(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
--
http://www.hailfinger.org/
Author: hailfinger
Date: Sun Jun 20 13:02:33 2010
New Revision: 1054
URL: http://flashrom.org/trac/coreboot/changeset/1054
Log:
The SPI opcode 0xd8 is not a chip erase opcode on any chip out there.
Besides that, the function as implemented just walks the chip and
ignores sector sizes.
Sector erase with SPI opcode 0xd8 is of course still supported.
Kill a declaration for a nonexisting function while we're at it.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006(a)gmx.net>
Acked-by: Sean Nelson <audiohacked(a)gmail.com>
Modified:
trunk/chipdrivers.h
trunk/spi25.c
Modified: trunk/chipdrivers.h
==============================================================================
--- trunk/chipdrivers.h Sun Jun 20 12:58:32 2010 (r1053)
+++ trunk/chipdrivers.h Sun Jun 20 13:02:33 2010 (r1054)
@@ -35,8 +35,6 @@
int spi_write_disable(void);
int spi_chip_erase_60(struct flashchip *flash);
int spi_chip_erase_c7(struct flashchip *flash);
-int spi_chip_erase_60_c7(struct flashchip *flash);
-int spi_chip_erase_d8(struct flashchip *flash);
int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
int spi_block_erase_d7(struct flashchip *flash, unsigned int addr, unsigned int blocklen);
Modified: trunk/spi25.c
==============================================================================
--- trunk/spi25.c Sun Jun 20 12:58:32 2010 (r1053)
+++ trunk/spi25.c Sun Jun 20 13:02:33 2010 (r1054)
@@ -646,29 +646,6 @@
return 0;
}
-int spi_chip_erase_d8(struct flashchip *flash)
-{
- int i, rc = 0;
- int total_size = flash->total_size * 1024;
- int erase_size = 64 * 1024;
-
- spi_disable_blockprotect();
-
- msg_cinfo("Erasing chip: \n");
-
- for (i = 0; i < total_size / erase_size; i++) {
- rc = spi_block_erase_d8(flash, i * erase_size, erase_size);
- if (rc) {
- msg_cerr("Error erasing block at 0x%x\n", i);
- break;
- }
- }
-
- msg_cinfo("\n");
-
- return rc;
-}
-
/* Sector size is usually 4k, though Macronix eliteflash has 64k */
int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen)
{