[flashrom] Additional voltages

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Sun Jul 10 23:27:15 CEST 2011


On Sun, 10 Jul 2011 16:07:33 -0400
Steven Zakulec <spzakulec at gmail.com> wrote:

> Index: flashchips.c
> ===================================================================
> --- flashchips.c	(revision 1368)
> +++ flashchips.c	(working copy)
> @@ -143,10 +143,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4750, 5250}, /* -55 speed is +-5%, all others +-10% */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29F016D",
> @@ -254,10 +255,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -45R speed is 3.0-3.6V, others 2.7-3.6V */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV001BT",
> @@ -284,10 +286,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -45R speed is 3.0-3.6V, others 2.7-3.6V */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV002BB",
> @@ -315,10 +318,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV002BT",
> @@ -346,10 +350,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* -55 speed is 3.0-3.6V, others 2.7-3.6V */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV004BB",
> @@ -377,10 +382,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV004BT",
> @@ -408,10 +414,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV008BB",
> @@ -439,10 +446,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600} /* 3.0-3.6V (-70R), 2.7-3.6V for others */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV008BT",
> @@ -470,10 +478,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600} /* 3.0-3.6V (-70R), 2.7-3.6V for others */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV040B",
> @@ -496,11 +505,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> -		.voltage	= {2700, 3600},
> +		.voltage	= {3000, 3600}, /* 3.0-3.6V (-60R), 2.7-3.6V for others */
>  	},
>  
>  	{
>  		.vendor		= "AMD",
>  		.name		= "Am29LV081B",
> @@ -523,11 +532,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> -		.voltage	= {2700, 3600},
> +		.voltage	= {3000, 3600}, /* regulated voltage range- full range is 2.7-3.6V */

probably a speed grade distinction again?

>  	},
>  
>  	{
>  		.vendor		= "AMIC",
>  		.name		= "A25L05PT",
> @@ -589,10 +598,11 @@
>  		},
>  		.printlock	= spi_prettyprint_status_register_amic_a25l05p,
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "AMIC",
>  		.name		= "A25L10PT",
> @@ -1330,11 +1340,11 @@
>  		},
>  		.printlock	= spi_prettyprint_status_register_at25df,
>  		.unlock		= spi_disable_blockprotect_at25df,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> -		.voltage	= {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
> +		.voltage	= {2700, 3600}, /* Datasheet says there's a 2.3-3.6V & 2.7-3.6V model */
>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT25DF041A",
> @@ -1368,11 +1378,11 @@
>  		},
>  		.printlock	= spi_prettyprint_status_register_at25df,
>  		.unlock		= spi_disable_blockprotect_at25df,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> -		.voltage	= {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
> +		.voltage	= {2700, 3600}, /* Datasheet says there's a 2.3-3.6V & 2.7-3.6V model */
>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT25DF081",
> @@ -1444,10 +1454,11 @@
>  		},
>  		.printlock	= spi_prettyprint_status_register_at25df_sec,
>  		.unlock		= spi_disable_blockprotect_at25df_sec,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT25DF161",
> @@ -1771,11 +1782,11 @@
>  				.block_erase = spi_block_erase_20,
>  			}
>  		},
>  		.write		= NULL /* Incompatible Page write */,
>  		.read		= spi_chip_read,
> -		.voltage	= {2700, 3600}, /* Datasheet says 3.0-3.6 V or 2.7-3.6 V */
> +		.voltage	= {2700, 3600}, /* Datasheet says 3.0-3.6 V or 2.7-3.6 V- either range is fine */

that comment is a bit vague... i like the one of the AT25DF041A above
better.

