Patchwork new chip: AMIC A25L80P

login
register
about
Submitter Daniel Lenski
Date 2010-07-12 02:58:29
Message ID <1278903509.8492.58.camel@dlenski-laptop>
Download mbox | patch
Permalink /patch/1614/
State Superseded
Headers show

Comments

Daniel Lenski - 2010-07-12 02:58:29
On Mon, 2010-07-12 at 00:33 +0200, Carl-Daniel Hailfinger wrote: 
> Hi Daniel,
> 
> thanks for your patch.
> 
> Could I interest you in implementing support for all other AMIC A25
> series chips as well? Even if you can't test those, it would expand
> flashrom coverage a lot.

Sure, I can do that.  Patch for AMIC A25L{05,10,20,40,16}{T,U} and
generic AMIC is attached, as well as a pretty-printer for their status
register.

Signed-off-by: Daniel Lenski <dlenski@gmail.com>

Now here's a strange thing: The datasheets for these parts, which come
in many different versions with errata, are riddled with and omissions
and weird descriptions, probably due to quick-and-dirty copy-pasting by
whoever's writing/translating them.

A quick search of Datasheetarchive.com suggests that the following parts
exist:
A25L05P[TU] - ID 2020/2010 (T/U)
A25L10P[TU] - ID 2021/2011 (T/U)
A25L20P[TU] - ID 2022/2012 (T/U)
A25L40P[TU] - ID      2013 (Datasheet says U *and* T parts have same ID)
A25L80P     - ID      2014 (only U parts exist, AFAICT)
A25L16P[TU] - ID 2025/2015 (T/U)

I'm willing to bet that A25L40PT actually has the device ID 2023, and
*not* 2013.  So my attached patch modifies the device ID for the
A25L40PT accordingly.  I note that Erase is untested for the
A25L40P[TU]... if someone has a part with device ID 2013, I'd love to
know if its erase behavior works as expected.

Dan
Rudolf Marek - 2010-07-12 18:37:01
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

I checked with those two PT and PU chips A25L40. I think they still report with
your patch as same chip:

With PT chip:

robing for AMIC A25L05PT, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L05PU, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PT, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PU, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PT, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PU, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PT, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PU, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Chip status register is 00
Chip status register: Status Register Write Disable (SRWD) is not set
Chip status register: Bit 5 / Block Protect 3 (BP3) is not set
Chip status register: Bit 4 / Block Protect 2 (BP2) is not set
Chip status register: Bit 3 / Block Protect 1 (BP1) is not set
Chip status register: Bit 2 / Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Found chip "AMIC A25L40PU" (512 KB, SPI) at physical address 0xfff80000.
Probing for AMIC A25L80P, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013


with PU chip:

Probing for AMIC A25L05PT, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L05PU, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PT, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PU, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PT, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PU, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PT, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PU, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Chip status register is 00
Chip status register: Status Register Write Disable (SRWD) is not set
Chip status register: Bit 5 / Block Protect 3 (BP3) is not set
Chip status register: Bit 4 / Block Protect 2 (BP2) is not set
Chip status register: Bit 3 / Block Protect 1 (BP1) is not set
Chip status register: Bit 2 / Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Found chip "AMIC A25L40PU" (512 KB, SPI) at physical address 0xfff80000.
Probing for AMIC A25L80P, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A29002B, 256 KB: skipped.

Check attachment for full log. I had to delete AMIC A25L16 because it had some
typo...


Thanks,
Rudolf
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkw7YM0ACgkQ3J9wPJqZRNWGXQCgmL8q5JGkS0yQJiOb5U2VDOz7
TlsAoJLA3JQ5XG1RRov3LAidb1AVbUEz
=E5sl
-----END PGP SIGNATURE-----
ruiktest:~/flashrom# ./flashrom  -V
flashrom v0.9.2-r1075 on Linux 2.6.26-1-amd64 (x86_64), built with libpci 3.0.0, GCC 4.3.2, little endian
flashrom is free software, get the source code at http://www.flashrom.org

