blob: 1fcb30afe5e69f73f516bb6714c4d7068c2de421 [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",
Zheng Bao0677dff2009-02-25 08:07:33 +00001131 .name = "SST25VF040.REMS",
1132 .manufacture_id = 0xbf,
1133 .model_id = 0x44,
1134 .total_size = 512,
1135 .page_size = 64*1024,
1136 .tested = TEST_OK_PR,
1137 .probe = probe_spi_rems,
1138 .erase = spi_chip_erase_60,
1139 .write = spi_chip_write,
1140 .read = spi_chip_read,
1141 },
1142
1143 {
1144 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00001145 .name = "SST25VF040B.REMS",
1146 .manufacture_id = 0xbf,
1147 .model_id = 0x8d,
1148 .total_size = 512,
1149 .page_size = 64*1024,
1150 .tested = TEST_OK_PR,
1151 .probe = probe_spi_rems,
1152 .erase = spi_chip_erase_c7,
Peter Stugec6e90552009-01-26 04:48:01 +00001153 .write = spi_aai_write,
Peter Stugefd9217d2009-01-26 03:37:40 +00001154 .read = spi_chip_read,
1155 },
1156
1157 {
1158 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001159 .name = "SST25VF080B",
1160 .manufacture_id = SST_ID,
1161 .model_id = SST_25VF080B,
1162 .total_size = 1024,
1163 .page_size = 256,
Peter Stuge51f40622009-01-24 01:32:40 +00001164 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001165 .probe = probe_spi_rdid,
1166 .erase = spi_chip_erase_60_c7,
1167 .write = spi_chip_write,
1168 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001169 },
1170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001171 {
1172 .vendor = "SST",
1173 .name = "SST28SF040A",
1174 .manufacture_id = SST_ID,
1175 .model_id = SST_28SF040,
1176 .total_size = 512,
1177 .page_size = 256,
1178 .tested = TEST_UNTESTED,
1179 .probe = probe_28sf040,
1180 .erase = erase_28sf040,
1181 .write = write_28sf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001182 },
1183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001184 {
1185 .vendor = "SST",
1186 .name = "SST29EE010",
1187 .manufacture_id = SST_ID,
1188 .model_id = SST_29EE010,
1189 .total_size = 128,
1190 .page_size = 128,
1191 .tested = TEST_OK_PREW,
1192 .probe = probe_jedec,
1193 .erase = erase_chip_jedec,
1194 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001195 },
1196
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001197 {
1198 .vendor = "SST",
1199 .name = "SST29LE010",
1200 .manufacture_id = SST_ID,
1201 .model_id = SST_29LE010,
1202 .total_size = 128,
1203 .page_size = 128,
1204 .tested = TEST_UNTESTED,
1205 .probe = probe_jedec,
1206 .erase = erase_chip_jedec,
1207 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001208 },
1209
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001210 {
1211 .vendor = "SST",
1212 .name = "SST29EE020A",
1213 .manufacture_id = SST_ID,
1214 .model_id = SST_29EE020A,
1215 .total_size = 256,
1216 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00001217 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001218 .probe = probe_jedec,
1219 .erase = erase_chip_jedec,
1220 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001221 },
1222
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001223 {
1224 .vendor = "SST",
1225 .name = "SST29LE020",
1226 .manufacture_id = SST_ID,
1227 .model_id = SST_29LE020,
1228 .total_size = 256,
1229 .page_size = 128,
1230 .tested = TEST_UNTESTED,
1231 .probe = probe_jedec,
1232 .erase = erase_chip_jedec,
1233 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001234 },
1235
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001236 {
1237 .vendor = "SST",
1238 .name = "SST39SF010A",
1239 .manufacture_id = SST_ID,
1240 .model_id = SST_39SF010,
1241 .total_size = 128,
1242 .page_size = 4096,
1243 .tested = TEST_OK_PREW,
1244 .probe = probe_jedec,
1245 .erase = erase_chip_jedec,
1246 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001247 },
1248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001249 {
1250 .vendor = "SST",
1251 .name = "SST39SF020A",
1252 .manufacture_id = SST_ID,
1253 .model_id = SST_39SF020,
1254 .total_size = 256,
1255 .page_size = 4096,
1256 .tested = TEST_OK_PREW,
1257 .probe = probe_jedec,
1258 .erase = erase_chip_jedec,
1259 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001260 },
1261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 {
1263 .vendor = "SST",
1264 .name = "SST39SF040",
1265 .manufacture_id = SST_ID,
1266 .model_id = SST_39SF040,
1267 .total_size = 512,
1268 .page_size = 4096,
1269 .tested = TEST_OK_PREW,
1270 .probe = probe_jedec,
1271 .erase = erase_chip_jedec,
1272 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001273 },
1274
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001275 {
1276 .vendor = "SST",
1277 .name = "SST39VF512",
1278 .manufacture_id = SST_ID,
1279 .model_id = SST_39VF512,
1280 .total_size = 64,
1281 .page_size = 4096,
1282 .tested = TEST_UNTESTED,
1283 .probe = probe_jedec,
1284 .erase = erase_chip_jedec,
1285 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001286 },
1287
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001288 {
1289 .vendor = "SST",
1290 .name = "SST39VF010",
1291 .manufacture_id = SST_ID,
1292 .model_id = SST_39VF010,
1293 .total_size = 128,
1294 .page_size = 4096,
1295 .tested = TEST_UNTESTED,
1296 .probe = probe_jedec,
1297 .erase = erase_chip_jedec,
1298 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001299 },
1300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001301 {
1302 .vendor = "SST",
1303 .name = "SST39VF020",
1304 .manufacture_id = SST_ID,
1305 .model_id = SST_39VF020,
1306 .total_size = 256,
1307 .page_size = 4096,
1308 .tested = TEST_OK_PREW,
1309 .probe = probe_jedec,
1310 .erase = erase_chip_jedec,
1311 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00001312 },
1313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 {
1315 .vendor = "SST",
1316 .name = "SST39VF040",
1317 .manufacture_id = SST_ID,
1318 .model_id = SST_39VF040,
1319 .total_size = 512,
1320 .page_size = 4096,
1321 .tested = TEST_OK_PROBE,
1322 .probe = probe_jedec,
1323 .erase = erase_chip_jedec,
1324 .write = write_39sf020,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00001325 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001326
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001327 {
1328 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00001329 .name = "SST39VF080",
1330 .manufacture_id = 0xbf,
1331 .model_id = 0xd8,
1332 .total_size = 1024,
1333 .page_size = 4096,
1334 .tested = TEST_UNTESTED,
1335 .probe = probe_jedec,
1336 .erase = erase_chip_jedec,
1337 .write = write_39sf020,
1338 },
1339
1340 {
1341 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001342 .name = "SST49LF002A/B",
1343 .manufacture_id = SST_ID,
1344 .model_id = SST_49LF002A,
1345 .total_size = 256,
1346 .page_size = 16 * 1024,
1347 .tested = TEST_OK_PREW,
1348 .probe = probe_sst_fwhub,
1349 .erase = erase_sst_fwhub,
1350 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001351 },
1352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001353 {
1354 .vendor = "SST",
1355 .name = "SST49LF003A/B",
1356 .manufacture_id = SST_ID,
1357 .model_id = SST_49LF003A,
1358 .total_size = 384,
1359 .page_size = 64 * 1024,
1360 .tested = TEST_UNTESTED,
1361 .probe = probe_sst_fwhub,
1362 .erase = erase_sst_fwhub,
1363 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001364 },
1365
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001366 {
1367 .vendor = "SST",
1368 .name = "SST49LF004A/B",
1369 .manufacture_id = SST_ID,
1370 .model_id = SST_49LF004A,
1371 .total_size = 512,
1372 .page_size = 64 * 1024,
1373 .tested = TEST_OK_PREW,
1374 .probe = probe_sst_fwhub,
1375 .erase = erase_sst_fwhub,
1376 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001377 },
1378
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001379 {
1380 .vendor = "SST",
1381 .name = "SST49LF004C",
1382 .manufacture_id = SST_ID,
1383 .model_id = SST_49LF004C,
1384 .total_size = 512,
1385 .page_size = 4 * 1024,
1386 .tested = TEST_UNTESTED,
1387 .probe = probe_49lfxxxc,
1388 .erase = erase_49lfxxxc,
1389 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001390 },
1391
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001392 {
1393 .vendor = "SST",
1394 .name = "SST49LF008A",
1395 .manufacture_id = SST_ID,
1396 .model_id = SST_49LF008A,
1397 .total_size = 1024,
1398 .page_size = 64 * 1024,
1399 .tested = TEST_OK_PREW,
1400 .probe = probe_sst_fwhub,
1401 .erase = erase_sst_fwhub,
1402 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001403 },
1404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001405 {
1406 .vendor = "SST",
1407 .name = "SST49LF008C",
1408 .manufacture_id = SST_ID,
1409 .model_id = SST_49LF008C,
1410 .total_size = 1024,
1411 .page_size = 4 * 1024,
1412 .tested = TEST_UNTESTED,
1413 .probe = probe_49lfxxxc,
1414 .erase = erase_49lfxxxc,
1415 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001416 },
1417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001418 {
1419 .vendor = "SST",
1420 .name = "SST49LF016C",
1421 .manufacture_id = SST_ID,
1422 .model_id = SST_49LF016C,
1423 .total_size = 2048,
1424 .page_size = 4 * 1024,
1425 .tested = TEST_OK_PREW,
1426 .probe = probe_49lfxxxc,
1427 .erase = erase_49lfxxxc,
1428 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001429 },
1430
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001431 {
1432 .vendor = "SST",
1433 .name = "SST49LF020",
1434 .manufacture_id = SST_ID,
1435 .model_id = SST_49LF020,
1436 .total_size = 256,
1437 .page_size = 16 * 1024,
1438 .tested = TEST_OK_PR,
1439 .probe = probe_jedec,
1440 .erase = erase_49lf040,
1441 .write = write_49lf040,
Sven Schnellec208dfb2009-01-07 12:35:09 +00001442 },
1443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001444 {
1445 .vendor = "SST",
1446 .name = "SST49LF020A",
1447 .manufacture_id = SST_ID,
1448 .model_id = SST_49LF020A,
1449 .total_size = 256,
1450 .page_size = 16 * 1024,
1451 .tested = TEST_UNTESTED,
1452 .probe = probe_jedec,
1453 .erase = erase_49lf040,
1454 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001455 },
1456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001457 {
1458 .vendor = "SST",
1459 .name = "SST49LF040",
1460 .manufacture_id = SST_ID,
1461 .model_id = SST_49LF040,
1462 .total_size = 512,
1463 .page_size = 4096,
1464 .tested = TEST_OK_PREW,
1465 .probe = probe_jedec,
1466 .erase = erase_49lf040,
1467 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001468 },
1469
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001470 {
1471 .vendor = "SST",
1472 .name = "SST49LF040B",
1473 .manufacture_id = SST_ID,
1474 .model_id = SST_49LF040B,
1475 .total_size = 512,
1476 .page_size = 64 * 1024,
1477 .tested = TEST_OK_PREW,
1478 .probe = probe_sst_fwhub,
1479 .erase = erase_sst_fwhub,
1480 .write = write_sst_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00001481 },
1482
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001483 {
1484 .vendor = "SST",
1485 .name = "SST49LF080A",
1486 .manufacture_id = SST_ID,
1487 .model_id = SST_49LF080A,
1488 .total_size = 1024,
1489 .page_size = 4096,
1490 .tested = TEST_OK_PREW,
1491 .probe = probe_jedec,
1492 .erase = erase_49lf040,
1493 .write = write_49lf040,
FENG yu ningff692fb2008-12-08 18:15:10 +00001494 },
1495
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001496 {
1497 .vendor = "SST",
1498 .name = "SST49LF160C",
1499 .manufacture_id = SST_ID,
1500 .model_id = SST_49LF160C,
1501 .total_size = 2048,
1502 .page_size = 4 * 1024,
1503 .tested = TEST_OK_PREW,
1504 .probe = probe_49lfxxxc,
1505 .erase = erase_49lfxxxc,
1506 .write = write_49lfxxxc,
FENG yu ningff692fb2008-12-08 18:15:10 +00001507 },
1508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001509 {
1510 .vendor = "ST",
1511 .name = "M25P05-A",
1512 .manufacture_id = ST_ID,
1513 .model_id = ST_M25P05A,
1514 .total_size = 64,
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 = "M25P10-A",
1526 .manufacture_id = ST_ID,
1527 .model_id = ST_M25P10A,
1528 .total_size = 128,
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 = "M25P20",
1540 .manufacture_id = ST_ID,
1541 .model_id = ST_M25P20,
1542 .total_size = 256,
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",
1554 .manufacture_id = ST_ID,
1555 .model_id = ST_M25P40,
1556 .total_size = 512,
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 = "M25P40-old",
1568 .manufacture_id = ST_ID,
1569 .model_id = ST_M25P40_RES,
1570 .total_size = 512,
1571 .page_size = 256,
1572 .tested = TEST_UNTESTED,
1573 .probe = probe_spi_res,
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 = "M25P80",
1582 .manufacture_id = ST_ID,
1583 .model_id = ST_M25P80,
1584 .total_size = 1024,
1585 .page_size = 256,
1586 .tested = TEST_UNTESTED,
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 = "M25P16",
1596 .manufacture_id = ST_ID,
1597 .model_id = ST_M25P16,
1598 .total_size = 2048,
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 = "M25P32",
1610 .manufacture_id = ST_ID,
1611 .model_id = ST_M25P32,
1612 .total_size = 4096,
1613 .page_size = 256,
1614 .tested = TEST_OK_PREW,
1615 .probe = probe_spi_rdid,
1616 .erase = spi_chip_erase_c7,
1617 .write = spi_chip_write,
1618 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001619 },
1620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 {
1622 .vendor = "ST",
1623 .name = "M25P64",
1624 .manufacture_id = ST_ID,
1625 .model_id = ST_M25P64,
1626 .total_size = 8192,
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 = "M25P128",
1638 .manufacture_id = ST_ID,
1639 .model_id = ST_M25P128,
1640 .total_size = 16384,
1641 .page_size = 256,
1642 .tested = TEST_UNTESTED,
1643 .probe = probe_spi_rdid,
1644 .erase = spi_chip_erase_c7,
1645 .write = spi_chip_write,
1646 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001647 },
1648
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001649 {
1650 .vendor = "ST",
1651 .name = "M29F002B",
1652 .manufacture_id = ST_ID,
1653 .model_id = ST_M29F002B,
1654 .total_size = 256,
1655 .page_size = 64 * 1024,
1656 .tested = TEST_UNTESTED,
1657 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001658 .erase = erase_m29f002,
1659 .write = write_m29f002b,
FENG yu ningff692fb2008-12-08 18:15:10 +00001660 },
1661
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001662 {
1663 .vendor = "ST",
1664 .name = "M29F002T/NT",
1665 .manufacture_id = ST_ID,
1666 .model_id = ST_M29F002T,
1667 .total_size = 256,
1668 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001669 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001670 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001671 .erase = erase_m29f002,
1672 .write = write_m29f002t,
FENG yu ningff692fb2008-12-08 18:15:10 +00001673 },
1674
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001675 {
1676 .vendor = "ST",
1677 .name = "M29F040B",
1678 .manufacture_id = ST_ID,
1679 .model_id = ST_M29F040B,
1680 .total_size = 512,
1681 .page_size = 64 * 1024,
1682 .tested = TEST_OK_PREW,
1683 .probe = probe_29f040b,
1684 .erase = erase_29f040b,
1685 .write = write_29f040b,
FENG yu ningff692fb2008-12-08 18:15:10 +00001686 },
1687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001688 {
1689 .vendor = "ST",
1690 .name = "M29F400BT",
1691 .manufacture_id = ST_ID,
1692 .model_id = ST_M29F400BT,
1693 .total_size = 512,
1694 .page_size = 64 * 1024,
1695 .tested = TEST_UNTESTED,
1696 .probe = probe_m29f400bt,
1697 .erase = erase_m29f400bt,
1698 .write = write_coreboot_m29f400bt,
FENG yu ningff692fb2008-12-08 18:15:10 +00001699 },
1700
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001701 {
1702 .vendor = "ST",
1703 .name = "M29W010B",
1704 .manufacture_id = ST_ID,
1705 .model_id = ST_M29W010B,
1706 .total_size = 128,
1707 .page_size = 16 * 1024,
1708 .tested = TEST_UNTESTED,
1709 .probe = probe_jedec,
1710 .erase = erase_chip_jedec,
1711 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001712 },
1713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001714 {
1715 .vendor = "ST",
1716 .name = "M29W040B",
1717 .manufacture_id = ST_ID,
1718 .model_id = ST_M29W040B,
1719 .total_size = 512,
1720 .page_size = 64 * 1024,
1721 .tested = TEST_UNTESTED,
1722 .probe = probe_jedec,
1723 .erase = erase_chip_jedec,
1724 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001725 },
1726
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001727 {
1728 .vendor = "ST",
1729 .name = "M50FLW040A",
1730 .manufacture_id = ST_ID,
1731 .model_id = ST_M50FLW040A,
1732 .total_size = 512,
1733 .page_size = 64 * 1024,
1734 .tested = TEST_UNTESTED,
1735 .probe = probe_stm50flw0x0x,
1736 .erase = erase_stm50flw0x0x,
1737 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001738 },
1739
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001740 {
1741 .vendor = "ST",
1742 .name = "M50FLW040B",
1743 .manufacture_id = ST_ID,
1744 .model_id = ST_M50FLW040B,
1745 .total_size = 512,
1746 .page_size = 64 * 1024,
1747 .tested = TEST_UNTESTED,
1748 .probe = probe_stm50flw0x0x,
1749 .erase = erase_stm50flw0x0x,
1750 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001751 },
1752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001753 {
1754 .vendor = "ST",
1755 .name = "M50FLW080A",
1756 .manufacture_id = ST_ID,
1757 .model_id = ST_M50FLW080A,
1758 .total_size = 1024,
1759 .page_size = 64 * 1024,
1760 .tested = TEST_OK_PREW,
1761 .probe = probe_stm50flw0x0x,
1762 .erase = erase_stm50flw0x0x,
1763 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001764 },
1765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001766 {
1767 .vendor = "ST",
1768 .name = "M50FLW080B",
1769 .manufacture_id = ST_ID,
1770 .model_id = ST_M50FLW080B,
1771 .total_size = 1024,
1772 .page_size = 64 * 1024,
1773 .tested = TEST_UNTESTED,
1774 .probe = probe_stm50flw0x0x,
1775 .erase = erase_stm50flw0x0x,
1776 .write = write_stm50flw0x0x,
FENG yu ningff692fb2008-12-08 18:15:10 +00001777 },
1778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001779 {
1780 .vendor = "ST",
1781 .name = "M50FW002",
1782 .manufacture_id = ST_ID,
1783 .model_id = ST_M50FW002,
1784 .total_size = 256,
1785 .page_size = 64 * 1024,
1786 .tested = TEST_UNTESTED,
1787 .probe = probe_49lfxxxc,
1788 .erase = NULL,
1789 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00001790 },
1791
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001792 {
1793 .vendor = "ST",
1794 .name = "M50FW016",
1795 .manufacture_id = ST_ID,
1796 .model_id = ST_M50FW016,
1797 .total_size = 2048,
1798 .page_size = 64 * 1024,
1799 .tested = TEST_UNTESTED,
1800 .probe = probe_82802ab,
1801 .erase = erase_82802ab,
1802 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001803 },
1804
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001805 {
1806 .vendor = "ST",
1807 .name = "M50FW040",
1808 .manufacture_id = ST_ID,
1809 .model_id = ST_M50FW040,
1810 .total_size = 512,
1811 .page_size = 64 * 1024,
1812 .tested = TEST_OK_PREW,
1813 .probe = probe_82802ab,
1814 .erase = erase_82802ab,
1815 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001816 },
1817
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001818 {
1819 .vendor = "ST",
1820 .name = "M50FW080",
1821 .manufacture_id = ST_ID,
1822 .model_id = ST_M50FW080,
1823 .total_size = 1024,
1824 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00001825 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001826 .probe = probe_82802ab,
1827 .erase = erase_82802ab,
1828 .write = write_82802ab,
FENG yu ningff692fb2008-12-08 18:15:10 +00001829 },
1830
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001831 {
1832 .vendor = "ST",
1833 .name = "M50LPW116",
1834 .manufacture_id = ST_ID,
1835 .model_id = ST_M50LPW116,
1836 .total_size = 2048,
1837 .page_size = 64 * 1024,
1838 .tested = TEST_UNTESTED,
1839 .probe = probe_jedec,
1840 .erase = erase_chip_jedec,
1841 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001842 },
1843
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001844 {
1845 .vendor = "SyncMOS",
1846 .name = "S29C31004T",
1847 .manufacture_id = SYNCMOS_ID,
1848 .model_id = S29C31004T,
1849 .total_size = 512,
1850 .page_size = 128,
1851 .tested = TEST_UNTESTED,
1852 .probe = probe_jedec,
1853 .erase = erase_chip_jedec,
1854 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001855 },
1856
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001857 {
1858 .vendor = "SyncMOS",
1859 .name = "S29C51001T",
1860 .manufacture_id = SYNCMOS_ID,
1861 .model_id = S29C51001T,
1862 .total_size = 128,
1863 .page_size = 128,
1864 .tested = TEST_UNTESTED,
1865 .probe = probe_jedec,
1866 .erase = erase_chip_jedec,
1867 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001868 },
1869
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001870 {
1871 .vendor = "SyncMOS",
1872 .name = "S29C51002T",
1873 .manufacture_id = SYNCMOS_ID,
1874 .model_id = S29C51002T,
1875 .total_size = 256,
1876 .page_size = 128,
1877 .tested = TEST_OK_PREW,
1878 .probe = probe_jedec,
1879 .erase = erase_chip_jedec,
1880 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001881 },
1882
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001883 {
1884 .vendor = "SyncMOS",
1885 .name = "S29C51004T",
1886 .manufacture_id = SYNCMOS_ID,
1887 .model_id = S29C51004T,
1888 .total_size = 512,
1889 .page_size = 128,
1890 .tested = TEST_UNTESTED,
1891 .probe = probe_jedec,
1892 .erase = erase_chip_jedec,
1893 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00001894 },
1895
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001896 {
1897 .vendor = "Winbond",
1898 .name = "W25x10",
1899 .manufacture_id = WINBOND_NEX_ID,
1900 .model_id = W_25X10,
1901 .total_size = 128,
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 = "W25x20",
1913 .manufacture_id = WINBOND_NEX_ID,
1914 .model_id = W_25X20,
1915 .total_size = 256,
1916 .page_size = 256,
1917 .tested = TEST_UNTESTED,
1918 .probe = probe_spi_rdid,
1919 .erase = spi_chip_erase_c7,
1920 .write = spi_chip_write,
1921 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001922 },
1923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001924 {
1925 .vendor = "Winbond",
1926 .name = "W25x40",
1927 .manufacture_id = WINBOND_NEX_ID,
1928 .model_id = W_25X40,
1929 .total_size = 512,
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 = "W25x80",
1941 .manufacture_id = WINBOND_NEX_ID,
1942 .model_id = W_25X80,
1943 .total_size = 1024,
1944 .page_size = 256,
1945 .tested = TEST_OK_PREW,
1946 .probe = probe_spi_rdid,
1947 .erase = spi_chip_erase_c7,
1948 .write = spi_chip_write,
1949 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001950 },
1951
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001952 {
1953 .vendor = "Winbond",
1954 .name = "W29C011",
1955 .manufacture_id = WINBOND_ID,
1956 .model_id = W_29C011,
1957 .total_size = 128,
1958 .page_size = 128,
1959 .tested = TEST_OK_PREW,
1960 .probe = probe_jedec,
1961 .erase = erase_chip_jedec,
1962 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001963 },
1964
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001965 {
1966 .vendor = "Winbond",
1967 .name = "W29C020C",
1968 .manufacture_id = WINBOND_ID,
1969 .model_id = W_29C020C,
1970 .total_size = 256,
1971 .page_size = 128,
1972 .tested = TEST_OK_PREW,
1973 .probe = probe_jedec,
1974 .erase = erase_chip_jedec,
1975 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001976 },
1977
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001978 {
1979 .vendor = "Winbond",
1980 .name = "W29C040P",
1981 .manufacture_id = WINBOND_ID,
1982 .model_id = W_29C040P,
1983 .total_size = 512,
1984 .page_size = 256,
1985 .tested = TEST_UNTESTED,
1986 .probe = probe_jedec,
1987 .erase = erase_chip_jedec,
1988 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00001989 },
1990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001991 {
1992 .vendor = "Winbond",
1993 .name = "W29EE011",
1994 .manufacture_id = WINBOND_ID,
1995 .model_id = W_29C011,
1996 .total_size = 128,
1997 .page_size = 128,
1998 .tested = TEST_OK_PREW,
1999 .probe = probe_w29ee011,
2000 .erase = erase_chip_jedec,
2001 .write = write_jedec,
FENG yu ningff692fb2008-12-08 18:15:10 +00002002 },
2003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002004 {
2005 .vendor = "Winbond",
2006 .name = "W39V040A",
2007 .manufacture_id = WINBOND_ID,
2008 .model_id = W_39V040A,
2009 .total_size = 512,
2010 .page_size = 64*1024,
2011 .tested = TEST_UNTESTED,
2012 .probe = probe_jedec,
2013 .erase = erase_chip_jedec,
2014 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002015 },
2016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002017 {
2018 .vendor = "Winbond",
2019 .name = "W39V040B",
2020 .manufacture_id = WINBOND_ID,
2021 .model_id = W_39V040B,
2022 .total_size = 512,
2023 .page_size = 64*1024,
2024 .tested = TEST_OK_PREW,
2025 .probe = probe_jedec,
2026 .erase = erase_chip_jedec,
2027 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002028 },
2029
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002030 {
2031 .vendor = "Winbond",
2032 .name = "W39V040C",
2033 .manufacture_id = WINBOND_ID,
2034 .model_id = 0x50,
2035 .total_size = 512,
2036 .page_size = 64*1024,
2037 .tested = TEST_OK_PREW,
2038 .probe = probe_w39v040c,
2039 .erase = erase_w39v040c,
2040 .write = write_w39v040c,
FENG yu ningff692fb2008-12-08 18:15:10 +00002041 },
2042
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002043 {
2044 .vendor = "Winbond",
2045 .name = "W39V040FA",
2046 .manufacture_id = WINBOND_ID,
2047 .model_id = W_39V040FA,
2048 .total_size = 512,
2049 .page_size = 64*1024,
2050 .tested = TEST_OK_PREW,
2051 .probe = probe_jedec,
2052 .erase = erase_chip_jedec,
2053 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002054 },
2055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002056 {
2057 .vendor = "Winbond",
2058 .name = "W39V080A",
2059 .manufacture_id = WINBOND_ID,
2060 .model_id = W_39V080A,
2061 .total_size = 1024,
2062 .page_size = 64*1024,
2063 .tested = TEST_OK_PREW,
2064 .probe = probe_jedec,
2065 .erase = erase_chip_jedec,
2066 .write = write_39sf020,
FENG yu ningff692fb2008-12-08 18:15:10 +00002067 },
2068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002069 {
2070 .vendor = "Winbond",
2071 .name = "W49F002U",
2072 .manufacture_id = WINBOND_ID,
2073 .model_id = W_49F002U,
2074 .total_size = 256,
2075 .page_size = 128,
2076 .tested = TEST_OK_PREW,
2077 .probe = probe_jedec,
2078 .erase = erase_chip_jedec,
2079 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002080 },
2081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002082 {
2083 .vendor = "Winbond",
2084 .name = "W49V002A",
2085 .manufacture_id = WINBOND_ID,
2086 .model_id = W_49V002A,
2087 .total_size = 256,
2088 .page_size = 128,
2089 .tested = TEST_OK_PREW,
2090 .probe = probe_jedec,
2091 .erase = erase_chip_jedec,
2092 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002093 },
2094
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002095 {
2096 .vendor = "Winbond",
2097 .name = "W49V002FA",
2098 .manufacture_id = WINBOND_ID,
2099 .model_id = W_49V002FA,
2100 .total_size = 256,
2101 .page_size = 128,
2102 .tested = TEST_UNTESTED,
2103 .probe = probe_jedec,
2104 .erase = erase_chip_jedec,
2105 .write = write_49f002,
FENG yu ningff692fb2008-12-08 18:15:10 +00002106 },
2107
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002108 {
2109 .vendor = "Winbond",
2110 .name = "W39V080FA",
2111 .manufacture_id = WINBOND_ID,
2112 .model_id = W_39V080FA,
2113 .total_size = 1024,
2114 .page_size = 64*1024,
2115 .tested = TEST_OK_PREW,
2116 .probe = probe_winbond_fwhub,
2117 .erase = erase_winbond_fwhub,
2118 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002119 },
2120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002121 {
2122 .vendor = "Winbond",
2123 .name = "W39V080FA (dual mode)",
2124 .manufacture_id = WINBOND_ID,
2125 .model_id = W_39V080FA_DM,
2126 .total_size = 512,
2127 .page_size = 64*1024,
2128 .tested = TEST_UNTESTED,
2129 .probe = probe_winbond_fwhub,
2130 .erase = erase_winbond_fwhub,
2131 .write = write_winbond_fwhub,
FENG yu ningff692fb2008-12-08 18:15:10 +00002132 },
2133
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 {
2135 .vendor = "Atmel",
2136 .name = "unknown Atmel SPI chip",
2137 .manufacture_id = ATMEL_ID,
2138 .model_id = GENERIC_DEVICE_ID,
2139 .total_size = 0,
2140 .page_size = 256,
2141 .tested = TEST_UNTESTED,
2142 .probe = probe_spi_rdid,
2143 .erase = NULL,
2144 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002145 },
2146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002147 {
2148 .vendor = "EON",
2149 .name = "unknown EON SPI chip",
2150 .manufacture_id = EON_ID_NOPREFIX,
2151 .model_id = GENERIC_DEVICE_ID,
2152 .total_size = 0,
2153 .page_size = 256,
2154 .tested = TEST_UNTESTED,
2155 .probe = probe_spi_rdid,
2156 .erase = NULL,
2157 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002158 },
2159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002160 {
2161 .vendor = "Macronix",
2162 .name = "unknown Macronix SPI chip",
2163 .manufacture_id = MX_ID,
2164 .model_id = GENERIC_DEVICE_ID,
2165 .total_size = 0,
2166 .page_size = 256,
2167 .tested = TEST_UNTESTED,
2168 .probe = probe_spi_rdid,
2169 .erase = NULL,
2170 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002171 },
2172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002173 {
2174 .vendor = "PMC",
2175 .name = "unknown PMC SPI chip",
2176 .manufacture_id = PMC_ID,
2177 .model_id = GENERIC_DEVICE_ID,
2178 .total_size = 0,
2179 .page_size = 256,
2180 .tested = TEST_UNTESTED,
2181 .probe = probe_spi_rdid,
2182 .erase = NULL,
2183 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "SST",
2188 .name = "unknown SST SPI chip",
2189 .manufacture_id = SST_ID,
2190 .model_id = GENERIC_DEVICE_ID,
2191 .total_size = 0,
2192 .page_size = 256,
2193 .tested = TEST_UNTESTED,
2194 .probe = probe_spi_rdid,
2195 .erase = NULL,
2196 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002197 },
2198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002199 {
2200 .vendor = "ST",
2201 .name = "unknown ST SPI chip",
2202 .manufacture_id = ST_ID,
2203 .model_id = GENERIC_DEVICE_ID,
2204 .total_size = 0,
2205 .page_size = 256,
2206 .tested = TEST_UNTESTED,
2207 .probe = probe_spi_rdid,
2208 .erase = NULL,
2209 .write = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002210 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00002211
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002212 { NULL }
2213 };