Author: hailfinger
Date: Thu Jul 29 00:20:20 2010
New Revision: 1114
URL: http://flashrom.org/trac/coreboot/changeset/1114

Log:
Cosmetics.
Fix alphabetic sort order for manufacturers in flashchips.c.
Rename a few EON chips to Eon.

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>
Acked-by: Uwe Hermann <[email protected]>

Modified:
   trunk/flashchips.c

Modified: trunk/flashchips.c
==============================================================================
--- trunk/flashchips.c  Wed Jul 28 17:08:35 2010        (r1113)
+++ trunk/flashchips.c  Thu Jul 29 00:20:20 2010        (r1114)
@@ -275,63 +275,59 @@
        },
 
        {
-               .vendor         = "ASD",
-               .name           = "AE49F2008",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
-               .manufacture_id = ASD_ID,
-               .model_id       = ASD_AE49F2008,
-               .total_size     = 256,
-               .page_size      = 128,
-               .feature_bits   = FEATURE_EITHER_RESET,
+               .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_jedec,
-               .probe_timing   = TIMING_FIXME, 
+               .probe          = probe_spi_rdid4,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
                                .eraseblocks = {
-                                       {128 * 1024, 1},
-                                       {96 * 1024, 1},
-                                       {8 * 1024, 2},
+                                       {32 * 1024, 1},
                                        {16 * 1024, 1},
+                                       {8 * 1024, 1},
+                                       {4 * 1024, 2},
                                },
-                               .block_erase = erase_sector_jedec,
+                               .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {256 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {64 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec,
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF021",
+               .vendor         = "AMIC",
+               .name           = "A25L05PU",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF021,
-               .total_size     = 256,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L05PU,
+               .total_size     = 64,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 64} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 8} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 4} },
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {256 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {256 * 1024, 1} },
+                               .eraseblocks = { {64 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -341,32 +337,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF041A",
+               .vendor         = "AMIC",
+               .name           = "A25L10PT",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF041A,
-               .total_size     = 512,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L10PT,
+               .total_size     = 128,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 128} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 16} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 8} },
+                               .eraseblocks = {
+                                       {64 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 1},
+                                       {4 * 1024, 2},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {512 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {512 * 1024, 1} },
+                               .eraseblocks = { {128 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -376,32 +369,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF081",
+               .vendor         = "AMIC",
+               .name           = "A25L10PU",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF081,
-               .total_size     = 1024,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L10PU,
+               .total_size     = 128,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 256} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 32} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 16} },
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 1},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {1024 * 1024, 1} },
+                               .eraseblocks = { {128 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -411,32 +401,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF161",
+               .vendor         = "AMIC",
+               .name           = "A25L20PT",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF161,
-               .total_size     = 2048,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L20PT,
+               .total_size     = 256,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 512} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 64} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 32} },
+                               .eraseblocks = {
+                                       {64 * 1024, 3},
+                                       {32 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 1},
+                                       {4 * 1024, 2},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .eraseblocks = { {256 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -446,32 +433,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF321",
+               .vendor         = "AMIC",
+               .name           = "A25L20PU",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF321,
-               .total_size     = 4096,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L20PU,
+               .total_size     = 256,
                .page_size      = 256,
-               .tested         = TEST_OK_PRW,
-               .probe          = probe_spi_rdid,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 1024} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 128} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 64} },
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 3},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {4 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .eraseblocks = { {256 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -480,33 +464,35 @@
                .read           = spi_chip_read,
        },
 
+       /* The A25L40P{T,U} chips are distinguished by their
+        * erase block layouts, but without any distinction in RDID.
+        * This inexplicable quirk was verified by Rudolf Marek
+        * and discussed on the flashrom mailing list on 2010-07-12.
+        */
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF321A",
+               .vendor         = "AMIC",
+               .name           = "A25L40PT",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF321A,
-               .total_size     = 4096,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L40PT,
+               .total_size     = 512,
                .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .tested         = TEST_OK_PRW,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 1024} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 128} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 64} },
