[flashrom] Additional voltages

Steven Zakulec spzakulec at gmail.com
Mon Jul 18 23:42:35 CEST 2011


On Sat, Jul 16, 2011 at 10:57 AM, Stefan Tauner <
stefan.tauner at student.tuwien.ac.at> wrote:

> On Fri, 15 Jul 2011 23:26:23 -0400
> Steven Zakulec <spzakulec at gmail.com> wrote:
>
> > I believe I've adjusted the phrasings so there's one style for each
> comment
> > type.
>
> almost ;)
>
> > The only issue I've come across is the Intel 28F002BC/BL/BV/BX-T.
> > From my reading of the datasheets, the later two are compatible with each
> > other voltage-wise, but the BC and BL versions are definitely not- they
> have
> > non-overlapping ranges for reading.
>
> i have looked at 29044901.pdf (28F002BL) and 29053105.pdf (28F002BV)
> briefly, but could not see the issue. what is the problem exactly,
> where should i look?
>
>
> > Index: flashchips.c
> > ===================================================================
> > --- flashchips.c      (revision 1373)
> > +++ flashchips.c      (working copy)
> > @@ -86,92 +86,93 @@
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29F002(N)BB",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29F002BB,
> >               .total_size     = 256,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 3},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {4750, 5250}, /* -55 speed is +-5%, all
> others +-10% */
> > +             .voltage        = {4750, 5250}, /* -55 speed is 4.75-5.25V,
> others 4.5-5.5V */
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29F002(N)BT",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29F002BT,
> >               .total_size     = 256,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 3},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {4750, 5250}, /* -55 speed is 4.75-5.25V,
> others 4.5-5.5V */
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29F016D",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29F016D,
> >               .total_size     = 2 * 1024,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 32} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {2048 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> > @@ -229,330 +230,338 @@
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV001BB",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV001BB,
> >               .total_size     = 128,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {8 * 1024, 1},
> >                                       {4 * 1024, 2},
> >                                       {16 * 1024, 7},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {128 * 1024, 1} },
> >                               .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",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV001BT,
> >               .total_size     = 128,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 7},
> >                                       {4 * 1024, 2},
> >                                       {8 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {128 * 1024, 1} },
> >                               .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",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV002BB,
> >               .total_size     = 256,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 3},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .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",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV002BT,
> >               .total_size     = 256,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 3},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .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",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV004BB,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 7},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV004BT",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV004BT,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 7},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV008BB",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV008BB,
> >               .total_size     = 1024,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 15},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600} /* -70R is 3.0-3.6V, others
> 2.7-3.6V */
> before you have used this (note the additional word "speed"):
>                .voltage        = {3000, 3600}, /* -55 speed is 3.0-3.6V,
> others 2.7-3.6V */>   },
>
> please change all of those lines to:
>                .voltage        = {3000, 3600}, /* 3.0-3.6V for type -55,
> others 2.7-3.6V */
> etc.
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV008BT",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV008BT,
> >               .total_size     = 1024,
> >               .page_size      = 64 * 1024, /* unused */
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 15},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600} /* -70R is 3.0-3.6V, others
> 2.7-3.6V */
> same here
>
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV040B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV040B,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {2700, 3600},
> > +             .voltage        = {3000, 3600}, /* -60R is 3.0-3.6V, others
> 2.7-3.6V*/
> and here
> >       },
> >
> >       {
> >               .vendor         = "AMD",
> >               .name           = "Am29LV081B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = AMD_ID,
> >               .model_id       = AMD_AM29LV080B,
> >               .total_size     = 1024,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> /* datasheet specifies address as don't care */
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 16} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {2700, 3600},
> > +             .voltage        = {3000, 3600}, /* -70R is 3.0-3.6V, others
> 2.7-3.6V */
> and here
>
> >       },
> >
> >       {
> >               .vendor         = "AMIC",
> >               .name           = "A25L05PT",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = AMIC_ID,
> >               .model_id       = AMIC_A25L05PT,
> >               .total_size     = 64,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid4,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {32 * 1024, 1},
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 1},
> >                                       {4 * 1024, 2},
> >                               },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .printlock      =
> spi_prettyprint_status_register_amic_a25l05p,
> >               .unlock         = spi_disable_blockprotect,
> > @@ -564,60 +573,61 @@
> >       {
> >               .vendor         = "AMIC",
> >               .name           = "A25L05PU",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = AMIC_ID,
> >               .model_id       = AMIC_A25L05PU,
> >               .total_size     = 64,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid4,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {4 * 1024, 2},
> >                                       {8 * 1024, 1},
> >                                       {16 * 1024, 1},
> >                                       {32 * 1024, 1},
> >                               },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .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",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = AMIC_ID,
> >               .model_id       = AMIC_A25L10PT,
> >               .total_size     = 128,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid4,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 1},
> >                                       {32 * 1024, 1},
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 1},
> >                                       {4 * 1024, 2},
> >                               },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {128 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .printlock      =
> spi_prettyprint_status_register_amic_a25l05p,
> > @@ -1305,99 +1315,99 @@
> >               .model_id       = ATMEL_AT25DF021,
> >               .total_size     = 256,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 64} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 8} },
> >                               .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,
> >                       }
> >               },
> >               .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 */
>                .voltage        = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V
> models available */
> would be terser, but it is ok as it is too. if you change it, please change
> all occurrences alike.
>
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT25DF041A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT25DF041A,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 16} },
> >                               .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,
> >                       }
> >               },
> >               .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",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT25DF081,
> >               .total_size     = 1024,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 256} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 32} },
> >                               .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} },
> > @@ -1419,60 +1429,61 @@
> >               .model_id       = ATMEL_AT25DF081A,
> >               .total_size     = 1024,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 256} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 32} },
> >                               .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,
> >                       }
> >               },
> >               .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",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT25DF161,
> >               .total_size     = 2048,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 512} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 64} },
> >                               .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} },
> > @@ -1746,61 +1757,61 @@
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .printlock      =
> spi_prettyprint_status_register_at25fs040,
> >               .unlock         = spi_disable_blockprotect_at25fs040,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT26DF041",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT26DF041,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .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}, /* 3.0-3.6V for higher
> speed, 2.7-3.6V normal */
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT26DF081A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT26DF081A,
> >               .total_size     = 1024,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 256} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 32} },
> >                               .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} },
> > @@ -2087,77 +2098,77 @@
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT45DB041D",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT45DB041D,
> >               .total_size     = 512 /* Size can only be determined from
> status register */,
> >               .page_size      = 256 /* Size can only be determined from
> status register */,
> >               .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 */
>
> what about this one btw?
>
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT45DB081D",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT45DB081D,
> >               .total_size     = 1024 /* Size can only be determined from
> status register */,
> >               .page_size      = 256 /* Size can only be determined from
> status register */,
> >               .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 there's a
> 2.5-3.6V & 2.7-3.6V model */
> >
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT45DB161D",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT45DB161D,
> >               .total_size     = 2048 /* Size can only be determined from
> status register */,
> >               .page_size      = 512 /* Size can only be determined from
> status register */,
> >               .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 there's a
> 2.5-3.6V & 2.7-3.6V model */
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT45DB321C",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT45DB321C,
> >               .total_size     = 4224 /* No power of two sizes */,
> >               .page_size      = 528 /* No power of two sizes */,
> >               .tested         = TEST_BAD_READ,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .write          = NULL,
> >               .read           = NULL /* Incompatible read */,
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "AT45DB321D",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = ATMEL_AT45DB321D,
> >               .total_size     = 4096 /* Size can only be determined from
> status register */,
> >               .page_size      = 512 /* Size can only be determined from
> status register */,
> >               .tested         = TEST_BAD_READ,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .write          = NULL,
> > @@ -2290,60 +2301,61 @@
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "Bright",
> >               .name           = "BM29F040",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = BRIGHT_ID,
> >               .model_id       = BRIGHT_BM29F040,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PR,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "EMST",
> >               .name           = "F49B002UA",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = EMST_ID,
> >               .model_id       = EMST_F49B002UA,
> >               .total_size     = 256,
> >               .page_size      = 4096,
> >               .feature_bits   = FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {128 * 1024, 1},
> >                                       {96 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .write          = write_jedec_1,
> > @@ -3415,119 +3427,120 @@
> >
> >       {
> >               .vendor         = "Hyundai",
> >               .name           = "HY29F002T",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = HYUNDAI_ID,
> >               .model_id       = HYUNDAI_HY29F002T,
> >               .total_size     = 256,
> >               .page_size      = 256 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET, /* Some revisions
> may need FEATURE_ADDR_2AA */
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO, /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 3},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {4750, 5250}, /* 5.0V +-5% for -45 model,
> +-10% for rest */
> > +             .voltage        = {4750, 5250}, /* -45 speed is 4.75-5.25V,
> others 4.5-5.5V */
> please change to:
>                .voltage        = {4750, 5250}, /* 4.75-5.25V for type -45,
> others 4.5-5.5V */
>
> >       },
> >
> >       {
> >               .vendor         = "Hyundai",
> >               .name           = "HY29F002B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = HYUNDAI_ID,
> >               .model_id       = HYUNDAI_HY29F002B,
> >               .total_size     = 256,
> >               .page_size      = 256 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET, /* Some revisions
> may need FEATURE_ADDR_2AA */
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO, /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 3},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {4750, 5250}, /* 5.0V +-5% for -45 model,
> +-10% for rest */
> > +             .voltage        = {4750, 5250}, /* -45 speed is 4.75-5.25V,
> others 4.5-5.5V */
> same here
>
> >       },
> >
> >       {
> >               .vendor         = "Hyundai",
> >               .name           = "HY29F040A",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = HYUNDAI_ID,
> >               .model_id       = HYUNDAI_HY29F040A,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "Intel",
> >               .name           = "28F001BN/BX-B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = INTEL_ID,
> >               .model_id       = INTEL_28F001B,
> >               .total_size     = 128,
> >               .page_size      = 128 * 1024, /* 8k + 2x4k + 112k */
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {8 * 1024, 1},
> >                                       {4 * 1024, 2},
> >                                       {112 * 1024, 1},
> >                               },
> >                               .block_erase = erase_block_82802ab,
> >                       },
> >               },
> >               .write          = write_82802ab,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> > @@ -3555,61 +3568,61 @@
> >               .write          = write_82802ab,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "Intel",
> >               .name           = "28F002BC/BL/BV/BX-T",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = INTEL_ID,
> >               .model_id       = INTEL_28F002T,
> >               .total_size     = 256,
> >               .page_size      = 256 * 1024,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_82802ab,
> >               .probe_timing   = TIMING_ZERO, /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {128 * 1024, 1},
> >                                       {96 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_block_82802ab,
> >                       },
> >               },
> >               .write          = write_82802ab,
> >               .read           = read_memmapped,
> > -             .voltage        = {4500, 5500}, /* 5.0V +-10% read, 12V
> fast program & erase- +-5% standard, +-10% option */
> > +             .voltage        = {4500, 5500}, /* 5.0V +-10% read, 12V
> fast program & erase- +-5% standard, +-10% option- differing read voltages
> */
> please discuss this with me on irc (or mail). you can also just leave
> this change out for now and we will commit the rest.
>
> you have dropped percentage indication in favor of absolute voltages
> elsewhere. OTOH this line is already way too long... maybe make it a
> multiline comment above the field, depending on what needs to be added
> after we have discussed the issues you have discovered.
>
> >       },
> >
> >       {
> >               .vendor         = "Intel",
> >               .name           = "28F008S3/S5/SC",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = INTEL_ID,
> >               .model_id       = INTEL_28F004S3,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_82802ab,
> >               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_block_82802ab,
> >                       },
> >               },
> >               .unlock         = unlock_28f004s5,
> >               .write          = write_82802ab,
> >               .read           = read_memmapped,
> >       },
> >
> >       {
> >               .vendor         = "Intel",
> >               .name           = "28F004B5/BE/BV/BX-B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = INTEL_ID,
> > @@ -4025,60 +4038,61 @@
> >               .vendor         = "Macronix",
> >               .name           = "MX25L1635E",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = MACRONIX_ID,
> >               .model_id       = MACRONIX_MX25L1635E,
> >               .total_size     = 2048,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 512} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .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,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Macronix",
> >               .name           = "MX25L3205",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = MACRONIX_ID,
> >               .model_id       = MACRONIX_MX25L3205,
> >               .total_size     = 4096,
> >               .page_size      = 256,
> >               .feature_bits   = FEATURE_WRSR_WREN,
> >               .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 = { {4 * 1024, 1024} },
> >                               .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,
> >                       },
> >               },
> > @@ -4317,60 +4331,61 @@
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "Macronix",
> >               .name           = "MX29F040",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = MACRONIX_ID,
> >               .model_id       = MACRONIX_MX29F040,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {4500, 5500},
> >       },
> >
> >       {
> >               .vendor         = "Macronix",
> >               .name           = "MX29LV040",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = MACRONIX_ID,
> >               .model_id       = MACRONIX_MX29LV040,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8}, },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> > @@ -4748,60 +4763,61 @@
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = PMC_ID,
> >               .model_id       = PMC_PM25LV016B,
> >               .total_size     = 2048,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 512} },
> >                               .block_erase = spi_block_erase_d7,
> >                       }, {
> >                               .eraseblocks = { {4 * 1024, 512} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .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,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "PMC",
> >               .name           = "Pm25LV020",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = PMC_ID,
> >               .model_id       = PMC_PM25LV020,
> >               .total_size     = 256,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 64} },
> >                               .block_erase = spi_block_erase_d7,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 4} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> >               .voltage        = {2700, 3600},
> > @@ -4873,60 +4889,61 @@
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "PMC",
> >               .name           = "Pm25LV512",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = PMC_ID,
> >               .model_id       = PMC_PM25LV512,
> >               .total_size     = 64,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 16} },
> >                               .block_erase = spi_block_erase_d7,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 2} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "PMC",
> >               .name           = "Pm29F002T",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = PMC_ID_NOPREFIX,
> >               .model_id       = PMC_PM29F002T,
> >               .total_size     = 256,
> >               .page_size      = 8 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_FIXME,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {128 * 1024, 1},
> >                                       {96 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       },
> >               },
> >               .write          = write_jedec_1,
> > @@ -5174,60 +5191,61 @@
> >               .unlock         = unlock_82802ab,
> >               .write          = write_82802ab,
> >               .read           = read_memmapped,
> >               .voltage        = {3000, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Spansion",
> >               .name           = "S25FL004A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SPANSION_ID,
> >               .model_id       = SPANSION_S25FL004A,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Spansion",
> >               .name           = "S25FL008A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SPANSION_ID,
> >               .model_id       = SPANSION_S25FL008A,
> >               .total_size     = 1024,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 16} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> > @@ -5254,115 +5272,118 @@
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Spansion",
> >               .name           = "S25FL032A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SPANSION_ID,
> >               .model_id       = SPANSION_S25FL032A,
> >               .total_size     = 4096,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 64} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {4 * 1024 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Spansion",
> >               .name           = "S25FL064A",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SPANSION_ID,
> >               .model_id       = SPANSION_S25FL064A,
> >               .total_size     = 8192,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 128} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {8 * 1024 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF010.REMS",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF010_REMS,
> >               .total_size     = 128,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_spi_rems,
> >               .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 = { {128 * 1024, 1} },
> >                               .block_erase = spi_block_erase_60,
> >                       },
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_1,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF016B",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF016B,
> >               .total_size     = 2048,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 512} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 64} },
> >                               .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,
> > @@ -5446,60 +5467,61 @@
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF040.REMS",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF040_REMS,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PR,
> >               .probe          = probe_spi_rems,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 16} },
> >                               .block_erase = spi_block_erase_52,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = spi_block_erase_60,
> >                       },
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_1,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF040B",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF040B,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 16} },
> >                               .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,
> > @@ -5511,95 +5533,97 @@
> >               .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25LF040A.RES",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF040_REMS,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PROBE,
> >               .probe          = probe_spi_res2,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 16} },
> >                               .block_erase = spi_block_erase_52,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = spi_block_erase_60,
> >                       },
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_1,
> >               .read           = spi_chip_read,
> > +             .voltage        = {3000, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF040B.REMS",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF040B_REMS,
> >               .total_size     = 512,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PR,
> >               .probe          = probe_spi_rems,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 16} },
> >                               .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,
> >                       },
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_1,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "SST",
> >               .name           = "SST25VF080B",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = SST_ID,
> >               .model_id       = SST_SST25VF080B,
> >               .total_size     = 1024,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 256} },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {32 * 1024, 32} },
> >                               .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,
> > @@ -6753,153 +6777,154 @@
> >               .read           = spi_chip_read,
> >       },
> >
> >       {
> >               .vendor         = "ST",
> >               .name           = "M25PX32",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ST_ID,
> >               .model_id       = ST_M25PX32,
> >               .total_size     = 4096,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { { 4 * 1024, 1024 } },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 64} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {4 * 1024 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> > +             .voltage        = {2700, 3600},
> >       },
> >
> >       {
> >               .vendor         = "ST",
> >               .name           = "M25PX64",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ST_ID,
> >               .model_id       = ST_M25PX64,
> >               .total_size     = 8192,
> >               .page_size      = 256,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { { 4 * 1024, 2048 } },
> >                               .block_erase = spi_block_erase_20,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 128} },
> >                               .block_erase = spi_block_erase_d8,
> >                       }, {
> >                               .eraseblocks = { {8 * 1024 * 1024, 1} },
> >                               .block_erase = spi_block_erase_c7,
> >                       }
> >               },
> >               .unlock         = spi_disable_blockprotect,
> >               .write          = spi_chip_write_256,
> >               .read           = spi_chip_read,
> >       },
> >
> >       {
> >               .vendor         = "ST",
> >               .name           = "M29F002B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = ST_ID,
> >               .model_id       = ST_M29F002B,
> >               .total_size     = 256,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {16 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {32 * 1024, 1},
> >                                       {64 * 1024, 3},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {4750, 5250}, /* Datasheet says some are
> only 4.75-5.25 V */
> > +             .voltage        = {4750, 5250}, /* -X model is 4.75-5.25V,
> others 4.5-5.5V */
>
> "model" instead of "speed"/nothing above, please use:
>                .voltage        = {4750, 5250}, /* 4.75-5.25V for type -X,
> others 4.5-5.5V */
>
> >       },
> >
> >       {
> >               .vendor         = "ST",
> >               .name           = "M29F002T/NT",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = ST_ID,
> >               .model_id       = ST_M29F002T,
> >               .total_size     = 256,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO,  /* Datasheet has no timing
> info specified */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = {
> >                                       {64 * 1024, 3},
> >                                       {32 * 1024, 1},
> >                                       {8 * 1024, 2},
> >                                       {16 * 1024, 1},
> >                               },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {256 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {4750, 5250}, /* Datasheet says some are
> only 4.75-5.25 V */
> > +             .voltage        = {4750, 5250}, /* -X model is 4.75-5.25V,
> others 4.5-5.5V */
>
> see above
>
> >       },
> >
> >       {
> >               .vendor         = "ST",
> >               .name           = "M29F040B",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = ST_ID,
> >               .model_id       = ST_M29F040B,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = TIMING_ZERO, /* datasheet specifies no
> timing */
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8}, },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {4500, 5500},
> >       },
> >
> >       {
> > @@ -8104,60 +8129,61 @@
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39L040",
> >               .bustype        = CHIP_BUSTYPE_PARALLEL,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39L040,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PR,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {4 * 1024, 128} },
> >                               .block_erase = erase_block_jedec,
> >                       }, {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39l040,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V040A",
> >               .bustype        = CHIP_BUSTYPE_LPC,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V040A,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PR,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v040a,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {3000, 3600},
> >       },
> >
> > @@ -8248,87 +8274,89 @@
> >               .read           = read_memmapped,
> >               .voltage        = {3000, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V040FB",
> >               .bustype        = CHIP_BUSTYPE_FWH,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V040B,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_REGISTERMAP |
> FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PREW,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v040fb,
> >               .unlock         = unlock_w39v040fb,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600}, /* Also has 12V fast
> program */
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V040FC",
> >               .bustype        = CHIP_BUSTYPE_FWH,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V040C,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_REGISTERMAP |
> FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v040fc,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600}, /* Also has 12V fast
> program */
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V080A",
> >               .bustype        = CHIP_BUSTYPE_LPC,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V080A,
> >               .total_size     = 1024,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 16} },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v080a,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> >               .voltage        = {3000, 3600},
> >       },
> >
> > @@ -8451,88 +8479,89 @@
> >               .read           = read_memmapped,
> >               .voltage        = {3000, 3600},
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V080FA",
> >               .bustype        = CHIP_BUSTYPE_FWH,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V080FA,
> >               .total_size     = 1024,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_REGISTERMAP |
> FEATURE_EITHER_RESET,
> >               .tested         = TEST_OK_PRE,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 16}, },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {1024 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v080fa,
> >               .unlock         = unlock_w39v080fa,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > -             .voltage        = {3000, 3600}, /* 12 V fast program mode
> */
> > +             .voltage        = {3000, 3600}, /* Also has 12V fast
> program*/
>
> missing space at the end
>
> >       },
> >
> >       {
> >               .vendor         = "Winbond",
> >               .name           = "W39V080FA (dual mode)",
> >               .bustype        = CHIP_BUSTYPE_FWH,
> >               .manufacture_id = WINBOND_ID,
> >               .model_id       = WINBOND_W39V080FA_DM,
> >               .total_size     = 512,
> >               .page_size      = 64 * 1024,
> >               .feature_bits   = FEATURE_REGISTERMAP |
> FEATURE_EITHER_RESET,
> >               .tested         = TEST_UNTESTED,
> >               .probe          = probe_jedec,
> >               .probe_timing   = 10,
> >               .block_erasers  =
> >               {
> >                       {
> >                               .eraseblocks = { {64 * 1024, 8}, },
> >                               .block_erase = erase_sector_jedec,
> >                       }, {
> >                               .eraseblocks = { {512 * 1024, 1} },
> >                               .block_erase = erase_chip_block_jedec,
> >                       }
> >               },
> >               .printlock      = printlock_w39v080fa_dual,
> >               .write          = write_jedec_1,
> >               .read           = read_memmapped,
> > +             .voltage        = {3000, 3600}, /* Also has 12V fast
> program */
> >       },
> >
> >       {
> >               .vendor         = "AMIC",
> >               .name           = "unknown AMIC SPI chip",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = AMIC_ID,
> >               .model_id       = GENERIC_DEVICE_ID,
> >               .total_size     = 0,
> >               .page_size      = 256,
> >               .tested         = TEST_BAD_PREW,
> >               .probe          = probe_spi_rdid4,
> >               .probe_timing   = TIMING_ZERO,
> >               .write          = NULL,
> >               .read           = NULL,
> >       },
> >
> >       {
> >               .vendor         = "Atmel",
> >               .name           = "unknown Atmel SPI chip",
> >               .bustype        = CHIP_BUSTYPE_SPI,
> >               .manufacture_id = ATMEL_ID,
> >               .model_id       = GENERIC_DEVICE_ID,
> >               .total_size     = 0,
> >               .page_size      = 256,
> >               .tested         = TEST_BAD_PREW,
> >               .probe          = probe_spi_rdid,
> >               .probe_timing   = TIMING_ZERO,
> >               .write          = NULL,
> >               .read           = NULL,
>
> i think the next iteration will be committable.
>
> i have not looked how many chips are still missing voltage fields, but
> one could use my voltage printing patches to see that easily... (by
> using flashrom -V -L)
> http://patchwork.coreboot.org/patch/3215/
> http://patchwork.coreboot.org/patch/3216/
> dunno if they still apply cleanly, but shouldnt be hard to rebase.
> --
> Kind regards/Mit freundlichen Grüßen, Stefan Tauner
>

I've dropped the Intel one for now while I look more closely at it.
Otherwise, I just adjusted all the comments to fit your suggestions.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20110718/8b8fb22a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: voltage-patch-v8.patch
Type: text/x-diff
Size: 53995 bytes
Desc: not available
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20110718/8b8fb22a/attachment.bin>


More information about the flashrom mailing list