Calibrating delay loop... OS timer resolution is 1 usecs, 333M loops per second, 10 myus = 11 us, 100 myus = 108 us, 1000 myus = 1015 us, 10000 myus = 10037 us, 4 myus = 12 us, OK.
Initializing internal programmer
Found candidate at: 00000500-00000510
Found coreboot table at 0x00000500.
Found candidate at: 00000000-0000098c
Found coreboot table at 0x00000000.
coreboot table found at 0x1dffc000.
coreboot header(24) checksum: 4cbd table(2444) checksum: 17f9 entries: 16
Vendor ID: ASUS, part ID: M2V-MX SE
DMI string system-manufacturer: "Bochs"
DMI string system-product-name: "Bochs"
DMI string system-version: "Not Specified"
DMI string baseboard-manufacturer: ""
DMI string baseboard-product-name: ""
DMI string baseboard-version: ""
DMI string chassis-type: "Other"
Found ITE Super I/O, id 8712
Found chipset "VIA VT8237S", enabling flash write... chipset PCI ID is 1106:3372, MMIO base at = 0xfed02000
Mapping VT8237S MMIO registers at 0xfed02000, unaligned size 0x70.
0x6c: 0x0000     (CLOCK/DEBUG)
Programming OPCODES... 
program_opcodes: preop=5006 optype=463b opmenu=05d80302c79f0190
Setting BBAR is not implemented for VIA yet.
done
OK.
This chipset supports the following protocols: LPC,FWH,SPI.
Super I/O ID 0x8712 is not on the list of flash capable controllers.
Probing for AMD Am29F010A/B, 128 KB: skipped.
Probing for AMD Am29F002(N)BB, 256 KB: skipped.
Probing for AMD Am29F002(N)BT, 256 KB: skipped.
Probing for AMD Am29F016D, 2048 KB: skipped.
Probing for AMD Am29F040B, 512 KB: skipped.
Probing for AMD Am29F080B, 1024 KB: skipped.
Probing for AMD Am29LV040B, 512 KB: skipped.
Probing for AMD Am29LV081B, 1024 KB: skipped.
Probing for ASD AE49F2008, 256 KB: skipped.
Probing for Atmel AT25DF021, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF041A, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF081, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF161, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF321, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF321A, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF641, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25F512B, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25FS010, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25FS040, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF041, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF081A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF161, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF161A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26F004, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT29C512, 64 KB: skipped.
Probing for Atmel AT29C010A, 128 KB: skipped.
Probing for Atmel AT29C020, 256 KB: skipped.
Probing for Atmel AT29C040A, 512 KB: skipped.
Probing for Atmel AT45CS1282, 16896 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB011D, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB021D, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB041D, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB081D, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB161D, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB321C, 4224 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB321D, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB642D, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT49BV512, 64 KB: skipped.
Probing for Atmel AT49F020, 256 KB: skipped.
Probing for Atmel AT49F002(N), 256 KB: skipped.
Probing for Atmel AT49F002(N)T, 256 KB: skipped.
Probing for AMIC A25L05PT, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L05PU, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PT, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PU, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PT, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PU, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PT, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PU, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Chip status register is 00
Chip status register: Status Register Write Disable (SRWD) is not set
Chip status register: Bit 5 / Block Protect 3 (BP3) is not set
Chip status register: Bit 4 / Block Protect 2 (BP2) is not set
Chip status register: Bit 3 / Block Protect 1 (BP1) is not set
Chip status register: Bit 2 / Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Found chip "AMIC A25L40PU" (512 KB, SPI) at physical address 0xfff80000.
Probing for AMIC A25L80P, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A29002B, 256 KB: skipped.
Probing for AMIC A29002T, 256 KB: skipped.
Probing for AMIC A29040B, 512 KB: skipped.
Probing for AMIC A49LF040A, 512 KB: probe_jedec_common: id1 0x7fff, id2 0x37, id1 parity violation
Probing for EMST F49B002UA, 256 KB: skipped.
Probing for EMST F25L008A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B05, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B05T, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B10T, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B20T, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B40T, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B80T, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B16T, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B32T, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B64T, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25D16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F05, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN29F010, 128 KB: skipped.
Probing for EON EN29F002(A)(N)B, 256 KB: skipped.
Probing for EON EN29F002(A)(N)T, 256 KB: skipped.
Probing for Fujitsu MBM29F004BC, 512 KB: skipped.
Probing for Fujitsu MBM29F004TC, 512 KB: skipped.
Probing for Fujitsu MBM29F400BC, 512 KB: skipped.
Probing for Fujitsu MBM29F400TC, 512 KB: skipped.
Probing for Hyundai HY29F002T, 256 KB: skipped.
Probing for Hyundai HY29F002B, 256 KB: skipped.
Probing for Intel 28F001BX-B, 128 KB: skipped.
Probing for Intel 28F001BX-T, 128 KB: skipped.
Probing for Intel 28F004S5, 512 KB: skipped.
Probing for Intel 28F004BV/BE-B, 512 KB: skipped.
Probing for Intel 28F004BV/BE-T, 512 KB: skipped.
Probing for Intel 28F400BV/CV/CE-B, 512 KB: skipped.
Probing for Intel 28F400BV/CV/CE-T, 512 KB: skipped.
Probing for Intel 82802AB, 512 KB: probe_82802ab: id1 0x7f, id2 0x37, id1 is normal flash content, id2 is normal flash content
Probing for Intel 82802AC, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Macronix MX25L512, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1005, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L2005, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L4005, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L8005, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1605, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1635D, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L3205, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L3235D, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L6405, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L12805, 16384 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX29F001B, 128 KB: skipped.
Probing for Macronix MX29F001T, 128 KB: skipped.
Probing for Macronix MX29F002B, 256 KB: skipped.
Probing for Macronix MX29F002T, 256 KB: skipped.
Probing for Macronix MX29LV040, 512 KB: skipped.
Probing for Numonyx M25PE10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV010, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV016B, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV020, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV040, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV080B, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV512, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm29F002T, 256 KB: skipped.
Probing for PMC Pm29F002B, 256 KB: skipped.
Probing for PMC Pm39LV010, 128 KB: skipped.
Probing for PMC Pm39LV020, 256 KB: skipped.
Probing for PMC Pm39LV040, 512 KB: skipped.
Probing for PMC Pm49FL002, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for PMC Pm49FL004, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Sanyo LF25FW203A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Sharp LHF00L04, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Spansion S25FL008A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Spansion S25FL016A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF016B, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF032B, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF040.REMS, 512 KB: probe_spi_rems: id1 0x7f, id2 0x37
Probing for SST SST25VF040B, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25LF040A.RES, 512 KB: Invalid OPCODE 0xab
Probing for SST SST25VF040B.REMS, 512 KB: probe_spi_rems: id1 0x7f, id2 0x37
Probing for SST SST25VF080B, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST28SF040A, 512 KB: skipped.
Probing for SST SST29EE010, 128 KB: skipped.
Probing for SST SST29LE010, 128 KB: skipped.
Probing for SST SST29EE020A, 256 KB: skipped.
Probing for SST SST29LE020, 256 KB: skipped.
Probing for SST SST39SF512, 64 KB: skipped.
Probing for SST SST39SF010A, 128 KB: skipped.
Probing for SST SST39SF020A, 256 KB: skipped.
Probing for SST SST39SF040, 512 KB: skipped.
Probing for SST SST39VF512, 64 KB: skipped.
Probing for SST SST39VF010, 128 KB: skipped.
Probing for SST SST39VF020, 256 KB: skipped.
Probing for SST SST39VF040, 512 KB: skipped.
Probing for SST SST39VF080, 1024 KB: skipped.
Probing for SST SST49LF002A/B, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF003A/B, 384 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF004A/B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF004C, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF008A, 1024 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF008C, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF016C, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF020, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF020A, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF040, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF040B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF080A, 1024 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF160C, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M25P05-A, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P05.RES, 64 KB: Ignoring RES in favour of RDID.
Probing for ST M25P10-A, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P10.RES, 128 KB: Ignoring RES in favour of RDID.
Probing for ST M25P20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P40-old, 512 KB: Ignoring RES in favour of RDID.
Probing for ST M25P80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P128, 16384 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M29F002B, 256 KB: skipped.
Probing for ST M29F002T/NT, 256 KB: skipped.
Probing for ST M29F040B, 512 KB: skipped.
Probing for ST M29F400BT, 512 KB: skipped.
Probing for ST M29W010B, 128 KB: skipped.
Probing for ST M29W040B, 512 KB: skipped.
Probing for ST M29W512B, 64 KB: skipped.
Probing for ST M50FLW040A, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW040B, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW080A, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW080B, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW002, 256 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW016, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW040, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW080, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50LPW116, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SyncMOS S29C31004T, 512 KB: skipped.
Probing for SyncMOS S29C51001T, 128 KB: skipped.
Probing for SyncMOS S29C51002T, 256 KB: skipped.
Probing for SyncMOS S29C51004T, 512 KB: skipped.
Probing for TI TMS29F002RB, 256 KB: skipped.
Probing for TI TMS29F002RT, 256 KB: skipped.
Probing for Winbond W25Q80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W29C011, 128 KB: skipped.
Probing for Winbond W29C020C, 256 KB: skipped.
Probing for Winbond W29C040P, 512 KB: skipped.
Probing for Winbond W29EE011, 128 KB: skipped.
Probing for Winbond W39V040A, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040C, 512 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040FA, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080A, 1024 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W49F002U, 256 KB: skipped.
Probing for Winbond W49V002A, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W49V002FA, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080FA, 1024 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080FA (dual mode), 512 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for AMIC unknown AMIC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for Atmel unknown Atmel SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for EON unknown EON SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix unknown Macronix SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC unknown PMC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST unknown SST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST unknown ST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Sanyo unknown Sanyo SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Generic unknown SPI chip (RDID), 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Generic unknown SPI chip (REMS), 0 KB: probe_spi_rems: id1 0x7f, id2 0x37
===
This flash part has status UNTESTED for operations: ERASE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to flashrom@flashrom.org if any of the above operations
work correctly for you with this flash part. Please include the flashrom
output with the additional -V option for all operations you tested (-V, -Vr,
-Vw, -VE), and mention which mainboard or programmer you tested.
Thanks for your help!
===
No operations were specified.
ruiktest:~/flashrom# ./flashrom  -V
flashrom v0.9.2-r1075 on Linux 2.6.26-1-amd64 (x86_64), built with libpci 3.0.0, GCC 4.3.2, little endian
flashrom is free software, get the source code at http://www.flashrom.org

