Breaks chip info into multiple lines.
[coreboot.git] / util / flashrom / flashchips.c
1 /*
2  * This file is part of the flashrom project.
3  *
4  * Copyright (C) 2000 Silicon Integrated System Corporation
5  * Copyright (C) 2004 Tyan Corp
6  * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
21  */
22
23 #include "flash.h"
24
25 /**
26  * List of supported flash ROM chips.
27  *
28  * Please keep the list sorted by vendor name and chip name, so that
29  * the output of 'flashrom -L' is alphabetically sorted.
30  */
31 struct flashchip flashchips[] = {
32
33         /* Vendor, Chip, Vendor ID, Chip ID,
34          * Total size (kB), Page size (B),
35          * Test status,
36          * Probe function, Erase function, Write function, Read function
37          */
38
39         {"AMD", "Am29F002(N)BB", AMD_ID, AM_29F002BB,
40          256, 256,
41          TEST_UNTESTED,
42          probe_jedec, erase_chip_jedec, write_en29f002a
43         },
44
45         {"AMD", "Am29F002(N)BT", AMD_ID, AM_29F002BT,
46          256, 256,
47          TEST_OK_PREW,
48          probe_jedec, erase_chip_jedec, write_en29f002a
49         },
50
51         {"AMD", "Am29F016D", AMD_ID, AM_29F016D,
52          2048, 64 * 1024,
53          TEST_UNTESTED,
54          probe_29f040b, erase_29f040b, write_29f040b
55         },
56
57         {"AMD", "Am29F040B", AMD_ID, AM_29F040B,
58          512, 64 * 1024,
59          TEST_OK_PREW,
60          probe_29f040b, erase_29f040b, write_29f040b
61         },
62
63         {"AMD", "Am29LV040B", AMD_ID, AM_29LV040B,
64          512, 64 * 1024,
65          TEST_UNTESTED,
66          probe_29f040b, erase_29f040b, write_29f040b
67         },
68
69         {"ASD", "AE49F2008", ASD_ID, ASD_AE49F2008,
70          256, 128,
71          TEST_UNTESTED,
72          probe_jedec, erase_chip_jedec, write_jedec
73         },
74
75         {"Atmel", "AT25DF021", ATMEL_ID, AT_25DF021,
76          256, 256,
77          TEST_UNTESTED,
78          probe_spi_rdid, NULL, NULL, spi_chip_read
79         },
80
81         {"Atmel", "AT25DF041A", ATMEL_ID, AT_25DF041A,
82          512, 256,
83          TEST_UNTESTED,
84          probe_spi_rdid, NULL, NULL, spi_chip_read
85         },
86
87         {"Atmel", "AT25DF081", ATMEL_ID, AT_25DF081,
88          1024, 256,
89          TEST_UNTESTED,
90          probe_spi_rdid, NULL, NULL, spi_chip_read
91         },
92
93         {"Atmel", "AT25DF161", ATMEL_ID, AT_25DF161,
94          2048, 256,
95          TEST_UNTESTED,
96          probe_spi_rdid, NULL, NULL, spi_chip_read
97         },
98
99         {"Atmel", "AT25DF321", ATMEL_ID, AT_25DF321,
100          4096, 256,
101          TEST_OK_PREW,
102          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
103         },
104
105         {"Atmel", "AT25DF321A", ATMEL_ID, AT_25DF321A,
106          4096, 256,
107          TEST_UNTESTED,
108          probe_spi_rdid, NULL, NULL, spi_chip_read
109         },
110
111         {"Atmel", "AT25DF641", ATMEL_ID, AT_25DF641,
112          8192, 256,
113          TEST_UNTESTED,
114          probe_spi_rdid, NULL, NULL, spi_chip_read
115         },
116
117         {"Atmel", "AT25F512B", ATMEL_ID, AT_25F512B,
118          64, 256,
119          TEST_UNTESTED,
120          probe_spi_rdid, NULL, NULL, spi_chip_read
121         },
122
123         {"Atmel", "AT25FS010", ATMEL_ID, AT_25FS010,
124          128, 256,
125          TEST_UNTESTED,
126          probe_spi_rdid, NULL, NULL, spi_chip_read
127         },
128
129         {"Atmel", "AT25FS040", ATMEL_ID, AT_25FS040,
130          512, 256,
131          TEST_UNTESTED,
132          probe_spi_rdid, NULL, NULL, spi_chip_read
133         },
134
135         {"Atmel", "AT26DF041", ATMEL_ID, AT_26DF041,
136          512, 256,
137          TEST_UNTESTED,
138          probe_spi_rdid, NULL, NULL /* Incompatible Page write */,spi_chip_read
139         },
140
141         {"Atmel", "AT26DF081A", ATMEL_ID, AT_26DF081A,
142          1024, 256,
143          TEST_UNTESTED,
144          probe_spi_rdid, NULL, NULL, spi_chip_read
145         },
146
147         {"Atmel", "AT26DF161", ATMEL_ID, AT_26DF161,
148          2048, 256,
149          TEST_UNTESTED,
150          probe_spi_rdid, NULL, NULL, spi_chip_read
151         },
152
153         {"Atmel", "AT26DF161A", ATMEL_ID, AT_26DF161A,
154          2048, 256,
155          TEST_UNTESTED,
156          probe_spi_rdid, NULL, NULL, spi_chip_read
157         },
158
159         /*The AT26DF321 has the same ID as the AT25DF321. */
160         /*{"Atmel", "AT26DF321", ATMEL_ID, AT_26DF321,
161           4096, 256,
162           TEST_UNTESTED,
163           probe_spi_rdid, NULL, NULL, spi_chip_read
164           },
165         */
166
167         {"Atmel", "AT26F004", ATMEL_ID, AT_26F004,
168          512, 256,
169          TEST_UNTESTED,
170          probe_spi_rdid, NULL, NULL /* Incompatible Page write */,spi_chip_read
171         },
172
173         {"Atmel", "AT29C020", ATMEL_ID, AT_29C020,
174          256, 256,
175          TEST_OK_PREW,
176          probe_jedec, erase_chip_jedec, write_jedec
177         },
178
179         {"Atmel", "AT29C040A", ATMEL_ID, AT_29C040A,
180          512, 256,
181          TEST_UNTESTED,
182          probe_jedec, erase_chip_jedec, write_jedec
183         },
184
185         {"Atmel", "AT45CS1282", ATMEL_ID, AT_45CS1282,
186          16896/*!*/, 1056/*!*/,
187          TEST_BAD_READ,
188          probe_spi_rdid, NULL, NULL /* Incompatible Page write */, NULL /* Incompatible read */
189         }, /* No power of two sizes */
190
191         {"Atmel", "AT45DB011D", ATMEL_ID, AT_45DB011D,
192          128/*!*/, 256/*!*/,
193          TEST_BAD_READ,
194          probe_spi_rdid, NULL, NULL, NULL
195         }, /* Size can only be determined from status register */
196
197         {"Atmel", "AT45DB021D", ATMEL_ID, AT_45DB021D,
198          256/*!*/, 256/*!*/,
199          TEST_BAD_READ,
200          probe_spi_rdid, NULL, NULL, NULL
201         }, /* Size can only be determined from status register */
202
203         {"Atmel", "AT45DB041D", ATMEL_ID, AT_45DB041D,
204          512/*!*/, 256/*!*/,
205          TEST_BAD_READ,
206          probe_spi_rdid, NULL, NULL, NULL
207         }, /* Size can only be determined from status register */
208
209         {"Atmel", "AT45DB081D", ATMEL_ID, AT_45DB081D,
210          1024/*!*/, 256/*!*/,
211          TEST_BAD_READ,
212          probe_spi_rdid, NULL, NULL, NULL
213         }, /* Size can only be determined from status register */
214
215         {"Atmel", "AT45DB161D", ATMEL_ID, AT_45DB161D,
216          2048/*!*/, 512/*!*/,
217          TEST_BAD_READ,
218          probe_spi_rdid, NULL, NULL, NULL
219         }, /* Size can only be determined from status register */
220
221         {"Atmel", "AT45DB321C", ATMEL_ID, AT_45DB321C,
222          4224/*!*/, 528/*!*/,
223          TEST_BAD_READ,
224          probe_spi_rdid, NULL, NULL, NULL /* Incompatible read */
225         }, /* No power of two sizes */
226
227         {"Atmel", "AT45DB321D", ATMEL_ID, AT_45DB321D,
228          4096/*!*/, 512/*!*/,
229          TEST_BAD_READ,
230          probe_spi_rdid, NULL, NULL, NULL
231         }, /* Size can only be determined from status register */
232
233         {"Atmel", "AT45DB642D", ATMEL_ID, AT_45DB642D,
234          8192/*!*/, 1024/*!*/,
235          TEST_BAD_READ,
236          probe_spi_rdid, NULL, NULL, NULL
237         }, /* Size can only be determined from status register */
238
239         {"Atmel", "AT49F002(N)", ATMEL_ID, AT_49F002N,
240          256, 256,
241          TEST_UNTESTED,
242          probe_jedec, erase_chip_jedec, write_49f002
243         },
244
245         {"Atmel", "AT49F002(N)T", ATMEL_ID, AT_49F002NT,
246          256, 256,
247          TEST_OK_PREW,
248          probe_jedec, erase_chip_jedec, write_49f002
249         },
250
251         {"AMIC", "A25L40P", AMIC_ID, AMIC_A25L40P,
252          512, 256,
253          TEST_OK_PREW,
254          probe_spi_rdid4, spi_chip_erase_c7, spi_chip_write, spi_chip_read
255         },
256
257         {"AMIC", "A29002B", AMIC_ID_NOPREFIX, AMIC_A29002B,
258          256, 64 * 1024,
259          TEST_UNTESTED,
260          probe_29f002, erase_29f002, write_29f002
261         },
262
263         {"AMIC", "A29002T", AMIC_ID_NOPREFIX, AMIC_A29002T,
264          256, 64 * 1024,
265          TEST_OK_PREW,
266          probe_29f002, erase_29f002, write_29f002
267         },
268
269         {"AMIC", "A29040B", AMIC_ID_NOPREFIX, AMIC_A29040B,
270          512, 64 * 1024,
271          TEST_OK_PR,
272          probe_29f040b, erase_29f040b, write_29f040b
273         },
274
275         {"AMIC", "A49LF040A", AMIC_ID_NOPREFIX, AMIC_A49LF040A,
276          512, 64 * 1024,
277          TEST_OK_PREW,
278          probe_49fl00x, erase_49fl00x, write_49fl00x
279         },
280
281         {"EMST", "F49B002UA", EMST_ID, EMST_F49B002UA,
282          256, 4096,
283          TEST_UNTESTED,
284          probe_jedec, erase_chip_jedec, write_49f002
285         },
286
287         {"EON", "EN29F002(A)(N)B", EON_ID, EN_29F002B,
288          256, 256,
289          TEST_UNTESTED,
290          probe_jedec, erase_chip_jedec, write_en29f002a
291         },
292
293         {"EON", "EN29F002(A)(N)T", EON_ID, EN_29F002T,
294          256, 256,
295          TEST_OK_PREW,
296          probe_jedec, erase_chip_jedec, write_en29f002a
297         },
298
299         {"Fujitsu", "MBM29F004BC", FUJITSU_ID, MBM29F004BC,
300          512, 64 * 1024,
301          TEST_UNTESTED,
302          probe_jedec, NULL, NULL
303         },
304
305         {"Fujitsu", "MBM29F004TC", FUJITSU_ID, MBM29F004TC,
306          512, 64 * 1024,
307          TEST_UNTESTED,
308          probe_jedec, NULL, NULL
309         },
310
311         {"Fujitsu", "MBM29F400BC", FUJITSU_ID, MBM29F400BC,
312          512, 64 * 1024,
313          TEST_UNTESTED,
314          probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt
315         },
316
317         {"Fujitsu", "MBM29F400TC", FUJITSU_ID, MBM29F400TC,
318          512, 64 * 1024,
319          TEST_UNTESTED,
320          probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt
321         },
322
323         {"Intel", "82802AB", INTEL_ID, 173,
324          512, 64 * 1024,
325          TEST_OK_PREW,
326          probe_82802ab, erase_82802ab, write_82802ab
327         },
328
329         {"Intel", "82802AC", INTEL_ID, 172,
330          1024, 64 * 1024,
331          TEST_OK_PREW,
332          probe_82802ab, erase_82802ab, write_82802ab
333         },
334
335         {"Macronix", "MX25L512", MX_ID, MX_25L512,
336          64, 256,
337          TEST_UNTESTED,
338          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
339         },
340
341         {"Macronix", "MX25L1005", MX_ID, MX_25L1005,
342          128, 256,
343          TEST_UNTESTED,
344          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
345         },
346
347         {"Macronix", "MX25L2005", MX_ID, MX_25L2005,
348          256, 256,
349          TEST_UNTESTED,
350          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
351         },
352
353         {"Macronix", "MX25L4005", MX_ID, MX_25L4005,
354          512, 256,
355          TEST_OK_PREW,
356          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
357         },
358
359         {"Macronix", "MX25L8005", MX_ID, MX_25L8005,
360          1024, 256,
361          TEST_OK_PREW,
362          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
363         },
364
365         {"Macronix", "MX25L1605", MX_ID, MX_25L1605,
366          2048, 256,
367          TEST_UNTESTED,
368          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
369         },
370
371         {"Macronix", "MX25L3205", MX_ID, MX_25L3205,
372          4096, 256,
373          TEST_OK_PREW,
374          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
375         },
376
377         {"Macronix", "MX25L6405", MX_ID, MX_25L6405,
378          8192, 256,
379          TEST_UNTESTED,
380          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
381         },
382
383         {"Macronix", "MX29F002B", MX_ID, MX_29F002B,
384          256, 64 * 1024,
385          TEST_UNTESTED,
386          probe_29f002, erase_29f002, write_29f002
387         },
388
389         {"Macronix", "MX29F002T", MX_ID, MX_29F002T,
390          256, 64 * 1024,
391          TEST_UNTESTED,
392          probe_29f002, erase_29f002, write_29f002
393         },
394
395         {"Numonyx", "M25PE10", ST_ID, 0x8011,
396          128, 256,
397          TEST_UNTESTED,
398          probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read
399         },
400
401         {"Numonyx", "M25PE20", ST_ID, 0x8012,
402          256, 256,
403          TEST_UNTESTED,
404          probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read
405         },
406
407         {"Numonyx", "M25PE40", ST_ID, 0x8013,
408          256, 256,
409          TEST_UNTESTED,
410          probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read
411         },
412
413         {"Numonyx", "M25PE80", ST_ID, 0x8014,
414          1024, 256,
415          TEST_OK_PREW,
416          probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read
417         },
418
419         {"Numonyx", "M25PE16", ST_ID, 0x8015,
420          2048, 256,
421          TEST_UNTESTED,
422          probe_spi_rdid, spi_chip_erase_d8, spi_chip_write, spi_chip_read
423         },
424
425         {"PMC", "Pm25LV010", PMC_ID, PMC_25LV010,
426          128, 256,
427          TEST_UNTESTED,
428          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
429         },
430
431         {"PMC", "Pm25LV016B", PMC_ID, PMC_25LV016B,
432          2048, 256,
433          TEST_UNTESTED,
434          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
435         },
436
437         {"PMC", "Pm25LV020", PMC_ID, PMC_25LV020,
438          256, 256,
439          TEST_UNTESTED,
440          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
441         },
442
443         {"PMC", "Pm25LV040", PMC_ID, PMC_25LV040,
444          512, 256,
445          TEST_UNTESTED,
446          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
447         },
448
449         {"PMC", "Pm25LV080B", PMC_ID, PMC_25LV080B,
450          1024, 256,
451          TEST_UNTESTED,
452          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
453         },
454
455         {"PMC", "Pm25LV512", PMC_ID, PMC_25LV512,
456          64, 256,
457          TEST_UNTESTED,
458          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
459         },
460
461         {"PMC", "Pm49FL002", PMC_ID_NOPREFIX, PMC_49FL002,
462          256, 16 * 1024,
463          TEST_OK_PREW,
464          probe_49fl00x, erase_49fl00x, write_49fl00x
465         },
466
467         {"PMC", "Pm49FL004", PMC_ID_NOPREFIX,PMC_49FL004,
468          512, 64 * 1024,
469          TEST_OK_PREW,
470          probe_49fl00x, erase_49fl00x, write_49fl00x
471         },
472
473         {"Sharp", "LHF00L04", SHARP_ID, SHARP_LHF00L04,
474          1024, 64 * 1024,
475          TEST_UNTESTED,
476          probe_lhf00l04, erase_lhf00l04, write_lhf00l04
477         },
478
479         {"Spansion", "S25FL016A", SPANSION_ID, SPANSION_S25FL016A,
480          2048, 256,
481          TEST_OK_PREW,
482          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
483         },
484
485         {"SST", "SST25VF016B", SST_ID, SST_25VF016B,
486          2048, 256,
487          TEST_OK_PREW,
488          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
489         },
490
491         {"SST", "SST25VF032B", SST_ID, SST_25VF032B,
492          4096, 256,
493          TEST_OK_PREW,
494          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
495         },
496
497         {"SST", "SST25VF040B", SST_ID, SST_25VF040B,
498          512, 256,
499          TEST_UNTESTED,
500          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
501         },
502
503         {"SST", "SST25VF080B", SST_ID, SST_25VF080B,
504          1024, 256,
505          TEST_UNTESTED,
506          probe_spi_rdid, spi_chip_erase_60_c7, spi_chip_write, spi_chip_read
507         },
508
509         {"SST", "SST28SF040A", SST_ID, SST_28SF040,
510          512, 256,
511          TEST_UNTESTED,
512          probe_28sf040, erase_28sf040, write_28sf040
513         },
514
515         {"SST", "SST29EE010", SST_ID, SST_29EE010,
516          128, 128,
517          TEST_OK_PREW,
518          probe_jedec, erase_chip_jedec, write_jedec
519         },
520
521         {"SST", "SST29LE010", SST_ID, SST_29LE010,
522          128, 128,
523          TEST_UNTESTED,
524          probe_jedec, erase_chip_jedec, write_jedec
525         },
526
527         {"SST", "SST29EE020A", SST_ID, SST_29EE020A,
528          256, 128,
529          TEST_UNTESTED,
530          probe_jedec, erase_chip_jedec, write_jedec
531         },
532
533         {"SST", "SST29LE020", SST_ID, SST_29LE020,
534          256, 128,
535          TEST_UNTESTED,
536          probe_jedec, erase_chip_jedec, write_jedec
537         },
538
539         {"SST", "SST39SF010A", SST_ID, SST_39SF010,
540          128, 4096,
541          TEST_OK_PREW,
542          probe_jedec, erase_chip_jedec, write_39sf020
543         },
544
545         {"SST", "SST39SF020A", SST_ID, SST_39SF020,
546          256, 4096,
547          TEST_OK_PREW,
548          probe_jedec, erase_chip_jedec, write_39sf020
549         },
550
551         {"SST", "SST39SF040", SST_ID, SST_39SF040,
552          512, 4096,
553          TEST_OK_PREW,
554          probe_jedec, erase_chip_jedec, write_39sf020
555         },
556
557         {"SST", "SST39VF512", SST_ID, SST_39VF512,
558          64, 4096,
559          TEST_UNTESTED,
560          probe_jedec, erase_chip_jedec, write_39sf020
561         },
562
563         {"SST", "SST39VF010", SST_ID, SST_39VF010,
564          128, 4096,
565          TEST_UNTESTED,
566          probe_jedec, erase_chip_jedec, write_39sf020
567         },
568
569         {"SST", "SST39VF020", SST_ID, SST_39VF020,
570          256, 4096,
571          TEST_OK_PREW,
572          probe_jedec, erase_chip_jedec, write_39sf020
573         },
574
575         {"SST", "SST39VF040", SST_ID, SST_39VF040,
576          512, 4096,
577          TEST_OK_PROBE,
578          probe_jedec, erase_chip_jedec, write_39sf020
579         }, /* assume similar to 004B, ignoring data sheet */
580
581         {"SST", "SST49LF002A/B", SST_ID, SST_49LF002A,
582          256, 16 * 1024,
583          TEST_OK_PREW,
584          probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub
585         },
586
587         {"SST", "SST49LF003A/B", SST_ID, SST_49LF003A,
588          384, 64 * 1024,
589          TEST_UNTESTED,
590          probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub
591         },
592
593         {"SST", "SST49LF004A/B", SST_ID, SST_49LF004A,
594          512, 64 * 1024,
595          TEST_OK_PREW,
596          probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub
597         },
598
599         {"SST", "SST49LF004C", SST_ID, SST_49LF004C,
600          512, 4 * 1024,
601          TEST_UNTESTED,
602          probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc
603         },
604
605         {"SST", "SST49LF008A", SST_ID, SST_49LF008A,
606          1024, 64 * 1024,
607          TEST_OK_PREW,
608          probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub
609         },
610
611         {"SST", "SST49LF008C", SST_ID, SST_49LF008C,
612          1024, 4 * 1024,
613          TEST_UNTESTED,
614          probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc
615         },
616
617         {"SST", "SST49LF016C", SST_ID, SST_49LF016C,
618          2048, 4 * 1024,
619          TEST_OK_PREW,
620          probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc
621         },
622
623         {"SST", "SST49LF020A", SST_ID, SST_49LF020A,
624          256, 16 * 1024,
625          TEST_UNTESTED,
626          probe_jedec, erase_49lf040, write_49lf040
627         },
628
629         {"SST", "SST49LF040", SST_ID, SST_49LF040,
630          512, 4096,
631          TEST_OK_PREW,
632          probe_jedec, erase_49lf040, write_49lf040
633         },
634
635         {"SST", "SST49LF040B", SST_ID, SST_49LF040B,
636          512, 64 * 1024,
637          TEST_OK_PREW,
638          probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub
639         },
640
641         {"SST", "SST49LF080A", SST_ID, SST_49LF080A,
642          1024, 4096,
643          TEST_OK_PREW,
644          probe_jedec, erase_49lf040, write_49lf040
645         },
646
647         {"SST", "SST49LF160C", SST_ID, SST_49LF160C,
648          2048, 4 * 1024,
649          TEST_OK_PREW,
650          probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc
651         },
652
653         {"ST", "M25P05-A", ST_ID, ST_M25P05A,
654          64, 256,
655          TEST_UNTESTED,
656          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
657         },
658
659         {"ST", "M25P10-A", ST_ID, ST_M25P10A,
660          128, 256,
661          TEST_UNTESTED,
662          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
663         },
664
665         {"ST", "M25P20", ST_ID, ST_M25P20,
666          256, 256,
667          TEST_UNTESTED,
668          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
669         },
670
671         {"ST", "M25P40", ST_ID, ST_M25P40,
672          512, 256,
673          TEST_UNTESTED,
674          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
675         },
676
677         {"ST", "M25P40-old", ST_ID, ST_M25P40_RES,
678          512, 256,
679          TEST_UNTESTED,
680          probe_spi_res, spi_chip_erase_c7, spi_chip_write, spi_chip_read
681         },
682
683         {"ST", "M25P80", ST_ID, ST_M25P80,
684          1024, 256,
685          TEST_UNTESTED,
686          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
687         },
688
689         {"ST", "M25P16", ST_ID, ST_M25P16,
690          2048, 256,
691          TEST_OK_PREW,
692          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
693         },
694
695         {"ST", "M25P32", ST_ID, ST_M25P32,
696          4096, 256,
697          TEST_OK_PREW,
698          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
699         },
700
701         {"ST", "M25P64", ST_ID, ST_M25P64,
702          8192, 256,
703          TEST_UNTESTED,
704          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
705         },
706
707         {"ST", "M25P128", ST_ID, ST_M25P128,
708          16384, 256,
709          TEST_UNTESTED,
710          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
711         },
712
713         {"ST", "M29F002B", ST_ID, ST_M29F002B,
714          256, 64 * 1024,
715          TEST_UNTESTED,
716          probe_jedec, erase_chip_jedec, write_jedec
717         },
718
719         {"ST", "M29F002T/NT", ST_ID, ST_M29F002T,
720          256, 64 * 1024,
721          TEST_UNTESTED,
722          probe_jedec, erase_chip_jedec, write_jedec
723         },
724
725         {"ST", "M29F040B", ST_ID, ST_M29F040B,
726          512, 64 * 1024,
727          TEST_OK_PREW,
728          probe_29f040b, erase_29f040b, write_29f040b
729         },
730
731         {"ST", "M29F400BT", ST_ID, ST_M29F400BT,
732          512, 64 * 1024,
733          TEST_UNTESTED,
734          probe_m29f400bt, erase_m29f400bt, write_coreboot_m29f400bt
735         },
736
737         {"ST", "M29W010B", ST_ID, ST_M29W010B,
738          128, 16 * 1024,
739          TEST_UNTESTED,
740          probe_jedec, erase_chip_jedec, write_jedec
741         },
742
743         {"ST", "M29W040B", ST_ID, ST_M29W040B,
744          512, 64 * 1024,
745          TEST_UNTESTED,
746          probe_jedec, erase_chip_jedec, write_jedec
747         },
748
749         {"ST", "M50FLW040A", ST_ID, ST_M50FLW040A,
750          512, 64 * 1024,
751          TEST_UNTESTED,
752          probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x
753         },
754
755         {"ST", "M50FLW040B", ST_ID, ST_M50FLW040B,
756          512, 64 * 1024,
757          TEST_UNTESTED,
758          probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x
759         },
760
761         {"ST", "M50FLW080A", ST_ID, ST_M50FLW080A,
762          1024, 64 * 1024,
763          TEST_OK_PREW,
764          probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x
765         },
766
767         {"ST", "M50FLW080B", ST_ID, ST_M50FLW080B,
768          1024, 64 * 1024,
769          TEST_UNTESTED,
770          probe_stm50flw0x0x, erase_stm50flw0x0x, write_stm50flw0x0x
771         },
772
773         {"ST", "M50FW002", ST_ID, ST_M50FW002,
774          256, 64 * 1024,
775          TEST_UNTESTED,
776          probe_49lfxxxc, NULL, NULL
777         },
778
779         {"ST", "M50FW016", ST_ID, ST_M50FW016,
780          2048, 64 * 1024,
781          TEST_UNTESTED,
782          probe_82802ab, erase_82802ab, write_82802ab
783         },
784
785         {"ST", "M50FW040", ST_ID, ST_M50FW040,
786          512, 64 * 1024,
787          TEST_OK_PREW,
788          probe_82802ab, erase_82802ab, write_82802ab
789         },
790
791         {"ST", "M50FW080", ST_ID, ST_M50FW080,
792          1024, 64 * 1024,
793          TEST_UNTESTED,
794          probe_82802ab, erase_82802ab, write_82802ab
795         },
796
797         {"ST", "M50LPW116", ST_ID, ST_M50LPW116,
798          2048, 64 * 1024,
799          TEST_UNTESTED,
800          probe_jedec, erase_chip_jedec, write_jedec
801         },
802
803         {"SyncMOS", "S29C31004T", SYNCMOS_ID, S29C31004T,
804          512, 128,
805          TEST_UNTESTED,
806          probe_jedec, erase_chip_jedec, write_49f002
807         },
808
809         {"SyncMOS", "S29C51001T", SYNCMOS_ID, S29C51001T,
810          128, 128,
811          TEST_UNTESTED,
812          probe_jedec, erase_chip_jedec, write_49f002
813         },
814
815         {"SyncMOS", "S29C51002T", SYNCMOS_ID, S29C51002T,
816          256, 128,
817          TEST_OK_PREW,
818          probe_jedec, erase_chip_jedec, write_49f002
819         },
820
821         {"SyncMOS", "S29C51004T", SYNCMOS_ID, S29C51004T,
822          512, 128,
823          TEST_UNTESTED,
824          probe_jedec, erase_chip_jedec, write_49f002
825         },
826
827         {"Winbond", "W25x10", WINBOND_NEX_ID, W_25X10,
828          128, 256,
829          TEST_UNTESTED,
830          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
831         },
832
833         {"Winbond", "W25x20", WINBOND_NEX_ID, W_25X20,
834          256, 256,
835          TEST_UNTESTED,
836          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
837         },
838
839         {"Winbond", "W25x40", WINBOND_NEX_ID, W_25X40,
840          512, 256,
841          TEST_OK_PREW,
842          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
843         },
844
845         {"Winbond", "W25x80", WINBOND_NEX_ID, W_25X80,
846          1024, 256,
847          TEST_OK_PREW,
848          probe_spi_rdid, spi_chip_erase_c7, spi_chip_write, spi_chip_read
849         },
850
851         {"Winbond", "W29C011", WINBOND_ID, W_29C011,
852          128, 128,
853          TEST_OK_PREW,
854          probe_jedec, erase_chip_jedec, write_jedec
855         },
856
857         {"Winbond", "W29C020C", WINBOND_ID, W_29C020C,
858          256, 128,
859          TEST_OK_PREW,
860          probe_jedec, erase_chip_jedec, write_jedec
861         },
862
863         {"Winbond", "W29C040P", WINBOND_ID, W_29C040P,
864          512, 256,
865          TEST_UNTESTED,
866          probe_jedec, erase_chip_jedec, write_jedec
867         },
868
869         {"Winbond", "W29EE011", WINBOND_ID, W_29C011,
870          128, 128,
871          TEST_OK_PREW,
872          probe_w29ee011, erase_chip_jedec, write_jedec
873         },
874
875         {"Winbond", "W39V040A", WINBOND_ID, W_39V040A,
876          512, 64*1024,
877          TEST_UNTESTED,
878          probe_jedec, erase_chip_jedec, write_39sf020
879         },
880
881         {"Winbond", "W39V040B", WINBOND_ID, W_39V040B,
882          512, 64*1024,
883          TEST_OK_PREW,
884          probe_jedec, erase_chip_jedec, write_39sf020
885         },
886
887         {"Winbond", "W39V040C", WINBOND_ID, 0x50,
888          512, 64*1024,
889          TEST_OK_PREW,
890          probe_w39v040c, erase_w39v040c, write_w39v040c
891         },
892
893         {"Winbond", "W39V040FA", WINBOND_ID, W_39V040FA,
894          512, 64*1024,
895          TEST_OK_PREW,
896          probe_jedec, erase_chip_jedec, write_39sf020
897         },
898
899         {"Winbond", "W39V080A", WINBOND_ID, W_39V080A,
900          1024, 64*1024,
901          TEST_OK_PREW,
902          probe_jedec, erase_chip_jedec, write_39sf020
903         },
904
905         {"Winbond", "W49F002U", WINBOND_ID, W_49F002U,
906          256, 128,
907          TEST_OK_PREW,
908          probe_jedec, erase_chip_jedec, write_49f002
909         },
910
911         {"Winbond", "W49V002A", WINBOND_ID, W_49V002A,
912          256, 128,
913          TEST_OK_PREW,
914          probe_jedec, erase_chip_jedec, write_49f002
915         },
916
917         {"Winbond", "W49V002FA", WINBOND_ID, W_49V002FA,
918          256, 128,
919          TEST_UNTESTED,
920          probe_jedec, erase_chip_jedec, write_49f002
921         },
922
923         {"Winbond", "W39V080FA", WINBOND_ID, W_39V080FA,
924          1024, 64*1024,
925          TEST_OK_PREW,
926          probe_winbond_fwhub, erase_winbond_fwhub, write_winbond_fwhub
927         },
928
929         {"Winbond", "W39V080FA (dual mode)", WINBOND_ID, W_39V080FA_DM,
930          512, 64*1024,
931          TEST_UNTESTED,
932          probe_winbond_fwhub, erase_winbond_fwhub, write_winbond_fwhub
933         },
934
935         {"Atmel", "unknown Atmel SPI chip", ATMEL_ID, GENERIC_DEVICE_ID,
936          0, 256,
937          TEST_UNTESTED,
938          probe_spi_rdid, NULL, NULL
939         },
940
941         {"EON", "unknown EON SPI chip", EON_ID_NOPREFIX, GENERIC_DEVICE_ID,
942          0, 256,
943          TEST_UNTESTED,
944          probe_spi_rdid, NULL, NULL
945         },
946
947         {"Macronix", "unknown Macronix SPI chip", MX_ID, GENERIC_DEVICE_ID,
948          0, 256,
949          TEST_UNTESTED,
950          probe_spi_rdid, NULL, NULL
951         },
952
953         {"PMC", "unknown PMC SPI chip", PMC_ID, GENERIC_DEVICE_ID,
954          0, 256,
955          TEST_UNTESTED,
956          probe_spi_rdid, NULL, NULL
957         },
958
959         {"SST", "unknown SST SPI chip", SST_ID, GENERIC_DEVICE_ID,
960          0, 256,
961          TEST_UNTESTED,
962          probe_spi_rdid, NULL, NULL
963         },
964
965         {"ST", "unknown ST SPI chip", ST_ID, GENERIC_DEVICE_ID,
966          0, 256,
967          TEST_UNTESTED,
968          probe_spi_rdid, NULL, NULL
969         },
970
971         {NULL,}
972 };