[coreboot] [PATCH] flashrom: Group probe function together with ID

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sat Apr 11 14:09:35 CEST 2009


Flashrom does not support any notion of multiple probe functions for the
same chip nor does it support multiple IDs for the same chip. For
external flasher support with a clean design, this has to be changed.

Group each probe function together with the associated IDs in the flash
chip description.

The trick in this patch is to use an anonymous struct which allows the
chip-specific code to stay unchanged for now, while still keeping full
functionality.
Besides easing review, it also keeps the tree working and bisectable.

This is part 1 of a longer series to add external flasher support. Each
part depends on the previous part, so I'll post the next part after this
has been committed.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: flashrom-probe_grouping/flash.h
===================================================================
--- flashrom-probe_grouping/flash.h	(Revision 4091)
+++ flashrom-probe_grouping/flash.h	(Arbeitskopie)
@@ -98,8 +98,11 @@
 	 * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's
 	 * Identification code.
 	 */
+	struct {
 	uint32_t manufacture_id;
 	uint32_t model_id;
+	int (*probe) (struct flashchip *flash);
+	};
 
 	int total_size;
 	int page_size;
@@ -110,7 +113,6 @@
 	 */
 	uint32_t tested;
 
-	int (*probe) (struct flashchip *flash);
 	int (*erase) (struct flashchip *flash);
 	int (*write) (struct flashchip *flash, uint8_t *buf);
 	int (*read) (struct flashchip *flash, uint8_t *buf);
