blob: ecadf557b26aa0431399646b278a7969207c3286 [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Uwe Hermannd1107642007-08-29 17:52:32 +00007 *
Stefan Reinauerce532972007-05-23 17:20:56 +00008 * 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.
Ollie Lho184a4042005-11-26 21:55:36 +000012 *
Stefan Reinauerce532972007-05-23 17:20:56 +000013 * 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.
Ollie Lho184a4042005-11-26 21:55:36 +000017 *
Stefan Reinauerce532972007-05-23 17:20:56 +000018 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000020 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000021 */
22
23#include "flash.h"
Ollie Lho184a4042005-11-26 21:55:36 +000024
Uwe Hermannfc425e82008-03-16 02:06:25 +000025/**
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 */
Ollie Lho184a4042005-11-26 21:55:36 +000031struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000032
FENG yu ningff692fb2008-12-08 18:15:10 +000033 /* 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
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000039 {
40 .vendor = "AMD",
41 .name = "Am29F002(N)BB",
42 .manufacture_id = AMD_ID,
43 .model_id = AM_29F002BB,
44 .total_size = 256,
45 .page_size = 256,
46 .tested = TEST_UNTESTED,
47 .probe = probe_jedec,
48 .erase = erase_chip_jedec,
49 .write = write_en29f002a,
FENG yu ningff692fb2008-12-08 18:15:10 +000050 },
51
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000052 {
53 .vendor = "AMD",
54 .name = "Am29F002(N)BT",
55 .manufacture_id = AMD_ID,
56 .model_id = AM_29F002BT,
57 .total_size = 256,
58 .page_size = 256,
59 .tested = TEST_OK_PREW,
60 .probe = probe_jedec,
61 .erase = erase_chip_jedec,
62 .write = write_en29f002a,
FENG yu ningff692fb2008-12-08 18:15:10 +000063 },
64
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000065 {
66 .vendor = "AMD",
67 .name = "Am29F016D",
68 .manufacture_id = AMD_ID,
69 .model_id = AM_29F016D,
70 .total_size = 2048,
71 .page_size = 64 * 1024,
72 .tested = TEST_UNTESTED,
73 .probe = probe_29f040b,
74 .erase = erase_29f040b,
75 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +000076 },
77
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000078 {
79 .vendor = "AMD",
80 .name = "Am29F040B",
81 .manufacture_id = AMD_ID,
82 .model_id = AM_29F040B,
83 .total_size = 512,
84 .page_size = 64 * 1024,
85 .tested = TEST_OK_PREW,
86 .probe = probe_29f040b,
87 .erase = erase_29f040b,
88 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +000089 },
90
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 {
92 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +000093 .name = "Am29F080B",
94 .manufacture_id = 0x01,
95 .model_id = 0xd5,
96 .total_size = 1024,
97 .page_size = 64 * 1024,
98 .tested = TEST_UNTESTED,
99 .probe = probe_jedec,
100 .erase = erase_29f040b,
101 .write = write_29f040b,
102 },
103
104 {
105 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000106 .name = "Am29LV040B",
107 .manufacture_id = AMD_ID,
108 .model_id = AM_29LV040B,
109 .total_size = 512,
110 .page_size = 64 * 1024,
111 .tested = TEST_UNTESTED,
112 .probe = probe_29f040b,
113 .erase = erase_29f040b,
114 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +0000115 },
116
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000117 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000118 .vendor = "AMD",
119 .name = "Am29LV081B",
120 .manufacture_id = 0x01,
121 .model_id = 0x38,
122 .total_size = 1024,
123 .page_size = 64 * 1024,
124 .tested = TEST_UNTESTED,
125 .probe = probe_29f040b,
126 .erase = erase_29f040b,
127 .write = write_29f040b,
128 },
129
130 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000131 .vendor = "ASD",
132 .name = "AE49F2008",
133 .manufacture_id = ASD_ID,
134 .model_id = ASD_AE49F2008,
135 .total_size = 256,
136 .page_size = 128,
137 .tested = TEST_UNTESTED,
138 .probe = probe_jedec,
139 .erase = erase_chip_jedec,
140 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +0000141 },
142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000143 {
144 .vendor = "Atmel",
145 .name = "AT25DF021",
146 .manufacture_id = ATMEL_ID,
147 .model_id = AT_25DF021,
148 .total_size = 256,
149 .page_size = 256,
150 .tested = TEST_UNTESTED,
151 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000152 .erase = spi_chip_erase_60_c7,
153 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000155 },
156
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000157 {
158 .vendor = "Atmel",
159 .name = "AT25DF041A",
160 .manufacture_id = ATMEL_ID,
161 .model_id = AT_25DF041A,
162 .total_size = 512,
163 .page_size = 256,
164 .tested = TEST_UNTESTED,
165 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000166 .erase = spi_chip_erase_60_c7,
167 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000168 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000169 },
170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000171 {
172 .vendor = "Atmel",
173 .name = "AT25DF081",
174 .manufacture_id = ATMEL_ID,
175 .model_id = AT_25DF081,
176 .total_size = 1024,
177 .page_size = 256,
178 .tested = TEST_UNTESTED,
179 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000180 .erase = spi_chip_erase_60_c7,
181 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000182 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000183 },
184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000185 {
186 .vendor = "Atmel",
187 .name = "AT25DF161",
188 .manufacture_id = ATMEL_ID,
189 .model_id = AT_25DF161,
190 .total_size = 2048,
191 .page_size = 256,
192 .tested = TEST_UNTESTED,
193 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000194 .erase = spi_chip_erase_60_c7,
195 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "Atmel",
201 .name = "AT25DF321",
202 .manufacture_id = ATMEL_ID,
203 .model_id = AT_25DF321,
204 .total_size = 4096,
205 .page_size = 256,
206 .tested = TEST_OK_PREW,
207 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000208 .erase = spi_chip_erase_60_c7,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000209 .write = spi_chip_write,
210 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000211 },
212
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000213 {
214 .vendor = "Atmel",
215 .name = "AT25DF321A",
216 .manufacture_id = ATMEL_ID,
217 .model_id = AT_25DF321A,
218 .total_size = 4096,
219 .page_size = 256,
220 .tested = TEST_UNTESTED,
221 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000222 .erase = spi_chip_erase_60_c7,
223 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000224 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000225 },
226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 {
228 .vendor = "Atmel",
229 .name = "AT25DF641",
230 .manufacture_id = ATMEL_ID,
231 .model_id = AT_25DF641,
232 .total_size = 8192,
233 .page_size = 256,
234 .tested = TEST_UNTESTED,
235 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000236 .erase = spi_chip_erase_60_c7,
237 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000238 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000239 },
240
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000241 {
242 .vendor = "Atmel",
243 .name = "AT25F512B",
244 .manufacture_id = ATMEL_ID,
245 .model_id = AT_25F512B,
246 .total_size = 64,
247 .page_size = 256,
248 .tested = TEST_UNTESTED,
249 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000250 .erase = spi_chip_erase_60_c7,
251 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000252 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000253 },
254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000255 {
256 .vendor = "Atmel",
257 .name = "AT25FS010",
258 .manufacture_id = ATMEL_ID,
259 .model_id = AT_25FS010,
260 .total_size = 128,
261 .page_size = 256,
262 .tested = TEST_UNTESTED,
263 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000264 .erase = spi_chip_erase_60_c7,
265 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000266 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000267 },
268
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000269 {
270 .vendor = "Atmel",
271 .name = "AT25FS040",
272 .manufacture_id = ATMEL_ID,
273 .model_id = AT_25FS040,
274 .total_size = 512,
275 .page_size = 256,
276 .tested = TEST_UNTESTED,
277 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000278 .erase = spi_chip_erase_60_c7,
279 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000280 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000281 },
282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000283 {
284 .vendor = "Atmel",
285 .name = "AT26DF041",
286 .manufacture_id = ATMEL_ID,
287 .model_id = AT_26DF041,
288 .total_size = 512,
289 .page_size = 256,
290 .tested = TEST_UNTESTED,
291 .probe = probe_spi_rdid,
292 .erase = NULL,
293 .write = NULL /* Incompatible Page write */,
294 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000295 },
296
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000297 {
298 .vendor = "Atmel",
299 .name = "AT26DF081A",
300 .manufacture_id = ATMEL_ID,
301 .model_id = AT_26DF081A,
302 .total_size = 1024,
303 .page_size = 256,
304 .tested = TEST_UNTESTED,
305 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000306 .erase = spi_chip_erase_60_c7,
307 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000308 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000309 },
310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000311 {
312 .vendor = "Atmel",
313 .name = "AT26DF161",
314 .manufacture_id = ATMEL_ID,
315 .model_id = AT_26DF161,
316 .total_size = 2048,
317 .page_size = 256,
318 .tested = TEST_UNTESTED,
319 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000320 .erase = spi_chip_erase_60_c7,
321 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000322 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000323 },
324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000325 {
326 .vendor = "Atmel",
327 .name = "AT26DF161A",
328 .manufacture_id = ATMEL_ID,
329 .model_id = AT_26DF161A,
330 .total_size = 2048,
331 .page_size = 256,
332 .tested = TEST_UNTESTED,
333 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000334 .erase = spi_chip_erase_60_c7,
335 .write = spi_chip_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000336 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000337 },
338
339 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000340 /*{
341 .vendor = "Atmel",
342 .name = "AT26DF321",
343 .manufacture_id = ATMEL_ID,
344 .model_id = AT_26DF321,
345 .total_size = 4096,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000349 .erase = spi_chip_erase_60_c7,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000350 .write = spi_chip_write,
351 .read = spi_chip_read,
352 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000354 {
355 .vendor = "Atmel",
356 .name = "AT26F004",
357 .manufacture_id = ATMEL_ID,
358 .model_id = AT_26F004,
359 .total_size = 512,
360 .page_size = 256,
361 .tested = TEST_UNTESTED,
362 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000363 .erase = spi_chip_erase_60_c7,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000364 .write = NULL /* Incompatible Page write */,
365 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000366 },
367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000368 {
369 .vendor = "Atmel",
370 .name = "AT29C020",
371 .manufacture_id = ATMEL_ID,
372 .model_id = AT_29C020,
373 .total_size = 256,
374 .page_size = 256,
375 .tested = TEST_OK_PREW,
376 .probe = probe_jedec,
377 .erase = erase_chip_jedec,
378 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +0000379 },
380
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000381 {
382 .vendor = "Atmel",
383 .name = "AT29C040A",
384 .manufacture_id = ATMEL_ID,
385 .model_id = AT_29C040A,
386 .total_size = 512,
387 .page_size = 256,
388 .tested = TEST_UNTESTED,
389 .probe = probe_jedec,
390 .erase = erase_chip_jedec,
391 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +0000392 },
393
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000394 {
395 .vendor = "Atmel",
396 .name = "AT45CS1282",
397 .manufacture_id = ATMEL_ID,
398 .model_id = AT_45CS1282,
399 .total_size = 16896/*!*/,
400 .page_size = 1056/*!*/,
401 .tested = TEST_BAD_READ,
402 .probe = probe_spi_rdid,
403 .erase = NULL,
404 .write = NULL /* Incompatible Page write */,
405 .read = NULL /* Incompatible read */,
FENG yu ningff692fb2008-12-08 18:15:10 +0000406 }, /* No power of two sizes */
407
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000408 {
409 .vendor = "Atmel",
410 .name = "AT45DB011D",
411 .manufacture_id = ATMEL_ID,
412 .model_id = AT_45DB011D,
413 .total_size = 128/*!*/,
414 .page_size = 256/*!*/,
415 .tested = TEST_BAD_READ,
416 .probe = probe_spi_rdid,
417 .erase = NULL,
418 .write = NULL,
419 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000420 }, /* Size can only be determined from status register */
421
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000422 {
423 .vendor = "Atmel",
424 .name = "AT45DB021D",
425 .manufacture_id = ATMEL_ID,
426 .model_id = AT_45DB021D,
427 .total_size = 256/*!*/,
428 .page_size = 256/*!*/,
429 .tested = TEST_BAD_READ,
430 .probe = probe_spi_rdid,
431 .erase = NULL,
432 .write = NULL,
433 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000434 }, /* Size can only be determined from status register */
435
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000436 {
437 .vendor = "Atmel",
438 .name = "AT45DB041D",
439 .manufacture_id = ATMEL_ID,
440 .model_id = AT_45DB041D,
441 .total_size = 512/*!*/,
442 .page_size = 256/*!*/,
443 .tested = TEST_BAD_READ,
444 .probe = probe_spi_rdid,
445 .erase = NULL,
446 .write = NULL,
447 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000448 }, /* Size can only be determined from status register */
449
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000450 {
451 .vendor = "Atmel",
452 .name = "AT45DB081D",
453 .manufacture_id = ATMEL_ID,
454 .model_id = AT_45DB081D,
455 .total_size = 1024/*!*/,
456 .page_size = 256/*!*/,
457 .tested = TEST_BAD_READ,
458 .probe = probe_spi_rdid,
459 .erase = NULL,
460 .write = NULL,
461 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000462 }, /* Size can only be determined from status register */
463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000464 {
465 .vendor = "Atmel",
466 .name = "AT45DB161D",
467 .manufacture_id = ATMEL_ID,
468 .model_id = AT_45DB161D,
469 .total_size = 2048/*!*/,
470 .page_size = 512/*!*/,
471 .tested = TEST_BAD_READ,
472 .probe = probe_spi_rdid,
473 .erase = NULL,
474 .write = NULL,
475 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000476 }, /* Size can only be determined from status register */
477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 {
479 .vendor = "Atmel",
480 .name = "AT45DB321C",
481 .manufacture_id = ATMEL_ID,
482 .model_id = AT_45DB321C,
483 .total_size = 4224/*!*/,
484 .page_size = 528/*!*/,
485 .tested = TEST_BAD_READ,
486 .probe = probe_spi_rdid,
487 .erase = NULL,
488 .write = NULL,
489 .read = NULL /* Incompatible read */,
FENG yu ningff692fb2008-12-08 18:15:10 +0000490 }, /* No power of two sizes */
491
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000492 {
493 .vendor = "Atmel",
494 .name = "AT45DB321D",
495 .manufacture_id = ATMEL_ID,
496 .model_id = AT_45DB321D,
497 .total_size = 4096/*!*/,
498 .page_size = 512/*!*/,
499 .tested = TEST_BAD_READ,
500 .probe = probe_spi_rdid,
501 .erase = NULL,
502 .write = NULL,
503 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000504 }, /* Size can only be determined from status register */
505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000506 {
507 .vendor = "Atmel",
508 .name = "AT45DB642D",
509 .manufacture_id = ATMEL_ID,
510 .model_id = AT_45DB642D,
511 .total_size = 8192/*!*/,
512 .page_size = 1024/*!*/,
513 .tested = TEST_BAD_READ,
514 .probe = probe_spi_rdid,
515 .erase = NULL,
516 .write = NULL,
517 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000518 }, /* Size can only be determined from status register */
519
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000520 {
521 .vendor = "Atmel",
522 .name = "AT49F002(N)",
523 .manufacture_id = ATMEL_ID,
524 .model_id = AT_49F002N,
525 .total_size = 256,
526 .page_size = 256,
527 .tested = TEST_UNTESTED,
528 .probe = probe_jedec,
529 .erase = erase_chip_jedec,
530 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000531 },
532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000533 {
534 .vendor = "Atmel",
535 .name = "AT49F002(N)T",
536 .manufacture_id = ATMEL_ID,
537 .model_id = AT_49F002NT,
538 .total_size = 256,
539 .page_size = 256,
540 .tested = TEST_OK_PREW,
541 .probe = probe_jedec,
542 .erase = erase_chip_jedec,
543 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000544 },
545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000546 {
547 .vendor = "AMIC",
548 .name = "A25L40P",
549 .manufacture_id = AMIC_ID,
550 .model_id = AMIC_A25L40P,
551 .total_size = 512,
552 .page_size = 256,
553 .tested = TEST_OK_PREW,
554 .probe = probe_spi_rdid4,
555 .erase = spi_chip_erase_c7,
556 .write = spi_chip_write,
557 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000558 },
559
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000560 {
561 .vendor = "AMIC",
562 .name = "A29002B",
563 .manufacture_id = AMIC_ID_NOPREFIX,
564 .model_id = AMIC_A29002B,
565 .total_size = 256,
566 .page_size = 64 * 1024,
567 .tested = TEST_UNTESTED,
568 .probe = probe_29f002,
569 .erase = erase_29f002,
570 .write = write_29f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000571 },
572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000573 {
574 .vendor = "AMIC",
575 .name = "A29002T",
576 .manufacture_id = AMIC_ID_NOPREFIX,
577 .model_id = AMIC_A29002T,
578 .total_size = 256,
579 .page_size = 64 * 1024,
580 .tested = TEST_OK_PREW,
581 .probe = probe_29f002,
582 .erase = erase_29f002,
583 .write = write_29f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000584 },
585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000586 {
587 .vendor = "AMIC",
588 .name = "A29040B",
589 .manufacture_id = AMIC_ID_NOPREFIX,
590 .model_id = AMIC_A29040B,
591 .total_size = 512,
592 .page_size = 64 * 1024,
593 .tested = TEST_OK_PR,
594 .probe = probe_29f040b,
595 .erase = erase_29f040b,
596 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +0000597 },
598
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000599 {
600 .vendor = "AMIC",
601 .name = "A49LF040A",
602 .manufacture_id = AMIC_ID_NOPREFIX,
603 .model_id = AMIC_A49LF040A,
604 .total_size = 512,
605 .page_size = 64 * 1024,
606 .tested = TEST_OK_PREW,
607 .probe = probe_49fl00x,
608 .erase = erase_49fl00x,
609 .write = write_49fl00x,
FENG yu ningff692fb2008-12-08 18:15:10 +0000610 },
611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000612 {
613 .vendor = "EMST",
614 .name = "F49B002UA",
615 .manufacture_id = EMST_ID,
616 .model_id = EMST_F49B002UA,
617 .total_size = 256,
618 .page_size = 4096,
619 .tested = TEST_UNTESTED,
620 .probe = probe_jedec,
621 .erase = erase_chip_jedec,
622 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000623 },
624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000625 {
626 .vendor = "EON",
627 .name = "EN29F002(A)(N)B",
628 .manufacture_id = EON_ID,
629 .model_id = EN_29F002B,
630 .total_size = 256,
631 .page_size = 256,
632 .tested = TEST_UNTESTED,
633 .probe = probe_jedec,
634 .erase = erase_chip_jedec,
635 .write = write_en29f002a,
FENG yu ningff692fb2008-12-08 18:15:10 +0000636 },
637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000638 {
639 .vendor = "EON",
640 .name = "EN29F002(A)(N)T",
641 .manufacture_id = EON_ID,
642 .model_id = EN_29F002T,
643 .total_size = 256,
644 .page_size = 256,
645 .tested = TEST_OK_PREW,
646 .probe = probe_jedec,
647 .erase = erase_chip_jedec,
648 .write = write_en29f002a,
FENG yu ningff692fb2008-12-08 18:15:10 +0000649 },
650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000651 {
652 .vendor = "Fujitsu",
653 .name = "MBM29F004BC",
654 .manufacture_id = FUJITSU_ID,
655 .model_id = MBM29F004BC,
656 .total_size = 512,
657 .page_size = 64 * 1024,
658 .tested = TEST_UNTESTED,
659 .probe = probe_jedec,
660 .erase = NULL,
661 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000662 },
663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000664 {
665 .vendor = "Fujitsu",
666 .name = "MBM29F004TC",
667 .manufacture_id = FUJITSU_ID,
668 .model_id = MBM29F004TC,
669 .total_size = 512,
670 .page_size = 64 * 1024,
671 .tested = TEST_UNTESTED,
672 .probe = probe_jedec,
673 .erase = NULL,
674 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +0000675 },
676
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000677 {
678 .vendor = "Fujitsu",
679 .name = "MBM29F400BC",
680 .manufacture_id = FUJITSU_ID,
681 .model_id = MBM29F400BC,
682 .total_size = 512,
683 .page_size = 64 * 1024,
684 .tested = TEST_UNTESTED,
685 .probe = probe_m29f400bt,
686 .erase = erase_m29f400bt,
687 .write = write_coreboot_m29f400bt,
FENG yu ningff692fb2008-12-08 18:15:10 +0000688 },
689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000690 {
691 .vendor = "Fujitsu",
692 .name = "MBM29F400TC",
693 .manufacture_id = FUJITSU_ID,
694 .model_id = MBM29F400TC,
695 .total_size = 512,
696 .page_size = 64 * 1024,
697 .tested = TEST_UNTESTED,
698 .probe = probe_m29f400bt,
699 .erase = erase_m29f400bt,
700 .write = write_coreboot_m29f400bt,
FENG yu ningff692fb2008-12-08 18:15:10 +0000701 },
702
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000703 {
704 .vendor = "Intel",
705 .name = "82802AB",
706 .manufacture_id = INTEL_ID,
707 .model_id = 173,
708 .total_size = 512,
709 .page_size = 64 * 1024,
710 .tested = TEST_OK_PREW,
711 .probe = probe_82802ab,
712 .erase = erase_82802ab,
713 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +0000714 },
715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000716 {
717 .vendor = "Intel",
718 .name = "82802AC",
719 .manufacture_id = INTEL_ID,
720 .model_id = 172,
721 .total_size = 1024,
722 .page_size = 64 * 1024,
723 .tested = TEST_OK_PREW,
724 .probe = probe_82802ab,
725 .erase = erase_82802ab,
726 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +0000727 },
728
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000729 {
730 .vendor = "Macronix",
731 .name = "MX25L512",
732 .manufacture_id = MX_ID,
733 .model_id = MX_25L512,
734 .total_size = 64,
735 .page_size = 256,
736 .tested = TEST_UNTESTED,
737 .probe = probe_spi_rdid,
738 .erase = spi_chip_erase_c7,
739 .write = spi_chip_write,
740 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000741 },
742
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000743 {
744 .vendor = "Macronix",
745 .name = "MX25L1005",
746 .manufacture_id = MX_ID,
747 .model_id = MX_25L1005,
748 .total_size = 128,
749 .page_size = 256,
750 .tested = TEST_UNTESTED,
751 .probe = probe_spi_rdid,
752 .erase = spi_chip_erase_c7,
753 .write = spi_chip_write,
754 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000755 },
756
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000757 {
758 .vendor = "Macronix",
759 .name = "MX25L2005",
760 .manufacture_id = MX_ID,
761 .model_id = MX_25L2005,
762 .total_size = 256,
763 .page_size = 256,
764 .tested = TEST_UNTESTED,
765 .probe = probe_spi_rdid,
766 .erase = spi_chip_erase_c7,
767 .write = spi_chip_write,
768 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000769 },
770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000771 {
772 .vendor = "Macronix",
773 .name = "MX25L4005",
774 .manufacture_id = MX_ID,
775 .model_id = MX_25L4005,
776 .total_size = 512,
777 .page_size = 256,
778 .tested = TEST_OK_PREW,
779 .probe = probe_spi_rdid,
780 .erase = spi_chip_erase_c7,
781 .write = spi_chip_write,
782 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000783 },
784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 {
786 .vendor = "Macronix",
787 .name = "MX25L8005",
788 .manufacture_id = MX_ID,
789 .model_id = MX_25L8005,
790 .total_size = 1024,
791 .page_size = 256,
792 .tested = TEST_OK_PREW,
793 .probe = probe_spi_rdid,
794 .erase = spi_chip_erase_c7,
795 .write = spi_chip_write,
796 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000797 },
798
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000799 {
800 .vendor = "Macronix",
801 .name = "MX25L1605",
802 .manufacture_id = MX_ID,
803 .model_id = MX_25L1605,
804 .total_size = 2048,
805 .page_size = 256,
806 .tested = TEST_UNTESTED,
807 .probe = probe_spi_rdid,
808 .erase = spi_chip_erase_c7,
809 .write = spi_chip_write,
810 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000811 },
812
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000813 {
814 .vendor = "Macronix",
815 .name = "MX25L3205",
816 .manufacture_id = MX_ID,
817 .model_id = MX_25L3205,
818 .total_size = 4096,
819 .page_size = 256,
820 .tested = TEST_OK_PREW,
821 .probe = probe_spi_rdid,
822 .erase = spi_chip_erase_c7,
823 .write = spi_chip_write,
824 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000825 },
826
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000827 {
828 .vendor = "Macronix",
829 .name = "MX25L6405",
830 .manufacture_id = MX_ID,
831 .model_id = MX_25L6405,
832 .total_size = 8192,
833 .page_size = 256,
834 .tested = TEST_UNTESTED,
835 .probe = probe_spi_rdid,
836 .erase = spi_chip_erase_c7,
837 .write = spi_chip_write,
838 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000839 },
840
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000841 {
842 .vendor = "Macronix",
843 .name = "MX29F002B",
844 .manufacture_id = MX_ID,
845 .model_id = MX_29F002B,
846 .total_size = 256,
847 .page_size = 64 * 1024,
848 .tested = TEST_UNTESTED,
849 .probe = probe_29f002,
850 .erase = erase_29f002,
851 .write = write_29f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000852 },
853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000854 {
855 .vendor = "Macronix",
856 .name = "MX29F002T",
857 .manufacture_id = MX_ID,
858 .model_id = MX_29F002T,
859 .total_size = 256,
860 .page_size = 64 * 1024,
861 .tested = TEST_UNTESTED,
862 .probe = probe_29f002,
863 .erase = erase_29f002,
864 .write = write_29f002,
FENG yu ningff692fb2008-12-08 18:15:10 +0000865 },
866
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000867 {
868 .vendor = "Macronix",
869 .name = "MX29LV040C",
870 .manufacture_id = MX_ID,
871 .model_id = MX_29LV040C,
872 .total_size = 512,
873 .page_size = 64 * 1024,
874 .tested = TEST_OK_PR,
875 .probe = probe_29f002,
876 .erase = erase_29f002,
877 .write = write_29f002,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +0000878 },
879
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000880 {
881 .vendor = "Numonyx",
882 .name = "M25PE10",
883 .manufacture_id = ST_ID,
884 .model_id = 0x8011,
885 .total_size = 128,
886 .page_size = 256,
887 .tested = TEST_UNTESTED,
888 .probe = probe_spi_rdid,
889 .erase = spi_chip_erase_d8,
890 .write = spi_chip_write,
891 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000892 },
893
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000894 {
895 .vendor = "Numonyx",
896 .name = "M25PE20",
897 .manufacture_id = ST_ID,
898 .model_id = 0x8012,
899 .total_size = 256,
900 .page_size = 256,
901 .tested = TEST_UNTESTED,
902 .probe = probe_spi_rdid,
903 .erase = spi_chip_erase_d8,
904 .write = spi_chip_write,
905 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000906 },
907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000908 {
909 .vendor = "Numonyx",
910 .name = "M25PE40",
911 .manufacture_id = ST_ID,
912 .model_id = 0x8013,
913 .total_size = 256,
914 .page_size = 256,
915 .tested = TEST_UNTESTED,
916 .probe = probe_spi_rdid,
917 .erase = spi_chip_erase_d8,
918 .write = spi_chip_write,
919 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000920 },
921
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000922 {
923 .vendor = "Numonyx",
924 .name = "M25PE80",
925 .manufacture_id = ST_ID,
926 .model_id = 0x8014,
927 .total_size = 1024,
928 .page_size = 256,
929 .tested = TEST_OK_PREW,
930 .probe = probe_spi_rdid,
931 .erase = spi_chip_erase_d8,
932 .write = spi_chip_write,
933 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000934 },
935
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000936 {
937 .vendor = "Numonyx",
938 .name = "M25PE16",
939 .manufacture_id = ST_ID,
940 .model_id = 0x8015,
941 .total_size = 2048,
942 .page_size = 256,
943 .tested = TEST_UNTESTED,
944 .probe = probe_spi_rdid,
945 .erase = spi_chip_erase_d8,
946 .write = spi_chip_write,
947 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000948 },
949
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000950 {
951 .vendor = "PMC",
952 .name = "Pm25LV010",
953 .manufacture_id = PMC_ID,
954 .model_id = PMC_25LV010,
955 .total_size = 128,
956 .page_size = 256,
957 .tested = TEST_UNTESTED,
958 .probe = probe_spi_rdid,
959 .erase = spi_chip_erase_c7,
960 .write = spi_chip_write,
961 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000962 },
963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000964 {
965 .vendor = "PMC",
966 .name = "Pm25LV016B",
967 .manufacture_id = PMC_ID,
968 .model_id = PMC_25LV016B,
969 .total_size = 2048,
970 .page_size = 256,
971 .tested = TEST_UNTESTED,
972 .probe = probe_spi_rdid,
973 .erase = spi_chip_erase_c7,
974 .write = spi_chip_write,
975 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000976 },
977
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000978 {
979 .vendor = "PMC",
980 .name = "Pm25LV020",
981 .manufacture_id = PMC_ID,
982 .model_id = PMC_25LV020,
983 .total_size = 256,
984 .page_size = 256,
985 .tested = TEST_UNTESTED,
986 .probe = probe_spi_rdid,
987 .erase = spi_chip_erase_c7,
988 .write = spi_chip_write,
989 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000990 },
991
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000992 {
993 .vendor = "PMC",
994 .name = "Pm25LV040",
995 .manufacture_id = PMC_ID,
996 .model_id = PMC_25LV040,
997 .total_size = 512,
998 .page_size = 256,
999 .tested = TEST_UNTESTED,
1000 .probe = probe_spi_rdid,
1001 .erase = spi_chip_erase_c7,
1002 .write = spi_chip_write,
1003 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001004 },
1005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 {
1007 .vendor = "PMC",
1008 .name = "Pm25LV080B",
1009 .manufacture_id = PMC_ID,
1010 .model_id = PMC_25LV080B,
1011 .total_size = 1024,
1012 .page_size = 256,
1013 .tested = TEST_UNTESTED,
1014 .probe = probe_spi_rdid,
1015 .erase = spi_chip_erase_c7,
1016 .write = spi_chip_write,
1017 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001018 },
1019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 {
1021 .vendor = "PMC",
1022 .name = "Pm25LV512",
1023 .manufacture_id = PMC_ID,
1024 .model_id = PMC_25LV512,
1025 .total_size = 64,
1026 .page_size = 256,
1027 .tested = TEST_UNTESTED,
1028 .probe = probe_spi_rdid,
1029 .erase = spi_chip_erase_c7,
1030 .write = spi_chip_write,
1031 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001032 },
1033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001034 {
1035 .vendor = "PMC",
1036 .name = "Pm49FL002",
1037 .manufacture_id = PMC_ID_NOPREFIX,
1038 .model_id = PMC_49FL002,
1039 .total_size = 256,
1040 .page_size = 16 * 1024,
1041 .tested = TEST_OK_PREW,
1042 .probe = probe_49fl00x,
1043 .erase = erase_49fl00x,
1044 .write = write_49fl00x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001045 },
1046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001047 {
1048 .vendor = "PMC",
1049 .name = "Pm49FL004",
1050 .manufacture_id = PMC_ID_NOPREFIX,
1051 .model_id = PMC_49FL004,
1052 .total_size = 512,
1053 .page_size = 64 * 1024,
1054 .tested = TEST_OK_PREW,
1055 .probe = probe_49fl00x,
1056 .erase = erase_49fl00x,
1057 .write = write_49fl00x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001058 },
1059
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001060 {
1061 .vendor = "Sharp",
1062 .name = "LHF00L04",
1063 .manufacture_id = SHARP_ID,
1064 .model_id = SHARP_LHF00L04,
1065 .total_size = 1024,
1066 .page_size = 64 * 1024,
1067 .tested = TEST_UNTESTED,
1068 .probe = probe_lhf00l04,
1069 .erase = erase_lhf00l04,
1070 .write = write_lhf00l04,
FENG yu ningff692fb2008-12-08 18:15:10 +00001071 },
1072
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001073 {
1074 .vendor = "Spansion",
1075 .name = "S25FL016A",
1076 .manufacture_id = SPANSION_ID,
1077 .model_id = SPANSION_S25FL016A,
1078 .total_size = 2048,
1079 .page_size = 256,
1080 .tested = TEST_OK_PREW,
1081 .probe = probe_spi_rdid,
1082 .erase = spi_chip_erase_c7,
1083 .write = spi_chip_write,
1084 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001085 },
1086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001087 {
1088 .vendor = "SST",
1089 .name = "SST25VF016B",
1090 .manufacture_id = SST_ID,
1091 .model_id = SST_25VF016B,
1092 .total_size = 2048,
1093 .page_size = 256,
1094 .tested = TEST_OK_PREW,
1095 .probe = probe_spi_rdid,
1096 .erase = spi_chip_erase_c7,
1097 .write = spi_chip_write,
1098 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001099 },
1100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001101 {
1102 .vendor = "SST",
1103 .name = "SST25VF032B",
1104 .manufacture_id = SST_ID,
1105 .model_id = SST_25VF032B,
1106 .total_size = 4096,
1107 .page_size = 256,
1108 .tested = TEST_OK_PREW,
1109 .probe = probe_spi_rdid,
1110 .erase = spi_chip_erase_c7,
1111 .write = spi_chip_write,
1112 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001113 },
1114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001115 {
1116 .vendor = "SST",
1117 .name = "SST25VF040B",
1118 .manufacture_id = SST_ID,
1119 .model_id = SST_25VF040B,
1120 .total_size = 512,
1121 .page_size = 256,
1122 .tested = TEST_UNTESTED,
1123 .probe = probe_spi_rdid,
1124 .erase = spi_chip_erase_c7,
1125 .write = spi_chip_write,
1126 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001127 },
1128
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001129 {
1130 .vendor = "SST",
1131 .name = "SST25VF080B",
1132 .manufacture_id = SST_ID,
1133 .model_id = SST_25VF080B,
1134 .total_size = 1024,
1135 .page_size = 256,
Peter Stuge51f40622009-01-24 01:32:40 +00001136 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 .probe = probe_spi_rdid,
1138 .erase = spi_chip_erase_60_c7,
1139 .write = spi_chip_write,
1140 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001141 },
1142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001143 {
1144 .vendor = "SST",
1145 .name = "SST28SF040A",
1146 .manufacture_id = SST_ID,
1147 .model_id = SST_28SF040,
1148 .total_size = 512,
1149 .page_size = 256,
1150 .tested = TEST_UNTESTED,
1151 .probe = probe_28sf040,
1152 .erase = erase_28sf040,
1153 .write = write_28sf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001154 },
1155
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001156 {
1157 .vendor = "SST",
1158 .name = "SST29EE010",
1159 .manufacture_id = SST_ID,
1160 .model_id = SST_29EE010,
1161 .total_size = 128,
1162 .page_size = 128,
1163 .tested = TEST_OK_PREW,
1164 .probe = probe_jedec,
1165 .erase = erase_chip_jedec,
1166 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001167 },
1168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001169 {
1170 .vendor = "SST",
1171 .name = "SST29LE010",
1172 .manufacture_id = SST_ID,
1173 .model_id = SST_29LE010,
1174 .total_size = 128,
1175 .page_size = 128,
1176 .tested = TEST_UNTESTED,
1177 .probe = probe_jedec,
1178 .erase = erase_chip_jedec,
1179 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001180 },
1181
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001182 {
1183 .vendor = "SST",
1184 .name = "SST29EE020A",
1185 .manufacture_id = SST_ID,
1186 .model_id = SST_29EE020A,
1187 .total_size = 256,
1188 .page_size = 128,
1189 .tested = TEST_UNTESTED,
1190 .probe = probe_jedec,
1191 .erase = erase_chip_jedec,
1192 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001193 },
1194
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001195 {
1196 .vendor = "SST",
1197 .name = "SST29LE020",
1198 .manufacture_id = SST_ID,
1199 .model_id = SST_29LE020,
1200 .total_size = 256,
1201 .page_size = 128,
1202 .tested = TEST_UNTESTED,
1203 .probe = probe_jedec,
1204 .erase = erase_chip_jedec,
1205 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001206 },
1207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001208 {
1209 .vendor = "SST",
1210 .name = "SST39SF010A",
1211 .manufacture_id = SST_ID,
1212 .model_id = SST_39SF010,
1213 .total_size = 128,
1214 .page_size = 4096,
1215 .tested = TEST_OK_PREW,
1216 .probe = probe_jedec,
1217 .erase = erase_chip_jedec,
1218 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001219 },
1220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001221 {
1222 .vendor = "SST",
1223 .name = "SST39SF020A",
1224 .manufacture_id = SST_ID,
1225 .model_id = SST_39SF020,
1226 .total_size = 256,
1227 .page_size = 4096,
1228 .tested = TEST_OK_PREW,
1229 .probe = probe_jedec,
1230 .erase = erase_chip_jedec,
1231 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001232 },
1233
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 {
1235 .vendor = "SST",
1236 .name = "SST39SF040",
1237 .manufacture_id = SST_ID,
1238 .model_id = SST_39SF040,
1239 .total_size = 512,
1240 .page_size = 4096,
1241 .tested = TEST_OK_PREW,
1242 .probe = probe_jedec,
1243 .erase = erase_chip_jedec,
1244 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001245 },
1246
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001247 {
1248 .vendor = "SST",
1249 .name = "SST39VF512",
1250 .manufacture_id = SST_ID,
1251 .model_id = SST_39VF512,
1252 .total_size = 64,
1253 .page_size = 4096,
1254 .tested = TEST_UNTESTED,
1255 .probe = probe_jedec,
1256 .erase = erase_chip_jedec,
1257 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001258 },
1259
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001260 {
1261 .vendor = "SST",
1262 .name = "SST39VF010",
1263 .manufacture_id = SST_ID,
1264 .model_id = SST_39VF010,
1265 .total_size = 128,
1266 .page_size = 4096,
1267 .tested = TEST_UNTESTED,
1268 .probe = probe_jedec,
1269 .erase = erase_chip_jedec,
1270 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001271 },
1272
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001273 {
1274 .vendor = "SST",
1275 .name = "SST39VF020",
1276 .manufacture_id = SST_ID,
1277 .model_id = SST_39VF020,
1278 .total_size = 256,
1279 .page_size = 4096,
1280 .tested = TEST_OK_PREW,
1281 .probe = probe_jedec,
1282 .erase = erase_chip_jedec,
1283 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001284 },
1285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001286 {
1287 .vendor = "SST",
1288 .name = "SST39VF040",
1289 .manufacture_id = SST_ID,
1290 .model_id = SST_39VF040,
1291 .total_size = 512,
1292 .page_size = 4096,
1293 .tested = TEST_OK_PROBE,
1294 .probe = probe_jedec,
1295 .erase = erase_chip_jedec,
1296 .write = write_39sf020,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00001297 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001298
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001299 {
1300 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00001301 .name = "SST39VF080",
1302 .manufacture_id = 0xbf,
1303 .model_id = 0xd8,
1304 .total_size = 1024,
1305 .page_size = 4096,
1306 .tested = TEST_UNTESTED,
1307 .probe = probe_jedec,
1308 .erase = erase_chip_jedec,
1309 .write = write_39sf020,
1310 },
1311
1312 {
1313 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 .name = "SST49LF002A/B",
1315 .manufacture_id = SST_ID,
1316 .model_id = SST_49LF002A,
1317 .total_size = 256,
1318 .page_size = 16 * 1024,
1319 .tested = TEST_OK_PREW,
1320 .probe = probe_sst_fwhub,
1321 .erase = erase_sst_fwhub,
1322 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001323 },
1324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001325 {
1326 .vendor = "SST",
1327 .name = "SST49LF003A/B",
1328 .manufacture_id = SST_ID,
1329 .model_id = SST_49LF003A,
1330 .total_size = 384,
1331 .page_size = 64 * 1024,
1332 .tested = TEST_UNTESTED,
1333 .probe = probe_sst_fwhub,
1334 .erase = erase_sst_fwhub,
1335 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001336 },
1337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001338 {
1339 .vendor = "SST",
1340 .name = "SST49LF004A/B",
1341 .manufacture_id = SST_ID,
1342 .model_id = SST_49LF004A,
1343 .total_size = 512,
1344 .page_size = 64 * 1024,
1345 .tested = TEST_OK_PREW,
1346 .probe = probe_sst_fwhub,
1347 .erase = erase_sst_fwhub,
1348 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001349 },
1350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001351 {
1352 .vendor = "SST",
1353 .name = "SST49LF004C",
1354 .manufacture_id = SST_ID,
1355 .model_id = SST_49LF004C,
1356 .total_size = 512,
1357 .page_size = 4 * 1024,
1358 .tested = TEST_UNTESTED,
1359 .probe = probe_49lfxxxc,
1360 .erase = erase_49lfxxxc,
1361 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001362 },
1363
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001364 {
1365 .vendor = "SST",
1366 .name = "SST49LF008A",
1367 .manufacture_id = SST_ID,
1368 .model_id = SST_49LF008A,
1369 .total_size = 1024,
1370 .page_size = 64 * 1024,
1371 .tested = TEST_OK_PREW,
1372 .probe = probe_sst_fwhub,
1373 .erase = erase_sst_fwhub,
1374 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001375 },
1376
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001377 {
1378 .vendor = "SST",
1379 .name = "SST49LF008C",
1380 .manufacture_id = SST_ID,
1381 .model_id = SST_49LF008C,
1382 .total_size = 1024,
1383 .page_size = 4 * 1024,
1384 .tested = TEST_UNTESTED,
1385 .probe = probe_49lfxxxc,
1386 .erase = erase_49lfxxxc,
1387 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001388 },
1389
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001390 {
1391 .vendor = "SST",
1392 .name = "SST49LF016C",
1393 .manufacture_id = SST_ID,
1394 .model_id = SST_49LF016C,
1395 .total_size = 2048,
1396 .page_size = 4 * 1024,
1397 .tested = TEST_OK_PREW,
1398 .probe = probe_49lfxxxc,
1399 .erase = erase_49lfxxxc,
1400 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001401 },
1402
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001403 {
1404 .vendor = "SST",
1405 .name = "SST49LF020",
1406 .manufacture_id = SST_ID,
1407 .model_id = SST_49LF020,
1408 .total_size = 256,
1409 .page_size = 16 * 1024,
1410 .tested = TEST_OK_PR,
1411 .probe = probe_jedec,
1412 .erase = erase_49lf040,
1413 .write = write_49lf040,
Sven Schnellec208dfb2009-01-07 12:35:09 +00001414 },
1415
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001416 {
1417 .vendor = "SST",
1418 .name = "SST49LF020A",
1419 .manufacture_id = SST_ID,
1420 .model_id = SST_49LF020A,
1421 .total_size = 256,
1422 .page_size = 16 * 1024,
1423 .tested = TEST_UNTESTED,
1424 .probe = probe_jedec,
1425 .erase = erase_49lf040,
1426 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001427 },
1428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001429 {
1430 .vendor = "SST",
1431 .name = "SST49LF040",
1432 .manufacture_id = SST_ID,
1433 .model_id = SST_49LF040,
1434 .total_size = 512,
1435 .page_size = 4096,
1436 .tested = TEST_OK_PREW,
1437 .probe = probe_jedec,
1438 .erase = erase_49lf040,
1439 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001440 },
1441
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001442 {
1443 .vendor = "SST",
1444 .name = "SST49LF040B",
1445 .manufacture_id = SST_ID,
1446 .model_id = SST_49LF040B,
1447 .total_size = 512,
1448 .page_size = 64 * 1024,
1449 .tested = TEST_OK_PREW,
1450 .probe = probe_sst_fwhub,
1451 .erase = erase_sst_fwhub,
1452 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001453 },
1454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001455 {
1456 .vendor = "SST",
1457 .name = "SST49LF080A",
1458 .manufacture_id = SST_ID,
1459 .model_id = SST_49LF080A,
1460 .total_size = 1024,
1461 .page_size = 4096,
1462 .tested = TEST_OK_PREW,
1463 .probe = probe_jedec,
1464 .erase = erase_49lf040,
1465 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001466 },
1467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001468 {
1469 .vendor = "SST",
1470 .name = "SST49LF160C",
1471 .manufacture_id = SST_ID,
1472 .model_id = SST_49LF160C,
1473 .total_size = 2048,
1474 .page_size = 4 * 1024,
1475 .tested = TEST_OK_PREW,
1476 .probe = probe_49lfxxxc,
1477 .erase = erase_49lfxxxc,
1478 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001479 },
1480
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001481 {
1482 .vendor = "ST",
1483 .name = "M25P05-A",
1484 .manufacture_id = ST_ID,
1485 .model_id = ST_M25P05A,
1486 .total_size = 64,
1487 .page_size = 256,
1488 .tested = TEST_UNTESTED,
1489 .probe = probe_spi_rdid,
1490 .erase = spi_chip_erase_c7,
1491 .write = spi_chip_write,
1492 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001493 },
1494
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 {
1496 .vendor = "ST",
1497 .name = "M25P10-A",
1498 .manufacture_id = ST_ID,
1499 .model_id = ST_M25P10A,
1500 .total_size = 128,
1501 .page_size = 256,
1502 .tested = TEST_UNTESTED,
1503 .probe = probe_spi_rdid,
1504 .erase = spi_chip_erase_c7,
1505 .write = spi_chip_write,
1506 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001507 },
1508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001509 {
1510 .vendor = "ST",
1511 .name = "M25P20",
1512 .manufacture_id = ST_ID,
1513 .model_id = ST_M25P20,
1514 .total_size = 256,
1515 .page_size = 256,
1516 .tested = TEST_UNTESTED,
1517 .probe = probe_spi_rdid,
1518 .erase = spi_chip_erase_c7,
1519 .write = spi_chip_write,
1520 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001521 },
1522
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001523 {
1524 .vendor = "ST",
1525 .name = "M25P40",
1526 .manufacture_id = ST_ID,
1527 .model_id = ST_M25P40,
1528 .total_size = 512,
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,
FENG yu ningff692fb2008-12-08 18:15:10 +00001535 },
1536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001537 {
1538 .vendor = "ST",
1539 .name = "M25P40-old",
1540 .manufacture_id = ST_ID,
1541 .model_id = ST_M25P40_RES,
1542 .total_size = 512,
1543 .page_size = 256,
1544 .tested = TEST_UNTESTED,
1545 .probe = probe_spi_res,
1546 .erase = spi_chip_erase_c7,
1547 .write = spi_chip_write,
1548 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001549 },
1550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001551 {
1552 .vendor = "ST",
1553 .name = "M25P80",
1554 .manufacture_id = ST_ID,
1555 .model_id = ST_M25P80,
1556 .total_size = 1024,
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,
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "ST",
1567 .name = "M25P16",
1568 .manufacture_id = ST_ID,
1569 .model_id = ST_M25P16,
1570 .total_size = 2048,
1571 .page_size = 256,
1572 .tested = TEST_OK_PREW,
1573 .probe = probe_spi_rdid,
1574 .erase = spi_chip_erase_c7,
1575 .write = spi_chip_write,
1576 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001577 },
1578
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001579 {
1580 .vendor = "ST",
1581 .name = "M25P32",
1582 .manufacture_id = ST_ID,
1583 .model_id = ST_M25P32,
1584 .total_size = 4096,
1585 .page_size = 256,
1586 .tested = TEST_OK_PREW,
1587 .probe = probe_spi_rdid,
1588 .erase = spi_chip_erase_c7,
1589 .write = spi_chip_write,
1590 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001591 },
1592
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001593 {
1594 .vendor = "ST",
1595 .name = "M25P64",
1596 .manufacture_id = ST_ID,
1597 .model_id = ST_M25P64,
1598 .total_size = 8192,
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,
FENG yu ningff692fb2008-12-08 18:15:10 +00001605 },
1606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001607 {
1608 .vendor = "ST",
1609 .name = "M25P128",
1610 .manufacture_id = ST_ID,
1611 .model_id = ST_M25P128,
1612 .total_size = 16384,
1613 .page_size = 256,
1614 .tested = TEST_UNTESTED,
1615 .probe = probe_spi_rdid,
1616 .erase = spi_chip_erase_c7,
1617 .write = spi_chip_write,
1618 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001619 },
1620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 {
1622 .vendor = "ST",
1623 .name = "M29F002B",
1624 .manufacture_id = ST_ID,
1625 .model_id = ST_M29F002B,
1626 .total_size = 256,
1627 .page_size = 64 * 1024,
1628 .tested = TEST_UNTESTED,
1629 .probe = probe_jedec,
1630 .erase = erase_chip_jedec,
1631 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001632 },
1633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001634 {
1635 .vendor = "ST",
1636 .name = "M29F002T/NT",
1637 .manufacture_id = ST_ID,
1638 .model_id = ST_M29F002T,
1639 .total_size = 256,
1640 .page_size = 64 * 1024,
1641 .tested = TEST_UNTESTED,
1642 .probe = probe_jedec,
1643 .erase = erase_chip_jedec,
1644 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001645 },
1646
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 {
1648 .vendor = "ST",
1649 .name = "M29F040B",
1650 .manufacture_id = ST_ID,
1651 .model_id = ST_M29F040B,
1652 .total_size = 512,
1653 .page_size = 64 * 1024,
1654 .tested = TEST_OK_PREW,
1655 .probe = probe_29f040b,
1656 .erase = erase_29f040b,
1657 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +00001658 },
1659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001660 {
1661 .vendor = "ST",
1662 .name = "M29F400BT",
1663 .manufacture_id = ST_ID,
1664 .model_id = ST_M29F400BT,
1665 .total_size = 512,
1666 .page_size = 64 * 1024,
1667 .tested = TEST_UNTESTED,
1668 .probe = probe_m29f400bt,
1669 .erase = erase_m29f400bt,
1670 .write = write_coreboot_m29f400bt,
FENG yu ningff692fb2008-12-08 18:15:10 +00001671 },
1672
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001673 {
1674 .vendor = "ST",
1675 .name = "M29W010B",
1676 .manufacture_id = ST_ID,
1677 .model_id = ST_M29W010B,
1678 .total_size = 128,
1679 .page_size = 16 * 1024,
1680 .tested = TEST_UNTESTED,
1681 .probe = probe_jedec,
1682 .erase = erase_chip_jedec,
1683 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001684 },
1685
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001686 {
1687 .vendor = "ST",
1688 .name = "M29W040B",
1689 .manufacture_id = ST_ID,
1690 .model_id = ST_M29W040B,
1691 .total_size = 512,
1692 .page_size = 64 * 1024,
1693 .tested = TEST_UNTESTED,
1694 .probe = probe_jedec,
1695 .erase = erase_chip_jedec,
1696 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001697 },
1698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001699 {
1700 .vendor = "ST",
1701 .name = "M50FLW040A",
1702 .manufacture_id = ST_ID,
1703 .model_id = ST_M50FLW040A,
1704 .total_size = 512,
1705 .page_size = 64 * 1024,
1706 .tested = TEST_UNTESTED,
1707 .probe = probe_stm50flw0x0x,
1708 .erase = erase_stm50flw0x0x,
1709 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001710 },
1711
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001712 {
1713 .vendor = "ST",
1714 .name = "M50FLW040B",
1715 .manufacture_id = ST_ID,
1716 .model_id = ST_M50FLW040B,
1717 .total_size = 512,
1718 .page_size = 64 * 1024,
1719 .tested = TEST_UNTESTED,
1720 .probe = probe_stm50flw0x0x,
1721 .erase = erase_stm50flw0x0x,
1722 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001723 },
1724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 {
1726 .vendor = "ST",
1727 .name = "M50FLW080A",
1728 .manufacture_id = ST_ID,
1729 .model_id = ST_M50FLW080A,
1730 .total_size = 1024,
1731 .page_size = 64 * 1024,
1732 .tested = TEST_OK_PREW,
1733 .probe = probe_stm50flw0x0x,
1734 .erase = erase_stm50flw0x0x,
1735 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001736 },
1737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001738 {
1739 .vendor = "ST",
1740 .name = "M50FLW080B",
1741 .manufacture_id = ST_ID,
1742 .model_id = ST_M50FLW080B,
1743 .total_size = 1024,
1744 .page_size = 64 * 1024,
1745 .tested = TEST_UNTESTED,
1746 .probe = probe_stm50flw0x0x,
1747 .erase = erase_stm50flw0x0x,
1748 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001749 },
1750
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001751 {
1752 .vendor = "ST",
1753 .name = "M50FW002",
1754 .manufacture_id = ST_ID,
1755 .model_id = ST_M50FW002,
1756 .total_size = 256,
1757 .page_size = 64 * 1024,
1758 .tested = TEST_UNTESTED,
1759 .probe = probe_49lfxxxc,
1760 .erase = NULL,
1761 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00001762 },
1763
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001764 {
1765 .vendor = "ST",
1766 .name = "M50FW016",
1767 .manufacture_id = ST_ID,
1768 .model_id = ST_M50FW016,
1769 .total_size = 2048,
1770 .page_size = 64 * 1024,
1771 .tested = TEST_UNTESTED,
1772 .probe = probe_82802ab,
1773 .erase = erase_82802ab,
1774 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001775 },
1776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001777 {
1778 .vendor = "ST",
1779 .name = "M50FW040",
1780 .manufacture_id = ST_ID,
1781 .model_id = ST_M50FW040,
1782 .total_size = 512,
1783 .page_size = 64 * 1024,
1784 .tested = TEST_OK_PREW,
1785 .probe = probe_82802ab,
1786 .erase = erase_82802ab,
1787 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001788 },
1789
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001790 {
1791 .vendor = "ST",
1792 .name = "M50FW080",
1793 .manufacture_id = ST_ID,
1794 .model_id = ST_M50FW080,
1795 .total_size = 1024,
1796 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00001797 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001798 .probe = probe_82802ab,
1799 .erase = erase_82802ab,
1800 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001801 },
1802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001803 {
1804 .vendor = "ST",
1805 .name = "M50LPW116",
1806 .manufacture_id = ST_ID,
1807 .model_id = ST_M50LPW116,
1808 .total_size = 2048,
1809 .page_size = 64 * 1024,
1810 .tested = TEST_UNTESTED,
1811 .probe = probe_jedec,
1812 .erase = erase_chip_jedec,
1813 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001814 },
1815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001816 {
1817 .vendor = "SyncMOS",
1818 .name = "S29C31004T",
1819 .manufacture_id = SYNCMOS_ID,
1820 .model_id = S29C31004T,
1821 .total_size = 512,
1822 .page_size = 128,
1823 .tested = TEST_UNTESTED,
1824 .probe = probe_jedec,
1825 .erase = erase_chip_jedec,
1826 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001827 },
1828
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001829 {
1830 .vendor = "SyncMOS",
1831 .name = "S29C51001T",
1832 .manufacture_id = SYNCMOS_ID,
1833 .model_id = S29C51001T,
1834 .total_size = 128,
1835 .page_size = 128,
1836 .tested = TEST_UNTESTED,
1837 .probe = probe_jedec,
1838 .erase = erase_chip_jedec,
1839 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001840 },
1841
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001842 {
1843 .vendor = "SyncMOS",
1844 .name = "S29C51002T",
1845 .manufacture_id = SYNCMOS_ID,
1846 .model_id = S29C51002T,
1847 .total_size = 256,
1848 .page_size = 128,
1849 .tested = TEST_OK_PREW,
1850 .probe = probe_jedec,
1851 .erase = erase_chip_jedec,
1852 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001853 },
1854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001855 {
1856 .vendor = "SyncMOS",
1857 .name = "S29C51004T",
1858 .manufacture_id = SYNCMOS_ID,
1859 .model_id = S29C51004T,
1860 .total_size = 512,
1861 .page_size = 128,
1862 .tested = TEST_UNTESTED,
1863 .probe = probe_jedec,
1864 .erase = erase_chip_jedec,
1865 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001866 },
1867
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 {
1869 .vendor = "Winbond",
1870 .name = "W25x10",
1871 .manufacture_id = WINBOND_NEX_ID,
1872 .model_id = W_25X10,
1873 .total_size = 128,
1874 .page_size = 256,
1875 .tested = TEST_UNTESTED,
1876 .probe = probe_spi_rdid,
1877 .erase = spi_chip_erase_c7,
1878 .write = spi_chip_write,
1879 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001880 },
1881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001882 {
1883 .vendor = "Winbond",
1884 .name = "W25x20",
1885 .manufacture_id = WINBOND_NEX_ID,
1886 .model_id = W_25X20,
1887 .total_size = 256,
1888 .page_size = 256,
1889 .tested = TEST_UNTESTED,
1890 .probe = probe_spi_rdid,
1891 .erase = spi_chip_erase_c7,
1892 .write = spi_chip_write,
1893 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001894 },
1895
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001896 {
1897 .vendor = "Winbond",
1898 .name = "W25x40",
1899 .manufacture_id = WINBOND_NEX_ID,
1900 .model_id = W_25X40,
1901 .total_size = 512,
1902 .page_size = 256,
1903 .tested = TEST_OK_PREW,
1904 .probe = probe_spi_rdid,
1905 .erase = spi_chip_erase_c7,
1906 .write = spi_chip_write,
1907 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001908 },
1909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001910 {
1911 .vendor = "Winbond",
1912 .name = "W25x80",
1913 .manufacture_id = WINBOND_NEX_ID,
1914 .model_id = W_25X80,
1915 .total_size = 1024,
1916 .page_size = 256,
1917 .tested = TEST_OK_PREW,
1918 .probe = probe_spi_rdid,
1919 .erase = spi_chip_erase_c7,
1920 .write = spi_chip_write,
1921 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001922 },
1923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001924 {
1925 .vendor = "Winbond",
1926 .name = "W29C011",
1927 .manufacture_id = WINBOND_ID,
1928 .model_id = W_29C011,
1929 .total_size = 128,
1930 .page_size = 128,
1931 .tested = TEST_OK_PREW,
1932 .probe = probe_jedec,
1933 .erase = erase_chip_jedec,
1934 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001935 },
1936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001937 {
1938 .vendor = "Winbond",
1939 .name = "W29C020C",
1940 .manufacture_id = WINBOND_ID,
1941 .model_id = W_29C020C,
1942 .total_size = 256,
1943 .page_size = 128,
1944 .tested = TEST_OK_PREW,
1945 .probe = probe_jedec,
1946 .erase = erase_chip_jedec,
1947 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001948 },
1949
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001950 {
1951 .vendor = "Winbond",
1952 .name = "W29C040P",
1953 .manufacture_id = WINBOND_ID,
1954 .model_id = W_29C040P,
1955 .total_size = 512,
1956 .page_size = 256,
1957 .tested = TEST_UNTESTED,
1958 .probe = probe_jedec,
1959 .erase = erase_chip_jedec,
1960 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001961 },
1962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001963 {
1964 .vendor = "Winbond",
1965 .name = "W29EE011",
1966 .manufacture_id = WINBOND_ID,
1967 .model_id = W_29C011,
1968 .total_size = 128,
1969 .page_size = 128,
1970 .tested = TEST_OK_PREW,
1971 .probe = probe_w29ee011,
1972 .erase = erase_chip_jedec,
1973 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001974 },
1975
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001976 {
1977 .vendor = "Winbond",
1978 .name = "W39V040A",
1979 .manufacture_id = WINBOND_ID,
1980 .model_id = W_39V040A,
1981 .total_size = 512,
1982 .page_size = 64*1024,
1983 .tested = TEST_UNTESTED,
1984 .probe = probe_jedec,
1985 .erase = erase_chip_jedec,
1986 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001987 },
1988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001989 {
1990 .vendor = "Winbond",
1991 .name = "W39V040B",
1992 .manufacture_id = WINBOND_ID,
1993 .model_id = W_39V040B,
1994 .total_size = 512,
1995 .page_size = 64*1024,
1996 .tested = TEST_OK_PREW,
1997 .probe = probe_jedec,
1998 .erase = erase_chip_jedec,
1999 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002000 },
2001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002002 {
2003 .vendor = "Winbond",
2004 .name = "W39V040C",
2005 .manufacture_id = WINBOND_ID,
2006 .model_id = 0x50,
2007 .total_size = 512,
2008 .page_size = 64*1024,
2009 .tested = TEST_OK_PREW,
2010 .probe = probe_w39v040c,
2011 .erase = erase_w39v040c,
2012 .write = write_w39v040c,
FENG yu ningff692fb2008-12-08 18:15:10 +00002013 },
2014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002015 {
2016 .vendor = "Winbond",
2017 .name = "W39V040FA",
2018 .manufacture_id = WINBOND_ID,
2019 .model_id = W_39V040FA,
2020 .total_size = 512,
2021 .page_size = 64*1024,
2022 .tested = TEST_OK_PREW,
2023 .probe = probe_jedec,
2024 .erase = erase_chip_jedec,
2025 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002026 },
2027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002028 {
2029 .vendor = "Winbond",
2030 .name = "W39V080A",
2031 .manufacture_id = WINBOND_ID,
2032 .model_id = W_39V080A,
2033 .total_size = 1024,
2034 .page_size = 64*1024,
2035 .tested = TEST_OK_PREW,
2036 .probe = probe_jedec,
2037 .erase = erase_chip_jedec,
2038 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002039 },
2040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002041 {
2042 .vendor = "Winbond",
2043 .name = "W49F002U",
2044 .manufacture_id = WINBOND_ID,
2045 .model_id = W_49F002U,
2046 .total_size = 256,
2047 .page_size = 128,
2048 .tested = TEST_OK_PREW,
2049 .probe = probe_jedec,
2050 .erase = erase_chip_jedec,
2051 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002052 },
2053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002054 {
2055 .vendor = "Winbond",
2056 .name = "W49V002A",
2057 .manufacture_id = WINBOND_ID,
2058 .model_id = W_49V002A,
2059 .total_size = 256,
2060 .page_size = 128,
2061 .tested = TEST_OK_PREW,
2062 .probe = probe_jedec,
2063 .erase = erase_chip_jedec,
2064 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002065 },
2066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002067 {
2068 .vendor = "Winbond",
2069 .name = "W49V002FA",
2070 .manufacture_id = WINBOND_ID,
2071 .model_id = W_49V002FA,
2072 .total_size = 256,
2073 .page_size = 128,
2074 .tested = TEST_UNTESTED,
2075 .probe = probe_jedec,
2076 .erase = erase_chip_jedec,
2077 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002078 },
2079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002080 {
2081 .vendor = "Winbond",
2082 .name = "W39V080FA",
2083 .manufacture_id = WINBOND_ID,
2084 .model_id = W_39V080FA,
2085 .total_size = 1024,
2086 .page_size = 64*1024,
2087 .tested = TEST_OK_PREW,
2088 .probe = probe_winbond_fwhub,
2089 .erase = erase_winbond_fwhub,
2090 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002091 },
2092
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002093 {
2094 .vendor = "Winbond",
2095 .name = "W39V080FA (dual mode)",
2096 .manufacture_id = WINBOND_ID,
2097 .model_id = W_39V080FA_DM,
2098 .total_size = 512,
2099 .page_size = 64*1024,
2100 .tested = TEST_UNTESTED,
2101 .probe = probe_winbond_fwhub,
2102 .erase = erase_winbond_fwhub,
2103 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002104 },
2105
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002106 {
2107 .vendor = "Atmel",
2108 .name = "unknown Atmel SPI chip",
2109 .manufacture_id = ATMEL_ID,
2110 .model_id = GENERIC_DEVICE_ID,
2111 .total_size = 0,
2112 .page_size = 256,
2113 .tested = TEST_UNTESTED,
2114 .probe = probe_spi_rdid,
2115 .erase = NULL,
2116 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002117 },
2118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002119 {
2120 .vendor = "EON",
2121 .name = "unknown EON SPI chip",
2122 .manufacture_id = EON_ID_NOPREFIX,
2123 .model_id = GENERIC_DEVICE_ID,
2124 .total_size = 0,
2125 .page_size = 256,
2126 .tested = TEST_UNTESTED,
2127 .probe = probe_spi_rdid,
2128 .erase = NULL,
2129 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002130 },
2131
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002132 {
2133 .vendor = "Macronix",
2134 .name = "unknown Macronix SPI chip",
2135 .manufacture_id = MX_ID,
2136 .model_id = GENERIC_DEVICE_ID,
2137 .total_size = 0,
2138 .page_size = 256,
2139 .tested = TEST_UNTESTED,
2140 .probe = probe_spi_rdid,
2141 .erase = NULL,
2142 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002143 },
2144
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002145 {
2146 .vendor = "PMC",
2147 .name = "unknown PMC SPI chip",
2148 .manufacture_id = PMC_ID,
2149 .model_id = GENERIC_DEVICE_ID,
2150 .total_size = 0,
2151 .page_size = 256,
2152 .tested = TEST_UNTESTED,
2153 .probe = probe_spi_rdid,
2154 .erase = NULL,
2155 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002156 },
2157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002158 {
2159 .vendor = "SST",
2160 .name = "unknown SST SPI chip",
2161 .manufacture_id = SST_ID,
2162 .model_id = GENERIC_DEVICE_ID,
2163 .total_size = 0,
2164 .page_size = 256,
2165 .tested = TEST_UNTESTED,
2166 .probe = probe_spi_rdid,
2167 .erase = NULL,
2168 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002169 },
2170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002171 {
2172 .vendor = "ST",
2173 .name = "unknown ST SPI chip",
2174 .manufacture_id = ST_ID,
2175 .model_id = GENERIC_DEVICE_ID,
2176 .total_size = 0,
2177 .page_size = 256,
2178 .tested = TEST_UNTESTED,
2179 .probe = probe_spi_rdid,
2180 .erase = NULL,
2181 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002182 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00002183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002184 { NULL }
2185 };