diff options
| -rw-r--r-- | flash.h | 5 | ||||
| -rw-r--r-- | flashchips.c | 8 | ||||
| -rw-r--r-- | spi.c | 9 | 
3 files changed, 19 insertions, 3 deletions
| @@ -59,10 +59,13 @@ extern struct flashchip flashchips[];   * entry of each section should be the manufacturer ID, followed by the   * list of devices from that manufacturer (sorted by device IDs).   * - * All LPC/FWH parts (parallel flash) have 8-bit device IDs. + * All LPC/FWH parts (parallel flash) have 8-bit device IDs if there is no + * continuation code.   * All SPI parts have 16-bit device IDs.   */ +#define GENERIC_DEVICE_ID	0xffff	/* Only match the vendor ID */ +  #define ALLIANCE_ID		0x52	/* Alliance Semiconductor */  #define AMD_ID			0x01	/* AMD */ diff --git a/flashchips.c b/flashchips.c index 53deb499..0430ca7d 100644 --- a/flashchips.c +++ b/flashchips.c @@ -185,5 +185,13 @@ struct flashchip flashchips[] = {  	 probe_jedec,	erase_chip_jedec, write_49f002},  	{"S29C31004T", 	SYNCMOS_ID, 	S29C31004T,	512, 128,  	 probe_jedec,	erase_chip_jedec, write_49f002}, +	{"EON unknown SPI chip", EON_ID_NOPREFIX, GENERIC_DEVICE_ID,	0, 0, +	 probe_spi,	NULL,	NULL}, +	{"MX unknown SPI chip",	MX_ID,	GENERIC_DEVICE_ID,	0, 0, +	 probe_spi,	NULL,	NULL}, +	{"SST unknown SPI chip",	SST_ID,	GENERIC_DEVICE_ID,	0, 0, +	 probe_spi,	NULL,	NULL}, +	{"ST unknown SPI chip",	ST_ID,	GENERIC_DEVICE_ID,	0, 0, +	 probe_spi,	NULL,	NULL},  	{NULL,}  }; @@ -262,14 +262,19 @@ int probe_spi(struct flashchip *flash)  		manuf_id = readarr[0];  		model_id = (readarr[1] << 8) | readarr[2];  		printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, manuf_id, model_id); -		if (manuf_id == flash->manufacture_id && model_id == flash->model_id) { -			/* Print the status register before erase to tell the +		if (manuf_id == flash->manufacture_id && +		    model_id == flash->model_id) { +			/* Print the status register to tell the  			 * user about possible write protection.  			 */  			generic_spi_prettyprint_status_register(flash);  			return 1;  		} +		/* Test if this is a pure vendor match. */ +		if (manuf_id == flash->manufacture_id && +		    GENERIC_DEVICE_ID == flash->model_id) +			return 1;  	}  	return 0; | 