>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT26DF081A",
> @@ -2112,11 +2123,11 @@
>  		.tested		= TEST_BAD_READ,
>  		.probe		= probe_spi_rdid,
>  		.probe_timing	= TIMING_ZERO,
>  		.write		= NULL,
>  		.read		= NULL,
> -		.voltage	= {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
> +		.voltage	= {2700, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT45DB161D",
> @@ -2128,11 +2139,11 @@
>  		.tested		= TEST_BAD_READ,
>  		.probe		= probe_spi_rdid,
>  		.probe_timing	= TIMING_ZERO,
>  		.write		= NULL,
>  		.read		= NULL,
> -		.voltage	= {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
> +		.voltage	= {2700, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
>  	},
>  
>  	{
>  		.vendor		= "Atmel",
>  		.name		= "AT45DB321C",
> @@ -2315,10 +2326,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
>  		.vendor		= "EMST",
>  		.name		= "F49B002UA",
> @@ -3499,10 +3511,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
>  		.vendor		= "Intel",
>  		.name		= "28F001BN/BX-B",
> @@ -4050,10 +4063,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Macronix",
>  		.name		= "MX25L3205",
> @@ -4342,10 +4356,11 @@
>  				.block_erase = erase_chip_block_jedec,
>  			},
>  		},
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {4500, 5500},
>  	},
>  
>  	{
>  		.vendor		= "Macronix",
>  		.name		= "MX29LV040",
> @@ -4773,10 +4788,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "PMC",
>  		.name		= "Pm25LV020",
> @@ -4898,10 +4914,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "PMC",
>  		.name		= "Pm29F002T",
> @@ -5199,10 +5216,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Spansion",
>  		.name		= "S25FL008A",
> @@ -5279,10 +5297,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Spansion",
>  		.name		= "S25FL064A",
> @@ -5305,10 +5324,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "SST",
>  		.name		= "SST25VF010.REMS",
> @@ -5334,10 +5354,11 @@
>  			},
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_1,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "SST",
>  		.name		= "SST25VF016B",
> @@ -5471,10 +5492,11 @@
>  			},
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_1,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "SST",
>  		.name		= "SST25VF040B",
> @@ -5536,10 +5558,11 @@
>  			},
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_1,
>  		.read		= spi_chip_read,
> +		.voltage	= {3000, 3600},
>  	},
>  
>  	{
>  		.vendor		= "SST",
>  		.name		= "SST25VF040B.REMS",
> @@ -5571,10 +5594,11 @@
>  			},
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_1,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "SST",
>  		.name		= "SST25VF080B",
> @@ -5769,11 +5793,11 @@
>  		.manufacture_id	= SST_ID,
>  		.model_id	= SST_SST39SF010,
>  		.total_size	= 128,
>  		.page_size	= 4096,
>  		.feature_bits	= FEATURE_EITHER_RESET,
> -		.tested		= TEST_OK_PREW,
> +		.tested		= TEST_OK_PR,

why?

