diff options
| -rw-r--r-- | flashchips.c | 116 | ||||
| -rw-r--r-- | flashchips.h | 4 | 
2 files changed, 97 insertions, 23 deletions
| diff --git a/flashchips.c b/flashchips.c index b876d51b..c8d51bff 100644 --- a/flashchips.c +++ b/flashchips.c @@ -44,6 +44,11 @@ struct flashchip flashchips[] = {  	 * .probe		= Probe function  	 * .probe_timing	= Probe function delay  	 * .erase		= Chip erase function +	 * .block_erasers[]	= Array of erase layouts and erase functions +	 * { +	 *	.eraseblocks[]	= Array of { blocksize, blockcount } +	 *	.block_erase	= Block erase function +	 * }  	 * .write		= Chip write function  	 * .read		= Chip read function  	 */ @@ -1235,20 +1240,16 @@ struct flashchip flashchips[] = {  			{  				.eraseblocks = { {4 * 1024, 16} },  				.block_erase = spi_block_erase_20, -			}, -			{ +			}, {  				.eraseblocks = { {64 * 1024, 1} },  				.block_erase = spi_block_erase_52, -			}, -			{ +			}, {  				.eraseblocks = { {64 * 1024, 1} },  				.block_erase = spi_block_erase_d8, -			}, -			{ +			}, {  				.eraseblocks = { {64 * 1024, 1} },  				.block_erase = spi_block_erase_60, -			}, -			{ +			}, {  				.eraseblocks = { {64 * 1024, 1} },  				.block_erase = spi_block_erase_c7,  			}, @@ -1274,16 +1275,13 @@ struct flashchip flashchips[] = {  			{  				.eraseblocks = { {4 * 1024, 32} },  				.block_erase = spi_block_erase_20, -			}, -			{ +			}, {  				.eraseblocks = { {64 * 1024, 2} },  				.block_erase = spi_block_erase_d8, -			}, -			{ +			}, {  				.eraseblocks = { {128 * 1024, 1} },  				.block_erase = spi_block_erase_60, -			}, -			{ +			}, {  				.eraseblocks = { {128 * 1024, 1} },  				.block_erase = spi_block_erase_c7,  			}, @@ -1303,7 +1301,26 @@ struct flashchip flashchips[] = {  		.tested		= TEST_UNTESTED,  		.probe		= probe_spi_rdid,  		.probe_timing	= TIMING_ZERO, -		.erase		= spi_chip_erase_60_c7, +		.erase		= NULL, +		.block_erasers	= +		{ +			{ +				.eraseblocks = { {4 * 1024, 64} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {64 * 1024, 4} }, +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 4} }, +				.block_erase = spi_block_erase_d8, +			}, { +				.eraseblocks = { {256 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {256 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			}, +		},  		.write		= spi_chip_write_256,  		.read		= spi_chip_read,  	}, @@ -1316,10 +1333,29 @@ struct flashchip flashchips[] = {  		.model_id	= MX_25L4005,  		.total_size	= 512,  		.page_size	= 256, -		.tested		= TEST_OK_PREW, +		.tested		= TEST_OK_PRW,  		.probe		= probe_spi_rdid,  		.probe_timing	= TIMING_ZERO, -		.erase		= spi_chip_erase_60_c7, +		.erase		= NULL, +		.block_erasers	= +		{ +			{ +				.eraseblocks = { {4 * 1024, 128} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {64 * 1024, 8} }, +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 8} }, +				.block_erase = spi_block_erase_d8, +			}, { +				.eraseblocks = { {512 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {512 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			}, +		},  		.write		= spi_chip_write_256,  		.read		= spi_chip_read,  	}, @@ -1332,10 +1368,29 @@ struct flashchip flashchips[] = {  		.model_id	= MX_25L8005,  		.total_size	= 1024,  		.page_size	= 256, -		.tested		= TEST_OK_PREW, +		.tested		= TEST_OK_PRW,  		.probe		= probe_spi_rdid,  		.probe_timing	= TIMING_ZERO, -		.erase		= spi_chip_erase_60_c7, +		.erase		= NULL, +		.block_erasers	= +		{ +			{ +				.eraseblocks = { {4 * 1024, 256} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {64 * 1024, 16} }, +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 16} }, +				.block_erase = spi_block_erase_d8, +			}, { +				.eraseblocks = { {1024 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {1024 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			}, +		},  		.write		= spi_chip_write_256,  		.read		= spi_chip_read,  	}, @@ -1348,10 +1403,29 @@ struct flashchip flashchips[] = {  		.model_id	= MX_25L1605,  		.total_size	= 2048,  		.page_size	= 256, -		.tested		= TEST_OK_PREW, +		.tested		= TEST_OK_PRW,  		.probe		= probe_spi_rdid,  		.probe_timing	= TIMING_ZERO, -		.erase		= spi_chip_erase_60_c7, +		.erase		= NULL, +		.block_erasers	= +		{ +			{ +				.eraseblocks = { {4 * 1024, 512} }, +				.block_erase = spi_block_erase_20,	/* This erase function has 64k blocksize for eLiteFlash */ +			}, { +				.eraseblocks = { {64 * 1024, 32} },	/* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */ +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 32} }, +				.block_erase = spi_block_erase_d8, +			}, { +				.eraseblocks = { {2 * 1024 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {2 * 1024 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			}, +		},  		.write		= spi_chip_write_256,  		.read		= spi_chip_read,  	}, diff --git a/flashchips.h b/flashchips.h index 40edbbba..81ce2504 100644 --- a/flashchips.h +++ b/flashchips.h @@ -251,11 +251,11 @@   * and use the same set of IDs.   */  #define MX_ID			0xC2	/* Macronix (MX) */ -#define MX_25L512		0x2010	/* 2^19 kbit or 2^16 kByte */ +#define MX_25L512		0x2010	/* Same as MX25V512 */  #define MX_25L1005		0x2011  #define MX_25L2005		0x2012  #define MX_25L4005		0x2013	/* MX25L4005{,A} */ -#define MX_25L8005		0x2014 +#define MX_25L8005		0x2014	/* Same as MX25V8005 */  #define MX_25L1605		0x2015	/* MX25L1605{,A,D} */  #define MX_25L3205		0x2016	/* MX25L3205{,A} */  #define MX_25L6405		0x2017	/* MX25L3205{,D} */ | 