Calibrating delay loop... OS timer resolution is 1 usecs, 333M loops per second, 10 myus = 11 us, 100 myus = 108 us, 1000 myus = 1015 us, 10000 myus = 10031 us, 4 myus = 13 us, OK.
Initializing internal programmer
Found candidate at: 00000500-00000510
Found coreboot table at 0x00000500.
Found candidate at: 00000000-0000098c
Found coreboot table at 0x00000000.
coreboot table found at 0x1dffc000.
coreboot header(24) checksum: 4cbd table(2444) checksum: 17f9 entries: 16
Vendor ID: ASUS, part ID: M2V-MX SE
DMI string system-manufacturer: "Bochs"
DMI string system-product-name: "Bochs"
DMI string system-version: "Not Specified"
DMI string baseboard-manufacturer: ""
DMI string baseboard-product-name: ""
DMI string baseboard-version: ""
DMI string chassis-type: "Other"
Found ITE Super I/O, id 8712
Found chipset "VIA VT8237S", enabling flash write... chipset PCI ID is 1106:3372, MMIO base at = 0xfed02000
Mapping VT8237S MMIO registers at 0xfed02000, unaligned size 0x70.
0x6c: 0x0000     (CLOCK/DEBUG)
Programming OPCODES... 
program_opcodes: preop=5006 optype=463b opmenu=05d80302c79f0190
Setting BBAR is not implemented for VIA yet.
done
OK.
This chipset supports the following protocols: LPC,FWH,SPI.
Super I/O ID 0x8712 is not on the list of flash capable controllers.
Probing for AMD Am29F010A/B, 128 KB: skipped.
Probing for AMD Am29F002(N)BB, 256 KB: skipped.
Probing for AMD Am29F002(N)BT, 256 KB: skipped.
Probing for AMD Am29F016D, 2048 KB: skipped.
Probing for AMD Am29F040B, 512 KB: skipped.
Probing for AMD Am29F080B, 1024 KB: skipped.
Probing for AMD Am29LV040B, 512 KB: skipped.
Probing for AMD Am29LV081B, 1024 KB: skipped.
Probing for ASD AE49F2008, 256 KB: skipped.
Probing for Atmel AT25DF021, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF041A, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF081, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF161, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF321, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF321A, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25DF641, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25F512B, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25FS010, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT25FS040, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF041, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF081A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF161, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26DF161A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT26F004, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT29C512, 64 KB: skipped.
Probing for Atmel AT29C010A, 128 KB: skipped.
Probing for Atmel AT29C020, 256 KB: skipped.
Probing for Atmel AT29C040A, 512 KB: skipped.
Probing for Atmel AT45CS1282, 16896 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB011D, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB021D, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB041D, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB081D, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB161D, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB321C, 4224 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB321D, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT45DB642D, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Atmel AT49BV512, 64 KB: skipped.
Probing for Atmel AT49F020, 256 KB: skipped.
Probing for Atmel AT49F002(N), 256 KB: skipped.
Probing for Atmel AT49F002(N)T, 256 KB: skipped.
Probing for AMIC A25L05PT, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L05PU, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PT, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L10PU, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PT, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L20PU, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PT, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A25L40PU, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Chip status register is 00
Chip status register: Status Register Write Disable (SRWD) is not set
Chip status register: Bit 5 / Block Protect 3 (BP3) is not set
Chip status register: Bit 4 / Block Protect 2 (BP2) is not set
Chip status register: Bit 3 / Block Protect 1 (BP1) is not set
Chip status register: Bit 2 / Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
Found chip "AMIC A25L40PU" (512 KB, SPI) at physical address 0xfff80000.
Probing for AMIC A25L80P, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for AMIC A29002B, 256 KB: skipped.
Probing for AMIC A29002T, 256 KB: skipped.
Probing for AMIC A29040B, 512 KB: skipped.
Probing for AMIC A49LF040A, 512 KB: probe_jedec_common: id1 0x7fff, id2 0x37, id1 parity violation
Probing for EMST F49B002UA, 256 KB: skipped.
Probing for EMST F25L008A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B05, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B05T, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B10T, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B20T, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B40T, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B80T, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B16T, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B32T, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25B64T, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25D16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F05, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN25F32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Eon EN29F010, 128 KB: skipped.
Probing for EON EN29F002(A)(N)B, 256 KB: skipped.
Probing for EON EN29F002(A)(N)T, 256 KB: skipped.
Probing for Fujitsu MBM29F004BC, 512 KB: skipped.
Probing for Fujitsu MBM29F004TC, 512 KB: skipped.
Probing for Fujitsu MBM29F400BC, 512 KB: skipped.
Probing for Fujitsu MBM29F400TC, 512 KB: skipped.
Probing for Hyundai HY29F002T, 256 KB: skipped.
Probing for Hyundai HY29F002B, 256 KB: skipped.
Probing for Intel 28F001BX-B, 128 KB: skipped.
Probing for Intel 28F001BX-T, 128 KB: skipped.
Probing for Intel 28F004S5, 512 KB: skipped.
Probing for Intel 28F004BV/BE-B, 512 KB: skipped.
Probing for Intel 28F004BV/BE-T, 512 KB: skipped.
Probing for Intel 28F400BV/CV/CE-B, 512 KB: skipped.
Probing for Intel 28F400BV/CV/CE-T, 512 KB: skipped.
Probing for Intel 82802AB, 512 KB: probe_82802ab: id1 0x7f, id2 0x37, id1 is normal flash content, id2 is normal flash content
Probing for Intel 82802AC, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Macronix MX25L512, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1005, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L2005, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L4005, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L8005, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1605, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L1635D, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L3205, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L3235D, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L6405, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX25L12805, 16384 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix MX29F001B, 128 KB: skipped.
Probing for Macronix MX29F001T, 128 KB: skipped.
Probing for Macronix MX29F002B, 256 KB: skipped.
Probing for Macronix MX29F002T, 256 KB: skipped.
Probing for Macronix MX29LV040, 512 KB: skipped.
Probing for Numonyx M25PE10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Numonyx M25PE16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV010, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV016B, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV020, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV040, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV080B, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm25LV512, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC Pm29F002T, 256 KB: skipped.
Probing for PMC Pm29F002B, 256 KB: skipped.
Probing for PMC Pm39LV010, 128 KB: skipped.
Probing for PMC Pm39LV020, 256 KB: skipped.
Probing for PMC Pm39LV040, 512 KB: skipped.
Probing for PMC Pm49FL002, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for PMC Pm49FL004, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Sanyo LF25FW203A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Sharp LHF00L04, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Spansion S25FL008A, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Spansion S25FL016A, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF016B, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF032B, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25VF040.REMS, 512 KB: probe_spi_rems: id1 0x7f, id2 0x37
Probing for SST SST25VF040B, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST25LF040A.RES, 512 KB: Invalid OPCODE 0xab
Probing for SST SST25VF040B.REMS, 512 KB: probe_spi_rems: id1 0x7f, id2 0x37
Probing for SST SST25VF080B, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST SST28SF040A, 512 KB: skipped.
Probing for SST SST29EE010, 128 KB: skipped.
Probing for SST SST29LE010, 128 KB: skipped.
Probing for SST SST29EE020A, 256 KB: skipped.
Probing for SST SST29LE020, 256 KB: skipped.
Probing for SST SST39SF512, 64 KB: skipped.
Probing for SST SST39SF010A, 128 KB: skipped.
Probing for SST SST39SF020A, 256 KB: skipped.
Probing for SST SST39SF040, 512 KB: skipped.
Probing for SST SST39VF512, 64 KB: skipped.
Probing for SST SST39VF010, 128 KB: skipped.
Probing for SST SST39VF020, 256 KB: skipped.
Probing for SST SST39VF040, 512 KB: skipped.
Probing for SST SST39VF080, 1024 KB: skipped.
Probing for SST SST49LF002A/B, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF003A/B, 384 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF004A/B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF004C, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF008A, 1024 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF008C, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF016C, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF020, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF020A, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF040, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF040B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF080A, 1024 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SST SST49LF160C, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M25P05-A, 64 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P05.RES, 64 KB: Ignoring RES in favour of RDID.
Probing for ST M25P10-A, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P10.RES, 128 KB: Ignoring RES in favour of RDID.
Probing for ST M25P20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P40-old, 512 KB: Ignoring RES in favour of RDID.
Probing for ST M25P80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M25P128, 16384 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST M29F002B, 256 KB: skipped.
Probing for ST M29F002T/NT, 256 KB: skipped.
Probing for ST M29F040B, 512 KB: skipped.
Probing for ST M29F400BT, 512 KB: skipped.
Probing for ST M29W010B, 128 KB: skipped.
Probing for ST M29W040B, 512 KB: skipped.
Probing for ST M29W512B, 64 KB: skipped.
Probing for ST M50FLW040A, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW040B, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW080A, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FLW080B, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW002, 256 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW016, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW040, 512 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50FW080, 1024 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for ST M50LPW116, 2048 KB: probe_82802ab: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for SyncMOS S29C31004T, 512 KB: skipped.
Probing for SyncMOS S29C51001T, 128 KB: skipped.
Probing for SyncMOS S29C51002T, 256 KB: skipped.
Probing for SyncMOS S29C51004T, 512 KB: skipped.
Probing for TI TMS29F002RB, 256 KB: skipped.
Probing for TI TMS29F002RT, 256 KB: skipped.
Probing for Winbond W25Q80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25Q64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x10, 128 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x20, 256 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x40, 512 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x80, 1024 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x16, 2048 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x32, 4096 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W25x64, 8192 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Winbond W29C011, 128 KB: skipped.
Probing for Winbond W29C020C, 256 KB: skipped.
Probing for Winbond W29C040P, 512 KB: skipped.
Probing for Winbond W29EE011, 128 KB: skipped.
Probing for Winbond W39V040A, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040B, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040C, 512 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V040FA, 512 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080A, 1024 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W49F002U, 256 KB: skipped.
Probing for Winbond W49V002A, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W49V002FA, 256 KB: probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080FA, 1024 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for Winbond W39V080FA (dual mode), 512 KB: Chip lacks correct probe timing information, using default 10mS/40uS. probe_jedec_common: id1 0xff, id2 0xff, id1 parity violation, id1 is normal flash content, id2 is normal flash content
Probing for AMIC unknown AMIC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x2013
Probing for Atmel unknown Atmel SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for EON unknown EON SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Macronix unknown Macronix SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for PMC unknown PMC SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for SST unknown SST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for ST unknown ST SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Sanyo unknown Sanyo SPI chip, 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Generic unknown SPI chip (RDID), 0 KB: probe_spi_rdid_generic: id1 0x7f37, id2 0x20
Probing for Generic unknown SPI chip (REMS), 0 KB: probe_spi_rems: id1 0x7f, id2 0x37
===
This flash part has status UNTESTED for operations: ERASE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to flashrom@flashrom.org if any of the above operations
work correctly for you with this flash part. Please include the flashrom
output with the additional -V option for all operations you tested (-V, -Vr,
-Vw, -VE), and mention which mainboard or programmer you tested.
Thanks for your help!
===
No operations were specified.
Rudolf Marek - 2010-07-12 19:52:01
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> What happens if you try to selectively write or erase only the bottom 4
> KB of each chip?

