summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2007-12-16 21:15:27 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2007-12-16 21:15:27 +0000
commitf5df46f6c697b7b79faec25c5b2919b328f67fc0 (patch)
tree4d59e9d65c99f3ebdffa0aea47487716421dd459
parent4bcf1751908fa3177de87b43c5b0837074e3bb8e (diff)
downloadflashrom-f5df46f6c697b7b79faec25c5b2919b328f67fc0.tar.gz
flashrom-f5df46f6c697b7b79faec25c5b2919b328f67fc0.tar.bz2
flashrom-f5df46f6c697b7b79faec25c5b2919b328f67fc0.zip
Add support for ST M25P80 chips
Detection was tested. Print status register before erase to help debugging block locks. Corresponding to flashrom svn r164 and coreboot v2 svn r3008. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Corey Osgood <corey.osgood@gmail.com>
-rw-r--r--flash.h5
-rw-r--r--flashchips.c2
-rw-r--r--spi.c4
3 files changed, 11 insertions, 0 deletions
diff --git a/flash.h b/flash.h
index 2bcdf9104..09e239ea0 100644
--- a/flash.h
+++ b/flash.h
@@ -167,7 +167,12 @@ extern struct flashchip flashchips[];
#define SST_49LF016C 0x5C
#define SST_49LF160C 0x4C
+/*
+ * ST25P chips are SPI, first byte of device ID is memory type, second
+ * byte of device ID is related to log(bitsize) at least for some chips.
+ */
#define ST_ID 0x20 /* ST */
+#define ST_M25P80 0x2014
#define ST_M50FLW040A 0x08
#define ST_M50FLW040B 0x28
#define ST_M50FLW080A 0x80
diff --git a/flashchips.c b/flashchips.c
index 72d56192f..41ae1b1b5 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -140,6 +140,8 @@ struct flashchip flashchips[] = {
probe_jedec, erase_chip_jedec, write_jedec},
{"M29F040B", ST_ID, ST_M29F040B, 512, 64 * 1024,
probe_29f040b, erase_29f040b, write_29f040b},
+ {"M25P80", ST_ID, ST_M25P80, 1024, 64 * 1024,
+ probe_spi, generic_spi_chip_erase, generic_spi_chip_write},
{"82802ab", 137, 173, 512, 64 * 1024,
probe_82802ab, erase_82802ab, write_82802ab},
{"82802ac", 137, 172, 1024, 64 * 1024,
diff --git a/spi.c b/spi.c
index 846766413..8ae635783 100644
--- a/spi.c
+++ b/spi.c
@@ -280,7 +280,11 @@ uint8_t generic_spi_read_status_register()
int generic_spi_chip_erase(struct flashchip *flash)
{
const unsigned char cmd[] = JEDEC_CE_2;
+ uint8_t statusreg;
+ statusreg = generic_spi_read_status_register();
+ printf("chip status register before erase is %02x\n", statusreg);
+
generic_spi_write_enable();
/* Send CE (Chip Erase) */
generic_spi_command(JEDEC_CE_2_OUTSIZE, JEDEC_CE_2_INSIZE, cmd, NULL);