>  		.probe		= probe_jedec,
>  		.probe_timing	= 1,			/* 150 ns */
>  		.block_erasers	=
>  		{
>  			{
> @@ -6703,11 +6727,11 @@
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= ST_ID,
>  		.model_id	= ST_M25P128,
>  		.total_size	= 16384,
>  		.page_size	= 256,
> -		.tested		= TEST_OK_PREW,
> +		.tested		= TEST_UNTESTED,

why?

>  		.probe		= probe_spi_rdid,
>  		.probe_timing	= TIMING_ZERO,
>  		.block_erasers	=
>  		{
>  			{
> @@ -6778,10 +6802,11 @@
>  			}
>  		},
>  		.unlock		= spi_disable_blockprotect,
>  		.write		= spi_chip_write_256,
>  		.read		= spi_chip_read,
> +		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "ST",
>  		.name		= "M25PX64",
> @@ -7774,11 +7799,11 @@
>  		.read		= spi_chip_read,
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X10",
> +		.name		= "W25x10",

ah i think i see the pattern... you are reverting my last changes.
you need to rebase your changes on top of mine/the ones in svn instead.

>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X10,
>  		.total_size	= 128,
>  		.page_size	= 256,
> @@ -7805,11 +7830,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X20",
> +		.name		= "W25x20",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X20,
>  		.total_size	= 256,
>  		.page_size	= 256,
> @@ -7836,11 +7861,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X40",
> +		.name		= "W25x40",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X40,
>  		.total_size	= 512,
>  		.page_size	= 256,
> @@ -7867,11 +7892,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X80",
> +		.name		= "W25x80",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X80,
>  		.total_size	= 1024,
>  		.page_size	= 256,
> @@ -7898,11 +7923,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X16",
> +		.name		= "W25x16",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X16,
>  		.total_size	= 2048,
>  		.page_size	= 256,
> @@ -7935,11 +7960,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X32",
> +		.name		= "W25x32",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X32,
>  		.total_size	= 4096,
>  		.page_size	= 256,
> @@ -7972,11 +7997,11 @@
>  		.voltage	= {2700, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
> -		.name		= "W25X64",
> +		.name		= "W25x64",
>  		.bustype	= CHIP_BUSTYPE_SPI,
>  		.manufacture_id	= WINBOND_NEX_ID,
>  		.model_id	= WINBOND_NEX_W25X64,
>  		.total_size	= 8192,
>  		.page_size	= 256,
> @@ -8039,13 +8064,13 @@
>  		.manufacture_id	= WINBOND_ID,
>  		.model_id	= WINBOND_W29C020,
>  		.total_size	= 256,
>  		.page_size	= 128,
>  		.feature_bits	= FEATURE_LONG_RESET,
> -		.tested		= TEST_OK_PREW,
> +		.tested		= TEST_OK_PRE,
>  		.probe		= probe_jedec,
> -		.probe_timing	= 10,
> +		.probe_timing	= 10, 
>  		.block_erasers	=
>  		{
>  			{
>  				.eraseblocks = { {256 * 1024, 1} },
>  				.block_erase = erase_chip_block_jedec,
> @@ -8129,10 +8154,11 @@
>  			}
>  		},
>  		.printlock	= printlock_w39l040,
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600},
>  	},
>  
>  	{
>  		.vendor		= "Winbond",
>  		.name		= "W39V040A",
> @@ -8273,10 +8299,11 @@
>  		},
>  		.printlock	= printlock_w39v040fb,
>  		.unlock		= unlock_w39v040fb,
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /*Also offers a 12V fast program */

space after /* please

>  	},
>  
>  	{
>  		.vendor		= "Winbond",
>  		.name		= "W39V040FC",
> @@ -8300,10 +8327,11 @@
>  			}
>  		},
>  		.printlock	= printlock_w39v040fc,
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /*Also offers a 12V fast program */

again

>  	},
>  
>  	{
>  		.vendor		= "Winbond",
>  		.name		= "W39V080A",
> @@ -8395,13 +8423,13 @@
>  		.manufacture_id	= WINBOND_ID,
>  		.model_id	= WINBOND_W49V002A,
>  		.total_size	= 256,
>  		.page_size	= 128,
>  		.feature_bits	= FEATURE_EITHER_RESET,
> -		.tested		= TEST_OK_PREW,
> +		.tested		= TEST_OK_PRE,
>  		.probe		= probe_jedec,
> -		.probe_timing	= 10,
> +		.probe_timing	= 10, 
>  		.block_erasers	=
>  		{
>  			{
>  				.eraseblocks = {
>  					{64 * 1024, 3},
> @@ -8504,10 +8532,11 @@
>  			}
>  		},
>  		.printlock	= printlock_w39v080fa_dual,
>  		.write		= write_jedec_1,
>  		.read		= read_memmapped,
> +		.voltage	= {3000, 3600}, /* 12 V fast program mode */
>  	},
>  
>  	{
>  		.vendor		= "AMIC",
>  		.name		= "unknown AMIC SPI chip",

i just skimmed through it, so i may have missed a few things.

thanks for trying to provide more context in the patch. it is not
enough though... the number of 5 i told you was just an example.
this adds 5 lines above and 5 lines below every change in a patch.
what i wanted to accomplish is that the model name of every chip that
is changed is mentioned in the patch. so depending on the number of
erasers in the affected chips a number as high as 20 or so is needed
(another example number).

> I believe I've addressed all of your issues.
> What's the correct datasheet for M25PX16 ? There seem to be several of them
> , by different companies.

st created a joint venture with others forming numonyx.
numonyx was acquired by micron later...
http://www.micron.com/get-document/?documentId=5983
-- 
Kind regards/Mit freundlichen Grüßen, Stefan Tauner




More information about the flashrom mailing list