+                               .eraseblocks = {
+                                       {64 * 1024, 7},
+                                       {32 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 1},
+                                       {4 * 1024, 2},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {4 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .eraseblocks = { {512 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -516,32 +502,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25DF641",
+               .vendor         = "AMIC",
+               .name           = "A25L40PU",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25DF641,
-               .total_size     = 8192,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L40PU,
+               .total_size     = 512,
                .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .tested         = TEST_OK_PRW,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 2048} },
-                               .block_erase = spi_block_erase_20,
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 7},
+                               },
+                               .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {32 * 1024, 256} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 128} },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {8 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {8 * 1024 * 1024, 1} },
+                               .eraseblocks = { {512 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -551,32 +534,29 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25F512B",
+               .vendor         = "AMIC",
+               .name           = "A25L80P",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25F512B,
-               .total_size     = 64,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L80P,
+               .total_size     = 1024,
                .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .tested         = TEST_OK_PREW,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 16} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 2} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 2} },
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 15},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {64 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 1} },
+                               .eraseblocks = { {1024 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -586,32 +566,32 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25FS010",
+               .vendor         = "AMIC",
+               .name           = "A25L16PT",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25FS010,
-               .total_size     = 128,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L16PT,
+               .total_size     = 2048,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 32} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 4} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 4} },
+                               .eraseblocks = {
+                                       {64 * 1024, 31},
+                                       {32 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 1},
+                                       {4 * 1024, 2},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {128 * 1024, 1} },
+                               .eraseblocks = { {2048 * 1024, 1} },
                                .block_erase = spi_block_erase_60,
                        }, {
-                               .eraseblocks = { {128 * 1024, 1} },
+                               .eraseblocks = { {2048 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -621,32 +601,32 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT25FS040",
+               .vendor         = "AMIC",
+               .name           = "A25L16PU",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_25FS040,
-               .total_size     = 512,
+               .manufacture_id = AMIC_ID,
+               .model_id       = AMIC_A25L16PU,
+               .total_size     = 2048,
                .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
+               .tested         = TEST_OK_PRW,
+               .probe          = probe_spi_rdid4,
                .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 128} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 8} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 8} },
+                               .eraseblocks = {
+                                       {4 * 1024, 2},
+                                       {8 * 1024, 1},
+                                       {16 * 1024, 1},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 31},
+                               },
                                .block_erase = spi_block_erase_d8,
                        }, {
-                               .eraseblocks = { {512 * 1024, 1} },
+                               .eraseblocks = { {2048 * 1024, 1} },
                                .block_erase = spi_block_erase_60,
                        }, {
-                               .eraseblocks = { {512 * 1024, 1} },
+                               .eraseblocks = { {2048 * 1024, 1} },
                                .block_erase = spi_block_erase_c7,
                        }
                },
@@ -656,155 +636,192 @@
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT26DF041",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26DF041,
-               .total_size     = 512,
-               .page_size      = 256,
+               .vendor         = "AMIC",
+               .name           = "A29002B",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = AMIC_ID_NOPREFIX,
+               .model_id       = AMIC_A29002B,
+               .total_size     = 256,
+               .page_size      = 64 * 1024,
+               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
+               .probe          = probe_jedec,
+               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (mx29f002.c) */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 128} },
-                               .block_erase = spi_block_erase_20,
-                       }
+                               .eraseblocks = { 
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 2},
+                                       {32 * 1024, 1},
+                                       {64 * 1024, 3},
+                               },
+                               .block_erase = erase_sector_jedec,
+                       }, {
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
+                       },
                },
-               .write          = NULL /* Incompatible Page write */,
-               .read           = spi_chip_read,
+               .write          = write_jedec_1,
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT26DF081A",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26DF081A,
-               .total_size     = 1024,
-               .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
+               .vendor         = "AMIC",
+               .name           = "A29002T",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = AMIC_ID_NOPREFIX,
+               .model_id       = AMIC_A29002T,
+               .total_size     = 256,
+               .page_size      = 64 * 1024,
+               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+               .tested         = TEST_OK_PRW,
+               .probe          = probe_jedec,
+               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (mx29f002.c) */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 256} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 32} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 16} },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
+                               .eraseblocks = { 
+                                       {64 * 1024, 3},
+                                       {32 * 1024, 1},
+                                       {8 * 1024, 2},
+                                       {16 * 1024, 1},
+                               },
+                               .block_erase = erase_sector_jedec,
                        }, {
-                               .eraseblocks = { {1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
+                       },
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec_1,
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT26DF161",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26DF161,
-               .total_size     = 2048,
-               .page_size      = 256,
+               .vendor         = "AMIC",
+               .name           = "A29040B",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = AMIC_ID_NOPREFIX,
+               .model_id       = AMIC_A29040B,
+               .total_size     = 512,
+               .page_size      = 64 * 1024,
+               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
+               .probe          = probe_jedec,
+               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (am29f040b.c) */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 512} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 64} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 32} },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = erase_sector_jedec,
                        }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
