diff options
| author | Niklaus Giger <niklaus.giger@member.fsf.org> | 2009-07-22 17:13:24 +0200 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2009-08-26 08:58:27 +0200 | 
| commit | 3a7b2c21fb08b022e3e624cd071002b4aaed1606 (patch) | |
| tree | 915ee45c8c5bffc746b032e4f880a23454be5b13 | |
| parent | d3870bd2d832ea2048b7cb2bbb9d642585b137cf (diff) | |
| download | olio-uboot-2014.01-3a7b2c21fb08b022e3e624cd071002b4aaed1606.tar.xz olio-uboot-2014.01-3a7b2c21fb08b022e3e624cd071002b4aaed1606.zip | |
Support up to 7 banks for ids as specified in JEDEC JEP106Z
see http://www.jedec.org/download/search/jep106Z.pdf
Add some second source legacy flash chips 256x8.
Signed-off-by: Niklaus Giger <niklaus.giger@member.fsf.org>
Signed-off-by: Stefan Roese <sr@denx.de>
| -rw-r--r-- | drivers/mtd/cfi_flash.c | 15 | ||||
| -rw-r--r-- | drivers/mtd/jedec_flash.c | 67 | ||||
| -rw-r--r-- | include/flash.h | 10 | 
3 files changed, 89 insertions, 3 deletions
| diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index 3ca73e3ca..6eea49a11 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -106,6 +106,8 @@  #define ATM_CMD_SOFTLOCK_START		0x80  #define ATM_CMD_LOCK_SECT		0x40 +#define FLASH_CONTINUATION_CODE		0x7F +  #define FLASH_OFFSET_MANUFACTURER_ID	0x00  #define FLASH_OFFSET_DEVICE_ID		0x01  #define FLASH_OFFSET_DEVICE_ID2		0x0E @@ -1541,13 +1543,22 @@ static int cmdset_intel_init(flash_info_t *info, struct cfi_qry *qry)  static void cmdset_amd_read_jedec_ids(flash_info_t *info)  { +	ushort bankId = 0; +	uchar  manuId; +  	flash_write_cmd(info, 0, 0, AMD_CMD_RESET);  	flash_unlock_seq(info, 0);  	flash_write_cmd(info, 0, info->addr_unlock1, FLASH_CMD_READ_ID);  	udelay(1000); /* some flash are slow to respond */ -	info->manufacturer_id = flash_read_uchar (info, -					FLASH_OFFSET_MANUFACTURER_ID); +	manuId = flash_read_uchar (info, FLASH_OFFSET_MANUFACTURER_ID); +	/* JEDEC JEP106Z specifies ID codes up to bank 7 */ +	while (manuId == FLASH_CONTINUATION_CODE && bankId < 0x800) { +		bankId += 0x100; +		manuId = flash_read_uchar (info, +			bankId | FLASH_OFFSET_MANUFACTURER_ID); +	} +	info->manufacturer_id = manuId;  	switch (info->chipwidth){  	case FLASH_CFI_8BIT: diff --git a/drivers/mtd/jedec_flash.c b/drivers/mtd/jedec_flash.c index e48acecea..223fb7114 100644 --- a/drivers/mtd/jedec_flash.c +++ b/drivers/mtd/jedec_flash.c @@ -68,6 +68,17 @@  #define SST39SF010A	0x00B5  #define SST39SF020A	0x00B6 +/* MXIC */ +#define MX29LV040	0x004F + +/* WINBOND */ +#define W39L040A	0x00D6 + +/* AMIC */ +#define A29L040		0x0092 + +/* EON */ +#define EN29LV040A	0x004F  /*   * Unlock address sets for AMD command sets. @@ -225,6 +236,62 @@ static const struct amd_flash_info jedec_table[] = {  			ERASEINFO(0x10000,8),  		}  	}, +	{ +		.mfr_id		= (u16)MX_MANUFACT, +		.dev_id		= MX29LV040, +		.name		= "MXIC MX29LV040", +		.uaddr		= { +			[0] = MTD_UADDR_0x0555_0x02AA /* x8 */ +		}, +		.DevSize	= SIZE_512KiB, +		.CmdSet		= P_ID_AMD_STD, +		.NumEraseRegions= 1, +		.regions	= { +			ERASEINFO(0x10000, 8), +		} +	}, +	{ +		.mfr_id		= (u16)WINB_MANUFACT, +		.dev_id		= W39L040A, +		.name		= "WINBOND W39L040A", +		.uaddr		= { +			[0] = MTD_UADDR_0x5555_0x2AAA /* x8 */ +		}, +		.DevSize	= SIZE_512KiB, +		.CmdSet		= P_ID_AMD_STD, +		.NumEraseRegions= 1, +		.regions	= { +			ERASEINFO(0x10000, 8), +		} +	}, +	{ +		.mfr_id		= (u16)AMIC_MANUFACT, +		.dev_id		= A29L040, +		.name		= "AMIC A29L040", +		.uaddr		= { +			[0] = MTD_UADDR_0x0555_0x02AA /* x8 */ +		}, +		.DevSize	= SIZE_512KiB, +		.CmdSet		= P_ID_AMD_STD, +		.NumEraseRegions= 1, +		.regions	= { +			ERASEINFO(0x10000, 8), +		} +	}, +	{ +		.mfr_id		= (u16)EON_MANUFACT, +		.dev_id		= EN29LV040A, +		.name		= "EON EN29LV040A", +		.uaddr		= { +			[0] = MTD_UADDR_0x0555_0x02AA /* x8 */ +		}, +		.DevSize	= SIZE_512KiB, +		.CmdSet		= P_ID_AMD_STD, +		.NumEraseRegions= 1, +		.regions	= { +			ERASEINFO(0x10000, 8), +		} +	},  #endif  #ifdef CONFIG_SYS_FLASH_LEGACY_512Kx16  	{ diff --git a/include/flash.h b/include/flash.h index b01616200..8feca1b5f 100644 --- a/include/flash.h +++ b/include/flash.h @@ -46,7 +46,7 @@ typedef struct {  	ushort	cmd_reset;		/* vendor specific reset command	*/  	ushort	interface;		/* used for x8/x16 adjustments		*/  	ushort	legacy_unlock;		/* support Intel legacy (un)locking	*/ -	uchar	manufacturer_id;	/* manufacturer id			*/ +	ushort	manufacturer_id;	/* manufacturer id			*/  	ushort	device_id;		/* device id				*/  	ushort	device_id2;		/* extended device id			*/  	ushort	ext_addr;		/* extended query table address		*/ @@ -154,6 +154,7 @@ extern flash_info_t *flash_get_info(ulong base);   * Device IDs   */ +/* Manufacturers inside bank 0 have ids like 0x00xx00xx */  #define AMD_MANUFACT	0x00010001	/* AMD	   manuf. ID in D23..D16, D7..D0 */  #define FUJ_MANUFACT	0x00040004	/* FUJITSU manuf. ID in D23..D16, D7..D0 */  #define ATM_MANUFACT	0x001F001F	/* ATMEL */ @@ -166,6 +167,13 @@ extern flash_info_t *flash_get_info(ulong base);  #define TOSH_MANUFACT	0x00980098	/* TOSHIBA manuf. ID in D23..D16, D7..D0 */  #define MT2_MANUFACT	0x002C002C	/* alternate MICRON manufacturer ID*/  #define EXCEL_MANUFACT	0x004A004A	/* Excel Semiconductor			*/ +#define AMIC_MANUFACT	0x00370037	/* AMIC    manuf. ID in D23..D16, D7..D0 */ +#define WINB_MANUFACT	0x00DA00DA	/* Winbond manuf. ID in D23..D16, D7..D0 */ + +/* Manufacturers inside bank 1 have ids like 0x01xx01xx */ +#define EON_MANUFACT	0x011C011C	/* EON     manuf. ID in D23..D16, D7..D0 */ + +/* Manufacturers inside bank 2 have ids like 0x02xx02xx */  					/* Micron Technologies (INTEL compat.)	*/  #define MT_ID_28F400_T	0x44704470	/* 28F400B3 ID ( 4 M, top boot sector)	*/ |