diff options
| author | Nikolay Nikolaev <evrinoma@gmail.com> | 2013-06-28 21:28:56 +0000 | 
|---|---|---|
| committer | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2013-06-28 21:28:56 +0000 | 
| commit | 3f3390b22c7b94a9d1d5573a030fd0bcc9a8f7bf (patch) | |
| tree | d7ff422da3e33c4e1a12b6e727a4a98f12a54d80 | |
| parent | 384de8e7450fc705820ae24419d208e95eddf974 (diff) | |
| download | flashrom-3f3390b22c7b94a9d1d5573a030fd0bcc9a8f7bf.tar.gz flashrom-3f3390b22c7b94a9d1d5573a030fd0bcc9a8f7bf.tar.bz2 flashrom-3f3390b22c7b94a9d1d5573a030fd0bcc9a8f7bf.zip  | |
Add support for some GigaDevice GD25* chips
Add...
 - GigaDevice GD25T80
 - GigaDevice GD25Q10
 - GigaDevice GD25Q512
Also, improve some others.
Corresponding to flashrom svn r1685.
Signed-off-by: Nikolay Nikolaev <evrinoma@gmail.com>
Reviewed-by: Steven Zakulec <spzakulec@gmail.com>
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
| -rw-r--r-- | flashchips.c | 188 | ||||
| -rw-r--r-- | flashchips.h | 12 | 
2 files changed, 158 insertions, 42 deletions
diff --git a/flashchips.c b/flashchips.c index 2212a95c..331ea4d6 100644 --- a/flashchips.c +++ b/flashchips.c @@ -4173,7 +4173,117 @@ const struct flashchip flashchips[] = {  	{  		.vendor		= "GigaDevice", -		.name		= "GD25Q20", +		.name		= "GD25LQ32", +		.bustype	= BUS_SPI, +		.manufacture_id	= GIGADEVICE_ID, +		.model_id	= GIGADEVICE_GD25LQ32, +		.total_size	= 4096, +		.page_size	= 256, +		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ +		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP, +		.tested		= TEST_OK_PREW, +		.probe		= probe_spi_rdid, +		.probe_timing	= TIMING_ZERO, +		.block_erasers	= +		{ +			{ +				.eraseblocks = { {4 * 1024, 1024} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {32 * 1024, 128} }, +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 64} }, +				.block_erase = spi_block_erase_d8, +			}, { +				.eraseblocks = { {4 * 1024 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {4 * 1024 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			} +		}, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */ +		.write		= spi_chip_write_256, +		.read		= spi_chip_read, +		.voltage	= {1700, 1950}, +	}, + +	{ +		.vendor		= "GigaDevice", +		.name		= "GD25Q512", +		.bustype	= BUS_SPI, +		.manufacture_id	= GIGADEVICE_ID, +		.model_id	= GIGADEVICE_GD25Q512, +		.total_size	= 64, +		.page_size	= 256, +		.feature_bits	= FEATURE_WRSR_WREN, +		.tested		= TEST_UNTESTED, +		.probe		= probe_spi_rdid, +		.probe_timing	= TIMING_ZERO, +		.block_erasers	= { +			{ +				.eraseblocks = { {4 * 1024, 16} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {32 * 1024, 2} }, +				.block_erase = spi_block_erase_52, +			}, { +				.eraseblocks = { {64 * 1024, 1} }, +				.block_erase = spi_block_erase_60, +			}, { +				.eraseblocks = { {64 * 1024, 1} }, +				.block_erase = spi_block_erase_c7, +			} +		}, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */ +		.write		= spi_chip_write_256, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ +		.voltage	= {2700, 3600}, +	}, + +	{ +		.vendor		= "GigaDevice", +		.name		= "GD25Q10", +		.bustype	= BUS_SPI, +		.manufacture_id	= GIGADEVICE_ID, +		.model_id	= GIGADEVICE_GD25Q10, +		.total_size	= 128, +		.page_size	= 256, +		.feature_bits	= FEATURE_WRSR_WREN, +		.tested		= TEST_UNTESTED, +		.probe		= probe_spi_rdid, +		.probe_timing	= TIMING_ZERO, +		.block_erasers	= { +			{ +				.eraseblocks = { {4 * 1024, 32} }, +				.block_erase = spi_block_erase_20, +			}, { +				.eraseblocks = { {32 * 1024, 4} }, +				.block_erase = spi_block_erase_52, +			}, { +				.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, +			} +		}, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */ +		.write		= spi_chip_write_256, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ +		.voltage	= {2700, 3600}, +	}, + +	{ +		.vendor		= "GigaDevice", +		.name		= "GD25Q20(B)",  		.bustype	= BUS_SPI,  		.manufacture_id	= GIGADEVICE_ID,  		.model_id	= GIGADEVICE_GD25Q20, @@ -4202,16 +4312,16 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	},  	{  		.vendor		= "GigaDevice", -		.name		= "GD25Q40", +		.name		= "GD25Q40(B)",  		.bustype	= BUS_SPI,  		.manufacture_id	= GIGADEVICE_ID,  		.model_id	= GIGADEVICE_GD25Q40, @@ -4240,10 +4350,10 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	}, @@ -4279,16 +4389,16 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	},  	{  		.vendor		= "GigaDevice", -		.name		= "GD25Q16", +		.name		= "GD25Q16(B)",  		.bustype	= BUS_SPI,  		.manufacture_id	= GIGADEVICE_ID,  		.model_id	= GIGADEVICE_GD25Q16, @@ -4318,10 +4428,10 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	}, @@ -4357,10 +4467,10 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	}, @@ -4396,10 +4506,10 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	}, @@ -4435,53 +4545,51 @@ const struct flashchip flashchips[] = {  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */ -		.unlock		= spi_disable_blockprotect, +		.printlock	= spi_prettyprint_status_register_default_bp4, +		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */  		.write		= spi_chip_write_256, -		.read		= spi_chip_read, +		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */  		.voltage	= {2700, 3600},  	},  	{  		.vendor		= "GigaDevice", -		.name		= "GD25LQ32", +		.name		= "GD25T80",  		.bustype	= BUS_SPI,  		.manufacture_id	= GIGADEVICE_ID, -		.model_id	= GIGADEVICE_GD25LQ32, -		.total_size	= 4096, +		.model_id	= GIGADEVICE_GD25T80, +		.total_size	= 1024,  		.page_size	= 256, -		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */ +		/* OTP: 256B total; enter 0x3A */  		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP, -		.tested		= TEST_OK_PREW, +		.tested		= TEST_UNTESTED,  		.probe		= probe_spi_rdid,  		.probe_timing	= TIMING_ZERO, -		.block_erasers	= -		{ +		.block_erasers	= {  			{ -				.eraseblocks = { {4 * 1024, 1024} }, +				.eraseblocks = { {4 * 1024, 256} },  				.block_erase = spi_block_erase_20,  			}, { -				.eraseblocks = { {32 * 1024, 128} }, +				.eraseblocks = { {64 * 1024, 16} },  				.block_erase = spi_block_erase_52,  			}, { -				.eraseblocks = { {64 * 1024, 64} }, +				.eraseblocks = { {64 * 1024, 16} },  				.block_erase = spi_block_erase_d8,  			}, { -				.eraseblocks = { {4 * 1024 * 1024, 1} }, +				.eraseblocks = { {1024 * 1024, 1} },  				.block_erase = spi_block_erase_60,  			}, { -				.eraseblocks = { {4 * 1024 * 1024, 1} }, +				.eraseblocks = { {1024 * 1024, 1} },  				.block_erase = spi_block_erase_c7,  			}  		}, -		.printlock	= spi_prettyprint_status_register_default_bp4, -		.unlock		= spi_disable_blockprotect_bp4_srwd, /* TODO: 2nd status reg (read with 0x35) */ +		.printlock	= spi_prettyprint_status_register_plain, /* TODO: improve */  		.unlock		= spi_disable_blockprotect,  		.write		= spi_chip_write_256,  		.read		= spi_chip_read, -		.voltage	= {1700, 1950}, +		.voltage	= {2700, 3600},  	}, -  +  	{  		.vendor		= "Hyundai",  		.name		= "HY29F002T", diff --git a/flashchips.h b/flashchips.h index 22dde4f6..17893d94 100644 --- a/flashchips.h +++ b/flashchips.h @@ -309,14 +309,22 @@  #define FUJITSU_MBM29LV800TA	0xDA	/* Same as MBM29LV800TE */  #define GIGADEVICE_ID		0xC8	/* GigaDevice */ -#define GIGADEVICE_GD25Q20	0x4012 -#define GIGADEVICE_GD25Q40	0x4013 +#define GIGADEVICE_GD25T80	0x3114 +#define GIGADEVICE_GD25Q512	0x4010 +#define GIGADEVICE_GD25Q10	0x4011 +#define GIGADEVICE_GD25Q20	0x4012	/* Same as GD25QB */ +#define GIGADEVICE_GD25Q40	0x4013	/* Same as GD25QB */  #define GIGADEVICE_GD25Q80	0x4014	/* Same as GD25Q80B (which has OTP) */  #define GIGADEVICE_GD25Q16	0x4015	/* Same as GD25Q16B (which has OTP) */  #define GIGADEVICE_GD25Q32	0x4016	/* Same as GD25Q32B */  #define GIGADEVICE_GD25Q64	0x4017	/* Same as GD25Q64B */  #define GIGADEVICE_GD25Q128	0x4018	/* GD25Q128B only? */ +#define GIGADEVICE_GD25LQ40	0x6013 +#define GIGADEVICE_GD25LQ80	0x6014 +#define GIGADEVICE_GD25LQ16	0x6015  #define GIGADEVICE_GD25LQ32	0x6016 +#define GIGADEVICE_GD25LQ64	0x6017	/* Same as GD25LQ64B (which is faster) */ +#define GIGADEVICE_GD25LQ128	0x6018  #define HYUNDAI_ID		0xAD	/* Hyundai */  #define HYUNDAI_HY29F400T	0x23	/* Same as HY29F400AT */  | 