+                       },
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec_1,
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "Atmel",
-               .name           = "AT26DF161A",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26DF161A,
-               .total_size     = 2048,
-               .page_size      = 256,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
+               .vendor         = "AMIC",
+               .name           = "A49LF040A",
+               .bustype        = CHIP_BUSTYPE_LPC,
+               .manufacture_id = AMIC_ID_NOPREFIX,
+               .model_id       = AMIC_A49LF040A,
+               .total_size     = 512,
+               .page_size      = 64 * 1024,
+               .feature_bits   = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
+               .tested         = TEST_OK_PREW,
+               .probe          = probe_jedec,
+               .probe_timing   = TIMING_ZERO,  /* routine is wrapper to 
probe_jedec (pm49fl00x.c) */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {4 * 1024, 512} },
-                               .block_erase = spi_block_erase_20,
-                       }, {
-                               .eraseblocks = { {32 * 1024, 64} },
-                               .block_erase = spi_block_erase_52,
-                       }, {
-                               .eraseblocks = { {64 * 1024, 32} },
-                               .block_erase = spi_block_erase_d8,
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = erase_block_jedec,
                        }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
+                       }
+               },
+               .unlock         = unlock_49fl00x,
+               .write          = write_jedec_1,
+               .read           = read_memmapped,
+       },
+
+       {
+               .vendor         = "ASD",
+               .name           = "AE49F2008",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = ASD_ID,
+               .model_id       = ASD_AE49F2008,
+               .total_size     = 256,
+               .page_size      = 128,
+               .feature_bits   = FEATURE_EITHER_RESET,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_jedec,
+               .probe_timing   = TIMING_FIXME, 
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = {
+                                       {128 * 1024, 1},
+                                       {96 * 1024, 1},
+                                       {8 * 1024, 2},
+                                       {16 * 1024, 1},
+                               },
+                               .block_erase = erase_sector_jedec,
                        }, {
-                               .eraseblocks = { {2 * 1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
                        }
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec,
+               .read           = read_memmapped,
        },
 
-       /*The AT26DF321 has the same ID as the AT25DF321. */
-       /*{
+       {
                .vendor         = "Atmel",
-               .name           = "AT26DF321",
+               .name           = "AT25DF021",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26DF321,
-               .total_size     = 4096,
+               .model_id       = AT_25DF021,
+               .total_size     = 256,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 64} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 8} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 4} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
                .unlock         = spi_disable_blockprotect,
                .write          = spi_chip_write_256,
                .read           = spi_chip_read,
-         },*/
+       },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT26F004",
+               .name           = "AT25DF041A",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_26F004,
+               .model_id       = AT_25DF041A,
                .total_size     = 512,
                .page_size      = 256,
                .tested         = TEST_UNTESTED,
@@ -829,818 +846,801 @@
                                .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = NULL /* Incompatible Page write */,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
                .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT29C512",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT25DF081",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_29C512,
-               .total_size     = 64,
-               .page_size      = 128,
-               .feature_bits   = FEATURE_LONG_RESET,
+               .model_id       = AT_25DF081,
+               .total_size     = 1024,
+               .page_size      = 256,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_jedec,
-               .probe_timing   = 10000, /* 10mS, Enter=Exec */
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {64 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 256} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 32} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 16} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec,
-               .read           = read_memmapped,
-
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT29C010A",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT25DF161",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_29C010A,
-               .total_size     = 128,
-               .page_size      = 128,
-               .feature_bits   = FEATURE_LONG_RESET,
-               .tested         = TEST_OK_PREW,
-               .probe          = probe_jedec,
-               .probe_timing   = 10000, /* 10mS, Enter=Exec */
+               .model_id       = AT_25DF161,
+               .total_size     = 2048,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {128 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 512} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 64} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 32} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec,  /* FIXME */
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT29C020",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT25DF321",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_29C020,
-               .total_size     = 256,
+               .model_id       = AT_25DF321,
+               .total_size     = 4096,
                .page_size      = 256,