Index: flashrom-probe_grouping/flashchips.c
===================================================================
--- flashrom-probe_grouping/flashchips.c	(Revision 4091)
+++ flashrom-probe_grouping/flashchips.c	(Arbeitskopie)
@@ -31,21 +31,33 @@
  */
 struct flashchip flashchips[] = {
 
-	/* Vendor, Chip, Vendor ID, Chip ID,
-	 * Total size (kB), Page size (B),
-	 * Test status,
-	 * Probe function, Erase function, Write function, Read function
+	/*
+	 * .vendor		= Vendor name
+	 * .name		= Chip name
+	 * {			Probe/ID tuple
+	 * 	.manufacture_id	= Manufacturer chip ID
+	 * 	.model_id	= Model chip ID
+	 * 	.probe		= Probe function
+	 * },
+	 * .total_size		= Total size in (binary) kbytes
+	 * .page_size		= Page or eraseblock(?) size in bytes
+	 * .tested		= Test status
+	 * .erase		= Chip erase function
+	 * .write		= Chip write function
+	 * .read		= Chip read function
 	 */
 
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F002(N)BB",
+		{
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F002BB,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_en29f002a,
 	},
@@ -53,12 +65,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F002(N)BT",
+		{
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F002BT,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_en29f002a,
 	},
@@ -66,12 +80,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F016D",
+		{
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F016D,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 2048,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -79,12 +95,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F040B",
+		{
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29F040B,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -92,12 +110,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29F080B",
+		{
 		.manufacture_id	= 0x01,
 		.model_id	= 0xd5,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -105,12 +125,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29LV040B",
+		{
 		.manufacture_id	= AMD_ID,
 		.model_id	= AM_29LV040B,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -118,12 +140,14 @@
 	{
 		.vendor		= "AMD",
 		.name		= "Am29LV081B",
+		{
 		.manufacture_id	= 0x01,
 		.model_id	= 0x38,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -131,12 +155,14 @@
 	{
 		.vendor		= "ASD",
 		.name		= "AE49F2008",
+		{
 		.manufacture_id	= ASD_ID,
 		.model_id	= ASD_AE49F2008,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -144,12 +170,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF021",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF021,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -158,12 +186,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF041A",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF041A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -172,12 +202,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF081",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF081,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -186,12 +218,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF161",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF161,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -200,12 +234,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF321",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF321,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -214,12 +250,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF321A",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF321A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -228,12 +266,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25DF641",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25DF641,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 8192,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -242,12 +282,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25F512B",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25F512B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 64,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -256,12 +298,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25FS010",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25FS010,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -270,12 +314,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT25FS040",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_25FS040,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -284,12 +330,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF041",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF041,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL /* Incompatible Page write */,
 		.read		= spi_chip_read,
@@ -298,12 +346,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF081A",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF081A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -312,12 +362,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF161",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF161,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -326,12 +378,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26DF161A",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF161A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -341,12 +395,14 @@
 	/*{
 		.vendor		= "Atmel",
 		.name		= "AT26DF321",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26DF321,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -355,12 +411,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT26F004",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_26F004,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= NULL /* Incompatible Page write */,
 		.read		= spi_chip_read,
@@ -369,12 +427,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C020",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_29C020,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -382,12 +442,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT29C040A",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_29C040A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -395,12 +457,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45CS1282",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45CS1282,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 16896 /* No power of two sizes */,
 		.page_size	= 1056 /* No power of two sizes */,
 		.tested		= TEST_BAD_READ,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL /* Incompatible Page write */,
 		.read		= NULL /* Incompatible read */,
@@ -409,12 +473,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB011D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB011D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -423,12 +489,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB021D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB021D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -437,12 +505,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB041D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB041D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -451,12 +521,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB081D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB081D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -465,12 +537,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB161D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB161D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -479,12 +553,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB321C",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB321C,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4224 /* No power of two sizes */,
 		.page_size	= 528 /* No power of two sizes */,
 		.tested		= TEST_BAD_READ,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL /* Incompatible read */,
@@ -493,12 +569,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB321D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB321D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -507,12 +585,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT45DB642D",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_45DB642D,
+		.probe		= probe_spi_rdid,
+		},
 		.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,
 		.erase		= NULL,
 		.write		= NULL,
 		.read		= NULL,
@@ -521,12 +601,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT49F002(N)",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_49F002N,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -534,12 +616,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "AT49F002(N)T",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= AT_49F002NT,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -547,12 +631,14 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A25L40P",
+		{
 		.manufacture_id	= AMIC_ID,
 		.model_id	= AMIC_A25L40P,
+		.probe		= probe_spi_rdid4,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid4,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -561,12 +647,14 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29002B",
+		{
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29002B,
+		.probe		= probe_29f002,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f002,
 		.erase		= erase_29f002,
 		.write		= write_29f002,
 	},
@@ -574,12 +662,14 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29002T",
+		{
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29002T,
+		.probe		= probe_29f002,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_29f002,
 		.erase		= erase_29f002,
 		.write		= write_29f002,
 	},
@@ -587,12 +677,14 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A29040B",
+		{
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A29040B,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PR,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -600,12 +692,14 @@
 	{
 		.vendor		= "AMIC",
 		.name		= "A49LF040A",
+		{
 		.manufacture_id	= AMIC_ID_NOPREFIX,
 		.model_id	= AMIC_A49LF040A,
+		.probe		= probe_49fl00x,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_49fl00x,
 		.erase		= erase_49fl00x,
 		.write		= write_49fl00x,
 	},
@@ -613,12 +707,14 @@
 	{
 		.vendor		= "EMST",
 		.name		= "F49B002UA",
+		{
 		.manufacture_id	= EMST_ID,
 		.model_id	= EMST_F49B002UA,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 4096,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -626,12 +722,14 @@
 	{
 		.vendor		= "EON",
 		.name		= "EN29F002(A)(N)B",
+		{
 		.manufacture_id	= EON_ID,
 		.model_id	= EN_29F002B,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_en29f002a,
 	},
@@ -639,12 +737,14 @@
 	{
 		.vendor		= "EON",
 		.name		= "EN29F002(A)(N)T",
+		{
 		.manufacture_id	= EON_ID,
 		.model_id	= EN_29F002T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_en29f002a,
 	},
@@ -652,12 +752,14 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F004BC",
+		{
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F004BC,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -665,12 +767,14 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F004TC",
+		{
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F004TC,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -678,12 +782,14 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F400BC",
+		{
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F400BC,
+		.probe		= probe_m29f400bt,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_m29f400bt,
 		.erase		= erase_m29f400bt,
 		.write		= write_coreboot_m29f400bt,
 	},
@@ -691,12 +797,14 @@
 	{
 		.vendor		= "Fujitsu",
 		.name		= "MBM29F400TC",
+		{
 		.manufacture_id	= FUJITSU_ID,
 		.model_id	= MBM29F400TC,
+		.probe		= probe_m29f400bt,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_m29f400bt,
 		.erase		= erase_m29f400bt,
 		.write		= write_coreboot_m29f400bt,
 	},
@@ -704,12 +812,14 @@
 	{
 		.vendor		= "Intel",
 		.name		= "82802AB",
+		{
 		.manufacture_id	= INTEL_ID,
 		.model_id	= 173,
+		.probe		= probe_82802ab,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_82802ab,
 		.erase		= erase_82802ab,
 		.write		= write_82802ab,
 	},
@@ -717,12 +827,14 @@
 	{
 		.vendor		= "Intel",
 		.name		= "82802AC",
+		{
 		.manufacture_id	= INTEL_ID,
 		.model_id	= 172,
+		.probe		= probe_82802ab,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_82802ab,
 		.erase		= erase_82802ab,
 		.write		= write_82802ab,
 	},
@@ -730,12 +842,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L512",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L512,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 64,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -744,12 +858,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L1005",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L1005,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -758,12 +874,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L2005",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L2005,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -772,12 +890,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L4005",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L4005,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -786,12 +906,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L8005",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L8005,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -800,12 +922,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L1605",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L1605,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -814,12 +938,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L3205",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L3205,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -828,12 +954,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX25L6405",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_25L6405,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 8192,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -842,12 +970,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29F002B",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29F002B,
+		.probe		= probe_29f002,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f002,
 		.erase		= erase_29f002,
 		.write		= write_29f002,
 	},
@@ -855,12 +985,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29F002T",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29F002T,
+		.probe		= probe_29f002,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_29f002,
 		.erase		= erase_29f002,
 		.write		= write_29f002,
 	},
@@ -868,12 +1000,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "MX29LV040C",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= MX_29LV040C,
+		.probe		= probe_29f002,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PR,
-		.probe		= probe_29f002,
 		.erase		= erase_29f002,
 		.write		= write_29f002,
 	},
@@ -881,12 +1015,14 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE10",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8011,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_d8,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -895,12 +1031,14 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE20",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8012,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_d8,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -909,12 +1047,14 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE40",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8013,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_d8,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -923,12 +1063,14 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE80",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8014,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_d8,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -937,12 +1079,14 @@
 	{
 		.vendor		= "Numonyx",
 		.name		= "M25PE16",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= 0x8015,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_d8,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -951,12 +1095,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV010",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV010,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -965,12 +1111,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV016B",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV016B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -979,12 +1127,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV020",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV020,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -993,12 +1143,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV040",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV040,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1007,12 +1159,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV080B",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV080B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1021,12 +1175,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm25LV512",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= PMC_25LV512,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 64,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1035,12 +1191,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm49FL002",
+		{
 		.manufacture_id	= PMC_ID_NOPREFIX,
 		.model_id	= PMC_49FL002,
+		.probe		= probe_49fl00x,
+		},
 		.total_size	= 256,
 		.page_size	= 16 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_49fl00x,
 		.erase		= erase_49fl00x,
 		.write		= write_49fl00x,
 	},
@@ -1048,12 +1206,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "Pm49FL004",
+		{
 		.manufacture_id	= PMC_ID_NOPREFIX,
 		.model_id	= PMC_49FL004,
+		.probe		= probe_49fl00x,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_49fl00x,
 		.erase		= erase_49fl00x,
 		.write		= write_49fl00x,
 	},
@@ -1061,12 +1221,14 @@
 	{
 		.vendor		= "Sharp",
 		.name		= "LHF00L04",
+		{
 		.manufacture_id	= SHARP_ID,
 		.model_id	= SHARP_LHF00L04,
+		.probe		= probe_lhf00l04,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_lhf00l04,
 		.erase		= erase_lhf00l04,
 		.write		= write_lhf00l04,
 	},
@@ -1074,12 +1236,14 @@
 	{
 		.vendor		= "Spansion",
 		.name		= "S25FL016A",
+		{
 		.manufacture_id	= SPANSION_ID,
 		.model_id	= SPANSION_S25FL016A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1088,12 +1252,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF016B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF016B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1102,12 +1268,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF032B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF032B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1116,12 +1284,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF040B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1130,12 +1300,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040.REMS",
+		{
 		.manufacture_id	= 0xbf,
 		.model_id	= 0x44,
+		.probe		= probe_spi_rems,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PR,
-		.probe		= probe_spi_rems,
 		.erase		= spi_chip_erase_60,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1144,12 +1316,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF040B.REMS",
+		{
 		.manufacture_id	= 0xbf,
 		.model_id	= 0x8d,
+		.probe		= probe_spi_rems,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PR,
-		.probe		= probe_spi_rems,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_aai_write,
 		.read		= spi_chip_read,
@@ -1158,12 +1332,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST25VF080B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF080B,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_OK_PROBE,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_60_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1172,12 +1348,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST28SF040A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_28SF040,
+		.probe		= probe_28sf040,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_28sf040,
 		.erase		= erase_28sf040,
 		.write		= write_28sf040,
 	},
@@ -1185,12 +1363,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29EE010",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29EE010,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1198,12 +1378,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29LE010",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29LE010,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1211,12 +1393,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29EE020A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29EE020A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1224,12 +1408,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST29LE020",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_29LE020,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1237,12 +1423,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF010A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF010,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1250,12 +1438,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF020A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF020,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1263,12 +1453,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39SF040",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39SF040,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1276,12 +1468,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF512",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF512,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 64,
 		.page_size	= 4096,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1289,12 +1483,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF010",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF010,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 4096,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1302,12 +1498,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF020",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF020,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1315,12 +1513,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF040",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_39VF040,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PROBE,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1328,12 +1528,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST39VF080",
+		{
 		.manufacture_id	= 0xbf,
 		.model_id	= 0xd8,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 1024,
 		.page_size	= 4096,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -1341,12 +1543,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF002A/B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF002A,
+		.probe		= probe_sst_fwhub,
+		},
 		.total_size	= 256,
 		.page_size	= 16 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_sst_fwhub,
 		.erase		= erase_sst_fwhub,
 		.write		= write_sst_fwhub,
 	},
@@ -1354,12 +1558,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF003A/B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF003A,
+		.probe		= probe_sst_fwhub,
+		},
 		.total_size	= 384,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_sst_fwhub,
 		.erase		= erase_sst_fwhub,
 		.write		= write_sst_fwhub,
 	},
@@ -1367,12 +1573,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF004A/B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF004A,
+		.probe		= probe_sst_fwhub,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_sst_fwhub,
 		.erase		= erase_sst_fwhub,
 		.write		= write_sst_fwhub,
 	},
@@ -1380,12 +1588,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF004C",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF004C,
+		.probe		= probe_49lfxxxc,
+		},
 		.total_size	= 512,
 		.page_size	= 4 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_49lfxxxc,
 		.erase		= erase_49lfxxxc,
 		.write		= write_49lfxxxc,
 	},
@@ -1393,12 +1603,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF008A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF008A,
+		.probe		= probe_sst_fwhub,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_sst_fwhub,
 		.erase		= erase_sst_fwhub,
 		.write		= write_sst_fwhub,
 	},
@@ -1406,12 +1618,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF008C",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF008C,
+		.probe		= probe_49lfxxxc,
+		},
 		.total_size	= 1024,
 		.page_size	= 4 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_49lfxxxc,
 		.erase		= erase_49lfxxxc,
 		.write		= write_49lfxxxc,
 	},
@@ -1419,12 +1633,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF016C",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF016C,
+		.probe		= probe_49lfxxxc,
+		},
 		.total_size	= 2048,
 		.page_size	= 4 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_49lfxxxc,
 		.erase		= erase_49lfxxxc,
 		.write		= write_49lfxxxc,
 	},
@@ -1432,12 +1648,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF020",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF020,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 16 * 1024,
 		.tested		= TEST_OK_PR,
-		.probe		= probe_jedec,
 		.erase		= erase_49lf040,
 		.write		= write_49lf040,
 	},
@@ -1445,12 +1663,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF020A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF020A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 16 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_49lf040,
 		.write		= write_49lf040,
 	},
@@ -1458,12 +1678,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF040",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF040,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_49lf040,
 		.write		= write_49lf040,
 	},
@@ -1471,12 +1693,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF040B",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF040B,
+		.probe		= probe_sst_fwhub,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_sst_fwhub,
 		.erase		= erase_sst_fwhub,
 		.write		= write_sst_fwhub,
 	},
@@ -1484,12 +1708,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF080A",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF080A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 1024,
 		.page_size	= 4096,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_49lf040,
 		.write		= write_49lf040,
 	},
@@ -1497,12 +1723,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "SST49LF160C",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_49LF160C,
+		.probe		= probe_49lfxxxc,
+		},
 		.total_size	= 2048,
 		.page_size	= 4 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_49lfxxxc,
 		.erase		= erase_49lfxxxc,
 		.write		= write_49lfxxxc,
 	},
@@ -1510,12 +1738,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P05-A",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P05A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 64,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1524,12 +1754,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P10-A",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P10A,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1538,12 +1770,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P20",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P20,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1552,12 +1786,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P40",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P40,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1566,12 +1802,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P40-old",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P40_RES,
+		.probe		= probe_spi_res,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_res,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1580,12 +1818,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P80",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P80,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1594,12 +1834,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P16",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P16,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 2048,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1608,12 +1850,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P32",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P32,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 4096,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1622,12 +1866,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P64",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P64,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 8192,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1636,12 +1882,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M25P128",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M25P128,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 16384,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1650,12 +1898,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F002B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F002B,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_m29f002,
 		.write		= write_m29f002b,
 	},
@@ -1663,12 +1913,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F002T/NT",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F002T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_m29f002,
 		.write		= write_m29f002t,
 	},
@@ -1676,12 +1928,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F040B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F040B,
+		.probe		= probe_29f040b,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_29f040b,
 		.erase		= erase_29f040b,
 		.write		= write_29f040b,
 	},
