blob: e49a2b9de57928ac2fe7447ef23c81a927e2250f [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>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Uwe Hermannd1107642007-08-29 17:52:32 +00008 *
Stefan Reinauerce532972007-05-23 17:20:56 +00009 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000013 *
Stefan Reinauerce532972007-05-23 17:20:56 +000014 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000018 *
Stefan Reinauerce532972007-05-23 17:20:56 +000019 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000022 */
23
24#include "flash.h"
Ollie Lho184a4042005-11-26 21:55:36 +000025
Uwe Hermannfc425e82008-03-16 02:06:25 +000026/**
27 * List of supported flash ROM chips.
28 *
29 * Please keep the list sorted by vendor name and chip name, so that
30 * the output of 'flashrom -L' is alphabetically sorted.
31 */
Ollie Lho184a4042005-11-26 21:55:36 +000032struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000033
FENG yu ningff692fb2008-12-08 18:15:10 +000034 /* Vendor, Chip, Vendor ID, Chip ID,
35 * Total size (kB), Page size (B),
36 * Test status,
37 * Probe function, Erase function, Write function, Read function
38 */
39
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000040 {
41 .vendor = "AMD",
42 .name = "Am29F002(N)BB",
43 .manufacture_id = AMD_ID,
44 .model_id = AM_29F002BB,
45 .total_size = 256,
46 .page_size = 256,
47 .tested = TEST_UNTESTED,
48 .probe = probe_jedec,
49 .erase = erase_chip_jedec,
50 .write = write_en29f002a,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +000051 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +000052 },
53
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000054 {
55 .vendor = "AMD",
56 .name = "Am29F002(N)BT",
57 .manufacture_id = AMD_ID,
58 .model_id = AM_29F002BT,
59 .total_size = 256,
60 .page_size = 256,
61 .tested = TEST_OK_PREW,
62 .probe = probe_jedec,
63 .erase = erase_chip_jedec,
64 .write = write_en29f002a,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +000065 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +000066 },
67
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000068 {
69 .vendor = "AMD",
70 .name = "Am29F016D",
71 .manufacture_id = AMD_ID,
72 .model_id = AM_29F016D,
73 .total_size = 2048,
74 .page_size = 64 * 1024,
75 .tested = TEST_UNTESTED,
76 .probe = probe_29f040b,
77 .erase = erase_29f040b,
78 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +000079 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +000080 },
81
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000082 {
83 .vendor = "AMD",
84 .name = "Am29F040B",
85 .manufacture_id = AMD_ID,
86 .model_id = AM_29F040B,
87 .total_size = 512,
88 .page_size = 64 * 1024,
89 .tested = TEST_OK_PREW,
90 .probe = probe_29f040b,
91 .erase = erase_29f040b,
92 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +000093 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +000094 },
95
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000096 {
97 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +000098 .name = "Am29F080B",
99 .manufacture_id = 0x01,
100 .model_id = 0xd5,
101 .total_size = 1024,
102 .page_size = 64 * 1024,
103 .tested = TEST_UNTESTED,
104 .probe = probe_jedec,
105 .erase = erase_29f040b,
106 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000107 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000108 },
109
110 {
111 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000112 .name = "Am29LV040B",
113 .manufacture_id = AMD_ID,
114 .model_id = AM_29LV040B,
115 .total_size = 512,
116 .page_size = 64 * 1024,
117 .tested = TEST_UNTESTED,
118 .probe = probe_29f040b,
119 .erase = erase_29f040b,
120 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000121 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000122 },
123
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000124 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000125 .vendor = "AMD",
126 .name = "Am29LV081B",
127 .manufacture_id = 0x01,
128 .model_id = 0x38,
129 .total_size = 1024,
130 .page_size = 64 * 1024,
131 .tested = TEST_UNTESTED,
132 .probe = probe_29f040b,
133 .erase = erase_29f040b,
134 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000135 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000136 },
137
138 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000139 .vendor = "ASD",
140 .name = "AE49F2008",
141 .manufacture_id = ASD_ID,
142 .model_id = ASD_AE49F2008,
143 .total_size = 256,
144 .page_size = 128,
145 .tested = TEST_UNTESTED,
146 .probe = probe_jedec,
147 .erase = erase_chip_jedec,
148 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000149 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000150 },
151
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000152 {
153 .vendor = "Atmel",
154 .name = "AT25DF021",
155 .manufacture_id = ATMEL_ID,
156 .model_id = AT_25DF021,
157 .total_size = 256,
158 .page_size = 256,
159 .tested = TEST_UNTESTED,
160 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000161 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000162 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000163 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000164 },
165
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000166 {
167 .vendor = "Atmel",
168 .name = "AT25DF041A",
169 .manufacture_id = ATMEL_ID,
170 .model_id = AT_25DF041A,
171 .total_size = 512,
172 .page_size = 256,
173 .tested = TEST_UNTESTED,
174 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000175 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000176 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000178 },
179
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000180 {
181 .vendor = "Atmel",
182 .name = "AT25DF081",
183 .manufacture_id = ATMEL_ID,
184 .model_id = AT_25DF081,
185 .total_size = 1024,
186 .page_size = 256,
187 .tested = TEST_UNTESTED,
188 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000189 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000190 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000191 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000192 },
193
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000194 {
195 .vendor = "Atmel",
196 .name = "AT25DF161",
197 .manufacture_id = ATMEL_ID,
198 .model_id = AT_25DF161,
199 .total_size = 2048,
200 .page_size = 256,
201 .tested = TEST_UNTESTED,
202 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000203 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000204 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000205 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000206 },
207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000208 {
209 .vendor = "Atmel",
210 .name = "AT25DF321",
211 .manufacture_id = ATMEL_ID,
212 .model_id = AT_25DF321,
213 .total_size = 4096,
214 .page_size = 256,
215 .tested = TEST_OK_PREW,
216 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000217 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000218 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000219 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000220 },
221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000222 {
223 .vendor = "Atmel",
224 .name = "AT25DF321A",
225 .manufacture_id = ATMEL_ID,
226 .model_id = AT_25DF321A,
227 .total_size = 4096,
228 .page_size = 256,
229 .tested = TEST_UNTESTED,
230 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000231 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000232 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000233 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000234 },
235
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000236 {
237 .vendor = "Atmel",
238 .name = "AT25DF641",
239 .manufacture_id = ATMEL_ID,
240 .model_id = AT_25DF641,
241 .total_size = 8192,
242 .page_size = 256,
243 .tested = TEST_UNTESTED,
244 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000245 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000246 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000247 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000248 },
249
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000250 {
251 .vendor = "Atmel",
252 .name = "AT25F512B",
253 .manufacture_id = ATMEL_ID,
254 .model_id = AT_25F512B,
255 .total_size = 64,
256 .page_size = 256,
257 .tested = TEST_UNTESTED,
258 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000259 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000260 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000261 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000262 },
263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000264 {
265 .vendor = "Atmel",
266 .name = "AT25FS010",
267 .manufacture_id = ATMEL_ID,
268 .model_id = AT_25FS010,
269 .total_size = 128,
270 .page_size = 256,
271 .tested = TEST_UNTESTED,
272 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000273 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000274 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000275 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000276 },
277
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 {
279 .vendor = "Atmel",
280 .name = "AT25FS040",
281 .manufacture_id = ATMEL_ID,
282 .model_id = AT_25FS040,
283 .total_size = 512,
284 .page_size = 256,
285 .tested = TEST_UNTESTED,
286 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000287 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000288 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000289 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000290 },
291
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000292 {
293 .vendor = "Atmel",
294 .name = "AT26DF041",
295 .manufacture_id = ATMEL_ID,
296 .model_id = AT_26DF041,
297 .total_size = 512,
298 .page_size = 256,
299 .tested = TEST_UNTESTED,
300 .probe = probe_spi_rdid,
301 .erase = NULL,
302 .write = NULL /* Incompatible Page write */,
303 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000304 },
305
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000306 {
307 .vendor = "Atmel",
308 .name = "AT26DF081A",
309 .manufacture_id = ATMEL_ID,
310 .model_id = AT_26DF081A,
311 .total_size = 1024,
312 .page_size = 256,
313 .tested = TEST_UNTESTED,
314 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000315 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000316 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000317 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000318 },
319
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000320 {
321 .vendor = "Atmel",
322 .name = "AT26DF161",
323 .manufacture_id = ATMEL_ID,
324 .model_id = AT_26DF161,
325 .total_size = 2048,
326 .page_size = 256,
327 .tested = TEST_UNTESTED,
328 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000329 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000330 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000331 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000332 },
333
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000334 {
335 .vendor = "Atmel",
336 .name = "AT26DF161A",
337 .manufacture_id = ATMEL_ID,
338 .model_id = AT_26DF161A,
339 .total_size = 2048,
340 .page_size = 256,
341 .tested = TEST_UNTESTED,
342 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000343 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000344 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000345 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000346 },
347
348 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000349 /*{
350 .vendor = "Atmel",
351 .name = "AT26DF321",
352 .manufacture_id = ATMEL_ID,
353 .model_id = AT_26DF321,
354 .total_size = 4096,
355 .page_size = 256,
356 .tested = TEST_UNTESTED,
357 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000358 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000359 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000360 .read = spi_chip_read,
361 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000362
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000363 {
364 .vendor = "Atmel",
365 .name = "AT26F004",
366 .manufacture_id = ATMEL_ID,
367 .model_id = AT_26F004,
368 .total_size = 512,
369 .page_size = 256,
370 .tested = TEST_UNTESTED,
371 .probe = probe_spi_rdid,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000372 .erase = spi_chip_erase_60_c7,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .write = NULL /* Incompatible Page write */,
374 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000375 },
376
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000377 {
378 .vendor = "Atmel",
379 .name = "AT29C020",
380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_29C020,
382 .total_size = 256,
383 .page_size = 256,
384 .tested = TEST_OK_PREW,
385 .probe = probe_jedec,
386 .erase = erase_chip_jedec,
387 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000388 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000389 },
390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000391 {
392 .vendor = "Atmel",
393 .name = "AT29C040A",
394 .manufacture_id = ATMEL_ID,
395 .model_id = AT_29C040A,
396 .total_size = 512,
397 .page_size = 256,
398 .tested = TEST_UNTESTED,
399 .probe = probe_jedec,
400 .erase = erase_chip_jedec,
401 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000402 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000403 },
404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000405 {
406 .vendor = "Atmel",
407 .name = "AT45CS1282",
408 .manufacture_id = ATMEL_ID,
409 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000410 .total_size = 16896 /* No power of two sizes */,
411 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000412 .tested = TEST_BAD_READ,
413 .probe = probe_spi_rdid,
414 .erase = NULL,
415 .write = NULL /* Incompatible Page write */,
416 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000417 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000418
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000419 {
420 .vendor = "Atmel",
421 .name = "AT45DB011D",
422 .manufacture_id = ATMEL_ID,
423 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000424 .total_size = 128 /* Size can only be determined from status register */,
425 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000426 .tested = TEST_BAD_READ,
427 .probe = probe_spi_rdid,
428 .erase = NULL,
429 .write = NULL,
430 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000431 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000433 {
434 .vendor = "Atmel",
435 .name = "AT45DB021D",
436 .manufacture_id = ATMEL_ID,
437 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000438 .total_size = 256 /* Size can only be determined from status register */,
439 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000440 .tested = TEST_BAD_READ,
441 .probe = probe_spi_rdid,
442 .erase = NULL,
443 .write = NULL,
444 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000445 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000446
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000447 {
448 .vendor = "Atmel",
449 .name = "AT45DB041D",
450 .manufacture_id = ATMEL_ID,
451 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000452 .total_size = 512 /* Size can only be determined from status register */,
453 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000454 .tested = TEST_BAD_READ,
455 .probe = probe_spi_rdid,
456 .erase = NULL,
457 .write = NULL,
458 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000459 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000461 {
462 .vendor = "Atmel",
463 .name = "AT45DB081D",
464 .manufacture_id = ATMEL_ID,
465 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000466 .total_size = 1024 /* Size can only be determined from status register */,
467 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000468 .tested = TEST_BAD_READ,
469 .probe = probe_spi_rdid,
470 .erase = NULL,
471 .write = NULL,
472 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000473 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 {
476 .vendor = "Atmel",
477 .name = "AT45DB161D",
478 .manufacture_id = ATMEL_ID,
479 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000480 .total_size = 2048 /* Size can only be determined from status register */,
481 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 .tested = TEST_BAD_READ,
483 .probe = probe_spi_rdid,
484 .erase = NULL,
485 .write = NULL,
486 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000487 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000489 {
490 .vendor = "Atmel",
491 .name = "AT45DB321C",
492 .manufacture_id = ATMEL_ID,
493 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000494 .total_size = 4224 /* No power of two sizes */,
495 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000496 .tested = TEST_BAD_READ,
497 .probe = probe_spi_rdid,
498 .erase = NULL,
499 .write = NULL,
500 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000501 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000503 {
504 .vendor = "Atmel",
505 .name = "AT45DB321D",
506 .manufacture_id = ATMEL_ID,
507 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000508 .total_size = 4096 /* Size can only be determined from status register */,
509 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000510 .tested = TEST_BAD_READ,
511 .probe = probe_spi_rdid,
512 .erase = NULL,
513 .write = NULL,
514 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000515 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000516
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000517 {
518 .vendor = "Atmel",
519 .name = "AT45DB642D",
520 .manufacture_id = ATMEL_ID,
521 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000522 .total_size = 8192 /* Size can only be determined from status register */,
523 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000524 .tested = TEST_BAD_READ,
525 .probe = probe_spi_rdid,
526 .erase = NULL,
527 .write = NULL,
528 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000529 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000530
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000531 {
532 .vendor = "Atmel",
533 .name = "AT49F002(N)",
534 .manufacture_id = ATMEL_ID,
535 .model_id = AT_49F002N,
536 .total_size = 256,
537 .page_size = 256,
538 .tested = TEST_UNTESTED,
539 .probe = probe_jedec,
540 .erase = erase_chip_jedec,
541 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000542 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000543 },
544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000545 {
546 .vendor = "Atmel",
547 .name = "AT49F002(N)T",
548 .manufacture_id = ATMEL_ID,
549 .model_id = AT_49F002NT,
550 .total_size = 256,
551 .page_size = 256,
552 .tested = TEST_OK_PREW,
553 .probe = probe_jedec,
554 .erase = erase_chip_jedec,
555 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000556 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000557 },
558
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000559 {
560 .vendor = "AMIC",
561 .name = "A25L40P",
562 .manufacture_id = AMIC_ID,
563 .model_id = AMIC_A25L40P,
564 .total_size = 512,
565 .page_size = 256,
566 .tested = TEST_OK_PREW,
567 .probe = probe_spi_rdid4,
568 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000569 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000570 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000571 },
572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000573 {
574 .vendor = "AMIC",
575 .name = "A29002B",
576 .manufacture_id = AMIC_ID_NOPREFIX,
577 .model_id = AMIC_A29002B,
578 .total_size = 256,
579 .page_size = 64 * 1024,
580 .tested = TEST_UNTESTED,
581 .probe = probe_29f002,
582 .erase = erase_29f002,
583 .write = write_29f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000584 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000585 },
586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000587 {
588 .vendor = "AMIC",
589 .name = "A29002T",
590 .manufacture_id = AMIC_ID_NOPREFIX,
591 .model_id = AMIC_A29002T,
592 .total_size = 256,
593 .page_size = 64 * 1024,
594 .tested = TEST_OK_PREW,
595 .probe = probe_29f002,
596 .erase = erase_29f002,
597 .write = write_29f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000598 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000599 },
600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000601 {
602 .vendor = "AMIC",
603 .name = "A29040B",
604 .manufacture_id = AMIC_ID_NOPREFIX,
605 .model_id = AMIC_A29040B,
606 .total_size = 512,
607 .page_size = 64 * 1024,
608 .tested = TEST_OK_PR,
609 .probe = probe_29f040b,
610 .erase = erase_29f040b,
611 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000612 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000613 },
614
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000615 {
616 .vendor = "AMIC",
617 .name = "A49LF040A",
618 .manufacture_id = AMIC_ID_NOPREFIX,
619 .model_id = AMIC_A49LF040A,
620 .total_size = 512,
621 .page_size = 64 * 1024,
622 .tested = TEST_OK_PREW,
623 .probe = probe_49fl00x,
624 .erase = erase_49fl00x,
625 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000626 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000627 },
628
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000629 {
630 .vendor = "EMST",
631 .name = "F49B002UA",
632 .manufacture_id = EMST_ID,
633 .model_id = EMST_F49B002UA,
634 .total_size = 256,
635 .page_size = 4096,
636 .tested = TEST_UNTESTED,
637 .probe = probe_jedec,
638 .erase = erase_chip_jedec,
639 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000640 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000641 },
642
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000643 {
644 .vendor = "EON",
645 .name = "EN29F002(A)(N)B",
646 .manufacture_id = EON_ID,
647 .model_id = EN_29F002B,
648 .total_size = 256,
649 .page_size = 256,
650 .tested = TEST_UNTESTED,
651 .probe = probe_jedec,
652 .erase = erase_chip_jedec,
653 .write = write_en29f002a,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000654 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000655 },
656
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000657 {
658 .vendor = "EON",
659 .name = "EN29F002(A)(N)T",
660 .manufacture_id = EON_ID,
661 .model_id = EN_29F002T,
662 .total_size = 256,
663 .page_size = 256,
664 .tested = TEST_OK_PREW,
665 .probe = probe_jedec,
666 .erase = erase_chip_jedec,
667 .write = write_en29f002a,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000668 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000669 },
670
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000671 {
672 .vendor = "Fujitsu",
673 .name = "MBM29F004BC",
674 .manufacture_id = FUJITSU_ID,
675 .model_id = MBM29F004BC,
676 .total_size = 512,
677 .page_size = 64 * 1024,
678 .tested = TEST_UNTESTED,
679 .probe = probe_jedec,
680 .erase = NULL,
681 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000682 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000683 },
684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000685 {
686 .vendor = "Fujitsu",
687 .name = "MBM29F004TC",
688 .manufacture_id = FUJITSU_ID,
689 .model_id = MBM29F004TC,
690 .total_size = 512,
691 .page_size = 64 * 1024,
692 .tested = TEST_UNTESTED,
693 .probe = probe_jedec,
694 .erase = NULL,
695 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000696 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000697 },
698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000699 {
700 .vendor = "Fujitsu",
701 .name = "MBM29F400BC",
702 .manufacture_id = FUJITSU_ID,
703 .model_id = MBM29F400BC,
704 .total_size = 512,
705 .page_size = 64 * 1024,
706 .tested = TEST_UNTESTED,
707 .probe = probe_m29f400bt,
708 .erase = erase_m29f400bt,
709 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000711 },
712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000713 {
714 .vendor = "Fujitsu",
715 .name = "MBM29F400TC",
716 .manufacture_id = FUJITSU_ID,
717 .model_id = MBM29F400TC,
718 .total_size = 512,
719 .page_size = 64 * 1024,
720 .tested = TEST_UNTESTED,
721 .probe = probe_m29f400bt,
722 .erase = erase_m29f400bt,
723 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000724 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000725 },
726
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000727 {
728 .vendor = "Intel",
729 .name = "82802AB",
730 .manufacture_id = INTEL_ID,
731 .model_id = 173,
732 .total_size = 512,
733 .page_size = 64 * 1024,
734 .tested = TEST_OK_PREW,
735 .probe = probe_82802ab,
736 .erase = erase_82802ab,
737 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000738 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000739 },
740
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000741 {
742 .vendor = "Intel",
743 .name = "82802AC",
744 .manufacture_id = INTEL_ID,
745 .model_id = 172,
746 .total_size = 1024,
747 .page_size = 64 * 1024,
748 .tested = TEST_OK_PREW,
749 .probe = probe_82802ab,
750 .erase = erase_82802ab,
751 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000752 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000753 },
754
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000755 {
756 .vendor = "Macronix",
757 .name = "MX25L512",
758 .manufacture_id = MX_ID,
759 .model_id = MX_25L512,
760 .total_size = 64,
761 .page_size = 256,
762 .tested = TEST_UNTESTED,
763 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000764 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000765 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000766 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000767 },
768
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 {
770 .vendor = "Macronix",
771 .name = "MX25L1005",
772 .manufacture_id = MX_ID,
773 .model_id = MX_25L1005,
774 .total_size = 128,
775 .page_size = 256,
776 .tested = TEST_UNTESTED,
777 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000778 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000779 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000780 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000781 },
782
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000783 {
784 .vendor = "Macronix",
785 .name = "MX25L2005",
786 .manufacture_id = MX_ID,
787 .model_id = MX_25L2005,
788 .total_size = 256,
789 .page_size = 256,
790 .tested = TEST_UNTESTED,
791 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000792 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000793 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000794 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000795 },
796
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000797 {
798 .vendor = "Macronix",
799 .name = "MX25L4005",
800 .manufacture_id = MX_ID,
801 .model_id = MX_25L4005,
802 .total_size = 512,
803 .page_size = 256,
804 .tested = TEST_OK_PREW,
805 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000806 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000807 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000808 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000809 },
810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000811 {
812 .vendor = "Macronix",
813 .name = "MX25L8005",
814 .manufacture_id = MX_ID,
815 .model_id = MX_25L8005,
816 .total_size = 1024,
817 .page_size = 256,
818 .tested = TEST_OK_PREW,
819 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000820 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000821 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000822 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000823 },
824
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000825 {
826 .vendor = "Macronix",
827 .name = "MX25L1605",
828 .manufacture_id = MX_ID,
829 .model_id = MX_25L1605,
830 .total_size = 2048,
831 .page_size = 256,
Peter Stugeddb94f72009-04-29 23:22:33 +0000832 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000833 .probe = probe_spi_rdid,
Stephan Guillouxe39631c2009-04-19 23:24:26 +0000834 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000835 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000836 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000837 },
838
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000839 {
840 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +0000841 .name = "MX25L1635D",
842 .manufacture_id = MX_ID,
843 .model_id = MX_25L1635D,
844 .total_size = 2048,
845 .page_size = 256,
846 .tested = TEST_UNTESTED,
847 .probe = probe_spi_rdid,
Stephan Guillouxe39631c2009-04-19 23:24:26 +0000848 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000849 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +0000850 .read = spi_chip_read,
851 },
Stephan Guillouxfd315502009-04-20 22:54:13 +0000852
Stephan Guillouxf5c70902009-04-19 23:04:00 +0000853 {
854 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000855 .name = "MX25L3205",
856 .manufacture_id = MX_ID,
857 .model_id = MX_25L3205,
858 .total_size = 4096,
859 .page_size = 256,
860 .tested = TEST_OK_PREW,
861 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000862 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000863 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000864 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000865 },
866
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000867 {
868 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +0000869 .name = "MX25L3235D",
870 .manufacture_id = MX_ID,
871 .model_id = MX_25L3235D,
872 .total_size = 4096,
873 .page_size = 256,
874 .tested = TEST_UNTESTED,
875 .probe = probe_spi_rdid,
876 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000877 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +0000878 .read = spi_chip_read,
879 },
880
881 {
882 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000883 .name = "MX25L6405",
884 .manufacture_id = MX_ID,
885 .model_id = MX_25L6405,
886 .total_size = 8192,
887 .page_size = 256,
888 .tested = TEST_UNTESTED,
889 .probe = probe_spi_rdid,
Stephan Guillouxfd315502009-04-20 22:54:13 +0000890 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000891 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000893 },
894
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000895 {
896 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +0000897 .name = "MX25L12805",
898 .manufacture_id = MX_ID,
899 .model_id = MX_25L12805,
900 .total_size = 16384,
901 .page_size = 256,
902 .tested = TEST_UNTESTED,
903 .probe = probe_spi_rdid,
904 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000905 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +0000906 .read = spi_chip_read,
907 },
908
909 {
910 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000911 .name = "MX29F002B",
912 .manufacture_id = MX_ID,
913 .model_id = MX_29F002B,
914 .total_size = 256,
915 .page_size = 64 * 1024,
916 .tested = TEST_UNTESTED,
917 .probe = probe_29f002,
918 .erase = erase_29f002,
919 .write = write_29f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000920 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000921 },
922
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 {
924 .vendor = "Macronix",
925 .name = "MX29F002T",
926 .manufacture_id = MX_ID,
927 .model_id = MX_29F002T,
928 .total_size = 256,
929 .page_size = 64 * 1024,
930 .tested = TEST_UNTESTED,
931 .probe = probe_29f002,
932 .erase = erase_29f002,
933 .write = write_29f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000935 },
936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 {
938 .vendor = "Macronix",
939 .name = "MX29LV040C",
940 .manufacture_id = MX_ID,
941 .model_id = MX_29LV040C,
942 .total_size = 512,
943 .page_size = 64 * 1024,
944 .tested = TEST_OK_PR,
945 .probe = probe_29f002,
946 .erase = erase_29f002,
947 .write = write_29f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000948 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +0000949 },
950
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000951 {
952 .vendor = "Numonyx",
953 .name = "M25PE10",
954 .manufacture_id = ST_ID,
955 .model_id = 0x8011,
956 .total_size = 128,
957 .page_size = 256,
958 .tested = TEST_UNTESTED,
959 .probe = probe_spi_rdid,
960 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000961 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000962 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000963 },
964
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 {
966 .vendor = "Numonyx",
967 .name = "M25PE20",
968 .manufacture_id = ST_ID,
969 .model_id = 0x8012,
970 .total_size = 256,
971 .page_size = 256,
972 .tested = TEST_UNTESTED,
973 .probe = probe_spi_rdid,
974 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000975 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000976 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000977 },
978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 {
980 .vendor = "Numonyx",
981 .name = "M25PE40",
982 .manufacture_id = ST_ID,
983 .model_id = 0x8013,
984 .total_size = 256,
985 .page_size = 256,
986 .tested = TEST_UNTESTED,
987 .probe = probe_spi_rdid,
988 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000989 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000990 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000991 },
992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 {
994 .vendor = "Numonyx",
995 .name = "M25PE80",
996 .manufacture_id = ST_ID,
997 .model_id = 0x8014,
998 .total_size = 1024,
999 .page_size = 256,
1000 .tested = TEST_OK_PREW,
1001 .probe = probe_spi_rdid,
1002 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001003 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001005 },
1006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001007 {
1008 .vendor = "Numonyx",
1009 .name = "M25PE16",
1010 .manufacture_id = ST_ID,
1011 .model_id = 0x8015,
1012 .total_size = 2048,
1013 .page_size = 256,
1014 .tested = TEST_UNTESTED,
1015 .probe = probe_spi_rdid,
1016 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001017 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001018 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001019 },
1020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001021 {
1022 .vendor = "PMC",
1023 .name = "Pm25LV010",
1024 .manufacture_id = PMC_ID,
1025 .model_id = PMC_25LV010,
1026 .total_size = 128,
1027 .page_size = 256,
1028 .tested = TEST_UNTESTED,
1029 .probe = probe_spi_rdid,
1030 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001031 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001032 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001033 },
1034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001035 {
1036 .vendor = "PMC",
1037 .name = "Pm25LV016B",
1038 .manufacture_id = PMC_ID,
1039 .model_id = PMC_25LV016B,
1040 .total_size = 2048,
1041 .page_size = 256,
1042 .tested = TEST_UNTESTED,
1043 .probe = probe_spi_rdid,
1044 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001045 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001047 },
1048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 {
1050 .vendor = "PMC",
1051 .name = "Pm25LV020",
1052 .manufacture_id = PMC_ID,
1053 .model_id = PMC_25LV020,
1054 .total_size = 256,
1055 .page_size = 256,
1056 .tested = TEST_UNTESTED,
1057 .probe = probe_spi_rdid,
1058 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001059 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001060 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001061 },
1062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001063 {
1064 .vendor = "PMC",
1065 .name = "Pm25LV040",
1066 .manufacture_id = PMC_ID,
1067 .model_id = PMC_25LV040,
1068 .total_size = 512,
1069 .page_size = 256,
1070 .tested = TEST_UNTESTED,
1071 .probe = probe_spi_rdid,
1072 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001073 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001075 },
1076
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001077 {
1078 .vendor = "PMC",
1079 .name = "Pm25LV080B",
1080 .manufacture_id = PMC_ID,
1081 .model_id = PMC_25LV080B,
1082 .total_size = 1024,
1083 .page_size = 256,
1084 .tested = TEST_UNTESTED,
1085 .probe = probe_spi_rdid,
1086 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001087 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001088 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001089 },
1090
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001091 {
1092 .vendor = "PMC",
1093 .name = "Pm25LV512",
1094 .manufacture_id = PMC_ID,
1095 .model_id = PMC_25LV512,
1096 .total_size = 64,
1097 .page_size = 256,
1098 .tested = TEST_UNTESTED,
1099 .probe = probe_spi_rdid,
1100 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001101 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001102 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001103 },
1104
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001105 {
1106 .vendor = "PMC",
1107 .name = "Pm49FL002",
1108 .manufacture_id = PMC_ID_NOPREFIX,
1109 .model_id = PMC_49FL002,
1110 .total_size = 256,
1111 .page_size = 16 * 1024,
1112 .tested = TEST_OK_PREW,
1113 .probe = probe_49fl00x,
1114 .erase = erase_49fl00x,
1115 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001116 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001117 },
1118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001119 {
1120 .vendor = "PMC",
1121 .name = "Pm49FL004",
1122 .manufacture_id = PMC_ID_NOPREFIX,
1123 .model_id = PMC_49FL004,
1124 .total_size = 512,
1125 .page_size = 64 * 1024,
1126 .tested = TEST_OK_PREW,
1127 .probe = probe_49fl00x,
1128 .erase = erase_49fl00x,
1129 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001130 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001131 },
1132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001133 {
1134 .vendor = "Sharp",
1135 .name = "LHF00L04",
1136 .manufacture_id = SHARP_ID,
1137 .model_id = SHARP_LHF00L04,
1138 .total_size = 1024,
1139 .page_size = 64 * 1024,
1140 .tested = TEST_UNTESTED,
1141 .probe = probe_lhf00l04,
1142 .erase = erase_lhf00l04,
1143 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001145 },
1146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001147 {
1148 .vendor = "Spansion",
1149 .name = "S25FL016A",
1150 .manufacture_id = SPANSION_ID,
1151 .model_id = SPANSION_S25FL016A,
1152 .total_size = 2048,
1153 .page_size = 256,
1154 .tested = TEST_OK_PREW,
1155 .probe = probe_spi_rdid,
1156 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001157 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001158 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001159 },
1160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001161 {
1162 .vendor = "SST",
1163 .name = "SST25VF016B",
1164 .manufacture_id = SST_ID,
1165 .model_id = SST_25VF016B,
1166 .total_size = 2048,
1167 .page_size = 256,
1168 .tested = TEST_OK_PREW,
1169 .probe = probe_spi_rdid,
1170 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001171 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001172 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001173 },
1174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001175 {
1176 .vendor = "SST",
1177 .name = "SST25VF032B",
1178 .manufacture_id = SST_ID,
1179 .model_id = SST_25VF032B,
1180 .total_size = 4096,
1181 .page_size = 256,
1182 .tested = TEST_OK_PREW,
1183 .probe = probe_spi_rdid,
1184 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001185 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001186 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001187 },
1188
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001189 {
1190 .vendor = "SST",
1191 .name = "SST25VF040B",
1192 .manufacture_id = SST_ID,
1193 .model_id = SST_25VF040B,
1194 .total_size = 512,
1195 .page_size = 256,
1196 .tested = TEST_UNTESTED,
1197 .probe = probe_spi_rdid,
1198 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001199 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001200 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001201 },
1202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001203 {
1204 .vendor = "SST",
Zheng Bao0677dff2009-02-25 08:07:33 +00001205 .name = "SST25VF040.REMS",
1206 .manufacture_id = 0xbf,
1207 .model_id = 0x44,
1208 .total_size = 512,
1209 .page_size = 64*1024,
1210 .tested = TEST_OK_PR,
1211 .probe = probe_spi_rems,
1212 .erase = spi_chip_erase_60,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001213 .write = spi_chip_write_256,
Zheng Bao0677dff2009-02-25 08:07:33 +00001214 .read = spi_chip_read,
1215 },
1216
1217 {
1218 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00001219 .name = "SST25VF040B.REMS",
1220 .manufacture_id = 0xbf,
1221 .model_id = 0x8d,
1222 .total_size = 512,
1223 .page_size = 64*1024,
1224 .tested = TEST_OK_PR,
1225 .probe = probe_spi_rems,
1226 .erase = spi_chip_erase_c7,
Peter Stugec6e90552009-01-26 04:48:01 +00001227 .write = spi_aai_write,
Peter Stugefd9217d2009-01-26 03:37:40 +00001228 .read = spi_chip_read,
1229 },
1230
1231 {
1232 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001233 .name = "SST25VF080B",
1234 .manufacture_id = SST_ID,
1235 .model_id = SST_25VF080B,
1236 .total_size = 1024,
1237 .page_size = 256,
Peter Stugee612a112009-05-05 16:34:53 +00001238 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001239 .probe = probe_spi_rdid,
1240 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001241 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001242 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001243 },
1244
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001245 {
1246 .vendor = "SST",
1247 .name = "SST28SF040A",
1248 .manufacture_id = SST_ID,
1249 .model_id = SST_28SF040,
1250 .total_size = 512,
1251 .page_size = 256,
1252 .tested = TEST_UNTESTED,
1253 .probe = probe_28sf040,
1254 .erase = erase_28sf040,
1255 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001256 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001257 },
1258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001259 {
1260 .vendor = "SST",
1261 .name = "SST29EE010",
1262 .manufacture_id = SST_ID,
1263 .model_id = SST_29EE010,
1264 .total_size = 128,
1265 .page_size = 128,
1266 .tested = TEST_OK_PREW,
1267 .probe = probe_jedec,
1268 .erase = erase_chip_jedec,
1269 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001270 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001271 },
1272
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001273 {
1274 .vendor = "SST",
1275 .name = "SST29LE010",
1276 .manufacture_id = SST_ID,
1277 .model_id = SST_29LE010,
1278 .total_size = 128,
1279 .page_size = 128,
1280 .tested = TEST_UNTESTED,
1281 .probe = probe_jedec,
1282 .erase = erase_chip_jedec,
1283 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "SST",
1289 .name = "SST29EE020A",
1290 .manufacture_id = SST_ID,
1291 .model_id = SST_29EE020A,
1292 .total_size = 256,
1293 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00001294 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001295 .probe = probe_jedec,
1296 .erase = erase_chip_jedec,
1297 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001299 },
1300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001301 {
1302 .vendor = "SST",
1303 .name = "SST29LE020",
1304 .manufacture_id = SST_ID,
1305 .model_id = SST_29LE020,
1306 .total_size = 256,
1307 .page_size = 128,
1308 .tested = TEST_UNTESTED,
1309 .probe = probe_jedec,
1310 .erase = erase_chip_jedec,
1311 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001313 },
1314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001315 {
1316 .vendor = "SST",
1317 .name = "SST39SF010A",
1318 .manufacture_id = SST_ID,
1319 .model_id = SST_39SF010,
1320 .total_size = 128,
1321 .page_size = 4096,
1322 .tested = TEST_OK_PREW,
1323 .probe = probe_jedec,
1324 .erase = erase_chip_jedec,
1325 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001326 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001327 },
1328
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001329 {
1330 .vendor = "SST",
1331 .name = "SST39SF020A",
1332 .manufacture_id = SST_ID,
1333 .model_id = SST_39SF020,
1334 .total_size = 256,
1335 .page_size = 4096,
1336 .tested = TEST_OK_PREW,
1337 .probe = probe_jedec,
1338 .erase = erase_chip_jedec,
1339 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001340 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001341 },
1342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001343 {
1344 .vendor = "SST",
1345 .name = "SST39SF040",
1346 .manufacture_id = SST_ID,
1347 .model_id = SST_39SF040,
1348 .total_size = 512,
1349 .page_size = 4096,
1350 .tested = TEST_OK_PREW,
1351 .probe = probe_jedec,
1352 .erase = erase_chip_jedec,
1353 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001354 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001355 },
1356
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001357 {
1358 .vendor = "SST",
1359 .name = "SST39VF512",
1360 .manufacture_id = SST_ID,
1361 .model_id = SST_39VF512,
1362 .total_size = 64,
1363 .page_size = 4096,
1364 .tested = TEST_UNTESTED,
1365 .probe = probe_jedec,
1366 .erase = erase_chip_jedec,
1367 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001368 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001369 },
1370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001371 {
1372 .vendor = "SST",
1373 .name = "SST39VF010",
1374 .manufacture_id = SST_ID,
1375 .model_id = SST_39VF010,
1376 .total_size = 128,
1377 .page_size = 4096,
1378 .tested = TEST_UNTESTED,
1379 .probe = probe_jedec,
1380 .erase = erase_chip_jedec,
1381 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001382 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001383 },
1384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001385 {
1386 .vendor = "SST",
1387 .name = "SST39VF020",
1388 .manufacture_id = SST_ID,
1389 .model_id = SST_39VF020,
1390 .total_size = 256,
1391 .page_size = 4096,
1392 .tested = TEST_OK_PREW,
1393 .probe = probe_jedec,
1394 .erase = erase_chip_jedec,
1395 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001397 },
1398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001399 {
1400 .vendor = "SST",
1401 .name = "SST39VF040",
1402 .manufacture_id = SST_ID,
1403 .model_id = SST_39VF040,
1404 .total_size = 512,
1405 .page_size = 4096,
1406 .tested = TEST_OK_PROBE,
1407 .probe = probe_jedec,
1408 .erase = erase_chip_jedec,
1409 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001410 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00001411 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001412
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001413 {
1414 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00001415 .name = "SST39VF080",
1416 .manufacture_id = 0xbf,
1417 .model_id = 0xd8,
1418 .total_size = 1024,
1419 .page_size = 4096,
1420 .tested = TEST_UNTESTED,
1421 .probe = probe_jedec,
1422 .erase = erase_chip_jedec,
1423 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001424 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00001425 },
1426
1427 {
1428 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001429 .name = "SST49LF002A/B",
1430 .manufacture_id = SST_ID,
1431 .model_id = SST_49LF002A,
1432 .total_size = 256,
1433 .page_size = 16 * 1024,
1434 .tested = TEST_OK_PREW,
1435 .probe = probe_sst_fwhub,
1436 .erase = erase_sst_fwhub,
1437 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001438 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001439 },
1440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001441 {
1442 .vendor = "SST",
1443 .name = "SST49LF003A/B",
1444 .manufacture_id = SST_ID,
1445 .model_id = SST_49LF003A,
1446 .total_size = 384,
1447 .page_size = 64 * 1024,
1448 .tested = TEST_UNTESTED,
1449 .probe = probe_sst_fwhub,
1450 .erase = erase_sst_fwhub,
1451 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001452 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001453 },
1454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001455 {
1456 .vendor = "SST",
1457 .name = "SST49LF004A/B",
1458 .manufacture_id = SST_ID,
1459 .model_id = SST_49LF004A,
1460 .total_size = 512,
1461 .page_size = 64 * 1024,
1462 .tested = TEST_OK_PREW,
1463 .probe = probe_sst_fwhub,
1464 .erase = erase_sst_fwhub,
1465 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001466 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001467 },
1468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001469 {
1470 .vendor = "SST",
1471 .name = "SST49LF004C",
1472 .manufacture_id = SST_ID,
1473 .model_id = SST_49LF004C,
1474 .total_size = 512,
1475 .page_size = 4 * 1024,
1476 .tested = TEST_UNTESTED,
1477 .probe = probe_49lfxxxc,
1478 .erase = erase_49lfxxxc,
1479 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001480 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001481 },
1482
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001483 {
1484 .vendor = "SST",
1485 .name = "SST49LF008A",
1486 .manufacture_id = SST_ID,
1487 .model_id = SST_49LF008A,
1488 .total_size = 1024,
1489 .page_size = 64 * 1024,
1490 .tested = TEST_OK_PREW,
1491 .probe = probe_sst_fwhub,
1492 .erase = erase_sst_fwhub,
1493 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001494 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001495 },
1496
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001497 {
1498 .vendor = "SST",
1499 .name = "SST49LF008C",
1500 .manufacture_id = SST_ID,
1501 .model_id = SST_49LF008C,
1502 .total_size = 1024,
1503 .page_size = 4 * 1024,
1504 .tested = TEST_UNTESTED,
1505 .probe = probe_49lfxxxc,
1506 .erase = erase_49lfxxxc,
1507 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001508 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001509 },
1510
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001511 {
1512 .vendor = "SST",
1513 .name = "SST49LF016C",
1514 .manufacture_id = SST_ID,
1515 .model_id = SST_49LF016C,
1516 .total_size = 2048,
1517 .page_size = 4 * 1024,
1518 .tested = TEST_OK_PREW,
1519 .probe = probe_49lfxxxc,
1520 .erase = erase_49lfxxxc,
1521 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001522 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001523 },
1524
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001525 {
1526 .vendor = "SST",
1527 .name = "SST49LF020",
1528 .manufacture_id = SST_ID,
1529 .model_id = SST_49LF020,
1530 .total_size = 256,
1531 .page_size = 16 * 1024,
1532 .tested = TEST_OK_PR,
1533 .probe = probe_jedec,
1534 .erase = erase_49lf040,
1535 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001536 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00001537 },
1538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001539 {
1540 .vendor = "SST",
1541 .name = "SST49LF020A",
1542 .manufacture_id = SST_ID,
1543 .model_id = SST_49LF020A,
1544 .total_size = 256,
1545 .page_size = 16 * 1024,
1546 .tested = TEST_UNTESTED,
1547 .probe = probe_jedec,
1548 .erase = erase_49lf040,
1549 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001550 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001551 },
1552
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001553 {
1554 .vendor = "SST",
1555 .name = "SST49LF040",
1556 .manufacture_id = SST_ID,
1557 .model_id = SST_49LF040,
1558 .total_size = 512,
1559 .page_size = 4096,
1560 .tested = TEST_OK_PREW,
1561 .probe = probe_jedec,
1562 .erase = erase_49lf040,
1563 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001564 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001565 },
1566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001567 {
1568 .vendor = "SST",
1569 .name = "SST49LF040B",
1570 .manufacture_id = SST_ID,
1571 .model_id = SST_49LF040B,
1572 .total_size = 512,
1573 .page_size = 64 * 1024,
1574 .tested = TEST_OK_PREW,
1575 .probe = probe_sst_fwhub,
1576 .erase = erase_sst_fwhub,
1577 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001578 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001579 },
1580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001581 {
1582 .vendor = "SST",
1583 .name = "SST49LF080A",
1584 .manufacture_id = SST_ID,
1585 .model_id = SST_49LF080A,
1586 .total_size = 1024,
1587 .page_size = 4096,
1588 .tested = TEST_OK_PREW,
1589 .probe = probe_jedec,
1590 .erase = erase_49lf040,
1591 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001593 },
1594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001595 {
1596 .vendor = "SST",
1597 .name = "SST49LF160C",
1598 .manufacture_id = SST_ID,
1599 .model_id = SST_49LF160C,
1600 .total_size = 2048,
1601 .page_size = 4 * 1024,
1602 .tested = TEST_OK_PREW,
1603 .probe = probe_49lfxxxc,
1604 .erase = erase_49lfxxxc,
1605 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001606 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001607 },
1608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001609 {
1610 .vendor = "ST",
1611 .name = "M25P05-A",
1612 .manufacture_id = ST_ID,
1613 .model_id = ST_M25P05A,
1614 .total_size = 64,
1615 .page_size = 256,
1616 .tested = TEST_UNTESTED,
1617 .probe = probe_spi_rdid,
1618 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001619 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001620 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001621 },
1622
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001623 {
1624 .vendor = "ST",
1625 .name = "M25P10-A",
1626 .manufacture_id = ST_ID,
1627 .model_id = ST_M25P10A,
1628 .total_size = 128,
1629 .page_size = 256,
1630 .tested = TEST_UNTESTED,
1631 .probe = probe_spi_rdid,
1632 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001633 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001634 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001635 },
1636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001637 {
1638 .vendor = "ST",
1639 .name = "M25P20",
1640 .manufacture_id = ST_ID,
1641 .model_id = ST_M25P20,
1642 .total_size = 256,
1643 .page_size = 256,
1644 .tested = TEST_UNTESTED,
1645 .probe = probe_spi_rdid,
1646 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001647 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001648 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001649 },
1650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001651 {
1652 .vendor = "ST",
1653 .name = "M25P40",
1654 .manufacture_id = ST_ID,
1655 .model_id = ST_M25P40,
1656 .total_size = 512,
1657 .page_size = 256,
1658 .tested = TEST_UNTESTED,
1659 .probe = probe_spi_rdid,
1660 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001661 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001662 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001663 },
1664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001665 {
1666 .vendor = "ST",
1667 .name = "M25P40-old",
1668 .manufacture_id = ST_ID,
1669 .model_id = ST_M25P40_RES,
1670 .total_size = 512,
1671 .page_size = 256,
1672 .tested = TEST_UNTESTED,
1673 .probe = probe_spi_res,
1674 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001675 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001676 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001677 },
1678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 {
1680 .vendor = "ST",
1681 .name = "M25P80",
1682 .manufacture_id = ST_ID,
1683 .model_id = ST_M25P80,
1684 .total_size = 1024,
1685 .page_size = 256,
1686 .tested = TEST_UNTESTED,
1687 .probe = probe_spi_rdid,
1688 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001689 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001690 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001691 },
1692
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001693 {
1694 .vendor = "ST",
1695 .name = "M25P16",
1696 .manufacture_id = ST_ID,
1697 .model_id = ST_M25P16,
1698 .total_size = 2048,
1699 .page_size = 256,
1700 .tested = TEST_OK_PREW,
1701 .probe = probe_spi_rdid,
1702 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001703 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001704 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001705 },
1706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001707 {
1708 .vendor = "ST",
1709 .name = "M25P32",
1710 .manufacture_id = ST_ID,
1711 .model_id = ST_M25P32,
1712 .total_size = 4096,
1713 .page_size = 256,
1714 .tested = TEST_OK_PREW,
1715 .probe = probe_spi_rdid,
1716 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001717 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001718 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001719 },
1720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001721 {
1722 .vendor = "ST",
1723 .name = "M25P64",
1724 .manufacture_id = ST_ID,
1725 .model_id = ST_M25P64,
1726 .total_size = 8192,
1727 .page_size = 256,
1728 .tested = TEST_UNTESTED,
1729 .probe = probe_spi_rdid,
1730 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001731 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001732 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001733 },
1734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001735 {
1736 .vendor = "ST",
1737 .name = "M25P128",
1738 .manufacture_id = ST_ID,
1739 .model_id = ST_M25P128,
1740 .total_size = 16384,
1741 .page_size = 256,
1742 .tested = TEST_UNTESTED,
1743 .probe = probe_spi_rdid,
1744 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001745 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001746 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001747 },
1748
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001749 {
1750 .vendor = "ST",
1751 .name = "M29F002B",
1752 .manufacture_id = ST_ID,
1753 .model_id = ST_M29F002B,
1754 .total_size = 256,
1755 .page_size = 64 * 1024,
1756 .tested = TEST_UNTESTED,
1757 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001758 .erase = erase_m29f002,
1759 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001760 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001761 },
1762
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001763 {
1764 .vendor = "ST",
1765 .name = "M29F002T/NT",
1766 .manufacture_id = ST_ID,
1767 .model_id = ST_M29F002T,
1768 .total_size = 256,
1769 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001770 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001771 .probe = probe_jedec,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00001772 .erase = erase_m29f002,
1773 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001774 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001775 },
1776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001777 {
1778 .vendor = "ST",
1779 .name = "M29F040B",
1780 .manufacture_id = ST_ID,
1781 .model_id = ST_M29F040B,
1782 .total_size = 512,
1783 .page_size = 64 * 1024,
1784 .tested = TEST_OK_PREW,
1785 .probe = probe_29f040b,
1786 .erase = erase_29f040b,
1787 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001788 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001789 },
1790
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001791 {
1792 .vendor = "ST",
1793 .name = "M29F400BT",
1794 .manufacture_id = ST_ID,
1795 .model_id = ST_M29F400BT,
1796 .total_size = 512,
1797 .page_size = 64 * 1024,
1798 .tested = TEST_UNTESTED,
1799 .probe = probe_m29f400bt,
1800 .erase = erase_m29f400bt,
1801 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001802 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001803 },
1804
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001805 {
1806 .vendor = "ST",
1807 .name = "M29W010B",
1808 .manufacture_id = ST_ID,
1809 .model_id = ST_M29W010B,
1810 .total_size = 128,
1811 .page_size = 16 * 1024,
1812 .tested = TEST_UNTESTED,
1813 .probe = probe_jedec,
1814 .erase = erase_chip_jedec,
1815 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001816 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001817 },
1818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001819 {
1820 .vendor = "ST",
1821 .name = "M29W040B",
1822 .manufacture_id = ST_ID,
1823 .model_id = ST_M29W040B,
1824 .total_size = 512,
1825 .page_size = 64 * 1024,
1826 .tested = TEST_UNTESTED,
1827 .probe = probe_jedec,
1828 .erase = erase_chip_jedec,
1829 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001830 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001831 },
1832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001833 {
1834 .vendor = "ST",
1835 .name = "M50FLW040A",
1836 .manufacture_id = ST_ID,
1837 .model_id = ST_M50FLW040A,
1838 .total_size = 512,
1839 .page_size = 64 * 1024,
1840 .tested = TEST_UNTESTED,
1841 .probe = probe_stm50flw0x0x,
1842 .erase = erase_stm50flw0x0x,
1843 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001844 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001845 },
1846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001847 {
1848 .vendor = "ST",
1849 .name = "M50FLW040B",
1850 .manufacture_id = ST_ID,
1851 .model_id = ST_M50FLW040B,
1852 .total_size = 512,
1853 .page_size = 64 * 1024,
1854 .tested = TEST_UNTESTED,
1855 .probe = probe_stm50flw0x0x,
1856 .erase = erase_stm50flw0x0x,
1857 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001858 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001859 },
1860
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001861 {
1862 .vendor = "ST",
1863 .name = "M50FLW080A",
1864 .manufacture_id = ST_ID,
1865 .model_id = ST_M50FLW080A,
1866 .total_size = 1024,
1867 .page_size = 64 * 1024,
1868 .tested = TEST_OK_PREW,
1869 .probe = probe_stm50flw0x0x,
1870 .erase = erase_stm50flw0x0x,
1871 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001872 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001873 },
1874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001875 {
1876 .vendor = "ST",
1877 .name = "M50FLW080B",
1878 .manufacture_id = ST_ID,
1879 .model_id = ST_M50FLW080B,
1880 .total_size = 1024,
1881 .page_size = 64 * 1024,
1882 .tested = TEST_UNTESTED,
1883 .probe = probe_stm50flw0x0x,
1884 .erase = erase_stm50flw0x0x,
1885 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001887 },
1888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001889 {
1890 .vendor = "ST",
1891 .name = "M50FW002",
1892 .manufacture_id = ST_ID,
1893 .model_id = ST_M50FW002,
1894 .total_size = 256,
1895 .page_size = 64 * 1024,
1896 .tested = TEST_UNTESTED,
1897 .probe = probe_49lfxxxc,
1898 .erase = NULL,
1899 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001900 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001901 },
1902
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001903 {
1904 .vendor = "ST",
1905 .name = "M50FW016",
1906 .manufacture_id = ST_ID,
1907 .model_id = ST_M50FW016,
1908 .total_size = 2048,
1909 .page_size = 64 * 1024,
1910 .tested = TEST_UNTESTED,
1911 .probe = probe_82802ab,
1912 .erase = erase_82802ab,
1913 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001914 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001915 },
1916
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001917 {
1918 .vendor = "ST",
1919 .name = "M50FW040",
1920 .manufacture_id = ST_ID,
1921 .model_id = ST_M50FW040,
1922 .total_size = 512,
1923 .page_size = 64 * 1024,
1924 .tested = TEST_OK_PREW,
1925 .probe = probe_82802ab,
1926 .erase = erase_82802ab,
1927 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001928 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001929 },
1930
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001931 {
1932 .vendor = "ST",
1933 .name = "M50FW080",
1934 .manufacture_id = ST_ID,
1935 .model_id = ST_M50FW080,
1936 .total_size = 1024,
1937 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00001938 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001939 .probe = probe_82802ab,
1940 .erase = erase_82802ab,
1941 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001942 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001943 },
1944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001945 {
1946 .vendor = "ST",
1947 .name = "M50LPW116",
1948 .manufacture_id = ST_ID,
1949 .model_id = ST_M50LPW116,
1950 .total_size = 2048,
1951 .page_size = 64 * 1024,
1952 .tested = TEST_UNTESTED,
1953 .probe = probe_jedec,
1954 .erase = erase_chip_jedec,
1955 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001956 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001957 },
1958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001959 {
1960 .vendor = "SyncMOS",
1961 .name = "S29C31004T",
1962 .manufacture_id = SYNCMOS_ID,
1963 .model_id = S29C31004T,
1964 .total_size = 512,
1965 .page_size = 128,
1966 .tested = TEST_UNTESTED,
1967 .probe = probe_jedec,
1968 .erase = erase_chip_jedec,
1969 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001970 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001971 },
1972
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001973 {
1974 .vendor = "SyncMOS",
1975 .name = "S29C51001T",
1976 .manufacture_id = SYNCMOS_ID,
1977 .model_id = S29C51001T,
1978 .total_size = 128,
1979 .page_size = 128,
1980 .tested = TEST_UNTESTED,
1981 .probe = probe_jedec,
1982 .erase = erase_chip_jedec,
1983 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001984 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001985 },
1986
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001987 {
1988 .vendor = "SyncMOS",
1989 .name = "S29C51002T",
1990 .manufacture_id = SYNCMOS_ID,
1991 .model_id = S29C51002T,
1992 .total_size = 256,
1993 .page_size = 128,
1994 .tested = TEST_OK_PREW,
1995 .probe = probe_jedec,
1996 .erase = erase_chip_jedec,
1997 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001998 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001999 },
2000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002001 {
2002 .vendor = "SyncMOS",
2003 .name = "S29C51004T",
2004 .manufacture_id = SYNCMOS_ID,
2005 .model_id = S29C51004T,
2006 .total_size = 512,
2007 .page_size = 128,
2008 .tested = TEST_UNTESTED,
2009 .probe = probe_jedec,
2010 .erase = erase_chip_jedec,
2011 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002012 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002013 },
2014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002015 {
2016 .vendor = "Winbond",
2017 .name = "W25x10",
2018 .manufacture_id = WINBOND_NEX_ID,
2019 .model_id = W_25X10,
2020 .total_size = 128,
2021 .page_size = 256,
2022 .tested = TEST_UNTESTED,
2023 .probe = probe_spi_rdid,
2024 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002025 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002026 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002027 },
2028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002029 {
2030 .vendor = "Winbond",
2031 .name = "W25x20",
2032 .manufacture_id = WINBOND_NEX_ID,
2033 .model_id = W_25X20,
2034 .total_size = 256,
2035 .page_size = 256,
2036 .tested = TEST_UNTESTED,
2037 .probe = probe_spi_rdid,
2038 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002039 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002040 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002041 },
2042
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002043 {
2044 .vendor = "Winbond",
2045 .name = "W25x40",
2046 .manufacture_id = WINBOND_NEX_ID,
2047 .model_id = W_25X40,
2048 .total_size = 512,
2049 .page_size = 256,
2050 .tested = TEST_OK_PREW,
2051 .probe = probe_spi_rdid,
2052 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002053 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002054 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002055 },
2056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002057 {
2058 .vendor = "Winbond",
2059 .name = "W25x80",
2060 .manufacture_id = WINBOND_NEX_ID,
2061 .model_id = W_25X80,
2062 .total_size = 1024,
2063 .page_size = 256,
2064 .tested = TEST_OK_PREW,
2065 .probe = probe_spi_rdid,
2066 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002067 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002068 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002069 },
2070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002071 {
2072 .vendor = "Winbond",
2073 .name = "W29C011",
2074 .manufacture_id = WINBOND_ID,
2075 .model_id = W_29C011,
2076 .total_size = 128,
2077 .page_size = 128,
2078 .tested = TEST_OK_PREW,
2079 .probe = probe_jedec,
2080 .erase = erase_chip_jedec,
2081 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002082 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002083 },
2084
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002085 {
2086 .vendor = "Winbond",
2087 .name = "W29C020C",
2088 .manufacture_id = WINBOND_ID,
2089 .model_id = W_29C020C,
2090 .total_size = 256,
2091 .page_size = 128,
2092 .tested = TEST_OK_PREW,
2093 .probe = probe_jedec,
2094 .erase = erase_chip_jedec,
2095 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002096 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002097 },
2098
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002099 {
2100 .vendor = "Winbond",
2101 .name = "W29C040P",
2102 .manufacture_id = WINBOND_ID,
2103 .model_id = W_29C040P,
2104 .total_size = 512,
2105 .page_size = 256,
2106 .tested = TEST_UNTESTED,
2107 .probe = probe_jedec,
2108 .erase = erase_chip_jedec,
2109 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002111 },
2112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002113 {
2114 .vendor = "Winbond",
2115 .name = "W29EE011",
2116 .manufacture_id = WINBOND_ID,
2117 .model_id = W_29C011,
2118 .total_size = 128,
2119 .page_size = 128,
2120 .tested = TEST_OK_PREW,
2121 .probe = probe_w29ee011,
2122 .erase = erase_chip_jedec,
2123 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002125 },
2126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002127 {
2128 .vendor = "Winbond",
2129 .name = "W39V040A",
2130 .manufacture_id = WINBOND_ID,
2131 .model_id = W_39V040A,
2132 .total_size = 512,
2133 .page_size = 64*1024,
2134 .tested = TEST_UNTESTED,
2135 .probe = probe_jedec,
2136 .erase = erase_chip_jedec,
2137 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002138 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002139 },
2140
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002141 {
2142 .vendor = "Winbond",
2143 .name = "W39V040B",
2144 .manufacture_id = WINBOND_ID,
2145 .model_id = W_39V040B,
2146 .total_size = 512,
2147 .page_size = 64*1024,
2148 .tested = TEST_OK_PREW,
2149 .probe = probe_jedec,
2150 .erase = erase_chip_jedec,
2151 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "Winbond",
2157 .name = "W39V040C",
2158 .manufacture_id = WINBOND_ID,
2159 .model_id = 0x50,
2160 .total_size = 512,
2161 .page_size = 64*1024,
2162 .tested = TEST_OK_PREW,
2163 .probe = probe_w39v040c,
2164 .erase = erase_w39v040c,
2165 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002166 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002167 },
2168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002169 {
2170 .vendor = "Winbond",
2171 .name = "W39V040FA",
2172 .manufacture_id = WINBOND_ID,
2173 .model_id = W_39V040FA,
2174 .total_size = 512,
2175 .page_size = 64*1024,
2176 .tested = TEST_OK_PREW,
2177 .probe = probe_jedec,
2178 .erase = erase_chip_jedec,
2179 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002181 },
2182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002183 {
2184 .vendor = "Winbond",
2185 .name = "W39V080A",
2186 .manufacture_id = WINBOND_ID,
2187 .model_id = W_39V080A,
2188 .total_size = 1024,
2189 .page_size = 64*1024,
2190 .tested = TEST_OK_PREW,
2191 .probe = probe_jedec,
2192 .erase = erase_chip_jedec,
2193 .write = write_39sf020,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002194 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002195 },
2196
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002197 {
2198 .vendor = "Winbond",
2199 .name = "W49F002U",
2200 .manufacture_id = WINBOND_ID,
2201 .model_id = W_49F002U,
2202 .total_size = 256,
2203 .page_size = 128,
2204 .tested = TEST_OK_PREW,
2205 .probe = probe_jedec,
2206 .erase = erase_chip_jedec,
2207 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002208 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002209 },
2210
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002211 {
2212 .vendor = "Winbond",
2213 .name = "W49V002A",
2214 .manufacture_id = WINBOND_ID,
2215 .model_id = W_49V002A,
2216 .total_size = 256,
2217 .page_size = 128,
2218 .tested = TEST_OK_PREW,
2219 .probe = probe_jedec,
2220 .erase = erase_chip_jedec,
2221 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002222 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002223 },
2224
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002225 {
2226 .vendor = "Winbond",
2227 .name = "W49V002FA",
2228 .manufacture_id = WINBOND_ID,
2229 .model_id = W_49V002FA,
2230 .total_size = 256,
2231 .page_size = 128,
2232 .tested = TEST_UNTESTED,
2233 .probe = probe_jedec,
2234 .erase = erase_chip_jedec,
2235 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002236 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002237 },
2238
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002239 {
2240 .vendor = "Winbond",
2241 .name = "W39V080FA",
2242 .manufacture_id = WINBOND_ID,
2243 .model_id = W_39V080FA,
2244 .total_size = 1024,
2245 .page_size = 64*1024,
2246 .tested = TEST_OK_PREW,
2247 .probe = probe_winbond_fwhub,
2248 .erase = erase_winbond_fwhub,
2249 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002250 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002251 },
2252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 {
2254 .vendor = "Winbond",
2255 .name = "W39V080FA (dual mode)",
2256 .manufacture_id = WINBOND_ID,
2257 .model_id = W_39V080FA_DM,
2258 .total_size = 512,
2259 .page_size = 64*1024,
2260 .tested = TEST_UNTESTED,
2261 .probe = probe_winbond_fwhub,
2262 .erase = erase_winbond_fwhub,
2263 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002264 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002265 },
2266
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002267 {
2268 .vendor = "Atmel",
2269 .name = "unknown Atmel SPI chip",
2270 .manufacture_id = ATMEL_ID,
2271 .model_id = GENERIC_DEVICE_ID,
2272 .total_size = 0,
2273 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002274 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002275 .probe = probe_spi_rdid,
2276 .erase = NULL,
2277 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002278 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002279 },
2280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002281 {
2282 .vendor = "EON",
2283 .name = "unknown EON SPI chip",
2284 .manufacture_id = EON_ID_NOPREFIX,
2285 .model_id = GENERIC_DEVICE_ID,
2286 .total_size = 0,
2287 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002288 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .probe = probe_spi_rdid,
2290 .erase = NULL,
2291 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002292 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002293 },
2294
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002295 {
2296 .vendor = "Macronix",
2297 .name = "unknown Macronix SPI chip",
2298 .manufacture_id = MX_ID,
2299 .model_id = GENERIC_DEVICE_ID,
2300 .total_size = 0,
2301 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002302 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002303 .probe = probe_spi_rdid,
2304 .erase = NULL,
2305 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002306 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002307 },
2308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002309 {
2310 .vendor = "PMC",
2311 .name = "unknown PMC SPI chip",
2312 .manufacture_id = PMC_ID,
2313 .model_id = GENERIC_DEVICE_ID,
2314 .total_size = 0,
2315 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002316 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002317 .probe = probe_spi_rdid,
2318 .erase = NULL,
2319 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002320 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002321 },
2322
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002323 {
2324 .vendor = "SST",
2325 .name = "unknown SST SPI chip",
2326 .manufacture_id = SST_ID,
2327 .model_id = GENERIC_DEVICE_ID,
2328 .total_size = 0,
2329 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002330 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002331 .probe = probe_spi_rdid,
2332 .erase = NULL,
2333 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002334 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002335 },
2336
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002337 {
2338 .vendor = "ST",
2339 .name = "unknown ST SPI chip",
2340 .manufacture_id = ST_ID,
2341 .model_id = GENERIC_DEVICE_ID,
2342 .total_size = 0,
2343 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00002344 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002345 .probe = probe_spi_rdid,
2346 .erase = NULL,
2347 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002348 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00002349 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00002350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002351 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00002352};