Well I tried to write there 512KB of zeros using -c A25L40PT with PT chip
then erase with -E -c A25L40PT

This works fine. Same with PU chip with -c A25L40PU. However if there is some
combination of non-agreeing chips/params I got hard lockup of whole computer.


With PU chip, written all 0's with right switch and then erasing PT param:

ruiktest:~/flashrom#  ./flashrom -VE -c A25L40PT
Erasing flash chip... Looking at blockwise erase function 0... trying...
0x000000-0x00ffff, ERASE FAILED at 0x00001000! Expected=0xff, Read=0x00, failed
byte count from 0x00000000-0x0000ffff: 0xf000
ERASE FAILED!

Looking at blockwise erase function 1... trying... 0x000000-0x07ffff,

<hang>

It hangs pretty solid, keyboard non-responsive.

Thanks,
Rudolf
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkw7cmAACgkQ3J9wPJqZRNXMIwCgiOwL2QpjlZJRIDHdGaMgqT0U
pmIAniKtC/dWY9gK65iS4PWiQjuTY3EN
=8arR
-----END PGP SIGNATURE-----
Daniel Lenski - 2010-07-12 20:11:32
Hi Rudolf,

On Mon, 2010-07-12 at 21:52 +0200, Rudolf Marek wrote:
> > What happens if you try to selectively write or erase only the bottom 4
> > KB of each chip?
> 
> Well I tried to write there 512KB of zeros using -c A25L40PT with PT chip
> then erase with -E -c A25L40PT
> 
> This works fine. Same with PU chip with -c A25L40PU. However if there is some
> combination of non-agreeing chips/params I got hard lockup of whole computer.