@@ -1689,12 +1943,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29F400BT",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29F400BT,
+		.probe		= probe_m29f400bt,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_m29f400bt,
 		.erase		= erase_m29f400bt,
 		.write		= write_coreboot_m29f400bt,
 	},
@@ -1702,12 +1958,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29W010B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29W010B,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 16 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1715,12 +1973,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M29W040B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M29W040B,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1728,12 +1988,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW040A",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW040A,
+		.probe		= probe_stm50flw0x0x,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_stm50flw0x0x,
 		.erase		= erase_stm50flw0x0x,
 		.write		= write_stm50flw0x0x,
 	},
@@ -1741,12 +2003,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW040B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW040B,
+		.probe		= probe_stm50flw0x0x,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_stm50flw0x0x,
 		.erase		= erase_stm50flw0x0x,
 		.write		= write_stm50flw0x0x,
 	},
@@ -1754,12 +2018,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW080A",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW080A,
+		.probe		= probe_stm50flw0x0x,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_stm50flw0x0x,
 		.erase		= erase_stm50flw0x0x,
 		.write		= write_stm50flw0x0x,
 	},
@@ -1767,12 +2033,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FLW080B",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FLW080B,
+		.probe		= probe_stm50flw0x0x,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_stm50flw0x0x,
 		.erase		= erase_stm50flw0x0x,
 		.write		= write_stm50flw0x0x,
 	},