-               .feature_bits   = FEATURE_LONG_RESET,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_jedec,
-               .probe_timing   = 10000,                        /* 10ms */ 
+               .tested         = TEST_OK_PRW,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {256 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 1024} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 128} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 64} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec,
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT29C040A",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT25DF321A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_29C040A,
-               .total_size     = 512,
+               .model_id       = AT_25DF321A,
+               .total_size     = 4096,
                .page_size      = 256,
-               .feature_bits   = FEATURE_LONG_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_jedec,
-               .probe_timing   = 10000,                        /* 10 ms */
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {512 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 1024} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 128} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 64} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {4 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec,
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45CS1282",
+               .name           = "AT25DF641",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45CS1282,
-               .total_size     = 16896 /* No power of two sizes */,
-               .page_size      = 1056 /* No power of two sizes */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_25DF641,
+               .total_size     = 8192,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL /* Incompatible Page write */,
-               .read           = NULL /* Incompatible read */,
-       },
-
-       {
-               .vendor         = "Atmel",
-               .name           = "AT45DB011D",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB011D,
-               .total_size     = 128 /* Size can only be determined from 
status register */,
-               .page_size      = 256 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
-       },
-
-       {
-               .vendor         = "Atmel",
-               .name           = "AT45DB021D",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB021D,
-               .total_size     = 256 /* Size can only be determined from 
status register */,
-               .page_size      = 256 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
-               .probe          = probe_spi_rdid,
-               .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 2048} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 256} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 128} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {8 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {8 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB041D",
+               .name           = "AT25F512B",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB041D,
-               .total_size     = 512 /* Size can only be determined from 
status register */,
-               .page_size      = 256 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_25F512B,
+               .total_size     = 64,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 16} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 2} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 2} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB081D",
+               .name           = "AT25FS010",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB081D,
-               .total_size     = 1024 /* Size can only be determined from 
status register */,
-               .page_size      = 256 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_25FS010,
+               .total_size     = 128,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 32} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 4} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 4} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {128 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {128 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB161D",
+               .name           = "AT25FS040",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB161D,
-               .total_size     = 2048 /* Size can only be determined from 
status register */,
-               .page_size      = 512 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_25FS040,
+               .total_size     = 512,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 128} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB321C",
+               .name           = "AT26DF041",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB321C,
-               .total_size     = 4224 /* No power of two sizes */,
-               .page_size      = 528 /* No power of two sizes */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_26DF041,
+               .total_size     = 512,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL /* Incompatible read */,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 128} },
+                               .block_erase = spi_block_erase_20,
+                       }
+               },
+               .write          = NULL /* Incompatible Page write */,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB321D",
+               .name           = "AT26DF081A",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB321D,
-               .total_size     = 4096 /* Size can only be determined from 
status register */,
-               .page_size      = 512 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_26DF081A,
+               .total_size     = 1024,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
+               .block_erasers  =
+               {
+                       {
+                               .eraseblocks = { {4 * 1024, 256} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 32} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 16} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
+                       }
+               },
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT45DB642D",
+               .name           = "AT26DF161",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_45DB642D,
-               .total_size     = 8192 /* Size can only be determined from 
status register */,
-               .page_size      = 1024 /* Size can only be determined from 
status register */,
-               .tested         = TEST_BAD_READ,
+               .model_id       = AT_26DF161,
+               .total_size     = 2048,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .write          = NULL,
-               .read           = NULL,
-       },
-
-       {
-               .vendor         = "Atmel",
-               .name           = "AT49BV512",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
-               .manufacture_id = ATMEL_ID,
-               .model_id       = AT_49BV512,
-               .total_size     = 64,
-               .page_size      = 64,
-               .feature_bits   = FEATURE_EITHER_RESET,
-               .tested         = TEST_UNTESTED,
-               .probe          = probe_jedec,
-               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {64 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 512} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 64} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 32} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec_1,
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT49F020",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT26DF161A",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_49F020,
-               .total_size     = 256,
+               .model_id       = AT_26DF161A,
+               .total_size     = 2048,
                .page_size      = 256,