Okay, so write/erase works fine with the setting that matches the chip
in hand?

> 
> 
> With PU chip, written all 0's with right switch and then erasing PT param:
> 
> ruiktest:~/flashrom#  ./flashrom -VE -c A25L40PT
> Erasing flash chip... Looking at blockwise erase function 0... trying...
> 0x000000-0x00ffff, ERASE FAILED at 0x00001000! Expected=0xff, Read=0x00, failed
> byte count from 0x00000000-0x0000ffff: 0xf000
> ERASE FAILED!
> 
> Looking at blockwise erase function 1... trying... 0x000000-0x07ffff,
> 

This is really useful to know!  The blockwise erase function fails at
the 4 K (0x1000) mark.  The flashrom program expects to erase a 64 K
segment (0x10000) because it thinks it is talking to a PT chip, but it
only gets 4 K erased, because the chip is really a PU.  That makes
sense!

What about the reverse case?  What if you put in the PT chip and tell
flashrom that it's a PU?  flashrom -VE -c A25L40PU
In this case, it should fail when it tries to erase the /upper/ region
of the memory, because flashrom is expecting to erase a 64 K chunk, but
only getting 4 K since it is really a top boot block chip.

If that's really what happens... then I am convinced once and for all
that the PT and PU really are distinct chips!

