[coreboot] [PATCH] flashrom: Group probe function together with associated IDs

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Thu May 7 02:05:20 CEST 2009


On 22.04.2009 01:29, Carl-Daniel Hailfinger wrote:
> 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. They belong together.
>
> 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.
>
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>   

Now that flashrom 0.9.0 is out, can we please merge this?

Regards,
Carl-Daniel

> Index: flashrom-probe_grouping/flash.h
> ===================================================================
> --- flashrom-probe_grouping/flash.h	(Revision 4161)
> +++ 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 4161)
> +++ 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_60_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_60_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_60_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_60_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_60_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_60_c7,
>  		.write		= spi_chip_write,
>  		.read		= spi_chip_read,
> @@ -814,12 +938,14 @@
>  	{
>  		.vendor		= "Macronix",
>  		.name		= "MX25L1635D",
> +		{
>  		.manufacture_id	= MX_ID,
>  		.model_id	= MX_25L1635D,
> +		.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,
> @@ -828,12 +954,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_60_c7,
>  		.write		= spi_chip_write,
>  		.read		= spi_chip_read,
> @@ -842,12 +970,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_60_c7,
>  		.write		= spi_chip_write,
>  		.read		= spi_chip_read,
> @@ -856,12 +986,14 @@
>  	{
>  		.vendor		= "Macronix",
>  		.name		= "MX25L12805",
> +		{
>  		.manufacture_id	= MX_ID,
>  		.model_id	= MX_25L12805,
> +		.probe		= probe_spi_rdid,
> +		},
>  		.total_size	= 16384,
>  		.page_size	= 256,
>  		.tested		= TEST_UNTESTED,
> -		.probe		= probe_spi_rdid,
>  		.erase		= spi_chip_erase_60_c7,
>  		.write		= spi_chip_write,
>  		.read		= spi_chip_read,
> @@ -870,12 +1002,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,
>  	},
> @@ -883,12 +1017,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,
>  	},
> @@ -896,12 +1032,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,
>  	},
> @@ -909,12 +1047,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,
> @@ -923,12 +1063,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,
> @@ -937,12 +1079,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,
> @@ -951,12 +1095,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,
> @@ -965,12 +1111,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,
> @@ -979,12 +1127,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,
> @@ -993,12 +1143,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,
> @@ -1007,12 +1159,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,
> @@ -1021,12 +1175,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,
> @@ -1035,12 +1191,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,
> @@ -1049,12 +1207,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,
> @@ -1063,12 +1223,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,
>  	},
> @@ -1076,12 +1238,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,
>  	},
> @@ -1089,12 +1253,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,
>  	},
> @@ -1102,12 +1268,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,
> @@ -1116,12 +1284,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,
> @@ -1130,12 +1300,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,
> @@ -1144,12 +1316,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,
> @@ -1158,12 +1332,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,
> @@ -1172,12 +1348,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,
> @@ -1186,12 +1364,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,
> @@ -1200,12 +1380,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,
>  	},
> @@ -1213,12 +1395,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,
>  	},
> @@ -1226,12 +1410,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,
>  	},
> @@ -1239,12 +1425,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,
>  	},
> @@ -1252,12 +1440,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,
>  	},
> @@ -1265,12 +1455,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,
>  	},
> @@ -1278,12 +1470,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,
>  	},
> @@ -1291,12 +1485,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,
>  	},
> @@ -1304,12 +1500,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,
>  	},
> @@ -1317,12 +1515,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,
>  	},
> @@ -1330,12 +1530,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,
>  	},
> @@ -1343,12 +1545,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,
>  	},
> @@ -1356,12 +1560,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,
>  	},
> @@ -1369,12 +1575,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,
>  	},
> @@ -1382,12 +1590,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,
>  	},
> @@ -1395,12 +1605,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,
>  	},
> @@ -1408,12 +1620,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,
>  	},
> @@ -1421,12 +1635,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,
>  	},
> @@ -1434,12 +1650,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,
>  	},
> @@ -1447,12 +1665,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,
>  	},
> @@ -1460,12 +1680,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,
>  	},
> @@ -1473,12 +1695,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,
>  	},
> @@ -1486,12 +1710,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,
>  	},
> @@ -1499,12 +1725,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,
>  	},
> @@ -1512,12 +1740,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,
>  	},
> @@ -1525,12 +1755,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,
>  	},
> @@ -1538,12 +1770,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,
> @@ -1552,12 +1786,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,
> @@ -1566,12 +1802,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,
> @@ -1580,12 +1818,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,
> @@ -1594,12 +1834,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,
> @@ -1608,12 +1850,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,
> @@ -1622,12 +1866,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,
> @@ -1636,12 +1882,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,
> @@ -1650,12 +1898,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,
> @@ -1664,12 +1914,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,
> @@ -1678,12 +1930,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,
>  	},
> @@ -1691,12 +1945,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,
>  	},
> @@ -1704,12 +1960,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,
>  	},
> @@ -1717,12 +1975,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,
>  	},
> @@ -1730,12 +1990,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,
>  	},
> @@ -1743,12 +2005,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,
>  	},
> @@ -1756,12 +2020,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,
>  	},
> @@ -1769,12 +2035,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,
>  	},
> @@ -1782,12 +2050,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,
>  	},
> @@ -1795,12 +2065,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,
>  	},
> @@ -1808,12 +2080,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,
>  	},
> @@ -1821,12 +2095,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,
>  	},
> @@ -1834,12 +2110,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,
>  	},
> @@ -1847,12 +2125,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,
>  	},
> @@ -1860,12 +2140,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,
>  	},
> @@ -1873,12 +2155,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,
>  	},
> @@ -1886,12 +2170,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,
>  	},
> @@ -1899,12 +2185,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,
>  	},
> @@ -1912,12 +2200,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,
>  	},
> @@ -1925,12 +2215,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,
> @@ -1939,12 +2231,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,
> @@ -1953,12 +2247,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,
> @@ -1967,12 +2263,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,
> @@ -1981,12 +2279,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,
>  	},
> @@ -1994,12 +2294,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,
>  	},
> @@ -2007,12 +2309,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,
>  	},
> @@ -2020,12 +2324,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,
>  	},
> @@ -2033,12 +2339,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,
>  	},
> @@ -2046,12 +2354,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,
>  	},
> @@ -2059,12 +2369,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,
>  	},
> @@ -2072,12 +2384,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,
>  	},
> @@ -2085,12 +2399,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,
>  	},
> @@ -2098,12 +2414,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,
>  	},
> @@ -2111,12 +2429,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,
>  	},
> @@ -2124,12 +2444,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,
>  	},
> @@ -2137,12 +2459,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,
>  	},
> @@ -2150,12 +2474,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,
>  	},
> @@ -2163,12 +2489,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,
>  	},
> @@ -2176,12 +2504,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,
>  	},
> @@ -2189,12 +2519,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,
>  	},
> @@ -2202,12 +2534,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,
>  	},
> @@ -2215,12 +2549,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,
>  	},
> @@ -2228,12 +2564,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/





More information about the coreboot mailing list