-               .feature_bits   = FEATURE_EITHER_RESET,
-               .tested         = TEST_OK_PREW,
-               .probe          = probe_jedec,
-               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {256 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {4 * 1024, 512} },
+                               .block_erase = spi_block_erase_20,
+                       }, {
+                               .eraseblocks = { {32 * 1024, 64} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 32} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {2 * 1024 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec_1,
-               .read           = read_memmapped,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
        },
 
+       /*The AT26DF321 has the same ID as the AT25DF321. */
+       /*{
+               .vendor         = "Atmel",
+               .name           = "AT26DF321",
+               .bustype        = CHIP_BUSTYPE_SPI,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_26DF321,
+               .total_size     = 4096,
+               .page_size      = 256,
+               .tested         = TEST_UNTESTED,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .unlock         = spi_disable_blockprotect,
+               .write          = spi_chip_write_256,
+               .read           = spi_chip_read,
+         },*/
+
        {
                .vendor         = "Atmel",
-               .name           = "AT49F002(N)",
-               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .name           = "AT26F004",
+               .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_49F002N,
-               .total_size     = 256,
+               .model_id       = AT_26F004,
+               .total_size     = 512,
                .page_size      = 256,
-               .feature_bits   = FEATURE_EITHER_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_jedec,
-               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
                .block_erasers  =
                {
                        {
-                               .eraseblocks = {
-                                       {16 * 1024, 1},
-                                       {8 * 1024, 2},
-                                       {96 * 1024, 1},
-                                       {128 * 1024, 1},
-                               },
-                               .block_erase = erase_sector_jedec,
+                               .eraseblocks = { {4 * 1024, 128} },
+                               .block_erase = spi_block_erase_20,
                        }, {
-                               .eraseblocks = { {256 * 1024, 1} },
-                               .block_erase = erase_chip_block_jedec,
+                               .eraseblocks = { {32 * 1024, 16} },
+                               .block_erase = spi_block_erase_52,
+                       }, {
+                               .eraseblocks = { {64 * 1024, 8} },
+                               .block_erase = spi_block_erase_d8,
+                       }, {
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = spi_block_erase_60,
+                       }, {
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = spi_block_erase_c7,
                        }
                },
-               .write          = write_jedec_1,
-               .read           = read_memmapped,
+               .write          = NULL /* Incompatible Page write */,
+               .read           = spi_chip_read,
        },
 
        {
                .vendor         = "Atmel",
-               .name           = "AT49F002(N)T",
+               .name           = "AT29C512",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
                .manufacture_id = ATMEL_ID,
-               .model_id       = AT_49F002NT,
-               .total_size     = 256,
-               .page_size      = 256,
-               .feature_bits   = FEATURE_EITHER_RESET,
-               .tested         = TEST_OK_PRW,
+               .model_id       = AT_29C512,
+               .total_size     = 64,
+               .page_size      = 128,
+               .feature_bits   = FEATURE_LONG_RESET,
+               .tested         = TEST_UNTESTED,
                .probe          = probe_jedec,
-               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
+               .probe_timing   = 10000, /* 10mS, Enter=Exec */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = {
-                                       {128 * 1024, 1},
-                                       {96 * 1024, 1},
-                                       {8 * 1024, 2},
-                                       {16 * 1024, 1},
-                               },
-                               .block_erase = erase_sector_jedec,
-                       }, {
-                               .eraseblocks = { {256 * 1024, 1} },
+                               .eraseblocks = { {64 * 1024, 1} },
                                .block_erase = erase_chip_block_jedec,
                        }
                },
-               .write          = write_jedec_1,
+               .write          = write_jedec,
                .read           = read_memmapped,
