blob: 7d56b17948f6c8f861ffbf56f0fefdc079cfb88e [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",
Peter Stugefd9217d2009-01-26 03:37:40 +00001131 .name = "SST25VF040B.REMS",
1132 .manufacture_id = 0xbf,
1133 .model_id = 0x8d,
1134 .total_size = 512,
1135 .page_size = 64*1024,
1136 .tested = TEST_OK_PR,
1137 .probe = probe_spi_rems,
1138 .erase = spi_chip_erase_c7,
Peter Stugec6e90552009-01-26 04:48:01 +00001139 .write = spi_aai_write,
Peter Stugefd9217d2009-01-26 03:37:40 +00001140 .read = spi_chip_read,
1141 },
1142
1143 {
1144 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001145 .name = "SST25VF080B",
1146 .manufacture_id = SST_ID,
1147 .model_id = SST_25VF080B,
1148 .total_size = 1024,
1149 .page_size = 256,
Peter Stuge51f40622009-01-24 01:32:40 +00001150 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001151 .probe = probe_spi_rdid,
1152 .erase = spi_chip_erase_60_c7,
1153 .write = spi_chip_write,
1154 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001155 },
1156
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001157 {
1158 .vendor = "SST",
1159 .name = "SST28SF040A",
1160 .manufacture_id = SST_ID,
1161 .model_id = SST_28SF040,
1162 .total_size = 512,
1163 .page_size = 256,
1164 .tested = TEST_UNTESTED,
1165 .probe = probe_28sf040,
1166 .erase = erase_28sf040,
1167 .write = write_28sf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001168 },
1169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001170 {
1171 .vendor = "SST",
1172 .name = "SST29EE010",
1173 .manufacture_id = SST_ID,
1174 .model_id = SST_29EE010,
1175 .total_size = 128,
1176 .page_size = 128,
1177 .tested = TEST_OK_PREW,
1178 .probe = probe_jedec,
1179 .erase = erase_chip_jedec,
1180 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001181 },
1182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001183 {
1184 .vendor = "SST",
1185 .name = "SST29LE010",
1186 .manufacture_id = SST_ID,
1187 .model_id = SST_29LE010,
1188 .total_size = 128,
1189 .page_size = 128,
1190 .tested = TEST_UNTESTED,
1191 .probe = probe_jedec,
1192 .erase = erase_chip_jedec,
1193 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001194 },
1195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 {
1197 .vendor = "SST",
1198 .name = "SST29EE020A",
1199 .manufacture_id = SST_ID,
1200 .model_id = SST_29EE020A,
1201 .total_size = 256,
1202 .page_size = 128,
1203 .tested = TEST_UNTESTED,
1204 .probe = probe_jedec,
1205 .erase = erase_chip_jedec,
1206 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001207 },
1208
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001209 {
1210 .vendor = "SST",
1211 .name = "SST29LE020",
1212 .manufacture_id = SST_ID,
1213 .model_id = SST_29LE020,
1214 .total_size = 256,
1215 .page_size = 128,
1216 .tested = TEST_UNTESTED,
1217 .probe = probe_jedec,
1218 .erase = erase_chip_jedec,
1219 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001220 },
1221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001222 {
1223 .vendor = "SST",
1224 .name = "SST39SF010A",
1225 .manufacture_id = SST_ID,
1226 .model_id = SST_39SF010,
1227 .total_size = 128,
1228 .page_size = 4096,
1229 .tested = TEST_OK_PREW,
1230 .probe = probe_jedec,
1231 .erase = erase_chip_jedec,
1232 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001233 },
1234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001235 {
1236 .vendor = "SST",
1237 .name = "SST39SF020A",
1238 .manufacture_id = SST_ID,
1239 .model_id = SST_39SF020,
1240 .total_size = 256,
1241 .page_size = 4096,
1242 .tested = TEST_OK_PREW,
1243 .probe = probe_jedec,
1244 .erase = erase_chip_jedec,
1245 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001246 },
1247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001248 {
1249 .vendor = "SST",
1250 .name = "SST39SF040",
1251 .manufacture_id = SST_ID,
1252 .model_id = SST_39SF040,
1253 .total_size = 512,
1254 .page_size = 4096,
1255 .tested = TEST_OK_PREW,
1256 .probe = probe_jedec,
1257 .erase = erase_chip_jedec,
1258 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001259 },
1260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 {
1262 .vendor = "SST",
1263 .name = "SST39VF512",
1264 .manufacture_id = SST_ID,
1265 .model_id = SST_39VF512,
1266 .total_size = 64,
1267 .page_size = 4096,
1268 .tested = TEST_UNTESTED,
1269 .probe = probe_jedec,
1270 .erase = erase_chip_jedec,
1271 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001272 },
1273
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001274 {
1275 .vendor = "SST",
1276 .name = "SST39VF010",
1277 .manufacture_id = SST_ID,
1278 .model_id = SST_39VF010,
1279 .total_size = 128,
1280 .page_size = 4096,
1281 .tested = TEST_UNTESTED,
1282 .probe = probe_jedec,
1283 .erase = erase_chip_jedec,
1284 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "SST",
1289 .name = "SST39VF020",
1290 .manufacture_id = SST_ID,
1291 .model_id = SST_39VF020,
1292 .total_size = 256,
1293 .page_size = 4096,
1294 .tested = TEST_OK_PREW,
1295 .probe = probe_jedec,
1296 .erase = erase_chip_jedec,
1297 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001298 },
1299
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001300 {
1301 .vendor = "SST",
1302 .name = "SST39VF040",
1303 .manufacture_id = SST_ID,
1304 .model_id = SST_39VF040,
1305 .total_size = 512,
1306 .page_size = 4096,
1307 .tested = TEST_OK_PROBE,
1308 .probe = probe_jedec,
1309 .erase = erase_chip_jedec,
1310 .write = write_39sf020,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00001311 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001313 {
1314 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00001315 .name = "SST39VF080",
1316 .manufacture_id = 0xbf,
1317 .model_id = 0xd8,
1318 .total_size = 1024,
1319 .page_size = 4096,
1320 .tested = TEST_UNTESTED,
1321 .probe = probe_jedec,
1322 .erase = erase_chip_jedec,
1323 .write = write_39sf020,
1324 },
1325
1326 {
1327 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001328 .name = "SST49LF002A/B",
1329 .manufacture_id = SST_ID,
1330 .model_id = SST_49LF002A,
1331 .total_size = 256,
1332 .page_size = 16 * 1024,
1333 .tested = TEST_OK_PREW,
1334 .probe = probe_sst_fwhub,
1335 .erase = erase_sst_fwhub,
1336 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001337 },
1338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001339 {
1340 .vendor = "SST",
1341 .name = "SST49LF003A/B",
1342 .manufacture_id = SST_ID,
1343 .model_id = SST_49LF003A,
1344 .total_size = 384,
1345 .page_size = 64 * 1024,
1346 .tested = TEST_UNTESTED,
1347 .probe = probe_sst_fwhub,
1348 .erase = erase_sst_fwhub,
1349 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001350 },
1351
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001352 {
1353 .vendor = "SST",
1354 .name = "SST49LF004A/B",
1355 .manufacture_id = SST_ID,
1356 .model_id = SST_49LF004A,
1357 .total_size = 512,
1358 .page_size = 64 * 1024,
1359 .tested = TEST_OK_PREW,
1360 .probe = probe_sst_fwhub,
1361 .erase = erase_sst_fwhub,
1362 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001363 },
1364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001365 {
1366 .vendor = "SST",
1367 .name = "SST49LF004C",
1368 .manufacture_id = SST_ID,
1369 .model_id = SST_49LF004C,
1370 .total_size = 512,
1371 .page_size = 4 * 1024,
1372 .tested = TEST_UNTESTED,
1373 .probe = probe_49lfxxxc,
1374 .erase = erase_49lfxxxc,
1375 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001376 },
1377
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001378 {
1379 .vendor = "SST",
1380 .name = "SST49LF008A",
1381 .manufacture_id = SST_ID,
1382 .model_id = SST_49LF008A,
1383 .total_size = 1024,
1384 .page_size = 64 * 1024,
1385 .tested = TEST_OK_PREW,
1386 .probe = probe_sst_fwhub,
1387 .erase = erase_sst_fwhub,
1388 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001389 },
1390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001391 {
1392 .vendor = "SST",
1393 .name = "SST49LF008C",
1394 .manufacture_id = SST_ID,
1395 .model_id = SST_49LF008C,
1396 .total_size = 1024,
1397 .page_size = 4 * 1024,
1398 .tested = TEST_UNTESTED,
1399 .probe = probe_49lfxxxc,
1400 .erase = erase_49lfxxxc,
1401 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001402 },
1403
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001404 {
1405 .vendor = "SST",
1406 .name = "SST49LF016C",
1407 .manufacture_id = SST_ID,
1408 .model_id = SST_49LF016C,
1409 .total_size = 2048,
1410 .page_size = 4 * 1024,
1411 .tested = TEST_OK_PREW,
1412 .probe = probe_49lfxxxc,
1413 .erase = erase_49lfxxxc,
1414 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001415 },
1416
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001417 {
1418 .vendor = "SST",
1419 .name = "SST49LF020",
1420 .manufacture_id = SST_ID,
1421 .model_id = SST_49LF020,
1422 .total_size = 256,
1423 .page_size = 16 * 1024,
1424 .tested = TEST_OK_PR,
1425 .probe = probe_jedec,
1426 .erase = erase_49lf040,
1427 .write = write_49lf040,
Sven Schnellec208dfb2009-01-07 12:35:09 +00001428 },
1429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001430 {
1431 .vendor = "SST",
1432 .name = "SST49LF020A",
1433 .manufacture_id = SST_ID,
1434 .model_id = SST_49LF020A,
1435 .total_size = 256,
1436 .page_size = 16 * 1024,
1437 .tested = TEST_UNTESTED,
1438 .probe = probe_jedec,
1439 .erase = erase_49lf040,
1440 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001441 },
1442
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001443 {
1444 .vendor = "SST",
1445 .name = "SST49LF040",
1446 .manufacture_id = SST_ID,
1447 .model_id = SST_49LF040,
1448 .total_size = 512,
1449 .page_size = 4096,
1450 .tested = TEST_OK_PREW,
1451 .probe = probe_jedec,
1452 .erase = erase_49lf040,
1453 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001454 },
1455
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001456 {
1457 .vendor = "SST",
1458 .name = "SST49LF040B",
1459 .manufacture_id = SST_ID,
1460 .model_id = SST_49LF040B,
1461 .total_size = 512,
1462 .page_size = 64 * 1024,
1463 .tested = TEST_OK_PREW,
1464 .probe = probe_sst_fwhub,
1465 .erase = erase_sst_fwhub,
1466 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001467 },
1468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001469 {
1470 .vendor = "SST",
1471 .name = "SST49LF080A",
1472 .manufacture_id = SST_ID,
1473 .model_id = SST_49LF080A,
1474 .total_size = 1024,
1475 .page_size = 4096,
1476 .tested = TEST_OK_PREW,
1477 .probe = probe_jedec,
1478 .erase = erase_49lf040,
1479 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001480 },
1481
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001482 {
1483 .vendor = "SST",
1484 .name = "SST49LF160C",
1485 .manufacture_id = SST_ID,
1486 .model_id = SST_49LF160C,
1487 .total_size = 2048,
1488 .page_size = 4 * 1024,
1489 .tested = TEST_OK_PREW,
1490 .probe = probe_49lfxxxc,
1491 .erase = erase_49lfxxxc,
1492 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001493 },
1494
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 {
1496 .vendor = "ST",
1497 .name = "M25P05-A",
1498 .manufacture_id = ST_ID,
1499 .model_id = ST_M25P05A,
1500 .total_size = 64,
1501 .page_size = 256,
1502 .tested = TEST_UNTESTED,
1503 .probe = probe_spi_rdid,
1504 .erase = spi_chip_erase_c7,
1505 .write = spi_chip_write,
1506 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001507 },
1508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001509 {
1510 .vendor = "ST",
1511 .name = "M25P10-A",
1512 .manufacture_id = ST_ID,
1513 .model_id = ST_M25P10A,
1514 .total_size = 128,
1515 .page_size = 256,
1516 .tested = TEST_UNTESTED,
1517 .probe = probe_spi_rdid,
1518 .erase = spi_chip_erase_c7,
1519 .write = spi_chip_write,
1520 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001521 },
1522
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001523 {
1524 .vendor = "ST",
1525 .name = "M25P20",
1526 .manufacture_id = ST_ID,
1527 .model_id = ST_M25P20,
1528 .total_size = 256,
1529 .page_size = 256,
1530 .tested = TEST_UNTESTED,
1531 .probe = probe_spi_rdid,
1532 .erase = spi_chip_erase_c7,
1533 .write = spi_chip_write,
1534 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001535 },
1536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001537 {
1538 .vendor = "ST",
1539 .name = "M25P40",
1540 .manufacture_id = ST_ID,
1541 .model_id = ST_M25P40,
1542 .total_size = 512,
1543 .page_size = 256,
1544 .tested = TEST_UNTESTED,
1545 .probe = probe_spi_rdid,
1546 .erase = spi_chip_erase_c7,
1547 .write = spi_chip_write,
1548 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001549 },
1550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001551 {
1552 .vendor = "ST",
1553 .name = "M25P40-old",
1554 .manufacture_id = ST_ID,
1555 .model_id = ST_M25P40_RES,
1556 .total_size = 512,
1557 .page_size = 256,
1558 .tested = TEST_UNTESTED,
1559 .probe = probe_spi_res,
1560 .erase = spi_chip_erase_c7,
1561 .write = spi_chip_write,
1562 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "ST",
1567 .name = "M25P80",
1568 .manufacture_id = ST_ID,
1569 .model_id = ST_M25P80,
1570 .total_size = 1024,
1571 .page_size = 256,
1572 .tested = TEST_UNTESTED,
1573 .probe = probe_spi_rdid,
1574 .erase = spi_chip_erase_c7,
1575 .write = spi_chip_write,
1576 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001577 },
1578
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001579 {
1580 .vendor = "ST",
1581 .name = "M25P16",
1582 .manufacture_id = ST_ID,
1583 .model_id = ST_M25P16,
1584 .total_size = 2048,
1585 .page_size = 256,
1586 .tested = TEST_OK_PREW,
1587 .probe = probe_spi_rdid,
1588 .erase = spi_chip_erase_c7,
1589 .write = spi_chip_write,
1590 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001591 },
1592
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001593 {
1594 .vendor = "ST",
1595 .name = "M25P32",
1596 .manufacture_id = ST_ID,
1597 .model_id = ST_M25P32,
1598 .total_size = 4096,
1599 .page_size = 256,
1600 .tested = TEST_OK_PREW,
1601 .probe = probe_spi_rdid,
1602 .erase = spi_chip_erase_c7,
1603 .write = spi_chip_write,
1604 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001605 },
1606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001607 {
1608 .vendor = "ST",
1609 .name = "M25P64",
1610 .manufacture_id = ST_ID,
1611 .model_id = ST_M25P64,
1612 .total_size = 8192,
1613 .page_size = 256,
1614 .tested = TEST_UNTESTED,
1615 .probe = probe_spi_rdid,
1616 .erase = spi_chip_erase_c7,
1617 .write = spi_chip_write,
1618 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001619 },
1620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 {
1622 .vendor = "ST",
1623 .name = "M25P128",
1624 .manufacture_id = ST_ID,
1625 .model_id = ST_M25P128,
1626 .total_size = 16384,
1627 .page_size = 256,
1628 .tested = TEST_UNTESTED,
1629 .probe = probe_spi_rdid,
1630 .erase = spi_chip_erase_c7,
1631 .write = spi_chip_write,
1632 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001633 },
1634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001635 {
1636 .vendor = "ST",
1637 .name = "M29F002B",
1638 .manufacture_id = ST_ID,
1639 .model_id = ST_M29F002B,
1640 .total_size = 256,
1641 .page_size = 64 * 1024,
1642 .tested = TEST_UNTESTED,
1643 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001644 .erase = erase_m29f002,
1645 .write = write_m29f002b,
FENG yu ningff692fb2008-12-08 18:15:10 +00001646 },
1647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001648 {
1649 .vendor = "ST",
1650 .name = "M29F002T/NT",
1651 .manufacture_id = ST_ID,
1652 .model_id = ST_M29F002T,
1653 .total_size = 256,
1654 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001655 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001656 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001657 .erase = erase_m29f002,
1658 .write = write_m29f002t,
FENG yu ningff692fb2008-12-08 18:15:10 +00001659 },
1660
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001661 {
1662 .vendor = "ST",
1663 .name = "M29F040B",
1664 .manufacture_id = ST_ID,
1665 .model_id = ST_M29F040B,
1666 .total_size = 512,
1667 .page_size = 64 * 1024,
1668 .tested = TEST_OK_PREW,
1669 .probe = probe_29f040b,
1670 .erase = erase_29f040b,
1671 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +00001672 },
1673
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001674 {
1675 .vendor = "ST",
1676 .name = "M29F400BT",
1677 .manufacture_id = ST_ID,
1678 .model_id = ST_M29F400BT,
1679 .total_size = 512,
1680 .page_size = 64 * 1024,
1681 .tested = TEST_UNTESTED,
1682 .probe = probe_m29f400bt,
1683 .erase = erase_m29f400bt,
1684 .write = write_coreboot_m29f400bt,
FENG yu ningff692fb2008-12-08 18:15:10 +00001685 },
1686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001687 {
1688 .vendor = "ST",
1689 .name = "M29W010B",
1690 .manufacture_id = ST_ID,
1691 .model_id = ST_M29W010B,
1692 .total_size = 128,
1693 .page_size = 16 * 1024,
1694 .tested = TEST_UNTESTED,
1695 .probe = probe_jedec,
1696 .erase = erase_chip_jedec,
1697 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001698 },
1699
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001700 {
1701 .vendor = "ST",
1702 .name = "M29W040B",
1703 .manufacture_id = ST_ID,
1704 .model_id = ST_M29W040B,
1705 .total_size = 512,
1706 .page_size = 64 * 1024,
1707 .tested = TEST_UNTESTED,
1708 .probe = probe_jedec,
1709 .erase = erase_chip_jedec,
1710 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001711 },
1712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001713 {
1714 .vendor = "ST",
1715 .name = "M50FLW040A",
1716 .manufacture_id = ST_ID,
1717 .model_id = ST_M50FLW040A,
1718 .total_size = 512,
1719 .page_size = 64 * 1024,
1720 .tested = TEST_UNTESTED,
1721 .probe = probe_stm50flw0x0x,
1722 .erase = erase_stm50flw0x0x,
1723 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001724 },
1725
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001726 {
1727 .vendor = "ST",
1728 .name = "M50FLW040B",
1729 .manufacture_id = ST_ID,
1730 .model_id = ST_M50FLW040B,
1731 .total_size = 512,
1732 .page_size = 64 * 1024,
1733 .tested = TEST_UNTESTED,
1734 .probe = probe_stm50flw0x0x,
1735 .erase = erase_stm50flw0x0x,
1736 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001737 },
1738
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001739 {
1740 .vendor = "ST",
1741 .name = "M50FLW080A",
1742 .manufacture_id = ST_ID,
1743 .model_id = ST_M50FLW080A,
1744 .total_size = 1024,
1745 .page_size = 64 * 1024,
1746 .tested = TEST_OK_PREW,
1747 .probe = probe_stm50flw0x0x,
1748 .erase = erase_stm50flw0x0x,
1749 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001750 },
1751
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 {
1753 .vendor = "ST",
1754 .name = "M50FLW080B",
1755 .manufacture_id = ST_ID,
1756 .model_id = ST_M50FLW080B,
1757 .total_size = 1024,
1758 .page_size = 64 * 1024,
1759 .tested = TEST_UNTESTED,
1760 .probe = probe_stm50flw0x0x,
1761 .erase = erase_stm50flw0x0x,
1762 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001763 },
1764
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001765 {
1766 .vendor = "ST",
1767 .name = "M50FW002",
1768 .manufacture_id = ST_ID,
1769 .model_id = ST_M50FW002,
1770 .total_size = 256,
1771 .page_size = 64 * 1024,
1772 .tested = TEST_UNTESTED,
1773 .probe = probe_49lfxxxc,
1774 .erase = NULL,
1775 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00001776 },
1777
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001778 {
1779 .vendor = "ST",
1780 .name = "M50FW016",
1781 .manufacture_id = ST_ID,
1782 .model_id = ST_M50FW016,
1783 .total_size = 2048,
1784 .page_size = 64 * 1024,
1785 .tested = TEST_UNTESTED,
1786 .probe = probe_82802ab,
1787 .erase = erase_82802ab,
1788 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001789 },
1790
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001791 {
1792 .vendor = "ST",
1793 .name = "M50FW040",
1794 .manufacture_id = ST_ID,
1795 .model_id = ST_M50FW040,
1796 .total_size = 512,
1797 .page_size = 64 * 1024,
1798 .tested = TEST_OK_PREW,
1799 .probe = probe_82802ab,
1800 .erase = erase_82802ab,
1801 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001802 },
1803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001804 {
1805 .vendor = "ST",
1806 .name = "M50FW080",
1807 .manufacture_id = ST_ID,
1808 .model_id = ST_M50FW080,
1809 .total_size = 1024,
1810 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00001811 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001812 .probe = probe_82802ab,
1813 .erase = erase_82802ab,
1814 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001815 },
1816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001817 {
1818 .vendor = "ST",
1819 .name = "M50LPW116",
1820 .manufacture_id = ST_ID,
1821 .model_id = ST_M50LPW116,
1822 .total_size = 2048,
1823 .page_size = 64 * 1024,
1824 .tested = TEST_UNTESTED,
1825 .probe = probe_jedec,
1826 .erase = erase_chip_jedec,
1827 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001828 },
1829
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001830 {
1831 .vendor = "SyncMOS",
1832 .name = "S29C31004T",
1833 .manufacture_id = SYNCMOS_ID,
1834 .model_id = S29C31004T,
1835 .total_size = 512,
1836 .page_size = 128,
1837 .tested = TEST_UNTESTED,
1838 .probe = probe_jedec,
1839 .erase = erase_chip_jedec,
1840 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001841 },
1842
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001843 {
1844 .vendor = "SyncMOS",
1845 .name = "S29C51001T",
1846 .manufacture_id = SYNCMOS_ID,
1847 .model_id = S29C51001T,
1848 .total_size = 128,
1849 .page_size = 128,
1850 .tested = TEST_UNTESTED,
1851 .probe = probe_jedec,
1852 .erase = erase_chip_jedec,
1853 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001854 },
1855
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001856 {
1857 .vendor = "SyncMOS",
1858 .name = "S29C51002T",
1859 .manufacture_id = SYNCMOS_ID,
1860 .model_id = S29C51002T,
1861 .total_size = 256,
1862 .page_size = 128,
1863 .tested = TEST_OK_PREW,
1864 .probe = probe_jedec,
1865 .erase = erase_chip_jedec,
1866 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001867 },
1868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001869 {
1870 .vendor = "SyncMOS",
1871 .name = "S29C51004T",
1872 .manufacture_id = SYNCMOS_ID,
1873 .model_id = S29C51004T,
1874 .total_size = 512,
1875 .page_size = 128,
1876 .tested = TEST_UNTESTED,
1877 .probe = probe_jedec,
1878 .erase = erase_chip_jedec,
1879 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001880 },
1881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001882 {
1883 .vendor = "Winbond",
1884 .name = "W25x10",
1885 .manufacture_id = WINBOND_NEX_ID,
1886 .model_id = W_25X10,
1887 .total_size = 128,
1888 .page_size = 256,
1889 .tested = TEST_UNTESTED,
1890 .probe = probe_spi_rdid,
1891 .erase = spi_chip_erase_c7,
1892 .write = spi_chip_write,
1893 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001894 },
1895
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001896 {
1897 .vendor = "Winbond",
1898 .name = "W25x20",
1899 .manufacture_id = WINBOND_NEX_ID,
1900 .model_id = W_25X20,
1901 .total_size = 256,
1902 .page_size = 256,
1903 .tested = TEST_UNTESTED,
1904 .probe = probe_spi_rdid,
1905 .erase = spi_chip_erase_c7,
1906 .write = spi_chip_write,
1907 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001908 },
1909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001910 {
1911 .vendor = "Winbond",
1912 .name = "W25x40",
1913 .manufacture_id = WINBOND_NEX_ID,
1914 .model_id = W_25X40,
1915 .total_size = 512,
1916 .page_size = 256,
1917 .tested = TEST_OK_PREW,
1918 .probe = probe_spi_rdid,
1919 .erase = spi_chip_erase_c7,
1920 .write = spi_chip_write,
1921 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001922 },
1923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001924 {
1925 .vendor = "Winbond",
1926 .name = "W25x80",
1927 .manufacture_id = WINBOND_NEX_ID,
1928 .model_id = W_25X80,
1929 .total_size = 1024,
1930 .page_size = 256,
1931 .tested = TEST_OK_PREW,
1932 .probe = probe_spi_rdid,
1933 .erase = spi_chip_erase_c7,
1934 .write = spi_chip_write,
1935 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001936 },
1937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001938 {
1939 .vendor = "Winbond",
1940 .name = "W29C011",
1941 .manufacture_id = WINBOND_ID,
1942 .model_id = W_29C011,
1943 .total_size = 128,
1944 .page_size = 128,
1945 .tested = TEST_OK_PREW,
1946 .probe = probe_jedec,
1947 .erase = erase_chip_jedec,
1948 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001949 },
1950
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001951 {
1952 .vendor = "Winbond",
1953 .name = "W29C020C",
1954 .manufacture_id = WINBOND_ID,
1955 .model_id = W_29C020C,
1956 .total_size = 256,
1957 .page_size = 128,
1958 .tested = TEST_OK_PREW,
1959 .probe = probe_jedec,
1960 .erase = erase_chip_jedec,
1961 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001962 },
1963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001964 {
1965 .vendor = "Winbond",
1966 .name = "W29C040P",
1967 .manufacture_id = WINBOND_ID,
1968 .model_id = W_29C040P,
1969 .total_size = 512,
1970 .page_size = 256,
1971 .tested = TEST_UNTESTED,
1972 .probe = probe_jedec,
1973 .erase = erase_chip_jedec,
1974 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001975 },
1976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001977 {
1978 .vendor = "Winbond",
1979 .name = "W29EE011",
1980 .manufacture_id = WINBOND_ID,
1981 .model_id = W_29C011,
1982 .total_size = 128,
1983 .page_size = 128,
1984 .tested = TEST_OK_PREW,
1985 .probe = probe_w29ee011,
1986 .erase = erase_chip_jedec,
1987 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001988 },
1989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001990 {
1991 .vendor = "Winbond",
1992 .name = "W39V040A",
1993 .manufacture_id = WINBOND_ID,
1994 .model_id = W_39V040A,
1995 .total_size = 512,
1996 .page_size = 64*1024,
1997 .tested = TEST_UNTESTED,
1998 .probe = probe_jedec,
1999 .erase = erase_chip_jedec,
2000 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002001 },
2002
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002003 {
2004 .vendor = "Winbond",
2005 .name = "W39V040B",
2006 .manufacture_id = WINBOND_ID,
2007 .model_id = W_39V040B,
2008 .total_size = 512,
2009 .page_size = 64*1024,
2010 .tested = TEST_OK_PREW,
2011 .probe = probe_jedec,
2012 .erase = erase_chip_jedec,
2013 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002014 },
2015
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002016 {
2017 .vendor = "Winbond",
2018 .name = "W39V040C",
2019 .manufacture_id = WINBOND_ID,
2020 .model_id = 0x50,
2021 .total_size = 512,
2022 .page_size = 64*1024,
2023 .tested = TEST_OK_PREW,
2024 .probe = probe_w39v040c,
2025 .erase = erase_w39v040c,
2026 .write = write_w39v040c,
FENG yu ningff692fb2008-12-08 18:15:10 +00002027 },
2028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002029 {
2030 .vendor = "Winbond",
2031 .name = "W39V040FA",
2032 .manufacture_id = WINBOND_ID,
2033 .model_id = W_39V040FA,
2034 .total_size = 512,
2035 .page_size = 64*1024,
2036 .tested = TEST_OK_PREW,
2037 .probe = probe_jedec,
2038 .erase = erase_chip_jedec,
2039 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002040 },
2041
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002042 {
2043 .vendor = "Winbond",
2044 .name = "W39V080A",
2045 .manufacture_id = WINBOND_ID,
2046 .model_id = W_39V080A,
2047 .total_size = 1024,
2048 .page_size = 64*1024,
2049 .tested = TEST_OK_PREW,
2050 .probe = probe_jedec,
2051 .erase = erase_chip_jedec,
2052 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002053 },
2054
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002055 {
2056 .vendor = "Winbond",
2057 .name = "W49F002U",
2058 .manufacture_id = WINBOND_ID,
2059 .model_id = W_49F002U,
2060 .total_size = 256,
2061 .page_size = 128,
2062 .tested = TEST_OK_PREW,
2063 .probe = probe_jedec,
2064 .erase = erase_chip_jedec,
2065 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002066 },
2067
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002068 {
2069 .vendor = "Winbond",
2070 .name = "W49V002A",
2071 .manufacture_id = WINBOND_ID,
2072 .model_id = W_49V002A,
2073 .total_size = 256,
2074 .page_size = 128,
2075 .tested = TEST_OK_PREW,
2076 .probe = probe_jedec,
2077 .erase = erase_chip_jedec,
2078 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002079 },
2080
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002081 {
2082 .vendor = "Winbond",
2083 .name = "W49V002FA",
2084 .manufacture_id = WINBOND_ID,
2085 .model_id = W_49V002FA,
2086 .total_size = 256,
2087 .page_size = 128,
2088 .tested = TEST_UNTESTED,
2089 .probe = probe_jedec,
2090 .erase = erase_chip_jedec,
2091 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002092 },
2093
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002094 {
2095 .vendor = "Winbond",
2096 .name = "W39V080FA",
2097 .manufacture_id = WINBOND_ID,
2098 .model_id = W_39V080FA,
2099 .total_size = 1024,
2100 .page_size = 64*1024,
2101 .tested = TEST_OK_PREW,
2102 .probe = probe_winbond_fwhub,
2103 .erase = erase_winbond_fwhub,
2104 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002105 },
2106
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002107 {
2108 .vendor = "Winbond",
2109 .name = "W39V080FA (dual mode)",
2110 .manufacture_id = WINBOND_ID,
2111 .model_id = W_39V080FA_DM,
2112 .total_size = 512,
2113 .page_size = 64*1024,
2114 .tested = TEST_UNTESTED,
2115 .probe = probe_winbond_fwhub,
2116 .erase = erase_winbond_fwhub,
2117 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002118 },
2119
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002120 {
2121 .vendor = "Atmel",
2122 .name = "unknown Atmel SPI chip",
2123 .manufacture_id = ATMEL_ID,
2124 .model_id = GENERIC_DEVICE_ID,
2125 .total_size = 0,
2126 .page_size = 256,
2127 .tested = TEST_UNTESTED,
2128 .probe = probe_spi_rdid,
2129 .erase = NULL,
2130 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002131 },
2132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002133 {
2134 .vendor = "EON",
2135 .name = "unknown EON SPI chip",
2136 .manufacture_id = EON_ID_NOPREFIX,
2137 .model_id = GENERIC_DEVICE_ID,
2138 .total_size = 0,
2139 .page_size = 256,
2140 .tested = TEST_UNTESTED,
2141 .probe = probe_spi_rdid,
2142 .erase = NULL,
2143 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002144 },
2145
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002146 {
2147 .vendor = "Macronix",
2148 .name = "unknown Macronix SPI chip",
2149 .manufacture_id = MX_ID,
2150 .model_id = GENERIC_DEVICE_ID,
2151 .total_size = 0,
2152 .page_size = 256,
2153 .tested = TEST_UNTESTED,
2154 .probe = probe_spi_rdid,
2155 .erase = NULL,
2156 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002157 },
2158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 {
2160 .vendor = "PMC",
2161 .name = "unknown PMC SPI chip",
2162 .manufacture_id = PMC_ID,
2163 .model_id = GENERIC_DEVICE_ID,
2164 .total_size = 0,
2165 .page_size = 256,
2166 .tested = TEST_UNTESTED,
2167 .probe = probe_spi_rdid,
2168 .erase = NULL,
2169 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002170 },
2171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002172 {
2173 .vendor = "SST",
2174 .name = "unknown SST SPI chip",
2175 .manufacture_id = SST_ID,
2176 .model_id = GENERIC_DEVICE_ID,
2177 .total_size = 0,
2178 .page_size = 256,
2179 .tested = TEST_UNTESTED,
2180 .probe = probe_spi_rdid,
2181 .erase = NULL,
2182 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002183 },
2184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002185 {
2186 .vendor = "ST",
2187 .name = "unknown ST SPI chip",
2188 .manufacture_id = ST_ID,
2189 .model_id = GENERIC_DEVICE_ID,
2190 .total_size = 0,
2191 .page_size = 256,
2192 .tested = TEST_UNTESTED,
2193 .probe = probe_spi_rdid,
2194 .erase = NULL,
2195 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002196 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00002197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 { NULL }
2199 };