@@ -1780,12 +2048,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW002",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW002,
+		.probe		= probe_49lfxxxc,
+		},
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_49lfxxxc,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -1793,12 +2063,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW016",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW016,
+		.probe		= probe_82802ab,
+		},
 		.total_size	= 2048,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_82802ab,
 		.erase		= erase_82802ab,
 		.write		= write_82802ab,
 	},
@@ -1806,12 +2078,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW040",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW040,
+		.probe		= probe_82802ab,
+		},
 		.total_size	= 512,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_82802ab,
 		.erase		= erase_82802ab,
 		.write		= write_82802ab,
 	},
@@ -1819,12 +2093,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50FW080",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50FW080,
+		.probe		= probe_82802ab,
+		},
 		.total_size	= 1024,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_82802ab,
 		.erase		= erase_82802ab,
 		.write		= write_82802ab,
 	},
@@ -1832,12 +2108,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "M50LPW116",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= ST_M50LPW116,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 2048,
 		.page_size	= 64 * 1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1845,12 +2123,14 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C31004T",
+		{
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C31004T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -1858,12 +2138,14 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51001T",
+		{
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51001T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -1871,12 +2153,14 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51002T",
+		{
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51002T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -1884,12 +2168,14 @@
 	{
 		.vendor		= "SyncMOS",
 		.name		= "S29C51004T",
+		{
 		.manufacture_id	= SYNCMOS_ID,
 		.model_id	= S29C51004T,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -1897,12 +2183,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x10",
+		{
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X10,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 128,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1911,12 +2199,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x20",
+		{
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X20,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 256,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1925,12 +2215,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x40",
+		{
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X40,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1939,12 +2231,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W25x80",
+		{
 		.manufacture_id	= WINBOND_NEX_ID,
 		.model_id	= W_25X80,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 1024,
 		.page_size	= 256,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_spi_rdid,
 		.erase		= spi_chip_erase_c7,
 		.write		= spi_chip_write,
 		.read		= spi_chip_read,
@@ -1953,12 +2247,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C011",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C011,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 128,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1966,12 +2262,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C020C",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C020C,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1979,12 +2277,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29C040P",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C040P,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -1992,12 +2292,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W29EE011",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_29C011,
+		.probe		= probe_w29ee011,
+		},
 		.total_size	= 128,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_w29ee011,
 		.erase		= erase_chip_jedec,
 		.write		= write_jedec,
 	},
@@ -2005,12 +2307,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040A",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -2018,12 +2322,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040B",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040B,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -2031,12 +2337,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040C",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= 0x50,
+		.probe		= probe_w39v040c,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_w39v040c,
 		.erase		= erase_w39v040c,
 		.write		= write_w39v040c,
 	},
@@ -2044,12 +2352,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V040FA",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V040FA,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -2057,12 +2367,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080A",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 1024,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_39sf020,
 	},
@@ -2070,12 +2382,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49F002U",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49F002U,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -2083,12 +2397,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49V002A",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49V002A,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -2096,12 +2412,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W49V002FA",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_49V002FA,
+		.probe		= probe_jedec,
+		},
 		.total_size	= 256,
 		.page_size	= 128,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_jedec,
 		.erase		= erase_chip_jedec,
 		.write		= write_49f002,
 	},
@@ -2109,12 +2427,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080FA",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080FA,
+		.probe		= probe_winbond_fwhub,
+		},
 		.total_size	= 1024,
 		.page_size	= 64*1024,
 		.tested		= TEST_OK_PREW,
-		.probe		= probe_winbond_fwhub,
 		.erase		= erase_winbond_fwhub,
 		.write		= write_winbond_fwhub,
 	},
@@ -2122,12 +2442,14 @@
 	{
 		.vendor		= "Winbond",
 		.name		= "W39V080FA (dual mode)",
+		{
 		.manufacture_id	= WINBOND_ID,
 		.model_id	= W_39V080FA_DM,
+		.probe		= probe_winbond_fwhub,
+		},
 		.total_size	= 512,
 		.page_size	= 64*1024,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_winbond_fwhub,
 		.erase		= erase_winbond_fwhub,
 		.write		= write_winbond_fwhub,
 	},
@@ -2135,12 +2457,14 @@
 	{
 		.vendor		= "Atmel",
 		.name		= "unknown Atmel SPI chip",
+		{
 		.manufacture_id	= ATMEL_ID,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -2148,12 +2472,14 @@
 	{
 		.vendor		= "EON",
 		.name		= "unknown EON SPI chip",
+		{
 		.manufacture_id	= EON_ID_NOPREFIX,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -2161,12 +2487,14 @@
 	{
 		.vendor		= "Macronix",
 		.name		= "unknown Macronix SPI chip",
+		{
 		.manufacture_id	= MX_ID,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -2174,12 +2502,14 @@
 	{
 		.vendor		= "PMC",
 		.name		= "unknown PMC SPI chip",
+		{
 		.manufacture_id	= PMC_ID,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -2187,12 +2517,14 @@
 	{
 		.vendor		= "SST",
 		.name		= "unknown SST SPI chip",
+		{
 		.manufacture_id	= SST_ID,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},
@@ -2200,12 +2532,14 @@
 	{
 		.vendor		= "ST",
 		.name		= "unknown ST SPI chip",
+		{
 		.manufacture_id	= ST_ID,
 		.model_id	= GENERIC_DEVICE_ID,
+		.probe		= probe_spi_rdid,
+		},
 		.total_size	= 0,
 		.page_size	= 256,
 		.tested		= TEST_UNTESTED,
-		.probe		= probe_spi_rdid,
 		.erase		= NULL,
 		.write		= NULL,
 	},


-- 
http://www.hailfinger.org/

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: flashrom_probe_grouping.diff
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20090411/86907dd1/attachment.ksh>


More information about the coreboot mailing list