+
        },
 
        {
-               .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,
+               .vendor         = "Atmel",
+               .name           = "AT29C010A",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_29C010A,
+               .total_size     = 128,
+               .page_size      = 128,
+               .feature_bits   = FEATURE_LONG_RESET,
+               .tested         = TEST_OK_PREW,
+               .probe          = probe_jedec,
+               .probe_timing   = 10000, /* 10mS, Enter=Exec */
                .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,
+                               .eraseblocks = { {128 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
                        }
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec,  /* FIXME */
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L05PU",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L05PU,
-               .total_size     = 64,
+               .vendor         = "Atmel",
+               .name           = "AT29C020",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_29C020,
+               .total_size     = 256,
                .page_size      = 256,
+               .feature_bits   = FEATURE_LONG_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid4,
-               .probe_timing   = TIMING_ZERO,
+               .probe          = probe_jedec,
+               .probe_timing   = 10000,                        /* 10ms */ 
                .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,
+                               .eraseblocks = { {256 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
                        }
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec,
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L10PT",
-               .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L10PT,
-               .total_size     = 128,
+               .vendor         = "Atmel",
+               .name           = "AT29C040A",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_29C040A,
+               .total_size     = 512,
                .page_size      = 256,
+               .feature_bits   = FEATURE_LONG_RESET,
                .tested         = TEST_UNTESTED,
-               .probe          = probe_spi_rdid4,
-               .probe_timing   = TIMING_ZERO,
+               .probe          = probe_jedec,
+               .probe_timing   = 10000,                        /* 10 ms */
                .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,
+                               .eraseblocks = { {512 * 1024, 1} },
+                               .block_erase = erase_chip_block_jedec,
                        }
                },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = write_jedec,
+               .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L10PU",
+               .vendor         = "Atmel",
+               .name           = "AT45CS1282",
                .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,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45CS1282,
+               .total_size     = 16896 /* No power of two sizes */,
+               .page_size      = 1056 /* No power of two sizes */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .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,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL /* Incompatible Page write */,
+               .read           = NULL /* Incompatible read */,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L20PT",
+               .vendor         = "Atmel",
+               .name           = "AT45DB011D",
                .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,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB011D,
+               .total_size     = 128 /* Size can only be determined from 
status register */,
+               .page_size      = 256 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .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,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L20PU",
+               .vendor         = "Atmel",
+               .name           = "AT45DB021D",
                .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,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB021D,
+               .total_size     = 256 /* Size can only be determined from 
status register */,
+               .page_size      = 256 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .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,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
-       /* The A25L40P{T,U} chips are distinguished by their
-        * erase block layouts, but without any distinction in RDID.
-        * This inexplicable quirk was verified by Rudolf Marek
-        * and discussed on the flashrom mailing list on 2010-07-12.
-        */
        {
-               .vendor         = "AMIC",
-               .name           = "A25L40PT",
+               .vendor         = "Atmel",
+               .name           = "AT45DB041D",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L40PT,
-               .total_size     = 512,
-               .page_size      = 256,
-               .tested         = TEST_OK_PRW,
-               .probe          = probe_spi_rdid4,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB041D,
+               .total_size     = 512 /* Size can only be determined from 
status register */,
+               .page_size      = 256 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .block_erasers  =
-               {
-                       {
-                               .eraseblocks = {
-                                       {64 * 1024, 7},
-                                       {32 * 1024, 1},
-                                       {16 * 1024, 1},
-                                       {8 * 1024, 1},
-                                       {4 * 1024, 2},
-                               },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {512 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L40PU",
+               .vendor         = "Atmel",
+               .name           = "AT45DB081D",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L40PU,
-               .total_size     = 512,
-               .page_size      = 256,
-               .tested         = TEST_OK_PRW,
-               .probe          = probe_spi_rdid4,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB081D,
+               .total_size     = 1024 /* Size can only be determined from 
status register */,
+               .page_size      = 256 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
+               .probe_timing   = TIMING_ZERO,
+               .write          = NULL,
+               .read           = NULL,
+       },
+
+       {
+               .vendor         = "Atmel",
+               .name           = "AT45DB161D",
+               .bustype        = CHIP_BUSTYPE_SPI,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB161D,
+               .total_size     = 2048 /* Size can only be determined from 
status register */,
+               .page_size      = 512 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .block_erasers  =
-               {
-                       {
-                               .eraseblocks = {
-                                       {4 * 1024, 2},
-                                       {8 * 1024, 1},
-                                       {16 * 1024, 1},
-                                       {32 * 1024, 1},
-                                       {64 * 1024, 7},
-                               },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {512 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L80P",
+               .vendor         = "Atmel",
+               .name           = "AT45DB321C",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L80P,
-               .total_size     = 1024,
-               .page_size      = 256,
-               .tested         = TEST_OK_PREW,
-               .probe          = probe_spi_rdid4,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB321C,
+               .total_size     = 4224 /* No power of two sizes */,
+               .page_size      = 528 /* No power of two sizes */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .probe_timing   = TIMING_ZERO,
-               .block_erasers  =
-               {
-                       {
-                               .eraseblocks = {
-                                       {4 * 1024, 2},
-                                       {8 * 1024, 1},
-                                       {16 * 1024, 1},
-                                       {32 * 1024, 1},
-                                       {64 * 1024, 15},
-                               },
-                               .block_erase = spi_block_erase_d8,
-                       }, {
-                               .eraseblocks = { {1024 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL /* Incompatible read */,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L16PT",
+               .vendor         = "Atmel",
+               .name           = "AT45DB321D",
                .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,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB321D,
+               .total_size     = 4096 /* Size can only be determined from 
status register */,
+               .page_size      = 512 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .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_60,
-                       }, {
-                               .eraseblocks = { {2048 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A25L16PU",
+               .vendor         = "Atmel",
+               .name           = "AT45DB642D",
                .bustype        = CHIP_BUSTYPE_SPI,
-               .manufacture_id = AMIC_ID,
-               .model_id       = AMIC_A25L16PU,
-               .total_size     = 2048,
-               .page_size      = 256,
-               .tested         = TEST_OK_PRW,
-               .probe          = probe_spi_rdid4,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_45DB642D,
+               .total_size     = 8192 /* Size can only be determined from 
status register */,
+               .page_size      = 1024 /* Size can only be determined from 
status register */,
+               .tested         = TEST_BAD_READ,
+               .probe          = probe_spi_rdid,
                .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 = { {2048 * 1024, 1} },
-                               .block_erase = spi_block_erase_60,
-                       }, {
-                               .eraseblocks = { {2048 * 1024, 1} },
-                               .block_erase = spi_block_erase_c7,
-                       }
-               },
-               .unlock         = spi_disable_blockprotect,
-               .write          = spi_chip_write_256,
-               .read           = spi_chip_read,
+               .write          = NULL,
+               .read           = NULL,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A29002B",
+               .vendor         = "Atmel",
+               .name           = "AT49BV512",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
-               .manufacture_id = AMIC_ID_NOPREFIX,
-               .model_id       = AMIC_A29002B,
-               .total_size     = 256,
-               .page_size      = 64 * 1024,
-               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_49BV512,
+               .total_size     = 64,
+               .page_size      = 64,
+               .feature_bits   = FEATURE_EITHER_RESET,
                .tested         = TEST_UNTESTED,
                .probe          = probe_jedec,
-               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (mx29f002.c) */
+               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { 
-                                       {16 * 1024, 1},
-                                       {8 * 1024, 2},
-                                       {32 * 1024, 1},
-                                       {64 * 1024, 3},
-                               },
-                               .block_erase = erase_sector_jedec,
-                       }, {
-                               .eraseblocks = { {256 * 1024, 1} },
+                               .eraseblocks = { {64 * 1024, 1} },
                                .block_erase = erase_chip_block_jedec,
-                       },
+                       }
                },
                .write          = write_jedec_1,
                .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A29002T",
+               .vendor         = "Atmel",
+               .name           = "AT49F020",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
-               .manufacture_id = AMIC_ID_NOPREFIX,
-               .model_id       = AMIC_A29002T,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_49F020,
                .total_size     = 256,
-               .page_size      = 64 * 1024,
-               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
-               .tested         = TEST_OK_PRW,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_EITHER_RESET,
+               .tested         = TEST_OK_PREW,
                .probe          = probe_jedec,
-               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (mx29f002.c) */
+               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { 
-                                       {64 * 1024, 3},
-                                       {32 * 1024, 1},
-                                       {8 * 1024, 2},
-                                       {16 * 1024, 1},
-                               },
-                               .block_erase = erase_sector_jedec,
-                       }, {
                                .eraseblocks = { {256 * 1024, 1} },
                                .block_erase = erase_chip_block_jedec,
-                       },
+                       }
                },
                .write          = write_jedec_1,
                .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A29040B",
+               .vendor         = "Atmel",
+               .name           = "AT49F002(N)",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
-               .manufacture_id = AMIC_ID_NOPREFIX,
-               .model_id       = AMIC_A29040B,
-               .total_size     = 512,
-               .page_size      = 64 * 1024,
-               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_49F002N,
+               .total_size     = 256,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_EITHER_RESET,
                .tested         = TEST_UNTESTED,
                .probe          = probe_jedec,
-               .probe_timing   = TIMING_IGNORED, /* routine don't use 
probe_timing (am29f040b.c) */
+               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {64 * 1024, 8} },
+                               .eraseblocks = {
+                                       {16 * 1024, 1},
+                                       {8 * 1024, 2},
+                                       {96 * 1024, 1},
+                                       {128 * 1024, 1},
+                               },
                                .block_erase = erase_sector_jedec,
                        }, {
-                               .eraseblocks = { {512 * 1024, 1} },
+                               .eraseblocks = { {256 * 1024, 1} },
                                .block_erase = erase_chip_block_jedec,
-                       },
+                       }
                },
                .write          = write_jedec_1,
                .read           = read_memmapped,
        },
 
        {
-               .vendor         = "AMIC",
-               .name           = "A49LF040A",
-               .bustype        = CHIP_BUSTYPE_LPC,
-               .manufacture_id = AMIC_ID_NOPREFIX,
-               .model_id       = AMIC_A49LF040A,
-               .total_size     = 512,
-               .page_size      = 64 * 1024,
-               .feature_bits   = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
-               .tested         = TEST_OK_PREW,
+               .vendor         = "Atmel",
+               .name           = "AT49F002(N)T",
+               .bustype        = CHIP_BUSTYPE_PARALLEL,
+               .manufacture_id = ATMEL_ID,
+               .model_id       = AT_49F002NT,
+               .total_size     = 256,
+               .page_size      = 256,
+               .feature_bits   = FEATURE_EITHER_RESET,
+               .tested         = TEST_OK_PRW,
                .probe          = probe_jedec,
-               .probe_timing   = TIMING_ZERO,  /* routine is wrapper to 
probe_jedec (pm49fl00x.c) */
+               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing info 
specified */
                .block_erasers  =
                {
                        {
-                               .eraseblocks = { {64 * 1024, 8} },
-                               .block_erase = erase_block_jedec,
+                               .eraseblocks = {
+                                       {128 * 1024, 1},
+                                       {96 * 1024, 1},
+                                       {8 * 1024, 2},
+                                       {16 * 1024, 1},
+                               },
+                               .block_erase = erase_sector_jedec,
                        }, {
-                               .eraseblocks = { {512 * 1024, 1} },
+                               .eraseblocks = { {256 * 1024, 1} },
                                .block_erase = erase_chip_block_jedec,
                        }
                },
-               .unlock         = unlock_49fl00x,
                .write          = write_jedec_1,
                .read           = read_memmapped,
        },
@@ -2512,7 +2512,7 @@
        },
 
        {
-               .vendor         = "EON",
+               .vendor         = "Eon",
                .name           = "EN29F002(A)(N)B",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
                .manufacture_id = EON_ID,
@@ -2543,7 +2543,7 @@
        },
 
        {
-               .vendor         = "EON",
+               .vendor         = "Eon",
                .name           = "EN29F002(A)(N)T",
                .bustype        = CHIP_BUSTYPE_PARALLEL,
                .manufacture_id = EON_ID,
@@ -6998,8 +6998,8 @@
        },
 
        {
-               .vendor         = "EON",
-               .name           = "unknown EON SPI chip",
+               .vendor         = "Eon",
+               .name           = "unknown Eon SPI chip",
                .bustype        = CHIP_BUSTYPE_SPI,
                .manufacture_id = EON_ID_NOPREFIX,
                .model_id       = GENERIC_DEVICE_ID,

_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to