[flashrom] [commit] r1114 - trunk

repository service svn at flashrom.org
Thu Jul 29 00:20:20 CEST 2010


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 <c-d.hailfinger.devel.2006 at gmx.net>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>

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,




More information about the flashrom mailing list