> <hang>
> 
> It hangs pretty solid, keyboard non-responsive.

I don't understand why it hangs...  I guess this is an issue with your
chipset?

Dan
Rudolf Marek - 2010-07-12 20:14:56
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> 
> This is really useful to know!  The blockwise erase function fails at
> the 4 K (0x1000) mark.  The flashrom program expects to erase a 64 K
> segment (0x10000) because it thinks it is talking to a PT chip, but it
> only gets 4 K erased, because the chip is really a PU.  That makes
> sense!

OK

> What about the reverse case?  What if you put in the PT chip and tell
> flashrom that it's a PU?  flashrom -VE -c A25L40PU
> In this case, it should fail when it tries to erase the /upper/ region
> of the memory, because flashrom is expecting to erase a 64 K chunk, but
> only getting 4 K since it is really a top boot block chip.

I think i did that too.

> If that's really what happens... then I am convinced once and for all
> that the PT and PU really are distinct chips!

Yes they are ;) the markings tells so.

> I don't understand why it hangs...  I guess this is an issue with your
> chipset?

Yes it might be a flaw in VT8237S. Those non-uniform flashes are not used in
bioses anyway, so I would not make it a big deal.

Thanks,
Rudolf
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkw7d78ACgkQ3J9wPJqZRNVf3wCfUehBWsvexhV5Z79Yqk3wr8cB
3d8AnRGoktlqk8ujIRC0m37sAGv9r45B
=+nHg
-----END PGP SIGNATURE-----
Daniel Lenski - 2010-07-12 20:28:39
On Mon, 2010-07-12 at 22:14 +0200, Rudolf Marek wrote:
> > What about the reverse case?  What if you put in the PT chip and tell
> > flashrom that it's a PU?  flashrom -VE -c A25L40PU
> > In this case, it should fail when it tries to erase the /upper/ region
> > of the memory, because flashrom is expecting to erase a 64 K chunk, but
> > only getting 4 K since it is really a top boot block chip.
> 
> I think i did that too.

