7d56b17948f6c8f861ffbf56f0fefdc079cfb88e
[coreboot.git] / util / flashrom / flashchips.c
1 /*
2  * This file is part of the flashrom project.
3  *
4  * Copyright (C) 2000 Silicon Integrated System Corporation
5  * Copyright (C) 2004 Tyan Corp
6  * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
21  */
22
23 #include "flash.h"
24
25 /**
26  * List of supported flash ROM chips.
27  *
28  * Please keep the list sorted by vendor name and chip name, so that
29  * the output of 'flashrom -L' is alphabetically sorted.
30  */
31 struct flashchip flashchips[] = {
32
33         /* Vendor, Chip, Vendor ID, Chip ID,
34          * Total size (kB), Page size (B),
35          * Test status,
36          * Probe function, Erase function, Write function, Read function
37          */
38
39         {
40                 .vendor         = "AMD",
41                 .name           = "Am29F002(N)BB",
42                 .manufacture_id = AMD_ID,
43                 .model_id       = AM_29F002BB,
44                 .total_size     = 256,
45                 .page_size      = 256,
46                 .tested         = TEST_UNTESTED,
47                 .probe          = probe_jedec,
48                 .erase          = erase_chip_jedec,
49                 .write          = write_en29f002a,
50         },
51
52         {
53                 .vendor         = "AMD",
54                 .name           = "Am29F002(N)BT",
55                 .manufacture_id = AMD_ID,
56                 .model_id       = AM_29F002BT,
57                 .total_size     = 256,
58                 .page_size      = 256,
59                 .tested         = TEST_OK_PREW,
60                 .probe          = probe_jedec,
61                 .erase          = erase_chip_jedec,
62                 .write          = write_en29f002a,
63         },
64
65         {
66                 .vendor         = "AMD",
67                 .name           = "Am29F016D",
68                 .manufacture_id = AMD_ID,
69                 .model_id       = AM_29F016D,
70                 .total_size     = 2048,
71                 .page_size      = 64 * 1024,
72                 .tested         = TEST_UNTESTED,
73                 .probe          = probe_29f040b,
74                 .erase          = erase_29f040b,
75                 .write          = write_29f040b,
76         },
77
78         {
79                 .vendor         = "AMD",
80                 .name           = "Am29F040B",
81                 .manufacture_id = AMD_ID,
82                 .model_id       = AM_29F040B,
83                 .total_size     = 512,
84                 .page_size      = 64 * 1024,
85                 .tested         = TEST_OK_PREW,
86                 .probe          = probe_29f040b,
87                 .erase          = erase_29f040b,
88                 .write          = write_29f040b,
89         },
90
91         {
92                 .vendor         = "AMD",
93                 .name           = "Am29F080B",
94                 .manufacture_id = 0x01,
95                 .model_id       = 0xd5,
96                 .total_size     = 1024,
97                 .page_size      = 64 * 1024,
98                 .tested         = TEST_UNTESTED,
99                 .probe          = probe_jedec,
100                 .erase          = erase_29f040b,
101                 .write          = write_29f040b,
102         },
103
104         {
105                 .vendor         = "AMD",
106                 .name           = "Am29LV040B",
107                 .manufacture_id = AMD_ID,
108                 .model_id       = AM_29LV040B,
109                 .total_size     = 512,
110                 .page_size      = 64 * 1024,
111                 .tested         = TEST_UNTESTED,
112                 .probe          = probe_29f040b,
113                 .erase          = erase_29f040b,
114                 .write          = write_29f040b,
115         },
116
117         {
118                 .vendor         = "AMD",
119                 .name           = "Am29LV081B",
120                 .manufacture_id = 0x01,
121                 .model_id       = 0x38,
122                 .total_size     = 1024,
123                 .page_size      = 64 * 1024,
124                 .tested         = TEST_UNTESTED,
125                 .probe          = probe_29f040b,
126                 .erase          = erase_29f040b,
127                 .write          = write_29f040b,
128         },
129
130         {
131                 .vendor         = "ASD",
132                 .name           = "AE49F2008",
133                 .manufacture_id = ASD_ID,
134                 .model_id       = ASD_AE49F2008,
135                 .total_size     = 256,
136                 .page_size      = 128,
137                 .tested         = TEST_UNTESTED,
138                 .probe          = probe_jedec,
139                 .erase          = erase_chip_jedec,
140                 .write          = write_jedec,
141         },
142
143         {
144                 .vendor         = "Atmel",
145                 .name           = "AT25DF021",
146                 .manufacture_id = ATMEL_ID,
147                 .model_id       = AT_25DF021,
148                 .total_size     = 256,
149                 .page_size      = 256,
150                 .tested         = TEST_UNTESTED,
151                 .probe          = probe_spi_rdid,
152                 .erase          = spi_chip_erase_60_c7,
153                 .write          = spi_chip_write,
154                 .read           = spi_chip_read,
155         },
156
157         {
158                 .vendor         = "Atmel",
159                 .name           = "AT25DF041A",
160                 .manufacture_id = ATMEL_ID,
161                 .model_id       = AT_25DF041A,
162                 .total_size     = 512,
163                 .page_size      = 256,
164                 .tested         = TEST_UNTESTED,
165                 .probe          = probe_spi_rdid,
166                 .erase          = spi_chip_erase_60_c7,
167                 .write          = spi_chip_write,
168                 .read           = spi_chip_read,
169         },
170
171         {
172                 .vendor         = "Atmel",
173                 .name           = "AT25DF081",
174                 .manufacture_id = ATMEL_ID,
175                 .model_id       = AT_25DF081,
176                 .total_size     = 1024,
177                 .page_size      = 256,
178                 .tested         = TEST_UNTESTED,
179                 .probe          = probe_spi_rdid,
180                 .erase          = spi_chip_erase_60_c7,
181                 .write          = spi_chip_write,
182                 .read           = spi_chip_read,
183         },
184
185         {
186                 .vendor         = "Atmel",
187                 .name           = "AT25DF161",
188                 .manufacture_id = ATMEL_ID,
189                 .model_id       = AT_25DF161,
190                 .total_size     = 2048,
191                 .page_size      = 256,
192                 .tested         = TEST_UNTESTED,
193                 .probe          = probe_spi_rdid,
194                 .erase          = spi_chip_erase_60_c7,
195                 .write          = spi_chip_write,
196                 .read           = spi_chip_read,
197         },
198
199         {
200                 .vendor         = "Atmel",
201                 .name           = "AT25DF321",
202                 .manufacture_id = ATMEL_ID,
203                 .model_id       = AT_25DF321,
204                 .total_size     = 4096,
205                 .page_size      = 256,
206                 .tested         = TEST_OK_PREW,
207                 .probe          = probe_spi_rdid,
208                 .erase          = spi_chip_erase_60_c7,
209                 .write          = spi_chip_write,
210                 .read           = spi_chip_read,
211         },
212
213         {
214                 .vendor         = "Atmel",
215                 .name           = "AT25DF321A",
216                 .manufacture_id = ATMEL_ID,
217                 .model_id       = AT_25DF321A,
218                 .total_size     = 4096,
219                 .page_size      = 256,
220                 .tested         = TEST_UNTESTED,
221                 .probe          = probe_spi_rdid,
222                 .erase          = spi_chip_erase_60_c7,
223                 .write          = spi_chip_write,
224                 .read           = spi_chip_read,
225         },
226
227         {
228                 .vendor         = "Atmel",
229                 .name           = "AT25DF641",
230                 .manufacture_id = ATMEL_ID,
231                 .model_id       = AT_25DF641,
232                 .total_size     = 8192,
233                 .page_size      = 256,
234                 .tested         = TEST_UNTESTED,
235                 .probe          = probe_spi_rdid,
236                 .erase          = spi_chip_erase_60_c7,
237                 .write          = spi_chip_write,
238                 .read           = spi_chip_read,
239         },
240
241         {
242                 .vendor         = "Atmel",
243                 .name           = "AT25F512B",
244                 .manufacture_id = ATMEL_ID,
245                 .model_id       = AT_25F512B,
246                 .total_size     = 64,
247                 .page_size      = 256,
248                 .tested         = TEST_UNTESTED,
249                 .probe          = probe_spi_rdid,
250                 .erase          = spi_chip_erase_60_c7,
251                 .write          = spi_chip_write,
252                 .read           = spi_chip_read,
253         },
254
255         {
256                 .vendor         = "Atmel",
257                 .name           = "AT25FS010",
258                 .manufacture_id = ATMEL_ID,
259                 .model_id       = AT_25FS010,
260                 .total_size     = 128,
261                 .page_size      = 256,
262                 .tested         = TEST_UNTESTED,
263                 .probe          = probe_spi_rdid,
264                 .erase          = spi_chip_erase_60_c7,
265                 .write          = spi_chip_write,
266                 .read           = spi_chip_read,
267         },
268
269         {
270                 .vendor         = "Atmel",
271                 .name           = "AT25FS040",
272                 .manufacture_id = ATMEL_ID,
273                 .model_id       = AT_25FS040,
274                 .total_size     = 512,
275                 .page_size      = 256,
276                 .tested         = TEST_UNTESTED,
277                 .probe          = probe_spi_rdid,
278                 .erase          = spi_chip_erase_60_c7,
279                 .write          = spi_chip_write,
280                 .read           = spi_chip_read,
281         },
282
283         {
284                 .vendor         = "Atmel",
285                 .name           = "AT26DF041",
286                 .manufacture_id = ATMEL_ID,
287                 .model_id       = AT_26DF041,
288                 .total_size     = 512,
289                 .page_size      = 256,
290                 .tested         = TEST_UNTESTED,
291                 .probe          = probe_spi_rdid,
292                 .erase          = NULL,
293                 .write          = NULL /* Incompatible Page write */,
294                 .read           = spi_chip_read,
295         },
296
297         {
298                 .vendor         = "Atmel",
299                 .name           = "AT26DF081A",
300                 .manufacture_id = ATMEL_ID,
301                 .model_id       = AT_26DF081A,
302                 .total_size     = 1024,
303                 .page_size      = 256,
304                 .tested         = TEST_UNTESTED,
305                 .probe          = probe_spi_rdid,
306                 .erase          = spi_chip_erase_60_c7,
307                 .write          = spi_chip_write,
308                 .read           = spi_chip_read,
309         },
310
311         {
312                 .vendor         = "Atmel",
313                 .name           = "AT26DF161",
314                 .manufacture_id = ATMEL_ID,
315                 .model_id       = AT_26DF161,
316                 .total_size     = 2048,
317                 .page_size      = 256,
318                 .tested         = TEST_UNTESTED,
319                 .probe          = probe_spi_rdid,
320                 .erase          = spi_chip_erase_60_c7,
321                 .write          = spi_chip_write,
322                 .read           = spi_chip_read,
323         },
324
325         {
326                 .vendor         = "Atmel",
327                 .name           = "AT26DF161A",
328                 .manufacture_id = ATMEL_ID,
329                 .model_id       = AT_26DF161A,
330                 .total_size     = 2048,
331                 .page_size      = 256,
332                 .tested         = TEST_UNTESTED,
333                 .probe          = probe_spi_rdid,
334                 .erase          = spi_chip_erase_60_c7,
335                 .write          = spi_chip_write,
336                 .read           = spi_chip_read,
337         },
338
339         /*The AT26DF321 has the same ID as the AT25DF321. */
340         /*{
341                 .vendor         = "Atmel",
342                 .name           = "AT26DF321",
343                 .manufacture_id = ATMEL_ID,
344                 .model_id       = AT_26DF321,
345                 .total_size     = 4096,
346                 .page_size      = 256,
347                 .tested         = TEST_UNTESTED,
348                 .probe          = probe_spi_rdid,
349                 .erase          = spi_chip_erase_60_c7,
350                 .write          = spi_chip_write,
351                 .read           = spi_chip_read,
352           },*/
353
354         {
355                 .vendor         = "Atmel",
356                 .name           = "AT26F004",
357                 .manufacture_id = ATMEL_ID,
358                 .model_id       = AT_26F004,
359                 .total_size     = 512,
360                 .page_size      = 256,
361                 .tested         = TEST_UNTESTED,
362                 .probe          = probe_spi_rdid,
363                 .erase          = spi_chip_erase_60_c7,
364                 .write          = NULL /* Incompatible Page write */,
365                 .read           = spi_chip_read,
366         },
367
368         {
369                 .vendor         = "Atmel",
370                 .name           = "AT29C020",
371                 .manufacture_id = ATMEL_ID,
372                 .model_id       = AT_29C020,
373                 .total_size     = 256,
374                 .page_size      = 256,
375                 .tested         = TEST_OK_PREW,
376                 .probe          = probe_jedec,
377                 .erase          = erase_chip_jedec,
378                 .write          = write_jedec,
379         },
380
381         {
382                 .vendor         = "Atmel",
383                 .name           = "AT29C040A",
384                 .manufacture_id = ATMEL_ID,
385                 .model_id       = AT_29C040A,
386                 .total_size     = 512,
387                 .page_size      = 256,
388                 .tested         = TEST_UNTESTED,
389                 .probe          = probe_jedec,
390                 .erase          = erase_chip_jedec,
391                 .write          = write_jedec,
392         },
393
394         {
395                 .vendor         = "Atmel",
396                 .name           = "AT45CS1282",
397                 .manufacture_id = ATMEL_ID,
398                 .model_id       = AT_45CS1282,
399                 .total_size     = 16896/*!*/,
400                 .page_size      = 1056/*!*/,
401                 .tested         = TEST_BAD_READ,
402                 .probe          = probe_spi_rdid,
403                 .erase          = NULL,
404                 .write          = NULL /* Incompatible Page write */,
405                 .read           = NULL /* Incompatible read */,
406         }, /* No power of two sizes */
407
408         {
409                 .vendor         = "Atmel",
410                 .name           = "AT45DB011D",
411                 .manufacture_id = ATMEL_ID,
412                 .model_id       = AT_45DB011D,
413                 .total_size     = 128/*!*/,
414                 .page_size      = 256/*!*/,
415                 .tested         = TEST_BAD_READ,
416                 .probe          = probe_spi_rdid,
417                 .erase          = NULL,
418                 .write          = NULL,
419                 .read           = NULL,
420         }, /* Size can only be determined from status register */
421
422         {
423                 .vendor         = "Atmel",
424                 .name           = "AT45DB021D",
425                 .manufacture_id = ATMEL_ID,
426                 .model_id       = AT_45DB021D,
427                 .total_size     = 256/*!*/,
428                 .page_size      = 256/*!*/,
429                 .tested         = TEST_BAD_READ,
430                 .probe          = probe_spi_rdid,
431                 .erase          = NULL,
432                 .write          = NULL,
433                 .read           = NULL,
434         }, /* Size can only be determined from status register */
435
436         {
437                 .vendor         = "Atmel",
438                 .name           = "AT45DB041D",
439                 .manufacture_id = ATMEL_ID,
440                 .model_id       = AT_45DB041D,
441                 .total_size     = 512/*!*/,
442                 .page_size      = 256/*!*/,
443                 .tested         = TEST_BAD_READ,
444                 .probe          = probe_spi_rdid,
445                 .erase          = NULL,
446                 .write          = NULL,
447                 .read           = NULL,
448         }, /* Size can only be determined from status register */
449
450         {
451                 .vendor         = "Atmel",
452                 .name           = "AT45DB081D",
453                 .manufacture_id = ATMEL_ID,
454                 .model_id       = AT_45DB081D,
455                 .total_size     = 1024/*!*/,
456                 .page_size      = 256/*!*/,
457                 .tested         = TEST_BAD_READ,
458                 .probe          = probe_spi_rdid,
459                 .erase          = NULL,
460                 .write          = NULL,
461                 .read           = NULL,
462         }, /* Size can only be determined from status register */
463
464         {
465                 .vendor         = "Atmel",
466                 .name           = "AT45DB161D",
467                 .manufacture_id = ATMEL_ID,
468                 .model_id       = AT_45DB161D,
469                 .total_size     = 2048/*!*/,
470                 .page_size      = 512/*!*/,
471                 .tested         = TEST_BAD_READ,
472                 .probe          = probe_spi_rdid,
473                 .erase          = NULL,
474                 .write          = NULL,
475                 .read           = NULL,
476         }, /* Size can only be determined from status register */
477
478         {
479                 .vendor         = "Atmel",
480                 .name           = "AT45DB321C",
481                 .manufacture_id = ATMEL_ID,
482                 .model_id       = AT_45DB321C,
483                 .total_size     = 4224/*!*/,
484                 .page_size      = 528/*!*/,
485                 .tested         = TEST_BAD_READ,
486                 .probe          = probe_spi_rdid,
487                 .erase          = NULL,
488                 .write          = NULL,
489                 .read           = NULL /* Incompatible read */,
490         }, /* No power of two sizes */
491
492         {
493                 .vendor         = "Atmel",
494                 .name           = "AT45DB321D",
495                 .manufacture_id = ATMEL_ID,
496                 .model_id       = AT_45DB321D,
497                 .total_size     = 4096/*!*/,
498                 .page_size      = 512/*!*/,
499                 .tested         = TEST_BAD_READ,
500                 .probe          = probe_spi_rdid,
501                 .erase          = NULL,
502                 .write          = NULL,
503                 .read           = NULL,
504         }, /* Size can only be determined from status register */
505
506         {
507                 .vendor         = "Atmel",
508                 .name           = "AT45DB642D",
509                 .manufacture_id = ATMEL_ID,
510                 .model_id       = AT_45DB642D,
511                 .total_size     = 8192/*!*/,
512                 .page_size      = 1024/*!*/,
513                 .tested         = TEST_BAD_READ,
514                 .probe          = probe_spi_rdid,
515                 .erase          = NULL,
516                 .write          = NULL,
517                 .read           = NULL,
518         }, /* Size can only be determined from status register */
519
520         {
521                 .vendor         = "Atmel",
522                 .name           = "AT49F002(N)",
523                 .manufacture_id = ATMEL_ID,
524                 .model_id       = AT_49F002N,
525                 .total_size     = 256,
526                 .page_size      = 256,
527                 .tested         = TEST_UNTESTED,
528                 .probe          = probe_jedec,
529                 .erase          = erase_chip_jedec,
530                 .write          = write_49f002,
531         },
532
533         {
534                 .vendor         = "Atmel",
535                 .name           = "AT49F002(N)T",
536                 .manufacture_id = ATMEL_ID,
537                 .model_id       = AT_49F002NT,
538                 .total_size     = 256,
539                 .page_size      = 256,
540                 .tested         = TEST_OK_PREW,
541                 .probe          = probe_jedec,
542                 .erase          = erase_chip_jedec,
543                 .write          = write_49f002,
544         },
545
546         {
547                 .vendor         = "AMIC",
548                 .name           = "A25L40P",
549                 .manufacture_id = AMIC_ID,
550                 .model_id       = AMIC_A25L40P,
551                 .total_size     = 512,
552                 .page_size      = 256,
553                 .tested         = TEST_OK_PREW,
554                 .probe          = probe_spi_rdid4,
555                 .erase          = spi_chip_erase_c7,
556                 .write          = spi_chip_write,
557                 .read           = spi_chip_read,
558         },
559
560         {
561                 .vendor         = "AMIC",
562                 .name           = "A29002B",
563                 .manufacture_id = AMIC_ID_NOPREFIX,
564                 .model_id       = AMIC_A29002B,
565                 .total_size     = 256,
566                 .page_size      = 64 * 1024,
567                 .tested         = TEST_UNTESTED,
568                 .probe          = probe_29f002,
569                 .erase          = erase_29f002,
570                 .write          = write_29f002,
571         },
572
573         {
574                 .vendor         = "AMIC",
575                 .name           = "A29002T",
576                 .manufacture_id = AMIC_ID_NOPREFIX,
577                 .model_id       = AMIC_A29002T,
578                 .total_size     = 256,
579                 .page_size      = 64 * 1024,
580                 .tested         = TEST_OK_PREW,
581                 .probe          = probe_29f002,
582                 .erase          = erase_29f002,
583                 .write          = write_29f002,
584         },
585
586         {
587                 .vendor         = "AMIC",
588                 .name           = "A29040B",
589                 .manufacture_id = AMIC_ID_NOPREFIX,
590                 .model_id       = AMIC_A29040B,
591                 .total_size     = 512,
592                 .page_size      = 64 * 1024,
593                 .tested         = TEST_OK_PR,
594                 .probe          = probe_29f040b,
595                 .erase          = erase_29f040b,
596                 .write          = write_29f040b,
597         },
598
599         {
600                 .vendor         = "AMIC",
601                 .name           = "A49LF040A",
602                 .manufacture_id = AMIC_ID_NOPREFIX,
603                 .model_id       = AMIC_A49LF040A,
604                 .total_size     = 512,
605                 .page_size      = 64 * 1024,
606                 .tested         = TEST_OK_PREW,
607                 .probe          = probe_49fl00x,
608                 .erase          = erase_49fl00x,
609                 .write          = write_49fl00x,
610         },
611
612         {
613                 .vendor         = "EMST",
614                 .name           = "F49B002UA",
615                 .manufacture_id = EMST_ID,
616                 .model_id       = EMST_F49B002UA,
617                 .total_size     = 256,
618                 .page_size      = 4096,
619                 .tested         = TEST_UNTESTED,
620                 .probe          = probe_jedec,
621                 .erase          = erase_chip_jedec,
622                 .write          = write_49f002,
623         },
624
625         {
626                 .vendor         = "EON",
627                 .name           = "EN29F002(A)(N)B",
628                 .manufacture_id = EON_ID,
629                 .model_id       = EN_29F002B,
630                 .total_size     = 256,
631                 .page_size      = 256,
632                 .tested         = TEST_UNTESTED,
633                 .probe          = probe_jedec,
634                 .erase          = erase_chip_jedec,
635                 .write          = write_en29f002a,
636         },
637
638         {
639                 .vendor         = "EON",
640                 .name           = "EN29F002(A)(N)T",
641                 .manufacture_id = EON_ID,
642                 .model_id       = EN_29F002T,
643                 .total_size     = 256,
644                 .page_size      = 256,
645                 .tested         = TEST_OK_PREW,
646                 .probe          = probe_jedec,
647                 .erase          = erase_chip_jedec,
648                 .write          = write_en29f002a,
649         },
650
651         {
652                 .vendor         = "Fujitsu",
653                 .name           = "MBM29F004BC",
654                 .manufacture_id = FUJITSU_ID,
655                 .model_id       = MBM29F004BC,
656                 .total_size     = 512,
657                 .page_size      = 64 * 1024,
658                 .tested         = TEST_UNTESTED,
659                 .probe          = probe_jedec,
660                 .erase          = NULL,
661                 .write          = NULL,
662         },
663
664         {
665                 .vendor         = "Fujitsu",
666                 .name           = "MBM29F004TC",
667                 .manufacture_id = FUJITSU_ID,
668                 .model_id       = MBM29F004TC,
669                 .total_size     = 512,
670                 .page_size      = 64 * 1024,
671                 .tested         = TEST_UNTESTED,
672                 .probe          = probe_jedec,
673                 .erase          = NULL,
674                 .write          = NULL,
675         },
676
677         {
678                 .vendor         = "Fujitsu",
679                 .name           = "MBM29F400BC",
680                 .manufacture_id = FUJITSU_ID,
681                 .model_id       = MBM29F400BC,
682                 .total_size     = 512,
683                 .page_size      = 64 * 1024,
684                 .tested         = TEST_UNTESTED,
685                 .probe          = probe_m29f400bt,
686                 .erase          = erase_m29f400bt,
687                 .write          = write_coreboot_m29f400bt,
688         },
689
690         {
691                 .vendor         = "Fujitsu",
692                 .name           = "MBM29F400TC",
693                 .manufacture_id = FUJITSU_ID,
694                 .model_id       = MBM29F400TC,
695                 .total_size     = 512,
696                 .page_size      = 64 * 1024,
697                 .tested         = TEST_UNTESTED,
698                 .probe          = probe_m29f400bt,
699                 .erase          = erase_m29f400bt,
700                 .write          = write_coreboot_m29f400bt,
701         },
702
703         {
704                 .vendor         = "Intel",
705                 .name           = "82802AB",
706                 .manufacture_id = INTEL_ID,
707                 .model_id       = 173,
708                 .total_size     = 512,
709                 .page_size      = 64 * 1024,
710                 .tested         = TEST_OK_PREW,
711                 .probe          = probe_82802ab,
712                 .erase          = erase_82802ab,
713                 .write          = write_82802ab,
714         },
715
716         {
717                 .vendor         = "Intel",
718                 .name           = "82802AC",
719                 .manufacture_id = INTEL_ID,
720                 .model_id       = 172,
721                 .total_size     = 1024,
722                 .page_size      = 64 * 1024,
723                 .tested         = TEST_OK_PREW,
724                 .probe          = probe_82802ab,
725                 .erase          = erase_82802ab,
726                 .write          = write_82802ab,
727         },
728
729         {
730                 .vendor         = "Macronix",
731                 .name           = "MX25L512",
732                 .manufacture_id = MX_ID,
733                 .model_id       = MX_25L512,
734                 .total_size     = 64,
735                 .page_size      = 256,
736                 .tested         = TEST_UNTESTED,
737                 .probe          = probe_spi_rdid,
738                 .erase          = spi_chip_erase_c7,
739                 .write          = spi_chip_write,
740                 .read           = spi_chip_read,
741         },
742
743         {
744                 .vendor         = "Macronix",
745                 .name           = "MX25L1005",
746                 .manufacture_id = MX_ID,
747                 .model_id       = MX_25L1005,
748                 .total_size     = 128,
749                 .page_size      = 256,
750                 .tested         = TEST_UNTESTED,
751                 .probe          = probe_spi_rdid,
752                 .erase          = spi_chip_erase_c7,
753                 .write          = spi_chip_write,
754                 .read           = spi_chip_read,
755         },
756
757         {
758                 .vendor         = "Macronix",
759                 .name           = "MX25L2005",
760                 .manufacture_id = MX_ID,
761                 .model_id       = MX_25L2005,
762                 .total_size     = 256,
763                 .page_size      = 256,
764                 .tested         = TEST_UNTESTED,
765                 .probe          = probe_spi_rdid,
766                 .erase          = spi_chip_erase_c7,
767                 .write          = spi_chip_write,
768                 .read           = spi_chip_read,
769         },
770
771         {
772                 .vendor         = "Macronix",
773                 .name           = "MX25L4005",
774                 .manufacture_id = MX_ID,
775                 .model_id       = MX_25L4005,
776                 .total_size     = 512,
777                 .page_size      = 256,
778                 .tested         = TEST_OK_PREW,
779                 .probe          = probe_spi_rdid,
780                 .erase          = spi_chip_erase_c7,
781                 .write          = spi_chip_write,
782                 .read           = spi_chip_read,
783         },
784
785         {
786                 .vendor         = "Macronix",
787                 .name           = "MX25L8005",
788                 .manufacture_id = MX_ID,
789                 .model_id       = MX_25L8005,
790                 .total_size     = 1024,
791                 .page_size      = 256,
792                 .tested         = TEST_OK_PREW,
793                 .probe          = probe_spi_rdid,
794                 .erase          = spi_chip_erase_c7,
795                 .write          = spi_chip_write,
796                 .read           = spi_chip_read,
797         },
798
799         {
800                 .vendor         = "Macronix",
801                 .name           = "MX25L1605",
802                 .manufacture_id = MX_ID,
803                 .model_id       = MX_25L1605,
804                 .total_size     = 2048,
805                 .page_size      = 256,
806                 .tested         = TEST_UNTESTED,
807                 .probe          = probe_spi_rdid,
808                 .erase          = spi_chip_erase_c7,
809                 .write          = spi_chip_write,
810                 .read           = spi_chip_read,
811         },
812
813         {
814                 .vendor         = "Macronix",
815                 .name           = "MX25L3205",
816                 .manufacture_id = MX_ID,
817                 .model_id       = MX_25L3205,
818                 .total_size     = 4096,
819                 .page_size      = 256,
820                 .tested         = TEST_OK_PREW,
821                 .probe          = probe_spi_rdid,
822                 .erase          = spi_chip_erase_c7,
823                 .write          = spi_chip_write,
824                 .read           = spi_chip_read,
825         },
826
827         {
828                 .vendor         = "Macronix",
829                 .name           = "MX25L6405",
830                 .manufacture_id = MX_ID,
831                 .model_id       = MX_25L6405,
832                 .total_size     = 8192,
833                 .page_size      = 256,
834                 .tested         = TEST_UNTESTED,
835                 .probe          = probe_spi_rdid,
836                 .erase          = spi_chip_erase_c7,
837                 .write          = spi_chip_write,
838                 .read           = spi_chip_read,
839         },
840
841         {
842                 .vendor         = "Macronix",
843                 .name           = "MX29F002B",
844                 .manufacture_id = MX_ID,
845                 .model_id       = MX_29F002B,
846                 .total_size     = 256,
847                 .page_size      = 64 * 1024,
848                 .tested         = TEST_UNTESTED,
849                 .probe          = probe_29f002,
850                 .erase          = erase_29f002,
851                 .write          = write_29f002,
852         },
853
854         {
855                 .vendor         = "Macronix",
856                 .name           = "MX29F002T",
857                 .manufacture_id = MX_ID,
858                 .model_id       = MX_29F002T,
859                 .total_size     = 256,
860                 .page_size      = 64 * 1024,
861                 .tested         = TEST_UNTESTED,
862                 .probe          = probe_29f002,
863                 .erase          = erase_29f002,
864                 .write          = write_29f002,
865         },
866
867         {
868                 .vendor         = "Macronix",
869                 .name           = "MX29LV040C",
870                 .manufacture_id = MX_ID,
871                 .model_id       = MX_29LV040C,
872                 .total_size     = 512,
873                 .page_size      = 64 * 1024,
874                 .tested         = TEST_OK_PR,
875                 .probe          = probe_29f002,
876                 .erase          = erase_29f002,
877                 .write          = write_29f002,
878         },
879
880         {
881                 .vendor         = "Numonyx",
882                 .name           = "M25PE10",
883                 .manufacture_id = ST_ID,
884                 .model_id       = 0x8011,
885                 .total_size     = 128,
886                 .page_size      = 256,
887                 .tested         = TEST_UNTESTED,
888                 .probe          = probe_spi_rdid,
889                 .erase          = spi_chip_erase_d8,
890                 .write          = spi_chip_write,
891                 .read           = spi_chip_read,
892         },
893
894         {
895                 .vendor         = "Numonyx",
896                 .name           = "M25PE20",
897                 .manufacture_id = ST_ID,
898                 .model_id       = 0x8012,
899                 .total_size     = 256,
900                 .page_size      = 256,
901                 .tested         = TEST_UNTESTED,
902                 .probe          = probe_spi_rdid,
903                 .erase          = spi_chip_erase_d8,
904                 .write          = spi_chip_write,
905                 .read           = spi_chip_read,
906         },
907
908         {
909                 .vendor         = "Numonyx",
910                 .name           = "M25PE40",
911                 .manufacture_id = ST_ID,
912                 .model_id       = 0x8013,
913                 .total_size     = 256,
914                 .page_size      = 256,
915                 .tested         = TEST_UNTESTED,
916                 .probe          = probe_spi_rdid,
917                 .erase          = spi_chip_erase_d8,
918                 .write          = spi_chip_write,
919                 .read           = spi_chip_read,
920         },
921
922         {
923                 .vendor         = "Numonyx",
924                 .name           = "M25PE80",
925                 .manufacture_id = ST_ID,
926                 .model_id       = 0x8014,
927                 .total_size     = 1024,
928                 .page_size      = 256,
929                 .tested         = TEST_OK_PREW,
930                 .probe          = probe_spi_rdid,
931                 .erase          = spi_chip_erase_d8,
932                 .write          = spi_chip_write,
933                 .read           = spi_chip_read,
934         },
935
936         {
937                 .vendor         = "Numonyx",
938                 .name           = "M25PE16",
939                 .manufacture_id = ST_ID,
940                 .model_id       = 0x8015,
941                 .total_size     = 2048,
942                 .page_size      = 256,
943                 .tested         = TEST_UNTESTED,
944                 .probe          = probe_spi_rdid,
945                 .erase          = spi_chip_erase_d8,
946                 .write          = spi_chip_write,
947                 .read           = spi_chip_read,
948         },
949
950         {
951                 .vendor         = "PMC",
952                 .name           = "Pm25LV010",
953                 .manufacture_id = PMC_ID,
954                 .model_id       = PMC_25LV010,
955                 .total_size     = 128,
956                 .page_size      = 256,
957                 .tested         = TEST_UNTESTED,
958                 .probe          = probe_spi_rdid,
959                 .erase          = spi_chip_erase_c7,
960                 .write          = spi_chip_write,
961                 .read           = spi_chip_read,
962         },
963
964         {
965                 .vendor         = "PMC",
966                 .name           = "Pm25LV016B",
967                 .manufacture_id = PMC_ID,
968                 .model_id       = PMC_25LV016B,
969                 .total_size     = 2048,
970                 .page_size      = 256,
971                 .tested         = TEST_UNTESTED,
972                 .probe          = probe_spi_rdid,
973                 .erase          = spi_chip_erase_c7,
974                 .write          = spi_chip_write,
975                 .read           = spi_chip_read,
976         },
977
978         {
979                 .vendor         = "PMC",
980                 .name           = "Pm25LV020",
981                 .manufacture_id = PMC_ID,
982                 .model_id       = PMC_25LV020,
983                 .total_size     = 256,
984                 .page_size      = 256,
985                 .tested         = TEST_UNTESTED,
986                 .probe          = probe_spi_rdid,
987                 .erase          = spi_chip_erase_c7,
988                 .write          = spi_chip_write,
989                 .read           = spi_chip_read,
990         },
991
992         {
993                 .vendor         = "PMC",
994                 .name           = "Pm25LV040",
995                 .manufacture_id = PMC_ID,
996                 .model_id       = PMC_25LV040,
997                 .total_size     = 512,
998                 .page_size      = 256,
999                 .tested         = TEST_UNTESTED,
1000                 .probe          = probe_spi_rdid,
1001                 .erase          = spi_chip_erase_c7,
1002                 .write          = spi_chip_write,
1003                 .read           = spi_chip_read,
1004         },
1005
1006         {
1007                 .vendor         = "PMC",
1008                 .name           = "Pm25LV080B",
1009                 .manufacture_id = PMC_ID,
1010                 .model_id       = PMC_25LV080B,
1011                 .total_size     = 1024,
1012                 .page_size      = 256,
1013                 .tested         = TEST_UNTESTED,
1014                 .probe          = probe_spi_rdid,
1015                 .erase          = spi_chip_erase_c7,
1016                 .write          = spi_chip_write,
1017                 .read           = spi_chip_read,
1018         },
1019
1020         {
1021                 .vendor         = "PMC",
1022                 .name           = "Pm25LV512",
1023                 .manufacture_id = PMC_ID,
1024                 .model_id       = PMC_25LV512,
1025                 .total_size     = 64,
1026                 .page_size      = 256,
1027                 .tested         = TEST_UNTESTED,
1028                 .probe          = probe_spi_rdid,
1029                 .erase          = spi_chip_erase_c7,
1030                 .write          = spi_chip_write,
1031                 .read           = spi_chip_read,
1032         },
1033
1034         {
1035                 .vendor         = "PMC",
1036                 .name           = "Pm49FL002",
1037                 .manufacture_id = PMC_ID_NOPREFIX,
1038                 .model_id       = PMC_49FL002,
1039                 .total_size     = 256,
1040                 .page_size      = 16 * 1024,
1041                 .tested         = TEST_OK_PREW,
1042                 .probe          = probe_49fl00x,
1043                 .erase          = erase_49fl00x,
1044                 .write          = write_49fl00x,
1045         },
1046
1047         {
1048                 .vendor         = "PMC",
1049                 .name           = "Pm49FL004",
1050                 .manufacture_id = PMC_ID_NOPREFIX,
1051                 .model_id       = PMC_49FL004,
1052                 .total_size     = 512,
1053                 .page_size      = 64 * 1024,
1054                 .tested         = TEST_OK_PREW,
1055                 .probe          = probe_49fl00x,
1056                 .erase          = erase_49fl00x,
1057                 .write          = write_49fl00x,
1058         },
1059
1060         {
1061                 .vendor         = "Sharp",
1062                 .name           = "LHF00L04",
1063                 .manufacture_id = SHARP_ID,
1064                 .model_id       = SHARP_LHF00L04,
1065                 .total_size     = 1024,
1066                 .page_size      = 64 * 1024,
1067                 .tested         = TEST_UNTESTED,
1068                 .probe          = probe_lhf00l04,
1069                 .erase          = erase_lhf00l04,
1070                 .write          = write_lhf00l04,
1071         },
1072
1073         {
1074                 .vendor         = "Spansion",
1075                 .name           = "S25FL016A",
1076                 .manufacture_id = SPANSION_ID,
1077                 .model_id       = SPANSION_S25FL016A,
1078                 .total_size     = 2048,
1079                 .page_size      = 256,
1080                 .tested         = TEST_OK_PREW,
1081                 .probe          = probe_spi_rdid,
1082                 .erase          = spi_chip_erase_c7,
1083                 .write          = spi_chip_write,
1084                 .read           = spi_chip_read,
1085         },
1086
1087         {
1088                 .vendor         = "SST",
1089                 .name           = "SST25VF016B",
1090                 .manufacture_id = SST_ID,
1091                 .model_id       = SST_25VF016B,
1092                 .total_size     = 2048,
1093                 .page_size      = 256,
1094                 .tested         = TEST_OK_PREW,
1095                 .probe          = probe_spi_rdid,
1096                 .erase          = spi_chip_erase_c7,
1097                 .write          = spi_chip_write,
1098                 .read           = spi_chip_read,
1099         },
1100
1101         {
1102                 .vendor         = "SST",
1103                 .name           = "SST25VF032B",
1104                 .manufacture_id = SST_ID,
1105                 .model_id       = SST_25VF032B,
1106                 .total_size     = 4096,
1107                 .page_size      = 256,
1108                 .tested         = TEST_OK_PREW,
1109                 .probe          = probe_spi_rdid,
1110                 .erase          = spi_chip_erase_c7,
1111                 .write          = spi_chip_write,
1112                 .read           = spi_chip_read,
1113         },
1114
1115         {
1116                 .vendor         = "SST",
1117                 .name           = "SST25VF040B",
1118                 .manufacture_id = SST_ID,
1119                 .model_id       = SST_25VF040B,
1120                 .total_size     = 512,
1121                 .page_size      = 256,
1122                 .tested         = TEST_UNTESTED,
1123                 .probe          = probe_spi_rdid,
1124                 .erase          = spi_chip_erase_c7,
1125                 .write          = spi_chip_write,
1126                 .read           = spi_chip_read,
1127         },
1128
1129         {
1130                 .vendor         = "SST",
1131                 .name           = "SST25VF040B.REMS",
1132                 .manufacture_id = 0xbf,
1133                 .model_id       = 0x8d,
1134                 .total_size     = 512,
1135                 .page_size      = 64*1024,
1136                 .tested         = TEST_OK_PR,
1137                 .probe          = probe_spi_rems,
1138                 .erase          = spi_chip_erase_c7,
1139                 .write          = spi_aai_write,
1140                 .read           = spi_chip_read,
1141         },
1142
1143         {
1144                 .vendor         = "SST",
1145                 .name           = "SST25VF080B",
1146                 .manufacture_id = SST_ID,
1147                 .model_id       = SST_25VF080B,
1148                 .total_size     = 1024,
1149                 .page_size      = 256,
1150                 .tested         = TEST_OK_PROBE,
1151                 .probe          = probe_spi_rdid,
1152                 .erase          = spi_chip_erase_60_c7,
1153                 .write          = spi_chip_write,
1154                 .read           = spi_chip_read,
1155         },
1156
1157         {
1158                 .vendor         = "SST",
1159                 .name           = "SST28SF040A",
1160                 .manufacture_id = SST_ID,
1161                 .model_id       = SST_28SF040,
1162                 .total_size     = 512,
1163                 .page_size      = 256,
1164                 .tested         = TEST_UNTESTED,
1165                 .probe          = probe_28sf040,
1166                 .erase          = erase_28sf040,
1167                 .write          = write_28sf040,
1168         },
1169
1170         {
1171                 .vendor         = "SST",
1172                 .name           = "SST29EE010",
1173                 .manufacture_id = SST_ID,
1174                 .model_id       = SST_29EE010,
1175                 .total_size     = 128,
1176                 .page_size      = 128,
1177                 .tested         = TEST_OK_PREW,
1178                 .probe          = probe_jedec,
1179                 .erase          = erase_chip_jedec,
1180                 .write          = write_jedec,
1181         },
1182
1183         {
1184                 .vendor         = "SST",
1185                 .name           = "SST29LE010",
1186                 .manufacture_id = SST_ID,
1187                 .model_id       = SST_29LE010,
1188                 .total_size     = 128,
1189                 .page_size      = 128,
1190                 .tested         = TEST_UNTESTED,
1191                 .probe          = probe_jedec,
1192                 .erase          = erase_chip_jedec,
1193                 .write          = write_jedec,
1194         },
1195
1196         {
1197                 .vendor         = "SST",
1198                 .name           = "SST29EE020A",
1199                 .manufacture_id = SST_ID,
1200                 .model_id       = SST_29EE020A,
1201                 .total_size     = 256,
1202                 .page_size      = 128,
1203                 .tested         = TEST_UNTESTED,
1204                 .probe          = probe_jedec,
1205                 .erase          = erase_chip_jedec,
1206                 .write          = write_jedec,
1207         },
1208
1209         {
1210                 .vendor         = "SST",
1211                 .name           = "SST29LE020",
1212                 .manufacture_id = SST_ID,
1213                 .model_id       = SST_29LE020,
1214                 .total_size     = 256,
1215                 .page_size      = 128,
1216                 .tested         = TEST_UNTESTED,
1217                 .probe          = probe_jedec,
1218                 .erase          = erase_chip_jedec,
1219                 .write          = write_jedec,
1220         },
1221
1222         {
1223                 .vendor         = "SST",
1224                 .name           = "SST39SF010A",
1225                 .manufacture_id = SST_ID,
1226                 .model_id       = SST_39SF010,
1227                 .total_size     = 128,
1228                 .page_size      = 4096,
1229                 .tested         = TEST_OK_PREW,
1230                 .probe          = probe_jedec,
1231                 .erase          = erase_chip_jedec,
1232                 .write          = write_39sf020,
1233         },
1234
1235         {
1236                 .vendor         = "SST",
1237                 .name           = "SST39SF020A",
1238                 .manufacture_id = SST_ID,
1239                 .model_id       = SST_39SF020,
1240                 .total_size     = 256,
1241                 .page_size      = 4096,
1242                 .tested         = TEST_OK_PREW,
1243                 .probe          = probe_jedec,
1244                 .erase          = erase_chip_jedec,
1245                 .write          = write_39sf020,
1246         },
1247
1248         {
1249                 .vendor         = "SST",
1250                 .name           = "SST39SF040",
1251                 .manufacture_id = SST_ID,
1252                 .model_id       = SST_39SF040,
1253                 .total_size     = 512,
1254                 .page_size      = 4096,
1255                 .tested         = TEST_OK_PREW,
1256                 .probe          = probe_jedec,
1257                 .erase          = erase_chip_jedec,
1258                 .write          = write_39sf020,
1259         },
1260
1261         {
1262                 .vendor         = "SST",
1263                 .name           = "SST39VF512",
1264                 .manufacture_id = SST_ID,
1265                 .model_id       = SST_39VF512,
1266                 .total_size     = 64,
1267                 .page_size      = 4096,
1268                 .tested         = TEST_UNTESTED,
1269                 .probe          = probe_jedec,
1270                 .erase          = erase_chip_jedec,
1271                 .write          = write_39sf020,
1272         },
1273
1274         {
1275                 .vendor         = "SST",
1276                 .name           = "SST39VF010",
1277                 .manufacture_id = SST_ID,
1278                 .model_id       = SST_39VF010,
1279                 .total_size     = 128,
1280                 .page_size      = 4096,
1281                 .tested         = TEST_UNTESTED,
1282                 .probe          = probe_jedec,
1283                 .erase          = erase_chip_jedec,
1284                 .write          = write_39sf020,
1285         },
1286
1287         {
1288                 .vendor         = "SST",
1289                 .name           = "SST39VF020",
1290                 .manufacture_id = SST_ID,
1291                 .model_id       = SST_39VF020,
1292                 .total_size     = 256,
1293                 .page_size      = 4096,
1294                 .tested         = TEST_OK_PREW,
1295                 .probe          = probe_jedec,
1296                 .erase          = erase_chip_jedec,
1297                 .write          = write_39sf020,
1298         },
1299
1300         {
1301                 .vendor         = "SST",
1302                 .name           = "SST39VF040",
1303                 .manufacture_id = SST_ID,
1304                 .model_id       = SST_39VF040,
1305                 .total_size     = 512,
1306                 .page_size      = 4096,
1307                 .tested         = TEST_OK_PROBE,
1308                 .probe          = probe_jedec,
1309                 .erase          = erase_chip_jedec,
1310                 .write          = write_39sf020,
1311         },
1312
1313         {
1314                 .vendor         = "SST",
1315                 .name           = "SST39VF080",
1316                 .manufacture_id = 0xbf,
1317                 .model_id       = 0xd8,
1318                 .total_size     = 1024,
1319                 .page_size      = 4096,
1320                 .tested         = TEST_UNTESTED,
1321                 .probe          = probe_jedec,
1322                 .erase          = erase_chip_jedec,
1323                 .write          = write_39sf020,
1324         },
1325
1326         {
1327                 .vendor         = "SST",
1328                 .name           = "SST49LF002A/B",
1329                 .manufacture_id = SST_ID,
1330                 .model_id       = SST_49LF002A,
1331                 .total_size     = 256,
1332                 .page_size      = 16 * 1024,
1333                 .tested         = TEST_OK_PREW,
1334                 .probe          = probe_sst_fwhub,
1335                 .erase          = erase_sst_fwhub,
1336                 .write          = write_sst_fwhub,
1337         },
1338
1339         {
1340                 .vendor         = "SST",
1341                 .name           = "SST49LF003A/B",
1342                 .manufacture_id = SST_ID,
1343                 .model_id       = SST_49LF003A,
1344                 .total_size     = 384,
1345                 .page_size      = 64 * 1024,
1346                 .tested         = TEST_UNTESTED,
1347                 .probe          = probe_sst_fwhub,
1348                 .erase          = erase_sst_fwhub,
1349                 .write          = write_sst_fwhub,
1350         },
1351
1352         {
1353                 .vendor         = "SST",
1354                 .name           = "SST49LF004A/B",
1355                 .manufacture_id = SST_ID,
1356                 .model_id       = SST_49LF004A,
1357                 .total_size     = 512,
1358                 .page_size      = 64 * 1024,
1359                 .tested         = TEST_OK_PREW,
1360                 .probe          = probe_sst_fwhub,
1361                 .erase          = erase_sst_fwhub,
1362                 .write          = write_sst_fwhub,
1363         },
1364
1365         {
1366                 .vendor         = "SST",
1367                 .name           = "SST49LF004C",
1368                 .manufacture_id = SST_ID,
1369                 .model_id       = SST_49LF004C,
1370                 .total_size     = 512,
1371                 .page_size      = 4 * 1024,
1372                 .tested         = TEST_UNTESTED,
1373                 .probe          = probe_49lfxxxc,
1374                 .erase          = erase_49lfxxxc,
1375                 .write          = write_49lfxxxc,
1376         },
1377
1378         {
1379                 .vendor         = "SST",
1380                 .name           = "SST49LF008A",
1381                 .manufacture_id = SST_ID,
1382                 .model_id       = SST_49LF008A,
1383                 .total_size     = 1024,
1384                 .page_size      = 64 * 1024,
1385                 .tested         = TEST_OK_PREW,
1386                 .probe          = probe_sst_fwhub,
1387                 .erase          = erase_sst_fwhub,
1388                 .write          = write_sst_fwhub,
1389         },
1390
1391         {
1392                 .vendor         = "SST",
1393                 .name           = "SST49LF008C",
1394                 .manufacture_id = SST_ID,
1395                 .model_id       = SST_49LF008C,
1396                 .total_size     = 1024,
1397                 .page_size      = 4 * 1024,
1398                 .tested         = TEST_UNTESTED,
1399                 .probe          = probe_49lfxxxc,
1400                 .erase          = erase_49lfxxxc,
1401                 .write          = write_49lfxxxc,
1402         },
1403
1404         {
1405                 .vendor         = "SST",
1406                 .name           = "SST49LF016C",
1407                 .manufacture_id = SST_ID,
1408                 .model_id       = SST_49LF016C,
1409                 .total_size     = 2048,
1410                 .page_size      = 4 * 1024,
1411                 .tested         = TEST_OK_PREW,
1412                 .probe          = probe_49lfxxxc,
1413                 .erase          = erase_49lfxxxc,
1414                 .write          = write_49lfxxxc,
1415         },
1416
1417         {
1418                 .vendor         = "SST",
1419                 .name           = "SST49LF020",
1420                 .manufacture_id = SST_ID,
1421                 .model_id       = SST_49LF020,
1422                 .total_size     = 256,
1423                 .page_size      = 16 * 1024,
1424                 .tested         = TEST_OK_PR,
1425                 .probe          = probe_jedec,
1426                 .erase          = erase_49lf040,
1427                 .write          = write_49lf040,
1428         },
1429
1430         {
1431                 .vendor         = "SST",
1432                 .name           = "SST49LF020A",
1433                 .manufacture_id = SST_ID,
1434                 .model_id       = SST_49LF020A,
1435                 .total_size     = 256,
1436                 .page_size      = 16 * 1024,
1437                 .tested         = TEST_UNTESTED,
1438                 .probe          = probe_jedec,
1439                 .erase          = erase_49lf040,
1440                 .write          = write_49lf040,
1441         },
1442
1443         {
1444                 .vendor         = "SST",
1445                 .name           = "SST49LF040",
1446                 .manufacture_id = SST_ID,
1447                 .model_id       = SST_49LF040,
1448                 .total_size     = 512,
1449                 .page_size      = 4096,
1450                 .tested         = TEST_OK_PREW,
1451                 .probe          = probe_jedec,
1452                 .erase          = erase_49lf040,
1453                 .write          = write_49lf040,
1454         },
1455
1456         {
1457                 .vendor         = "SST",
1458                 .name           = "SST49LF040B",
1459                 .manufacture_id = SST_ID,
1460                 .model_id       = SST_49LF040B,
1461                 .total_size     = 512,
1462                 .page_size      = 64 * 1024,
1463                 .tested         = TEST_OK_PREW,
1464                 .probe          = probe_sst_fwhub,
1465                 .erase          = erase_sst_fwhub,
1466                 .write          = write_sst_fwhub,
1467         },
1468
1469         {
1470                 .vendor         = "SST",
1471                 .name           = "SST49LF080A",
1472                 .manufacture_id = SST_ID,
1473                 .model_id       = SST_49LF080A,
1474                 .total_size     = 1024,
1475                 .page_size      = 4096,
1476                 .tested         = TEST_OK_PREW,
1477                 .probe          = probe_jedec,
1478                 .erase          = erase_49lf040,
1479                 .write          = write_49lf040,
1480         },
1481
1482         {
1483                 .vendor         = "SST",
1484                 .name           = "SST49LF160C",
1485                 .manufacture_id = SST_ID,
1486                 .model_id       = SST_49LF160C,
1487                 .total_size     = 2048,
1488                 .page_size      = 4 * 1024,
1489                 .tested         = TEST_OK_PREW,
1490                 .probe          = probe_49lfxxxc,
1491                 .erase          = erase_49lfxxxc,
1492                 .write          = write_49lfxxxc,
1493         },
1494
1495         {
1496                 .vendor         = "ST",
1497                 .name           = "M25P05-A",
1498                 .manufacture_id = ST_ID,
1499                 .model_id       = ST_M25P05A,
1500                 .total_size     = 64,
1501                 .page_size      = 256,
1502                 .tested         = TEST_UNTESTED,
1503                 .probe          = probe_spi_rdid,
1504                 .erase          = spi_chip_erase_c7,
1505                 .write          = spi_chip_write,
1506                 .read           = spi_chip_read,
1507         },
1508
1509         {
1510                 .vendor         = "ST",
1511                 .name           = "M25P10-A",
1512                 .manufacture_id = ST_ID,
1513                 .model_id       = ST_M25P10A,
1514                 .total_size     = 128,
1515                 .page_size      = 256,
1516                 .tested         = TEST_UNTESTED,
1517                 .probe          = probe_spi_rdid,
1518                 .erase          = spi_chip_erase_c7,
1519                 .write          = spi_chip_write,
1520                 .read           = spi_chip_read,
1521         },
1522
1523         {
1524                 .vendor         = "ST",
1525                 .name           = "M25P20",
1526                 .manufacture_id = ST_ID,
1527                 .model_id       = ST_M25P20,
1528                 .total_size     = 256,
1529                 .page_size      = 256,
1530                 .tested         = TEST_UNTESTED,
1531                 .probe          = probe_spi_rdid,
1532                 .erase          = spi_chip_erase_c7,
1533                 .write          = spi_chip_write,
1534                 .read           = spi_chip_read,
1535         },
1536
1537         {
1538                 .vendor         = "ST",
1539                 .name           = "M25P40",
1540                 .manufacture_id = ST_ID,
1541                 .model_id       = ST_M25P40,
1542                 .total_size     = 512,
1543                 .page_size      = 256,
1544                 .tested         = TEST_UNTESTED,
1545                 .probe          = probe_spi_rdid,
1546                 .erase          = spi_chip_erase_c7,
1547                 .write          = spi_chip_write,
1548                 .read           = spi_chip_read,
1549         },
1550
1551         {
1552                 .vendor         = "ST",
1553                 .name           = "M25P40-old",
1554                 .manufacture_id = ST_ID,
1555                 .model_id       = ST_M25P40_RES,
1556                 .total_size     = 512,
1557                 .page_size      = 256,
1558                 .tested         = TEST_UNTESTED,
1559                 .probe          = probe_spi_res,
1560                 .erase          = spi_chip_erase_c7,
1561                 .write          = spi_chip_write,
1562                 .read           = spi_chip_read,
1563         },
1564
1565         {
1566                 .vendor         = "ST",
1567                 .name           = "M25P80",
1568                 .manufacture_id = ST_ID,
1569                 .model_id       = ST_M25P80,
1570                 .total_size     = 1024,
1571                 .page_size      = 256,
1572                 .tested         = TEST_UNTESTED,
1573                 .probe          = probe_spi_rdid,
1574                 .erase          = spi_chip_erase_c7,
1575                 .write          = spi_chip_write,
1576                 .read           = spi_chip_read,
1577         },
1578
1579         {
1580                 .vendor         = "ST",
1581                 .name           = "M25P16",
1582                 .manufacture_id = ST_ID,
1583                 .model_id       = ST_M25P16,
1584                 .total_size     = 2048,
1585                 .page_size      = 256,
1586                 .tested         = TEST_OK_PREW,
1587                 .probe          = probe_spi_rdid,
1588                 .erase          = spi_chip_erase_c7,
1589                 .write          = spi_chip_write,
1590                 .read           = spi_chip_read,
1591         },
1592
1593         {
1594                 .vendor         = "ST",
1595                 .name           = "M25P32",
1596                 .manufacture_id = ST_ID,
1597                 .model_id       = ST_M25P32,
1598                 .total_size     = 4096,
1599                 .page_size      = 256,
1600                 .tested         = TEST_OK_PREW,
1601                 .probe          = probe_spi_rdid,
1602                 .erase          = spi_chip_erase_c7,
1603                 .write          = spi_chip_write,
1604                 .read           = spi_chip_read,
1605         },
1606
1607         {
1608                 .vendor         = "ST",
1609                 .name           = "M25P64",
1610                 .manufacture_id = ST_ID,
1611                 .model_id       = ST_M25P64,
1612                 .total_size     = 8192,
1613                 .page_size      = 256,
1614                 .tested         = TEST_UNTESTED,
1615                 .probe          = probe_spi_rdid,
1616                 .erase          = spi_chip_erase_c7,
1617                 .write          = spi_chip_write,
1618                 .read           = spi_chip_read,
1619         },
1620
1621         {
1622                 .vendor         = "ST",
1623                 .name           = "M25P128",
1624                 .manufacture_id = ST_ID,
1625                 .model_id       = ST_M25P128,
1626                 .total_size     = 16384,
1627                 .page_size      = 256,
1628                 .tested         = TEST_UNTESTED,
1629                 .probe          = probe_spi_rdid,
1630                 .erase          = spi_chip_erase_c7,
1631                 .write          = spi_chip_write,
1632                 .read           = spi_chip_read,
1633         },
1634
1635         {
1636                 .vendor         = "ST",
1637                 .name           = "M29F002B",
1638                 .manufacture_id = ST_ID,
1639                 .model_id       = ST_M29F002B,
1640                 .total_size     = 256,
1641                 .page_size      = 64 * 1024,
1642                 .tested         = TEST_UNTESTED,
1643                 .probe          = probe_jedec,
1644                 .erase          = erase_m29f002,
1645                 .write          = write_m29f002b,
1646         },
1647
1648         {
1649                 .vendor         = "ST",
1650                 .name           = "M29F002T/NT",
1651                 .manufacture_id = ST_ID,
1652                 .model_id       = ST_M29F002T,
1653                 .total_size     = 256,
1654                 .page_size      = 64 * 1024,
1655                 .tested         = TEST_OK_PREW,
1656                 .probe          = probe_jedec,
1657                 .erase          = erase_m29f002,
1658                 .write          = write_m29f002t,
1659         },
1660
1661         {
1662                 .vendor         = "ST",
1663                 .name           = "M29F040B",
1664                 .manufacture_id = ST_ID,
1665                 .model_id       = ST_M29F040B,
1666                 .total_size     = 512,
1667                 .page_size      = 64 * 1024,
1668                 .tested         = TEST_OK_PREW,
1669                 .probe          = probe_29f040b,
1670                 .erase          = erase_29f040b,
1671                 .write          = write_29f040b,
1672         },
1673
1674         {
1675                 .vendor         = "ST",
1676                 .name           = "M29F400BT",
1677                 .manufacture_id = ST_ID,
1678                 .model_id       = ST_M29F400BT,
1679                 .total_size     = 512,
1680                 .page_size      = 64 * 1024,
1681                 .tested         = TEST_UNTESTED,
1682                 .probe          = probe_m29f400bt,
1683                 .erase          = erase_m29f400bt,
1684                 .write          = write_coreboot_m29f400bt,
1685         },
1686
1687         {
1688                 .vendor         = "ST",
1689                 .name           = "M29W010B",
1690                 .manufacture_id = ST_ID,
1691                 .model_id       = ST_M29W010B,
1692                 .total_size     = 128,
1693                 .page_size      = 16 * 1024,
1694                 .tested         = TEST_UNTESTED,
1695                 .probe          = probe_jedec,
1696                 .erase          = erase_chip_jedec,
1697                 .write          = write_jedec,
1698         },
1699
1700         {
1701                 .vendor         = "ST",
1702                 .name           = "M29W040B",
1703                 .manufacture_id = ST_ID,
1704                 .model_id       = ST_M29W040B,
1705                 .total_size     = 512,
1706                 .page_size      = 64 * 1024,
1707                 .tested         = TEST_UNTESTED,
1708                 .probe          = probe_jedec,
1709                 .erase          = erase_chip_jedec,
1710                 .write          = write_jedec,
1711         },
1712
1713         {
1714                 .vendor         = "ST",
1715                 .name           = "M50FLW040A",
1716                 .manufacture_id = ST_ID,
1717                 .model_id       = ST_M50FLW040A,
1718                 .total_size     = 512,
1719                 .page_size      = 64 * 1024,
1720                 .tested         = TEST_UNTESTED,
1721                 .probe          = probe_stm50flw0x0x,
1722                 .erase          = erase_stm50flw0x0x,
1723                 .write          = write_stm50flw0x0x,
1724         },
1725
1726         {
1727                 .vendor         = "ST",
1728                 .name           = "M50FLW040B",
1729                 .manufacture_id = ST_ID,
1730                 .model_id       = ST_M50FLW040B,
1731                 .total_size     = 512,
1732                 .page_size      = 64 * 1024,
1733                 .tested         = TEST_UNTESTED,
1734                 .probe          = probe_stm50flw0x0x,
1735                 .erase          = erase_stm50flw0x0x,
1736                 .write          = write_stm50flw0x0x,
1737         },
1738
1739         {
1740                 .vendor         = "ST",
1741                 .name           = "M50FLW080A",
1742                 .manufacture_id = ST_ID,
1743                 .model_id       = ST_M50FLW080A,
1744                 .total_size     = 1024,
1745                 .page_size      = 64 * 1024,
1746                 .tested         = TEST_OK_PREW,
1747                 .probe          = probe_stm50flw0x0x,
1748                 .erase          = erase_stm50flw0x0x,
1749                 .write          = write_stm50flw0x0x,
1750         },
1751
1752         {
1753                 .vendor         = "ST",
1754                 .name           = "M50FLW080B",
1755                 .manufacture_id = ST_ID,
1756                 .model_id       = ST_M50FLW080B,
1757                 .total_size     = 1024,
1758                 .page_size      = 64 * 1024,
1759                 .tested         = TEST_UNTESTED,
1760                 .probe          = probe_stm50flw0x0x,
1761                 .erase          = erase_stm50flw0x0x,
1762                 .write          = write_stm50flw0x0x,
1763         },
1764
1765         {
1766                 .vendor         = "ST",
1767                 .name           = "M50FW002",
1768                 .manufacture_id = ST_ID,
1769                 .model_id       = ST_M50FW002,
1770                 .total_size     = 256,
1771                 .page_size      = 64 * 1024,
1772                 .tested         = TEST_UNTESTED,
1773                 .probe          = probe_49lfxxxc,
1774                 .erase          = NULL,
1775                 .write          = NULL,
1776         },
1777
1778         {
1779                 .vendor         = "ST",
1780                 .name           = "M50FW016",
1781                 .manufacture_id = ST_ID,
1782                 .model_id       = ST_M50FW016,
1783                 .total_size     = 2048,
1784                 .page_size      = 64 * 1024,
1785                 .tested         = TEST_UNTESTED,
1786                 .probe          = probe_82802ab,
1787                 .erase          = erase_82802ab,
1788                 .write          = write_82802ab,
1789         },
1790
1791         {
1792                 .vendor         = "ST",
1793                 .name           = "M50FW040",
1794                 .manufacture_id = ST_ID,
1795                 .model_id       = ST_M50FW040,
1796                 .total_size     = 512,
1797                 .page_size      = 64 * 1024,
1798                 .tested         = TEST_OK_PREW,
1799                 .probe          = probe_82802ab,
1800                 .erase          = erase_82802ab,
1801                 .write          = write_82802ab,
1802         },
1803
1804         {
1805                 .vendor         = "ST",
1806                 .name           = "M50FW080",
1807                 .manufacture_id = ST_ID,
1808                 .model_id       = ST_M50FW080,
1809                 .total_size     = 1024,
1810                 .page_size      = 64 * 1024,
1811                 .tested         = TEST_OK_PREW,
1812                 .probe          = probe_82802ab,
1813                 .erase          = erase_82802ab,
1814                 .write          = write_82802ab,
1815         },
1816
1817         {
1818                 .vendor         = "ST",
1819                 .name           = "M50LPW116",
1820                 .manufacture_id = ST_ID,
1821                 .model_id       = ST_M50LPW116,
1822                 .total_size     = 2048,
1823                 .page_size      = 64 * 1024,
1824                 .tested         = TEST_UNTESTED,
1825                 .probe          = probe_jedec,
1826                 .erase          = erase_chip_jedec,
1827                 .write          = write_jedec,
1828         },
1829
1830         {
1831                 .vendor         = "SyncMOS",
1832                 .name           = "S29C31004T",
1833                 .manufacture_id = SYNCMOS_ID,
1834                 .model_id       = S29C31004T,
1835                 .total_size     = 512,
1836                 .page_size      = 128,
1837                 .tested         = TEST_UNTESTED,
1838                 .probe          = probe_jedec,
1839                 .erase          = erase_chip_jedec,
1840                 .write          = write_49f002,
1841         },
1842
1843         {
1844                 .vendor         = "SyncMOS",
1845                 .name           = "S29C51001T",
1846                 .manufacture_id = SYNCMOS_ID,
1847                 .model_id       = S29C51001T,
1848                 .total_size     = 128,
1849                 .page_size      = 128,
1850                 .tested         = TEST_UNTESTED,
1851                 .probe          = probe_jedec,
1852                 .erase          = erase_chip_jedec,
1853                 .write          = write_49f002,
1854         },
1855
1856         {
1857                 .vendor         = "SyncMOS",
1858                 .name           = "S29C51002T",
1859                 .manufacture_id = SYNCMOS_ID,
1860                 .model_id       = S29C51002T,
1861                 .total_size     = 256,
1862                 .page_size      = 128,
1863                 .tested         = TEST_OK_PREW,
1864                 .probe          = probe_jedec,
1865                 .erase          = erase_chip_jedec,
1866                 .write          = write_49f002,
1867         },
1868
1869         {
1870                 .vendor         = "SyncMOS",
1871                 .name           = "S29C51004T",
1872                 .manufacture_id = SYNCMOS_ID,
1873                 .model_id       = S29C51004T,
1874                 .total_size     = 512,
1875                 .page_size      = 128,
1876                 .tested         = TEST_UNTESTED,
1877                 .probe          = probe_jedec,
1878                 .erase          = erase_chip_jedec,
1879                 .write          = write_49f002,
1880         },
1881
1882         {
1883                 .vendor         = "Winbond",
1884                 .name           = "W25x10",
1885                 .manufacture_id = WINBOND_NEX_ID,
1886                 .model_id       = W_25X10,
1887                 .total_size     = 128,
1888                 .page_size      = 256,
1889                 .tested         = TEST_UNTESTED,
1890                 .probe          = probe_spi_rdid,
1891                 .erase          = spi_chip_erase_c7,
1892                 .write          = spi_chip_write,
1893                 .read           = spi_chip_read,
1894         },
1895
1896         {
1897                 .vendor         = "Winbond",
1898                 .name           = "W25x20",
1899                 .manufacture_id = WINBOND_NEX_ID,
1900                 .model_id       = W_25X20,
1901                 .total_size     = 256,
1902                 .page_size      = 256,
1903                 .tested         = TEST_UNTESTED,
1904                 .probe          = probe_spi_rdid,
1905                 .erase          = spi_chip_erase_c7,
1906                 .write          = spi_chip_write,
1907                 .read           = spi_chip_read,
1908         },
1909
1910         {
1911                 .vendor         = "Winbond",
1912                 .name           = "W25x40",
1913                 .manufacture_id = WINBOND_NEX_ID,
1914                 .model_id       = W_25X40,
1915                 .total_size     = 512,
1916                 .page_size      = 256,
1917                 .tested         = TEST_OK_PREW,
1918                 .probe          = probe_spi_rdid,
1919                 .erase          = spi_chip_erase_c7,
1920                 .write          = spi_chip_write,
1921                 .read           = spi_chip_read,
1922         },
1923
1924         {
1925                 .vendor         = "Winbond",
1926                 .name           = "W25x80",
1927                 .manufacture_id = WINBOND_NEX_ID,
1928                 .model_id       = W_25X80,
1929                 .total_size     = 1024,
1930                 .page_size      = 256,
1931                 .tested         = TEST_OK_PREW,
1932                 .probe          = probe_spi_rdid,
1933                 .erase          = spi_chip_erase_c7,
1934                 .write          = spi_chip_write,
1935                 .read           = spi_chip_read,
1936         },
1937
1938         {
1939                 .vendor         = "Winbond",
1940                 .name           = "W29C011",
1941                 .manufacture_id = WINBOND_ID,
1942                 .model_id       = W_29C011,
1943                 .total_size     = 128,
1944                 .page_size      = 128,
1945                 .tested         = TEST_OK_PREW,
1946                 .probe          = probe_jedec,
1947                 .erase          = erase_chip_jedec,
1948                 .write          = write_jedec,
1949         },
1950
1951         {
1952                 .vendor         = "Winbond",
1953                 .name           = "W29C020C",
1954                 .manufacture_id = WINBOND_ID,
1955                 .model_id       = W_29C020C,
1956                 .total_size     = 256,
1957                 .page_size      = 128,
1958                 .tested         = TEST_OK_PREW,
1959                 .probe          = probe_jedec,
1960                 .erase          = erase_chip_jedec,
1961                 .write          = write_jedec,
1962         },
1963
1964         {
1965                 .vendor         = "Winbond",
1966                 .name           = "W29C040P",
1967                 .manufacture_id = WINBOND_ID,
1968                 .model_id       = W_29C040P,
1969                 .total_size     = 512,
1970                 .page_size      = 256,
1971                 .tested         = TEST_UNTESTED,
1972                 .probe          = probe_jedec,
1973                 .erase          = erase_chip_jedec,
1974                 .write          = write_jedec,
1975         },
1976
1977         {
1978                 .vendor         = "Winbond",
1979                 .name           = "W29EE011",
1980                 .manufacture_id = WINBOND_ID,
1981                 .model_id       = W_29C011,
1982                 .total_size     = 128,
1983                 .page_size      = 128,
1984                 .tested         = TEST_OK_PREW,
1985                 .probe          = probe_w29ee011,
1986                 .erase          = erase_chip_jedec,
1987                 .write          = write_jedec,
1988         },
1989
1990         {
1991                 .vendor         = "Winbond",
1992                 .name           = "W39V040A",
1993                 .manufacture_id = WINBOND_ID,
1994                 .model_id       = W_39V040A,
1995                 .total_size     = 512,
1996                 .page_size      = 64*1024,
1997                 .tested         = TEST_UNTESTED,
1998                 .probe          = probe_jedec,
1999                 .erase          = erase_chip_jedec,
2000                 .write          = write_39sf020,
2001         },
2002
2003         {
2004                 .vendor         = "Winbond",
2005                 .name           = "W39V040B",
2006                 .manufacture_id = WINBOND_ID,
2007                 .model_id       = W_39V040B,
2008                 .total_size     = 512,
2009                 .page_size      = 64*1024,
2010                 .tested         = TEST_OK_PREW,
2011                 .probe          = probe_jedec,
2012                 .erase          = erase_chip_jedec,
2013                 .write          = write_39sf020,
2014         },
2015
2016         {
2017                 .vendor         = "Winbond",
2018                 .name           = "W39V040C",
2019                 .manufacture_id = WINBOND_ID,
2020                 .model_id       = 0x50,
2021                 .total_size     = 512,
2022                 .page_size      = 64*1024,
2023                 .tested         = TEST_OK_PREW,
2024                 .probe          = probe_w39v040c,
2025                 .erase          = erase_w39v040c,
2026                 .write          = write_w39v040c,
2027         },
2028
2029         {
2030                 .vendor         = "Winbond",
2031                 .name           = "W39V040FA",
2032                 .manufacture_id = WINBOND_ID,
2033                 .model_id       = W_39V040FA,
2034                 .total_size     = 512,
2035                 .page_size      = 64*1024,
2036                 .tested         = TEST_OK_PREW,
2037                 .probe          = probe_jedec,
2038                 .erase          = erase_chip_jedec,
2039                 .write          = write_39sf020,
2040         },
2041
2042         {
2043                 .vendor         = "Winbond",
2044                 .name           = "W39V080A",
2045                 .manufacture_id = WINBOND_ID,
2046                 .model_id       = W_39V080A,
2047                 .total_size     = 1024,
2048                 .page_size      = 64*1024,
2049                 .tested         = TEST_OK_PREW,
2050                 .probe          = probe_jedec,
2051                 .erase          = erase_chip_jedec,
2052                 .write          = write_39sf020,
2053         },
2054
2055         {
2056                 .vendor         = "Winbond",
2057                 .name           = "W49F002U",
2058                 .manufacture_id = WINBOND_ID,
2059                 .model_id       = W_49F002U,
2060                 .total_size     = 256,
2061                 .page_size      = 128,
2062                 .tested         = TEST_OK_PREW,
2063                 .probe          = probe_jedec,
2064                 .erase          = erase_chip_jedec,
2065                 .write          = write_49f002,
2066         },
2067
2068         {
2069                 .vendor         = "Winbond",
2070                 .name           = "W49V002A",
2071                 .manufacture_id = WINBOND_ID,
2072                 .model_id       = W_49V002A,
2073                 .total_size     = 256,
2074                 .page_size      = 128,
2075                 .tested         = TEST_OK_PREW,
2076                 .probe          = probe_jedec,
2077                 .erase          = erase_chip_jedec,
2078                 .write          = write_49f002,
2079         },
2080
2081         {
2082                 .vendor         = "Winbond",
2083                 .name           = "W49V002FA",
2084                 .manufacture_id = WINBOND_ID,
2085                 .model_id       = W_49V002FA,
2086                 .total_size     = 256,
2087                 .page_size      = 128,
2088                 .tested         = TEST_UNTESTED,
2089                 .probe          = probe_jedec,
2090                 .erase          = erase_chip_jedec,
2091                 .write          = write_49f002,
2092         },
2093
2094         {
2095                 .vendor         = "Winbond",
2096                 .name           = "W39V080FA",
2097                 .manufacture_id = WINBOND_ID,
2098                 .model_id       = W_39V080FA,
2099                 .total_size     = 1024,
2100                 .page_size      = 64*1024,
2101                 .tested         = TEST_OK_PREW,
2102                 .probe          = probe_winbond_fwhub,
2103                 .erase          = erase_winbond_fwhub,
2104                 .write          = write_winbond_fwhub,
2105         },
2106
2107         {
2108                 .vendor         = "Winbond",
2109                 .name           = "W39V080FA (dual mode)",
2110                 .manufacture_id = WINBOND_ID,
2111                 .model_id       = W_39V080FA_DM,
2112                 .total_size     = 512,
2113                 .page_size      = 64*1024,
2114                 .tested         = TEST_UNTESTED,
2115                 .probe          = probe_winbond_fwhub,
2116                 .erase          = erase_winbond_fwhub,
2117                 .write          = write_winbond_fwhub,
2118         },
2119
2120         {
2121                 .vendor         = "Atmel",
2122                 .name           = "unknown Atmel SPI chip",
2123                 .manufacture_id = ATMEL_ID,
2124                 .model_id       = GENERIC_DEVICE_ID,
2125                 .total_size     = 0,
2126                 .page_size      = 256,
2127                 .tested         = TEST_UNTESTED,
2128                 .probe          = probe_spi_rdid,
2129                 .erase          = NULL,
2130                 .write          = NULL,
2131         },
2132
2133         {
2134                 .vendor         = "EON",
2135                 .name           = "unknown EON SPI chip",
2136                 .manufacture_id = EON_ID_NOPREFIX,
2137                 .model_id       = GENERIC_DEVICE_ID,
2138                 .total_size     = 0,
2139                 .page_size      = 256,
2140                 .tested         = TEST_UNTESTED,
2141                 .probe          = probe_spi_rdid,
2142                 .erase          = NULL,
2143                 .write          = NULL,
2144         },
2145
2146         {
2147                 .vendor         = "Macronix",
2148                 .name           = "unknown Macronix SPI chip",
2149                 .manufacture_id = MX_ID,
2150                 .model_id       = GENERIC_DEVICE_ID,
2151                 .total_size     = 0,
2152                 .page_size      = 256,
2153                 .tested         = TEST_UNTESTED,
2154                 .probe          = probe_spi_rdid,
2155                 .erase          = NULL,
2156                 .write          = NULL,
2157         },
2158
2159         {
2160                 .vendor         = "PMC",
2161                 .name           = "unknown PMC SPI chip",
2162                 .manufacture_id = PMC_ID,
2163                 .model_id       = GENERIC_DEVICE_ID,
2164                 .total_size     = 0,
2165                 .page_size      = 256,
2166                 .tested         = TEST_UNTESTED,
2167                 .probe          = probe_spi_rdid,
2168                 .erase          = NULL,
2169                 .write          = NULL,
2170         },
2171
2172         {
2173                 .vendor         = "SST",
2174                 .name           = "unknown SST SPI chip",
2175                 .manufacture_id = SST_ID,
2176                 .model_id       = GENERIC_DEVICE_ID,
2177                 .total_size     = 0,
2178                 .page_size      = 256,
2179                 .tested         = TEST_UNTESTED,
2180                 .probe          = probe_spi_rdid,
2181                 .erase          = NULL,
2182                 .write          = NULL,
2183         },
2184
2185         {
2186                 .vendor         = "ST",
2187                 .name           = "unknown ST SPI chip",
2188                 .manufacture_id = ST_ID,
2189                 .model_id       = GENERIC_DEVICE_ID,
2190                 .total_size     = 0,
2191                 .page_size      = 256,
2192                 .tested         = TEST_UNTESTED,
2193                 .probe          = probe_spi_rdid,
2194                 .erase          = NULL,
2195                 .write          = NULL,
2196         },
2197
2198         { NULL  }
2199         };