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