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