Well, okay, it's settled... I'll change my patch back to indicate the
same RDID values for these two chips.

> > If that's really what happens... then I am convinced once and for all
> > that the PT and PU really are distinct chips!
> 
> Yes they are ;) the markings tells so.

Haha, indeed :)  But what a dumb design... the two chips have the same
RDID but different erase layout.  And for no good reason, since the
company that makes them has an established pattern of distinguishing
erase layouts based on a bit in the RDID code.

> > I don't understand why it hangs...  I guess this is an issue with your
> > chipset?
> 
> Yes it might be a flaw in VT8237S. Those non-uniform flashes are not used in
> bioses anyway, so I would not make it a big deal.

Thanks for all the testing.

Yeah, I'm definitely making a mountain of a molehill.  I'll bet there is
someone somewhere, though, who will mix these chips up in an embedded
system, and accidentally trash the boot block... :-(

Dan

Patch

Index: spi25.c
===================================================================
--- spi25.c	(revision 1075)
+++ spi25.c	(working copy)
@@ -328,6 +328,16 @@ 
 }
 
 /* Prettyprint the status register. Works for
+ * AMIC A25L series
+ */
+void spi_prettyprint_status_register_amic_a25l(uint8_t status)
+{
+	msg_cdbg("Chip status register: Status Register Write Disable "
+		     "(SRWD) is %sset\n", (status & (1 << 7)) ? "" : "not ");
+	spi_prettyprint_status_register_common(status);
+}
+
+/* Prettyprint the status register. Works for
  * ST M25P series
  * MX MX25L series
  */
@@ -389,6 +399,10 @@ 
 	status = spi_read_status_register();
 	msg_cdbg("Chip status register is %02x\n", status);
 	switch (flash->manufacture_id) {
+	case AMIC_ID:
+		if ((flash->model_id & 0xff00) == 0x2000)
+		    spi_prettyprint_status_register_amic_a25l(status);
+		break;
 	case ST_ID:
 		if (((flash->model_id & 0xff00) == 0x2000) ||
 		    ((flash->model_id & 0xff00) == 0x2500))
Index: flashchips.c
===================================================================
--- flashchips.c	(revision 1075)
+++ flashchips.c	(working copy)
@@ -1155,14 +1155,206 @@ 
 		.read		= read_memmapped,
 	},
 
-	/* The next two chip definitions have top/bottom boot blocks, but has no
-	device differentiation between the two */
+	/* AMIC */
+
 	{
 		.vendor		= "AMIC",
+		.name		= "A25L05PT",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L05PT,
+		.total_size	= 64,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{32 * 1024, 1},
+					{16 * 1024, 1},
+					{8 * 1024, 1},
+					{4 * 1024, 2},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {64 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L05PU",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L05PU,
+		.total_size	= 64,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{4 * 1024, 2},
+					{8 * 1024, 1},
+					{16 * 1024, 1},
+					{32 * 1024, 1},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {64 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L10PT",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L10PT,
+		.total_size	= 128,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{64 * 1024, 1},
+					{32 * 1024, 1},
+					{16 * 1024, 1},
+					{8 * 1024, 1},
+					{4 * 1024, 2},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {128 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L10PU",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L10PU,
+		.total_size	= 128,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{4 * 1024, 2},
+					{8 * 1024, 1},
+					{16 * 1024, 1},
+					{32 * 1024, 1},
+					{64 * 1024, 1},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {128 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L20PT",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L20PT,
+		.total_size	= 256,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{64 * 1024, 3},
+					{32 * 1024, 1},
+					{16 * 1024, 1},
+					{8 * 1024, 1},
+					{4 * 1024, 2},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {256 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L20PU",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L20PU,
+		.total_size	= 256,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{4 * 1024, 2},
+					{8 * 1024, 1},
+					{16 * 1024, 1},
+					{32 * 1024, 1},
+					{64 * 1024, 3},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {256 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	/* The entries for A25L40P{T,U} previously distinguished
+	 * top/bottom boot blocks, without any distinction in RDID.
+	 * This is probably an error in the datasheets from AMIC,
+	 * since the A25L{05,10,20,16}{T/U} parts all distinguish
+	 * top/bottom boot blocks in the RDID.  I've changed the
+	 * model_ID for A25L40PT to reflect what it "should" be
+	 * according to the established pattern.
+	 */
+	{
+		.vendor		= "AMIC",
 		.name		= "A25L40PT",
 		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= AMIC_ID,
-		.model_id	= AMIC_A25L40P,
+		.model_id	= AMIC_A25L40PT,
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_OK_PRW,
@@ -1193,7 +1385,7 @@ 
 		.name		= "A25L40PU",
 		.bustype	= CHIP_BUSTYPE_SPI,
 		.manufacture_id	= AMIC_ID,
-		.model_id	= AMIC_A25L40P,
+		.model_id	= AMIC_A25L40PU,
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_OK_PRW,
@@ -1252,6 +1444,68 @@ 
 
 	{
 		.vendor		= "AMIC",
+		.name		= "A25L16PT",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L16PT,
+		.total_size	= 2048,
+		.page_size	= 256,
+		.tested		= TEST_UNTESTED,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{64 * 1024, 31},
+					{32 * 1024, 1},
+					{16 * 1024, 1},
+					{8 * 1024, 1},
+					{4 * 1024, 2},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { {2048 * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
+		.name		= "A25L16PU",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= AMIC_A25L16PU,
+		.total_size	= 512,
+		.page_size	= 256,
+		.tested		= TEST_OK_PRW,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.block_erasers	=
+		{
+			{
+				.eraseblocks = {
+					{4 * 1024, 2},
+					{8 * 1024, 1},
+					{16 * 1024, 1},
+					{32 * 1024, 1},
+					{64 * 1024, 31},
+				},
+				.block_erase = spi_block_erase_d8,
+			}, {
+				.eraseblocks = { { * 1024, 1} },
+				.block_erase = spi_block_erase_c7,
+			}
+		},
+		.write		= spi_chip_write_256,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "AMIC",
 		.name		= "A29002B",
 		.bustype	= CHIP_BUSTYPE_PARALLEL,
 		.manufacture_id	= AMIC_ID_NOPREFIX,
@@ -6491,7 +6745,23 @@ 
 		.read		= read_memmapped,
 	},
 
+	/* generic SPI chips */
 	{
+		.vendor		= "AMIC",
+		.name		= "unknown AMIC SPI chip",
+		.bustype	= CHIP_BUSTYPE_SPI,
+		.manufacture_id	= AMIC_ID,
+		.model_id	= GENERIC_DEVICE_ID,
+		.total_size	= 0,
+		.page_size	= 256,
+		.tested		= TEST_BAD_PREW,
+		.probe		= probe_spi_rdid4,
+		.probe_timing	= TIMING_ZERO,
+		.write		= NULL,
+		.read		= NULL,
+	},
+
+	{
 		.vendor		= "Atmel",
 		.name		= "unknown Atmel SPI chip",
 		.bustype	= CHIP_BUSTYPE_SPI,
Index: flashchips.h
===================================================================
--- flashchips.h	(revision 1075)
+++ flashchips.h	(working copy)
@@ -75,8 +75,20 @@ 
 
 #define AMIC_ID			0x7F37	/* AMIC */
 #define AMIC_ID_NOPREFIX	0x37	/* AMIC */
-#define AMIC_A25L40P		0x2013
-#define AMIC_A25L80P		0x2014
+#define AMIC_A25L05PT		0x2020
+#define AMIC_A25L05PU		0x2010
+#define AMIC_A25L10PT		0x2021
+#define AMIC_A25L10PU		0x2011
+#define AMIC_A25L20PT		0x2022
+#define AMIC_A25L20PU		0x2012
+#define AMIC_A25L40PT		0x2023	/* Datasheet says T and U have
+					   same device ID, but this
+					   seems implausible given the
+					   clear pattern */
+#define AMIC_A25L40PU		0x2013
+#define AMIC_A25L80P		0x2014	/* Seems that no A25L80PT exists */
+#define AMIC_A25L16PT		0x2025
+#define AMIC_A25L16PU		0x2015
 #define AMIC_A29002B		0x0d
 #define AMIC_A29002T		0x8C	/* Same as A290021T */
 #define AMIC_A29040B		0x86