blob: 59f913993486e8e3a8a3c1531e5df2c0fdccddc5 [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"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000025#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000026
Uwe Hermannfc425e82008-03-16 02:06:25 +000027/**
Uwe Hermanna9720402009-05-21 15:55:46 +000028 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000029 *
30 * Please keep the list sorted by vendor name and chip name, so that
31 * the output of 'flashrom -L' is alphabetically sorted.
32 */
Ollie Lho184a4042005-11-26 21:55:36 +000033struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000034
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000035 /*
36 * .vendor = Vendor name
37 * .name = Chip name
38 * .bustype = Supported flash bus types (Parallel, LPC...)
39 * .manufacture_id = Manufacturer chip ID
40 * .model_id = Model chip ID
41 * .total_size = Total size in (binary) kbytes
42 * .page_size = Page or eraseblock(?) size in bytes
43 * .tested = Test status
44 * .probe = Probe function
45 * .probe_timing = Probe function delay
46 * .erase = Chip erase function
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000047 * .block_erasers[] = Array of erase layouts and erase functions
48 * {
49 * .eraseblocks[] = Array of { blocksize, blockcount }
50 * .block_erase = Block erase function
51 * }
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000052 * .write = Chip write function
53 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000054 */
55
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000056 {
57 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000058 .name = "Am29F010A/B",
59 .bustype = CHIP_BUSTYPE_PARALLEL,
60 .manufacture_id = AMD_ID,
61 .model_id = AM_29F010B, /* Same as Am29F010A */
62 .total_size = 128,
63 .page_size = 16 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +000064 .tested = TEST_OK_PRW,
Uwe Hermanna8b37272009-06-19 15:54:39 +000065 .probe = probe_29f040b,
Udu Ogahc04ee222009-09-05 01:31:32 +000066 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000067 .erase = NULL,
68 .block_erasers =
69 {
70 {
71 .eraseblocks = { {16 * 1024, 8} },
72 .block_erase = erase_sector_29f040b,
73 }, {
74 .eraseblocks = { {128 * 1024, 1} },
75 .block_erase = erase_chip_29f040b,
76 },
77 },
Uwe Hermanna8b37272009-06-19 15:54:39 +000078 .write = write_pm29f002,
79 .read = read_memmapped,
80 },
81
82 {
83 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000084 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000085 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000086 .manufacture_id = AMD_ID,
87 .model_id = AM_29F002BB,
88 .total_size = 256,
89 .page_size = 256,
90 .tested = TEST_UNTESTED,
91 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000092 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000093 .erase = NULL,
94 .block_erasers =
95 {
96 {
97 .eraseblocks = {
98 {16 * 1024, 1},
99 {8 * 1024, 2},
100 {32 * 1024, 1},
101 {64 * 1024, 3},
102 },
103 .block_erase = erase_sector_jedec,
104 }, {
105 .eraseblocks = { {256 * 1024, 1} },
106 .block_erase = erase_chip_block_jedec,
107 },
108 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000109 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000111 },
112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000113 {
114 .vendor = "AMD",
115 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000116 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000117 .manufacture_id = AMD_ID,
118 .model_id = AM_29F002BT,
119 .total_size = 256,
120 .page_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +0000121 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000122 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000123 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000124 .erase = NULL,
125 .block_erasers =
126 {
127 {
128 .eraseblocks = {
129 {64 * 1024, 3},
130 {32 * 1024, 1},
131 {8 * 1024, 2},
132 {16 * 1024, 1},
133 },
134 .block_erase = erase_sector_jedec,
135 }, {
136 .eraseblocks = { {256 * 1024, 1} },
137 .block_erase = erase_chip_block_jedec,
138 },
139 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000140 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000141 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000142 },
143
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000144 {
145 .vendor = "AMD",
146 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000147 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000148 .manufacture_id = AMD_ID,
149 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000150 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .page_size = 64 * 1024,
152 .tested = TEST_UNTESTED,
153 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000154 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000155 .erase = NULL,
156 .block_erasers =
157 {
158 {
159 .eraseblocks = { {64 * 1024, 32} },
160 .block_erase = erase_sector_29f040b,
161 }, {
162 .eraseblocks = { {2048 * 1024, 1} },
163 .block_erase = erase_chip_29f040b,
164 },
165 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000166 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000167 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000168 },
169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000170 {
171 .vendor = "AMD",
172 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000173 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000174 .manufacture_id = AMD_ID,
175 .model_id = AM_29F040B,
176 .total_size = 512,
177 .page_size = 64 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +0000178 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000179 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000180 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000181 .erase = NULL,
182 .block_erasers =
183 {
184 {
185 .eraseblocks = { {64 * 1024, 8} },
186 .block_erase = erase_sector_29f040b,
187 }, {
188 .eraseblocks = { {512 * 1024, 1} },
189 .block_erase = erase_chip_29f040b,
190 },
191 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000192 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000193 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000194 },
195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000196 {
197 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000198 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000199 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000200 .manufacture_id = AMD_ID,
201 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000202 .total_size = 1024,
203 .page_size = 64 * 1024,
204 .tested = TEST_UNTESTED,
205 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000206 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000207 .erase = NULL,
208 .block_erasers =
209 {
210 {
211 .eraseblocks = { {64 * 1024, 16} },
212 .block_erase = erase_sector_29f040b,
213 }, {
214 .eraseblocks = { {1024 * 1024, 1} },
215 .block_erase = erase_chip_29f040b,
216 },
217 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000218 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000219 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000220 },
221
222 {
223 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000224 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000226 .manufacture_id = AMD_ID,
227 .model_id = AM_29LV040B,
228 .total_size = 512,
229 .page_size = 64 * 1024,
230 .tested = TEST_UNTESTED,
231 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000232 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000233 .erase = NULL,
234 .block_erasers =
235 {
236 {
237 .eraseblocks = { {64 * 1024, 8} },
238 .block_erase = erase_sector_29f040b,
239 }, {
240 .eraseblocks = { {512 * 1024, 1} },
241 .block_erase = erase_chip_29f040b,
242 },
243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000244 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000246 },
247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000248 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000249 .vendor = "AMD",
250 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000251 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000252 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000253 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000254 .total_size = 1024,
255 .page_size = 64 * 1024,
256 .tested = TEST_UNTESTED,
257 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000258 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000259 .erase = NULL,
260 .block_erasers =
261 {
262 {
263 .eraseblocks = { {64 * 1024, 16} },
264 .block_erase = erase_sector_29f040b,
265 }, {
266 .eraseblocks = { {1024 * 1024, 1} },
267 .block_erase = erase_chip_29f040b,
268 },
269 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000270 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000271 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000272 },
273
274 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000275 .vendor = "ASD",
276 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000277 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .manufacture_id = ASD_ID,
279 .model_id = ASD_AE49F2008,
280 .total_size = 256,
281 .page_size = 128,
282 .tested = TEST_UNTESTED,
283 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000284 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000285 .erase = erase_chip_jedec,
286 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000288 },
289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000290 {
291 .vendor = "Atmel",
292 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000293 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000294 .manufacture_id = ATMEL_ID,
295 .model_id = AT_25DF021,
296 .total_size = 256,
297 .page_size = 256,
298 .tested = TEST_UNTESTED,
299 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000300 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000301 .erase = NULL,
302 .block_erasers =
303 {
304 {
305 .eraseblocks = { {4 * 1024, 64} },
306 .block_erase = spi_block_erase_20,
307 }, {
308 .eraseblocks = { {32 * 1024, 8} },
309 .block_erase = spi_block_erase_52,
310 }, {
311 .eraseblocks = { {64 * 1024, 4} },
312 .block_erase = spi_block_erase_d8,
313 }, {
314 .eraseblocks = { {256 * 1024, 1} },
315 .block_erase = spi_block_erase_60,
316 }, {
317 .eraseblocks = { {256 * 1024, 1} },
318 .block_erase = spi_block_erase_c7,
319 }
320 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000321 .write = spi_chip_write_256,
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 = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000329 .manufacture_id = ATMEL_ID,
330 .model_id = AT_25DF041A,
331 .total_size = 512,
332 .page_size = 256,
333 .tested = TEST_UNTESTED,
334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000335 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000336 .erase = NULL,
337 .block_erasers =
338 {
339 {
340 .eraseblocks = { {4 * 1024, 128} },
341 .block_erase = spi_block_erase_20,
342 }, {
343 .eraseblocks = { {32 * 1024, 16} },
344 .block_erase = spi_block_erase_52,
345 }, {
346 .eraseblocks = { {64 * 1024, 8} },
347 .block_erase = spi_block_erase_d8,
348 }, {
349 .eraseblocks = { {512 * 1024, 1} },
350 .block_erase = spi_block_erase_60,
351 }, {
352 .eraseblocks = { {512 * 1024, 1} },
353 .block_erase = spi_block_erase_c7,
354 }
355 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000356 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000357 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000358 },
359
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000360 {
361 .vendor = "Atmel",
362 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000363 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000364 .manufacture_id = ATMEL_ID,
365 .model_id = AT_25DF081,
366 .total_size = 1024,
367 .page_size = 256,
368 .tested = TEST_UNTESTED,
369 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000370 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000371 .erase = NULL,
372 .block_erasers =
373 {
374 {
375 .eraseblocks = { {4 * 1024, 256} },
376 .block_erase = spi_block_erase_20,
377 }, {
378 .eraseblocks = { {32 * 1024, 32} },
379 .block_erase = spi_block_erase_52,
380 }, {
381 .eraseblocks = { {64 * 1024, 16} },
382 .block_erase = spi_block_erase_d8,
383 }, {
384 .eraseblocks = { {1024 * 1024, 1} },
385 .block_erase = spi_block_erase_60,
386 }, {
387 .eraseblocks = { {1024 * 1024, 1} },
388 .block_erase = spi_block_erase_c7,
389 }
390 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000391 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000392 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000393 },
394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000395 {
396 .vendor = "Atmel",
397 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000398 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000399 .manufacture_id = ATMEL_ID,
400 .model_id = AT_25DF161,
401 .total_size = 2048,
402 .page_size = 256,
403 .tested = TEST_UNTESTED,
404 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000405 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000406 .erase = NULL,
407 .block_erasers =
408 {
409 {
410 .eraseblocks = { {4 * 1024, 512} },
411 .block_erase = spi_block_erase_20,
412 }, {
413 .eraseblocks = { {32 * 1024, 64} },
414 .block_erase = spi_block_erase_52,
415 }, {
416 .eraseblocks = { {64 * 1024, 32} },
417 .block_erase = spi_block_erase_d8,
418 }, {
419 .eraseblocks = { {2 * 1024 * 1024, 1} },
420 .block_erase = spi_block_erase_60,
421 }, {
422 .eraseblocks = { {2 * 1024 * 1024, 1} },
423 .block_erase = spi_block_erase_c7,
424 }
425 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000426 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000427 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000428 },
429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000430 {
431 .vendor = "Atmel",
432 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000433 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000434 .manufacture_id = ATMEL_ID,
435 .model_id = AT_25DF321,
436 .total_size = 4096,
437 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000438 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000439 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000440 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000441 .erase = NULL,
442 .block_erasers =
443 {
444 {
445 .eraseblocks = { {4 * 1024, 1024} },
446 .block_erase = spi_block_erase_20,
447 }, {
448 .eraseblocks = { {32 * 1024, 128} },
449 .block_erase = spi_block_erase_52,
450 }, {
451 .eraseblocks = { {64 * 1024, 64} },
452 .block_erase = spi_block_erase_d8,
453 }, {
454 .eraseblocks = { {4 * 1024 * 1024, 1} },
455 .block_erase = spi_block_erase_60,
456 }, {
457 .eraseblocks = { {4 * 1024 * 1024, 1} },
458 .block_erase = spi_block_erase_c7,
459 }
460 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000461 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000462 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000463 },
464
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000465 {
466 .vendor = "Atmel",
467 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000468 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000469 .manufacture_id = ATMEL_ID,
470 .model_id = AT_25DF321A,
471 .total_size = 4096,
472 .page_size = 256,
473 .tested = TEST_UNTESTED,
474 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000475 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000476 .erase = NULL,
477 .block_erasers =
478 {
479 {
480 .eraseblocks = { {4 * 1024, 1024} },
481 .block_erase = spi_block_erase_20,
482 }, {
483 .eraseblocks = { {32 * 1024, 128} },
484 .block_erase = spi_block_erase_52,
485 }, {
486 .eraseblocks = { {64 * 1024, 64} },
487 .block_erase = spi_block_erase_d8,
488 }, {
489 .eraseblocks = { {4 * 1024 * 1024, 1} },
490 .block_erase = spi_block_erase_60,
491 }, {
492 .eraseblocks = { {4 * 1024 * 1024, 1} },
493 .block_erase = spi_block_erase_c7,
494 }
495 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000496 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000497 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000498 },
499
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000500 {
501 .vendor = "Atmel",
502 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000503 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000504 .manufacture_id = ATMEL_ID,
505 .model_id = AT_25DF641,
506 .total_size = 8192,
507 .page_size = 256,
508 .tested = TEST_UNTESTED,
509 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000510 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000511 .erase = NULL,
512 .block_erasers =
513 {
514 {
515 .eraseblocks = { {4 * 1024, 2048} },
516 .block_erase = spi_block_erase_20,
517 }, {
518 .eraseblocks = { {32 * 1024, 256} },
519 .block_erase = spi_block_erase_52,
520 }, {
521 .eraseblocks = { {64 * 1024, 128} },
522 .block_erase = spi_block_erase_d8,
523 }, {
524 .eraseblocks = { {8 * 1024 * 1024, 1} },
525 .block_erase = spi_block_erase_60,
526 }, {
527 .eraseblocks = { {8 * 1024 * 1024, 1} },
528 .block_erase = spi_block_erase_c7,
529 }
530 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000531 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000532 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000533 },
534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000535 {
536 .vendor = "Atmel",
537 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000538 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000539 .manufacture_id = ATMEL_ID,
540 .model_id = AT_25F512B,
541 .total_size = 64,
542 .page_size = 256,
543 .tested = TEST_UNTESTED,
544 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000545 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000546 .erase = NULL,
547 .block_erasers =
548 {
549 {
550 .eraseblocks = { {4 * 1024, 16} },
551 .block_erase = spi_block_erase_20,
552 }, {
553 .eraseblocks = { {32 * 1024, 2} },
554 .block_erase = spi_block_erase_52,
555 }, {
556 .eraseblocks = { {32 * 1024, 2} },
557 .block_erase = spi_block_erase_d8,
558 }, {
559 .eraseblocks = { {64 * 1024, 1} },
560 .block_erase = spi_block_erase_60,
561 }, {
562 .eraseblocks = { {64 * 1024, 1} },
563 .block_erase = spi_block_erase_c7,
564 }
565 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000566 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000567 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000568 },
569
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000570 {
571 .vendor = "Atmel",
572 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000573 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000574 .manufacture_id = ATMEL_ID,
575 .model_id = AT_25FS010,
576 .total_size = 128,
577 .page_size = 256,
578 .tested = TEST_UNTESTED,
579 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000580 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000581 .erase = NULL,
582 .block_erasers =
583 {
584 {
585 .eraseblocks = { {4 * 1024, 32} },
586 .block_erase = spi_block_erase_20,
587 }, {
588 .eraseblocks = { {32 * 1024, 4} },
589 .block_erase = spi_block_erase_52,
590 }, {
591 .eraseblocks = { {32 * 1024, 4} },
592 .block_erase = spi_block_erase_d8,
593 }, {
594 .eraseblocks = { {128 * 1024, 1} },
595 .block_erase = spi_block_erase_60,
596 }, {
597 .eraseblocks = { {128 * 1024, 1} },
598 .block_erase = spi_block_erase_c7,
599 }
600 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000601 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000602 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000603 },
604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000605 {
606 .vendor = "Atmel",
607 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000608 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000609 .manufacture_id = ATMEL_ID,
610 .model_id = AT_25FS040,
611 .total_size = 512,
612 .page_size = 256,
613 .tested = TEST_UNTESTED,
614 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000615 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000616 .erase = NULL,
617 .block_erasers =
618 {
619 {
620 .eraseblocks = { {4 * 1024, 128} },
621 .block_erase = spi_block_erase_20,
622 }, {
623 .eraseblocks = { {64 * 1024, 8} },
624 .block_erase = spi_block_erase_52,
625 }, {
626 .eraseblocks = { {64 * 1024, 8} },
627 .block_erase = spi_block_erase_d8,
628 }, {
629 .eraseblocks = { {512 * 1024, 1} },
630 .block_erase = spi_block_erase_60,
631 }, {
632 .eraseblocks = { {512 * 1024, 1} },
633 .block_erase = spi_block_erase_c7,
634 }
635 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000636 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000637 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000638 },
639
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000640 {
641 .vendor = "Atmel",
642 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000643 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000644 .manufacture_id = ATMEL_ID,
645 .model_id = AT_26DF041,
646 .total_size = 512,
647 .page_size = 256,
648 .tested = TEST_UNTESTED,
649 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000650 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000651 .erase = NULL,
Sean Nelson89187292009-12-23 12:02:55 +0000652 .block_erasers =
653 {
654 {
655 .eraseblocks = { {4 * 1024, 128} },
656 .block_erase = spi_block_erase_20,
657 }
658 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000659 .write = NULL /* Incompatible Page write */,
660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000661 },
662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000663 {
664 .vendor = "Atmel",
665 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000667 .manufacture_id = ATMEL_ID,
668 .model_id = AT_26DF081A,
669 .total_size = 1024,
670 .page_size = 256,
671 .tested = TEST_UNTESTED,
672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000673 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000674 .erase = NULL,
675 .block_erasers =
676 {
677 {
678 .eraseblocks = { {4 * 1024, 256} },
679 .block_erase = spi_block_erase_20,
680 }, {
681 .eraseblocks = { {32 * 1024, 32} },
682 .block_erase = spi_block_erase_52,
683 }, {
684 .eraseblocks = { {64 * 1024, 16} },
685 .block_erase = spi_block_erase_d8,
686 }, {
687 .eraseblocks = { {1024 * 1024, 1} },
688 .block_erase = spi_block_erase_60,
689 }, {
690 .eraseblocks = { {1024 * 1024, 1} },
691 .block_erase = spi_block_erase_c7,
692 }
693 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000694 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000695 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000696 },
697
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000698 {
699 .vendor = "Atmel",
700 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000701 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000702 .manufacture_id = ATMEL_ID,
703 .model_id = AT_26DF161,
704 .total_size = 2048,
705 .page_size = 256,
706 .tested = TEST_UNTESTED,
707 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000708 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000709 .erase = NULL,
710 .block_erasers =
711 {
712 {
713 .eraseblocks = { {4 * 1024, 512} },
714 .block_erase = spi_block_erase_20,
715 }, {
716 .eraseblocks = { {32 * 1024, 64} },
717 .block_erase = spi_block_erase_52,
718 }, {
719 .eraseblocks = { {64 * 1024, 32} },
720 .block_erase = spi_block_erase_d8,
721 }, {
722 .eraseblocks = { {2 * 1024 * 1024, 1} },
723 .block_erase = spi_block_erase_60,
724 }, {
725 .eraseblocks = { {2 * 1024 * 1024, 1} },
726 .block_erase = spi_block_erase_c7,
727 }
728 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000729 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000730 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000731 },
732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000733 {
734 .vendor = "Atmel",
735 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000736 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000737 .manufacture_id = ATMEL_ID,
738 .model_id = AT_26DF161A,
739 .total_size = 2048,
740 .page_size = 256,
741 .tested = TEST_UNTESTED,
742 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000743 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000744 .erase = NULL,
745 .block_erasers =
746 {
747 {
748 .eraseblocks = { {4 * 1024, 512} },
749 .block_erase = spi_block_erase_20,
750 }, {
751 .eraseblocks = { {32 * 1024, 64} },
752 .block_erase = spi_block_erase_52,
753 }, {
754 .eraseblocks = { {64 * 1024, 32} },
755 .block_erase = spi_block_erase_d8,
756 }, {
757 .eraseblocks = { {2 * 1024 * 1024, 1} },
758 .block_erase = spi_block_erase_60,
759 }, {
760 .eraseblocks = { {2 * 1024 * 1024, 1} },
761 .block_erase = spi_block_erase_c7,
762 }
763 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000764 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000765 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000766 },
767
768 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 /*{
770 .vendor = "Atmel",
771 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000772 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 .manufacture_id = ATMEL_ID,
774 .model_id = AT_26DF321,
775 .total_size = 4096,
776 .page_size = 256,
777 .tested = TEST_UNTESTED,
778 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000779 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000780 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
783 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 {
786 .vendor = "Atmel",
787 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000788 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000789 .manufacture_id = ATMEL_ID,
790 .model_id = AT_26F004,
791 .total_size = 512,
792 .page_size = 256,
793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000796 .erase = NULL,
797 .block_erasers =
798 {
799 {
800 .eraseblocks = { {4 * 1024, 128} },
801 .block_erase = spi_block_erase_20,
802 }, {
803 .eraseblocks = { {32 * 1024, 16} },
804 .block_erase = spi_block_erase_52,
805 }, {
806 .eraseblocks = { {64 * 1024, 8} },
807 .block_erase = spi_block_erase_d8,
808 }, {
809 .eraseblocks = { {512 * 1024, 1} },
810 .block_erase = spi_block_erase_60,
811 }, {
812 .eraseblocks = { {512 * 1024, 1} },
813 .block_erase = spi_block_erase_c7,
814 }
815 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000816 .write = NULL /* Incompatible Page write */,
817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000818 },
819
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000820 {
821 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000822 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000823 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .manufacture_id = ATMEL_ID,
825 .model_id = AT_29C512,
826 .total_size = 64,
827 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000828 .tested = TEST_OK_PRW,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000829 .probe = probe_jedec,
830 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000831 .erase = NULL,
832 .block_erasers =
833 {
834 {
835 .eraseblocks = { {64 * 1024, 1} },
836 .block_erase = erase_chip_block_jedec,
837 }
838 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000839 .write = write_jedec,
840 .read = read_memmapped,
841
842 },
843
844 {
845 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000846 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000847 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .manufacture_id = ATMEL_ID,
849 .model_id = AT_29C010A,
850 .total_size = 128,
851 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000852 .tested = TEST_OK_PR,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000853 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000854 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000855 .erase = NULL,
856 .block_erasers =
857 {
858 {
859 .eraseblocks = { {128 * 1024, 1} },
860 .block_erase = erase_chip_block_jedec,
861 }
862 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000863 .write = write_jedec, /* FIXME */
864 .read = read_memmapped,
865 },
866
867 {
868 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000869 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000870 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .manufacture_id = ATMEL_ID,
872 .model_id = AT_29C020,
873 .total_size = 256,
874 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000875 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000876 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000877 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000878 .erase = NULL,
879 .block_erasers =
880 {
881 {
882 .eraseblocks = { {256 * 1024, 1} },
883 .block_erase = erase_chip_block_jedec,
884 }
885 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000886 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000887 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000888 },
889
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000890 {
891 .vendor = "Atmel",
892 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000893 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000894 .manufacture_id = ATMEL_ID,
895 .model_id = AT_29C040A,
896 .total_size = 512,
897 .page_size = 256,
898 .tested = TEST_UNTESTED,
899 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000900 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000901 .erase = NULL,
902 .block_erasers =
903 {
904 {
905 .eraseblocks = { {512 * 1024, 1} },
906 .block_erase = erase_chip_block_jedec,
907 }
908 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000909 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000910 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000911 },
912
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000913 {
914 .vendor = "Atmel",
915 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000916 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000917 .manufacture_id = ATMEL_ID,
918 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000919 .total_size = 16896 /* No power of two sizes */,
920 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000921 .tested = TEST_BAD_READ,
922 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000923 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000924 .erase = NULL,
925 .write = NULL /* Incompatible Page write */,
926 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000927 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000933 .manufacture_id = ATMEL_ID,
934 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 128 /* Size can only be determined from status register */,
936 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 .tested = TEST_BAD_READ,
938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000939 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000940 .erase = NULL,
941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .erase = NULL,
957 .write = NULL,
958 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000959 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000961 {
962 .vendor = "Atmel",
963 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000964 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 .manufacture_id = ATMEL_ID,
966 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000967 .total_size = 512 /* Size can only be determined from status register */,
968 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000969 .tested = TEST_BAD_READ,
970 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000971 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000972 .erase = NULL,
973 .write = NULL,
974 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000975 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000977 {
978 .vendor = "Atmel",
979 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000981 .manufacture_id = ATMEL_ID,
982 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000983 .total_size = 1024 /* Size can only be determined from status register */,
984 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .tested = TEST_BAD_READ,
986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000987 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000988 .erase = NULL,
989 .write = NULL,
990 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000991 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 {
994 .vendor = "Atmel",
995 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000996 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000997 .manufacture_id = ATMEL_ID,
998 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000999 .total_size = 2048 /* Size can only be determined from status register */,
1000 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .tested = TEST_BAD_READ,
1002 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001003 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 .erase = NULL,
1005 .write = NULL,
1006 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001007 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 {
1010 .vendor = "Atmel",
1011 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .manufacture_id = ATMEL_ID,
1014 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001015 .total_size = 4224 /* No power of two sizes */,
1016 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 .tested = TEST_BAD_READ,
1018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001019 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 .erase = NULL,
1021 .write = NULL,
1022 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001023 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001025 {
1026 .vendor = "Atmel",
1027 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001028 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001029 .manufacture_id = ATMEL_ID,
1030 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001031 .total_size = 4096 /* Size can only be determined from status register */,
1032 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001033 .tested = TEST_BAD_READ,
1034 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001035 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001036 .erase = NULL,
1037 .write = NULL,
1038 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001039 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001041 {
1042 .vendor = "Atmel",
1043 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001044 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001045 .manufacture_id = ATMEL_ID,
1046 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001047 .total_size = 8192 /* Size can only be determined from status register */,
1048 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 .tested = TEST_BAD_READ,
1050 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001051 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001052 .erase = NULL,
1053 .write = NULL,
1054 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001055 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001057 {
1058 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001059 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001060 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001061 .manufacture_id = ATMEL_ID,
1062 .model_id = AT_49BV512,
1063 .total_size = 64,
1064 .page_size = 64,
Sean Nelson89187292009-12-23 12:02:55 +00001065 .tested = TEST_OK_PRW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001066 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001067 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001068 .erase = NULL,
1069 .block_erasers =
1070 {
1071 {
1072 .eraseblocks = { {64 * 1024, 1} },
1073 .block_erase = erase_chip_block_jedec,
1074 }
1075 },
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001076 .write = write_49f002,
1077 .read = read_memmapped,
1078 },
1079
1080 {
1081 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001083 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001084 .manufacture_id = ATMEL_ID,
1085 .model_id = AT_49F002N,
1086 .total_size = 256,
1087 .page_size = 256,
1088 .tested = TEST_UNTESTED,
1089 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001090 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001091 .erase = NULL,
1092 .block_erasers =
1093 {
1094 {
1095 .eraseblocks = {
1096 {16 * 1024, 1},
1097 {8 * 1024, 2},
1098 {96 * 1024, 1},
1099 {128 * 1024, 1},
1100 },
1101 .block_erase = erase_sector_jedec,
1102 }, {
1103 .eraseblocks = { {256 * 1024, 1} },
1104 .block_erase = erase_chip_block_jedec,
1105 }
1106 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001107 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001108 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001109 },
1110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 {
1112 .vendor = "Atmel",
1113 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001114 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001115 .manufacture_id = ATMEL_ID,
1116 .model_id = AT_49F002NT,
1117 .total_size = 256,
1118 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +00001119 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001120 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001121 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001122 .erase = NULL,
1123 .block_erasers =
1124 {
1125 {
1126 .eraseblocks = {
1127 {128 * 1024, 1},
1128 {96 * 1024, 1},
1129 {8 * 1024, 2},
1130 {16 * 1024, 1},
1131 },
1132 .block_erase = erase_sector_jedec,
1133 }, {
1134 .eraseblocks = { {256 * 1024, 1} },
1135 .block_erase = erase_chip_block_jedec,
1136 }
1137 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001138 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001140 },
1141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001142 {
1143 .vendor = "AMIC",
1144 .name = "A25L40P",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001145 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .manufacture_id = AMIC_ID,
1147 .model_id = AMIC_A25L40P,
1148 .total_size = 512,
1149 .page_size = 256,
1150 .tested = TEST_OK_PREW,
1151 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001152 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001153 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001154 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001155 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001156 },
1157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001158 {
1159 .vendor = "AMIC",
1160 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001161 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001162 .manufacture_id = AMIC_ID_NOPREFIX,
1163 .model_id = AMIC_A29002B,
1164 .total_size = 256,
1165 .page_size = 64 * 1024,
1166 .tested = TEST_UNTESTED,
1167 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001168 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001169 .erase = NULL,
1170 .block_erasers =
1171 {
1172 {
1173 .eraseblocks = {
1174 {16 * 1024, 1},
1175 {8 * 1024, 2},
1176 {32 * 1024, 1},
1177 {64 * 1024, 3},
1178 },
1179 .block_erase = erase_sector_29f002,
1180 }, {
1181 .eraseblocks = { {256 * 1024, 1} },
1182 .block_erase = erase_chip_29f002,
1183 },
1184 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001185 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001186 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001187 },
1188
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001189 {
1190 .vendor = "AMIC",
1191 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001192 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001193 .manufacture_id = AMIC_ID_NOPREFIX,
1194 .model_id = AMIC_A29002T,
1195 .total_size = 256,
1196 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001197 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001198 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001199 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001200 .erase = NULL,
1201 .block_erasers =
1202 {
1203 {
1204 .eraseblocks = {
1205 {64 * 1024, 3},
1206 {32 * 1024, 1},
1207 {8 * 1024, 2},
1208 {16 * 1024, 1},
1209 },
1210 .block_erase = erase_sector_29f002,
1211 }, {
1212 .eraseblocks = { {256 * 1024, 1} },
1213 .block_erase = erase_chip_29f002,
1214 },
1215 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001216 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001217 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001218 },
1219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001220 {
1221 .vendor = "AMIC",
1222 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001223 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001224 .manufacture_id = AMIC_ID_NOPREFIX,
1225 .model_id = AMIC_A29040B,
1226 .total_size = 512,
1227 .page_size = 64 * 1024,
1228 .tested = TEST_OK_PR,
1229 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001230 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001231 .erase = NULL,
1232 .block_erasers =
1233 {
1234 {
1235 .eraseblocks = { {64 * 1024, 8} },
1236 .block_erase = erase_sector_29f040b,
1237 }, {
1238 .eraseblocks = { {512 * 1024, 1} },
1239 .block_erase = erase_chip_29f040b,
1240 },
1241 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001242 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001243 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001244 },
1245
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001246 {
1247 .vendor = "AMIC",
1248 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001249 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001250 .manufacture_id = AMIC_ID_NOPREFIX,
1251 .model_id = AMIC_A49LF040A,
1252 .total_size = 512,
1253 .page_size = 64 * 1024,
1254 .tested = TEST_OK_PREW,
1255 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00001256 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001257 .erase = erase_49fl00x,
1258 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001259 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001260 },
1261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 {
1263 .vendor = "EMST",
1264 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001265 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001266 .manufacture_id = EMST_ID,
1267 .model_id = EMST_F49B002UA,
1268 .total_size = 256,
1269 .page_size = 4096,
1270 .tested = TEST_UNTESTED,
1271 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001272 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001273 .erase = erase_chip_jedec,
1274 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001275 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001276 },
1277
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001278 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001279 .vendor = "Eon",
1280 .name = "EN25B05",
1281 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001282 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001283 .model_id = EN_25B05,
1284 .total_size = 64,
1285 .page_size = 256,
1286 .tested = TEST_UNTESTED,
1287 .probe = probe_spi_rdid,
1288 .probe_timing = TIMING_ZERO,
1289 .erase = spi_chip_erase_c7,
1290 .write = spi_chip_write_256,
1291 .read = spi_chip_read,
1292 },
1293
1294 {
1295 .vendor = "Eon",
1296 .name = "EN25B10",
1297 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001298 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001299 .model_id = EN_25B10,
1300 .total_size = 128,
1301 .page_size = 256,
1302 .tested = TEST_UNTESTED,
1303 .probe = probe_spi_rdid,
1304 .probe_timing = TIMING_ZERO,
1305 .erase = spi_chip_erase_c7,
1306 .write = spi_chip_write_256,
1307 .read = spi_chip_read,
1308 },
1309
1310 {
1311 .vendor = "Eon",
1312 .name = "EN25B20",
1313 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001314 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001315 .model_id = EN_25B20,
1316 .total_size = 256,
1317 .page_size = 256,
1318 .tested = TEST_UNTESTED,
1319 .probe = probe_spi_rdid,
1320 .probe_timing = TIMING_ZERO,
1321 .erase = spi_chip_erase_c7,
1322 .write = spi_chip_write_256,
1323 .read = spi_chip_read,
1324 },
1325
1326 {
1327 .vendor = "Eon",
1328 .name = "EN25B40",
1329 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001330 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001331 .model_id = EN_25B40,
1332 .total_size = 512,
1333 .page_size = 256,
1334 .tested = TEST_UNTESTED,
1335 .probe = probe_spi_rdid,
1336 .probe_timing = TIMING_ZERO,
1337 .erase = spi_chip_erase_c7,
1338 .write = spi_chip_write_256,
1339 .read = spi_chip_read,
1340 },
1341
1342 {
1343 .vendor = "Eon",
1344 .name = "EN25B80",
1345 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001346 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001347 .model_id = EN_25B80,
1348 .total_size = 1024,
1349 .page_size = 256,
1350 .tested = TEST_UNTESTED,
1351 .probe = probe_spi_rdid,
1352 .probe_timing = TIMING_ZERO,
1353 .erase = spi_chip_erase_c7,
1354 .write = spi_chip_write_256,
1355 .read = spi_chip_read,
1356 },
1357
1358 {
1359 .vendor = "Eon",
1360 .name = "EN25B16",
1361 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001362 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001363 .model_id = EN_25B16,
1364 .total_size = 2048,
1365 .page_size = 256,
1366 .tested = TEST_UNTESTED,
1367 .probe = probe_spi_rdid,
1368 .probe_timing = TIMING_ZERO,
1369 .erase = spi_chip_erase_c7,
1370 .write = spi_chip_write_256,
1371 .read = spi_chip_read,
1372 },
1373
1374 {
1375 .vendor = "Eon",
1376 .name = "EN25B32",
1377 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001378 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001379 .model_id = EN_25B32,
1380 .total_size = 4096,
1381 .page_size = 256,
1382 .tested = TEST_UNTESTED,
1383 .probe = probe_spi_rdid,
1384 .probe_timing = TIMING_ZERO,
1385 .erase = spi_chip_erase_c7,
1386 .write = spi_chip_write_256,
1387 .read = spi_chip_read,
1388 },
1389
1390 {
1391 .vendor = "Eon",
1392 .name = "EN25B64",
1393 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001394 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001395 .model_id = EN_25B64,
1396 .total_size = 8192,
1397 .page_size = 256,
1398 .tested = TEST_UNTESTED,
1399 .probe = probe_spi_rdid,
1400 .probe_timing = TIMING_ZERO,
1401 .erase = spi_chip_erase_c7,
1402 .write = spi_chip_write_256,
1403 .read = spi_chip_read,
1404 },
1405
1406 {
1407 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001408 .name = "EN25D16",
1409 .bustype = CHIP_BUSTYPE_SPI,
1410 .manufacture_id = EON_ID_NOPREFIX,
1411 .model_id = EN_25D16,
1412 .total_size = 2048,
1413 .page_size = 256,
1414 .tested = TEST_UNTESTED,
1415 .probe = probe_spi_rdid,
1416 .probe_timing = TIMING_ZERO,
1417 .erase = spi_chip_erase_60_c7,
1418 .write = spi_chip_write_256,
1419 .read = spi_chip_read,
1420 },
1421
1422 {
1423 .vendor = "Eon",
1424 .name = "EN25F05",
1425 .bustype = CHIP_BUSTYPE_SPI,
1426 .manufacture_id = EON_ID_NOPREFIX,
1427 .model_id = EN_25F05,
1428 .total_size = 64,
1429 .page_size = 256,
1430 .tested = TEST_UNTESTED,
1431 .probe = probe_spi_rdid,
1432 .probe_timing = TIMING_ZERO,
1433 .erase = spi_chip_erase_60_c7,
1434 .write = spi_chip_write_256,
1435 .read = spi_chip_read,
1436 },
1437
1438 {
1439 .vendor = "Eon",
1440 .name = "EN25F10",
1441 .bustype = CHIP_BUSTYPE_SPI,
1442 .manufacture_id = EON_ID_NOPREFIX,
1443 .model_id = EN_25F10,
1444 .total_size = 128,
1445 .page_size = 256,
1446 .tested = TEST_UNTESTED,
1447 .probe = probe_spi_rdid,
1448 .probe_timing = TIMING_ZERO,
1449 .erase = spi_chip_erase_60_c7,
1450 .write = spi_chip_write_256,
1451 .read = spi_chip_read,
1452 },
1453
1454 {
1455 .vendor = "Eon",
1456 .name = "EN25F20",
1457 .bustype = CHIP_BUSTYPE_SPI,
1458 .manufacture_id = EON_ID_NOPREFIX,
1459 .model_id = EN_25F20,
1460 .total_size = 256,
1461 .page_size = 256,
1462 .tested = TEST_UNTESTED,
1463 .probe = probe_spi_rdid,
1464 .probe_timing = TIMING_ZERO,
1465 .erase = spi_chip_erase_60_c7,
1466 .write = spi_chip_write_256,
1467 .read = spi_chip_read,
1468 },
1469
1470 {
1471 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001472 .name = "EN25F40",
1473 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001474 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001475 .model_id = EN_25F40,
1476 .total_size = 512,
1477 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001478 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001479 .probe = probe_spi_rdid,
1480 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001481 .erase = NULL,
1482 .block_erasers =
1483 {
1484 {
1485 .eraseblocks = { {4 * 1024, 2048} },
1486 .block_erase = spi_block_erase_20,
1487 }, {
1488 .eraseblocks = { {4 * 1024, 2048} },
1489 .block_erase = spi_block_erase_d8,
1490 }, {
1491 .eraseblocks = { {8 * 1024 * 1024, 1} },
1492 .block_erase = spi_block_erase_60,
1493 }, {
1494 .eraseblocks = { {8 * 1024 * 1024, 1} },
1495 .block_erase = spi_block_erase_c7,
1496 },
1497 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001498 .write = spi_chip_write_256,
1499 .read = spi_chip_read,
1500 },
1501
1502 {
1503 .vendor = "Eon",
1504 .name = "EN25F80",
1505 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001506 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001507 .model_id = EN_25F80,
1508 .total_size = 1024,
1509 .page_size = 256,
1510 .tested = TEST_UNTESTED,
1511 .probe = probe_spi_rdid,
1512 .probe_timing = TIMING_ZERO,
1513 .erase = spi_chip_erase_60_c7,
1514 .write = spi_chip_write_256,
1515 .read = spi_chip_read,
1516 },
1517
1518 {
1519 .vendor = "Eon",
1520 .name = "EN25F16",
1521 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001522 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001523 .model_id = EN_25F16,
1524 .total_size = 2048,
1525 .page_size = 256,
1526 .tested = TEST_UNTESTED,
1527 .probe = probe_spi_rdid,
1528 .probe_timing = TIMING_ZERO,
1529 .erase = spi_chip_erase_60_c7,
1530 .write = spi_chip_write_256,
1531 .read = spi_chip_read,
1532 },
1533
1534 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001535 .vendor = "Eon",
1536 .name = "EN25F32",
1537 .bustype = CHIP_BUSTYPE_SPI,
1538 .manufacture_id = EON_ID_NOPREFIX,
1539 .model_id = EN_25F32,
1540 .total_size = 4096,
1541 .page_size = 256,
1542 .tested = TEST_UNTESTED,
1543 .probe = probe_spi_rdid,
1544 .probe_timing = TIMING_ZERO,
1545 .erase = spi_chip_erase_60_c7,
1546 .write = spi_chip_write_256,
1547 .read = spi_chip_read,
1548 },
1549
1550 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001551 .vendor = "EON",
1552 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001553 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001554 .manufacture_id = EON_ID,
1555 .model_id = EN_29F002B,
1556 .total_size = 256,
1557 .page_size = 256,
1558 .tested = TEST_UNTESTED,
1559 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001560 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001561 .erase = NULL,
1562 .block_erasers =
1563 {
1564 {
1565 .eraseblocks = {
1566 {64 * 1024, 3},
1567 {32 * 1024, 1},
1568 {8 * 1024, 2},
1569 {16 * 1024, 1},
1570 },
1571 .block_erase = erase_sector_jedec,
1572 }, {
1573 .eraseblocks = { {256 * 1024, 1} },
1574 .block_erase = erase_chip_block_jedec,
1575 },
1576 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001577 .write = write_jedec_1,
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 = "EON",
1583 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001584 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001585 .manufacture_id = EON_ID,
1586 .model_id = EN_29F002T,
1587 .total_size = 256,
1588 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001589 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001590 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001591 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001592 .erase = NULL,
1593 .block_erasers =
1594 {
1595 {
1596 .eraseblocks = {
1597 {16 * 1024, 1},
1598 {8 * 1024, 2},
1599 {32 * 1024, 1},
1600 {64 * 1024, 3},
1601 },
1602 .block_erase = erase_sector_jedec,
1603 }, {
1604 .eraseblocks = { {256 * 1024, 1} },
1605 .block_erase = erase_chip_block_jedec,
1606 },
1607 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001608 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001609 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001610 },
1611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001612 {
1613 .vendor = "Fujitsu",
1614 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001615 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001616 .manufacture_id = FUJITSU_ID,
1617 .model_id = MBM29F004BC,
1618 .total_size = 512,
1619 .page_size = 64 * 1024,
1620 .tested = TEST_UNTESTED,
1621 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001622 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001623 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001624 .block_erasers =
1625 {
1626 {
1627 .eraseblocks = {
1628 {16 * 1024, 1},
1629 {8 * 1024, 2},
1630 {32 * 1024, 1},
1631 {64 * 1024, 7},
1632 },
1633 .block_erase = erase_sector_29f040b,
1634 }, {
1635 .eraseblocks = { {512 * 1024, 1} },
1636 .block_erase = erase_chip_29f040b,
1637 },
1638 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001639 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001640 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001641 },
1642
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001643 {
1644 .vendor = "Fujitsu",
1645 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001646 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 .manufacture_id = FUJITSU_ID,
1648 .model_id = MBM29F004TC,
1649 .total_size = 512,
1650 .page_size = 64 * 1024,
1651 .tested = TEST_UNTESTED,
1652 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001653 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001654 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001655 .block_erasers =
1656 {
1657 {
1658 .eraseblocks = {
1659 {64 * 1024, 7},
1660 {32 * 1024, 1},
1661 {8 * 1024, 2},
1662 {16 * 1024, 1},
1663 },
1664 .block_erase = erase_sector_29f040b,
1665 }, {
1666 .eraseblocks = { {512 * 1024, 1} },
1667 .block_erase = erase_chip_29f040b,
1668 },
1669 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001670 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001671 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001672 },
1673
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001674 {
1675 .vendor = "Fujitsu",
1676 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001677 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001678 .manufacture_id = FUJITSU_ID,
1679 .model_id = MBM29F400BC,
1680 .total_size = 512,
1681 .page_size = 64 * 1024,
1682 .tested = TEST_UNTESTED,
1683 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001684 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001685 .erase = NULL,
1686 .block_erasers =
1687 {
1688 {
1689 .eraseblocks = {
1690 {16 * 1024, 1},
1691 {8 * 1024, 2},
1692 {32 * 1024, 1},
1693 {64 * 1024, 7},
1694 },
1695 .block_erase = block_erase_m29f400bt,
1696 }, {
1697 .eraseblocks = { {512 * 1024, 1} },
1698 .block_erase = block_erase_chip_m29f400bt,
1699 },
1700 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001701 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001702 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001703 },
1704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001705 {
1706 .vendor = "Fujitsu",
1707 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001708 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001709 .manufacture_id = FUJITSU_ID,
1710 .model_id = MBM29F400TC,
1711 .total_size = 512,
1712 .page_size = 64 * 1024,
1713 .tested = TEST_UNTESTED,
1714 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001715 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001716 .erase = NULL,
1717 .block_erasers =
1718 {
1719 {
1720 .eraseblocks = {
1721 {64 * 1024, 7},
1722 {32 * 1024, 1},
1723 {8 * 1024, 2},
1724 {16 * 1024, 1},
1725 },
1726 .block_erase = block_erase_m29f400bt,
1727 }, {
1728 .eraseblocks = { {512 * 1024, 1} },
1729 .block_erase = block_erase_chip_m29f400bt,
1730 },
1731 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001732 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001734 },
1735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001736 {
1737 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001738 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001739 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001740 .manufacture_id = INTEL_ID,
1741 .model_id = P28F001BXB,
1742 .total_size = 128,
1743 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
1744 .tested = TEST_BAD_ERASE|TEST_BAD_WRITE,
1745 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001746 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001747 .erase = NULL,
1748 .write = NULL,
1749 .read = read_memmapped,
1750 },
1751
1752 {
1753 .vendor = "Intel",
1754 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001755 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001756 .manufacture_id = INTEL_ID,
1757 .model_id = P28F001BXT,
1758 .total_size = 128,
1759 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
1760 .tested = TEST_OK_PR|TEST_BAD_ERASE|TEST_BAD_WRITE,
1761 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001762 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001763 .erase = NULL,
1764 .write = NULL,
1765 .read = read_memmapped,
1766 },
1767
1768 {
1769 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001771 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001772 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001773 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 .total_size = 512,
1775 .page_size = 64 * 1024,
1776 .tested = TEST_OK_PREW,
1777 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001778 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001779 .erase = erase_82802ab,
1780 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001782 },
1783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001784 {
1785 .vendor = "Intel",
1786 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001787 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001788 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001789 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001790 .total_size = 1024,
1791 .page_size = 64 * 1024,
1792 .tested = TEST_OK_PREW,
1793 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001794 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001795 .erase = erase_82802ab,
1796 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001798 },
1799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 {
1801 .vendor = "Macronix",
1802 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001803 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001804 .manufacture_id = MX_ID,
1805 .model_id = MX_25L512,
1806 .total_size = 64,
1807 .page_size = 256,
1808 .tested = TEST_UNTESTED,
1809 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001810 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001811 .erase = NULL,
1812 .block_erasers =
1813 {
1814 {
1815 .eraseblocks = { {4 * 1024, 16} },
1816 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001817 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001818 .eraseblocks = { {64 * 1024, 1} },
1819 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001820 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001821 .eraseblocks = { {64 * 1024, 1} },
1822 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001823 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001824 .eraseblocks = { {64 * 1024, 1} },
1825 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001826 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001827 .eraseblocks = { {64 * 1024, 1} },
1828 .block_erase = spi_block_erase_c7,
1829 },
1830 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001831 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001832 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001833 },
1834
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001835 {
1836 .vendor = "Macronix",
1837 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001838 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001839 .manufacture_id = MX_ID,
1840 .model_id = MX_25L1005,
1841 .total_size = 128,
1842 .page_size = 256,
1843 .tested = TEST_UNTESTED,
1844 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001845 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001846 .erase = NULL,
1847 .block_erasers =
1848 {
1849 {
1850 .eraseblocks = { {4 * 1024, 32} },
1851 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001852 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001853 .eraseblocks = { {64 * 1024, 2} },
1854 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001855 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001856 .eraseblocks = { {128 * 1024, 1} },
1857 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001858 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001859 .eraseblocks = { {128 * 1024, 1} },
1860 .block_erase = spi_block_erase_c7,
1861 },
1862 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001863 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001864 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001865 },
1866
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001867 {
1868 .vendor = "Macronix",
1869 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001870 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001871 .manufacture_id = MX_ID,
1872 .model_id = MX_25L2005,
1873 .total_size = 256,
1874 .page_size = 256,
1875 .tested = TEST_UNTESTED,
1876 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001877 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001878 .erase = NULL,
1879 .block_erasers =
1880 {
1881 {
1882 .eraseblocks = { {4 * 1024, 64} },
1883 .block_erase = spi_block_erase_20,
1884 }, {
1885 .eraseblocks = { {64 * 1024, 4} },
1886 .block_erase = spi_block_erase_52,
1887 }, {
1888 .eraseblocks = { {64 * 1024, 4} },
1889 .block_erase = spi_block_erase_d8,
1890 }, {
1891 .eraseblocks = { {256 * 1024, 1} },
1892 .block_erase = spi_block_erase_60,
1893 }, {
1894 .eraseblocks = { {256 * 1024, 1} },
1895 .block_erase = spi_block_erase_c7,
1896 },
1897 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001898 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001899 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001900 },
1901
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001902 {
1903 .vendor = "Macronix",
1904 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001905 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001906 .manufacture_id = MX_ID,
1907 .model_id = MX_25L4005,
1908 .total_size = 512,
1909 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001910 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001911 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001912 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001913 .erase = NULL,
1914 .block_erasers =
1915 {
1916 {
1917 .eraseblocks = { {4 * 1024, 128} },
1918 .block_erase = spi_block_erase_20,
1919 }, {
1920 .eraseblocks = { {64 * 1024, 8} },
1921 .block_erase = spi_block_erase_52,
1922 }, {
1923 .eraseblocks = { {64 * 1024, 8} },
1924 .block_erase = spi_block_erase_d8,
1925 }, {
1926 .eraseblocks = { {512 * 1024, 1} },
1927 .block_erase = spi_block_erase_60,
1928 }, {
1929 .eraseblocks = { {512 * 1024, 1} },
1930 .block_erase = spi_block_erase_c7,
1931 },
1932 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001933 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001934 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001935 },
1936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001937 {
1938 .vendor = "Macronix",
1939 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001940 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001941 .manufacture_id = MX_ID,
1942 .model_id = MX_25L8005,
1943 .total_size = 1024,
1944 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001945 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001946 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001947 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001948 .erase = NULL,
1949 .block_erasers =
1950 {
1951 {
1952 .eraseblocks = { {4 * 1024, 256} },
1953 .block_erase = spi_block_erase_20,
1954 }, {
1955 .eraseblocks = { {64 * 1024, 16} },
1956 .block_erase = spi_block_erase_52,
1957 }, {
1958 .eraseblocks = { {64 * 1024, 16} },
1959 .block_erase = spi_block_erase_d8,
1960 }, {
1961 .eraseblocks = { {1024 * 1024, 1} },
1962 .block_erase = spi_block_erase_60,
1963 }, {
1964 .eraseblocks = { {1024 * 1024, 1} },
1965 .block_erase = spi_block_erase_c7,
1966 },
1967 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001968 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001969 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001970 },
1971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001972 {
1973 .vendor = "Macronix",
1974 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001975 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001976 .manufacture_id = MX_ID,
1977 .model_id = MX_25L1605,
1978 .total_size = 2048,
1979 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001980 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001981 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001982 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001983 .erase = NULL,
1984 .block_erasers =
1985 {
1986 {
1987 .eraseblocks = { {4 * 1024, 512} },
1988 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
1989 }, {
1990 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
1991 .block_erase = spi_block_erase_52,
1992 }, {
1993 .eraseblocks = { {64 * 1024, 32} },
1994 .block_erase = spi_block_erase_d8,
1995 }, {
1996 .eraseblocks = { {2 * 1024 * 1024, 1} },
1997 .block_erase = spi_block_erase_60,
1998 }, {
1999 .eraseblocks = { {2 * 1024 * 1024, 1} },
2000 .block_erase = spi_block_erase_c7,
2001 },
2002 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002003 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002004 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002005 },
2006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002007 {
2008 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002009 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002010 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002011 .manufacture_id = MX_ID,
2012 .model_id = MX_25L1635D,
2013 .total_size = 2048,
2014 .page_size = 256,
2015 .tested = TEST_UNTESTED,
2016 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002017 .probe_timing = TIMING_ZERO,
Stephan Guillouxe39631c2009-04-19 23:24:26 +00002018 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002019 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002020 .read = spi_chip_read,
2021 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002022
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002023 {
2024 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002025 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002026 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002027 .manufacture_id = MX_ID,
2028 .model_id = MX_25L3205,
2029 .total_size = 4096,
2030 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002031 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002032 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002033 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002034 .erase = NULL,
2035 .block_erasers =
2036 {
2037 {
2038 .eraseblocks = { {4 * 1024, 1024} },
2039 .block_erase = spi_block_erase_20,
2040 }, {
2041 .eraseblocks = { {4 * 1024, 1024} },
2042 .block_erase = spi_block_erase_d8,
2043 }, {
2044 .eraseblocks = { {4 * 1024 * 1024, 1} },
2045 .block_erase = spi_block_erase_60,
2046 }, {
2047 .eraseblocks = { {4 * 1024 * 1024, 1} },
2048 .block_erase = spi_block_erase_c7,
2049 },
2050 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002051 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002052 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002053 },
2054
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002055 {
2056 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002057 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002058 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002059 .manufacture_id = MX_ID,
2060 .model_id = MX_25L3235D,
2061 .total_size = 4096,
2062 .page_size = 256,
2063 .tested = TEST_UNTESTED,
2064 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002065 .probe_timing = TIMING_ZERO,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002066 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002067 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002068 .read = spi_chip_read,
2069 },
2070
2071 {
2072 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002073 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002074 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002075 .manufacture_id = MX_ID,
2076 .model_id = MX_25L6405,
2077 .total_size = 8192,
2078 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002079 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002080 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002081 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00002082 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002083 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002084 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002085 },
2086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002087 {
2088 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002089 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002090 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002091 .manufacture_id = MX_ID,
2092 .model_id = MX_25L12805,
2093 .total_size = 16384,
2094 .page_size = 256,
2095 .tested = TEST_UNTESTED,
2096 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002097 .probe_timing = TIMING_ZERO,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002098 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002099 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002100 .read = spi_chip_read,
2101 },
2102
2103 {
2104 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002105 .name = "MX29F001B",
2106 .bustype = CHIP_BUSTYPE_PARALLEL,
2107 .manufacture_id = MX_ID,
2108 .model_id = MX_29F001B,
2109 .total_size = 128,
2110 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002111 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002112 .probe = probe_29f002,
2113 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2114 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002115 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002116 .read = read_memmapped,
2117 },
2118
2119 {
2120 .vendor = "Macronix",
2121 .name = "MX29F001T",
2122 .bustype = CHIP_BUSTYPE_PARALLEL,
2123 .manufacture_id = MX_ID,
2124 .model_id = MX_29F001T,
2125 .total_size = 128,
2126 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002127 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002128 .probe = probe_29f002,
2129 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2130 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002131 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002132 .read = read_memmapped,
2133 },
2134
2135 {
2136 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002137 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002138 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002139 .manufacture_id = MX_ID,
2140 .model_id = MX_29F002B,
2141 .total_size = 256,
2142 .page_size = 64 * 1024,
2143 .tested = TEST_UNTESTED,
2144 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002145 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002146 .erase = NULL,
2147 .block_erasers =
2148 {
2149 {
2150 .eraseblocks = {
2151 {16 * 1024, 1},
2152 {8 * 1024, 2},
2153 {32 * 1024, 1},
2154 {64 * 1024, 3},
2155 },
2156 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2157 }, {
2158 .eraseblocks = { {256 * 1024, 1} },
2159 .block_erase = erase_chip_29f002,
2160 },
2161 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002162 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002163 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002164 },
2165
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002166 {
2167 .vendor = "Macronix",
2168 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002169 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002170 .manufacture_id = MX_ID,
2171 .model_id = MX_29F002T,
2172 .total_size = 256,
2173 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002174 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002175 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002176 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002177 .erase = NULL,
2178 .block_erasers =
2179 {
2180 {
2181 .eraseblocks = {
2182 {64 * 1024, 3},
2183 {32 * 1024, 1},
2184 {8 * 1024, 2},
2185 {16 * 1024, 1},
2186 },
2187 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2188 }, {
2189 .eraseblocks = { {256 * 1024, 1} },
2190 .block_erase = erase_chip_29f002,
2191 },
2192 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002193 .write = write_jedec_1,
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 = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002199 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002200 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002201 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002202 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002203 .total_size = 512,
2204 .page_size = 64 * 1024,
2205 .tested = TEST_OK_PR,
2206 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002207 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002208 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002209 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002210 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002211 },
2212
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 {
2214 .vendor = "Numonyx",
2215 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002216 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002218 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .total_size = 128,
2220 .page_size = 256,
2221 .tested = TEST_UNTESTED,
2222 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002223 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002224 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002225 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002227 },
2228
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002229 {
2230 .vendor = "Numonyx",
2231 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002232 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002233 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002234 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002235 .total_size = 256,
2236 .page_size = 256,
2237 .tested = TEST_UNTESTED,
2238 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002239 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002240 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002241 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002242 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002243 },
2244
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002245 {
2246 .vendor = "Numonyx",
2247 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002248 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002249 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002250 .model_id = ST_M25PE40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002251 .total_size = 256,
2252 .page_size = 256,
2253 .tested = TEST_UNTESTED,
2254 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002255 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002256 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002257 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002259 },
2260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002261 {
2262 .vendor = "Numonyx",
2263 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002264 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002265 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002266 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002267 .total_size = 1024,
2268 .page_size = 256,
2269 .tested = TEST_OK_PREW,
2270 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002271 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002272 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002273 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002274 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002275 },
2276
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002277 {
2278 .vendor = "Numonyx",
2279 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002280 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002281 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002282 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002283 .total_size = 2048,
2284 .page_size = 256,
2285 .tested = TEST_UNTESTED,
2286 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002287 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002288 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002289 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002290 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002291 },
2292
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002293 {
2294 .vendor = "PMC",
2295 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002296 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002297 .manufacture_id = PMC_ID,
2298 .model_id = PMC_25LV010,
2299 .total_size = 128,
2300 .page_size = 256,
2301 .tested = TEST_UNTESTED,
2302 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002303 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002304 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002305 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002306 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002307 },
2308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002309 {
2310 .vendor = "PMC",
2311 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002312 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002313 .manufacture_id = PMC_ID,
2314 .model_id = PMC_25LV016B,
2315 .total_size = 2048,
2316 .page_size = 256,
2317 .tested = TEST_UNTESTED,
2318 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002319 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002320 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002321 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002322 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002323 },
2324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002325 {
2326 .vendor = "PMC",
2327 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002329 .manufacture_id = PMC_ID,
2330 .model_id = PMC_25LV020,
2331 .total_size = 256,
2332 .page_size = 256,
2333 .tested = TEST_UNTESTED,
2334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002335 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002336 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002337 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002338 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002339 },
2340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002341 {
2342 .vendor = "PMC",
2343 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002344 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002345 .manufacture_id = PMC_ID,
2346 .model_id = PMC_25LV040,
2347 .total_size = 512,
2348 .page_size = 256,
2349 .tested = TEST_UNTESTED,
2350 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002351 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002352 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002353 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002354 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002355 },
2356
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002357 {
2358 .vendor = "PMC",
2359 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002360 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002361 .manufacture_id = PMC_ID,
2362 .model_id = PMC_25LV080B,
2363 .total_size = 1024,
2364 .page_size = 256,
2365 .tested = TEST_UNTESTED,
2366 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002367 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002368 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002370 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002371 },
2372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002373 {
2374 .vendor = "PMC",
2375 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002377 .manufacture_id = PMC_ID,
2378 .model_id = PMC_25LV512,
2379 .total_size = 64,
2380 .page_size = 256,
2381 .tested = TEST_UNTESTED,
2382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002383 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002384 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002385 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002386 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002387 },
2388
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002389 {
2390 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002391 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002392 .bustype = CHIP_BUSTYPE_PARALLEL,
2393 .manufacture_id = PMC_ID_NOPREFIX,
2394 .model_id = PMC_29F002T,
2395 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002396 .page_size = 8 * 1024,
2397 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002398 .probe = probe_29f040b,
2399 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002400 .erase = NULL,
2401 .block_erasers =
2402 {
2403 {
2404 .eraseblocks = {
2405 {128 * 1024, 1},
2406 {96 * 1024, 1},
2407 {8 * 1024, 2},
2408 {16 * 1024, 1},
2409 },
2410 .block_erase = erase_sector_29f040b,
2411 }, {
2412 .eraseblocks = { {256 * 1024, 1} },
2413 .block_erase = erase_chip_29f040b,
2414 },
2415 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002416 .write = write_pm29f002,
2417 .read = read_memmapped,
2418 },
2419
2420 {
2421 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002422 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002423 .bustype = CHIP_BUSTYPE_PARALLEL,
2424 .manufacture_id = PMC_ID_NOPREFIX,
2425 .model_id = PMC_29F002B,
2426 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002427 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002428 .tested = TEST_UNTESTED,
2429 .probe = probe_29f040b,
2430 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002431 .erase = NULL,
2432 .block_erasers =
2433 {
2434 {
2435 .eraseblocks = {
2436 {16 * 1024, 1},
2437 {8 * 1024, 2},
2438 {96 * 1024, 1},
2439 {128 * 1024, 1},
2440 },
2441 .block_erase = erase_sector_29f040b,
2442 }, {
2443 .eraseblocks = { {256 * 1024, 1} },
2444 .block_erase = erase_chip_29f040b,
2445 },
2446 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002447 .write = write_pm29f002,
2448 .read = read_memmapped,
2449 },
2450
2451 {
2452 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002453 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002454 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002455 .manufacture_id = PMC_ID_NOPREFIX,
2456 .model_id = PMC_39F010,
2457 .total_size = 128,
2458 .page_size = 4096,
2459 .tested = TEST_OK_PREW,
2460 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002461 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002462 .erase = erase_chip_jedec,
2463 .write = write_49f002,
2464 .read = read_memmapped,
2465 },
2466
2467 {
2468 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002469 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00002470 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 .manufacture_id = PMC_ID_NOPREFIX,
2472 .model_id = PMC_49FL002,
2473 .total_size = 256,
2474 .page_size = 16 * 1024,
2475 .tested = TEST_OK_PREW,
2476 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002477 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002478 .erase = erase_49fl00x,
2479 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002480 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002481 },
2482
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002483 {
2484 .vendor = "PMC",
2485 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00002486 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002487 .manufacture_id = PMC_ID_NOPREFIX,
2488 .model_id = PMC_49FL004,
2489 .total_size = 512,
2490 .page_size = 64 * 1024,
2491 .tested = TEST_OK_PREW,
2492 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002493 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002494 .erase = erase_49fl00x,
2495 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002496 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002497 },
2498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002499 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00002500 .vendor = "Sanyo",
2501 .name = "LF25FW203A",
2502 .bustype = CHIP_BUSTYPE_SPI,
2503 .manufacture_id = SANYO_ID,
2504 .model_id = SANYO_LE25FW203A,
2505 .total_size = 2048,
2506 .page_size = 256,
2507 .tested = TEST_UNTESTED,
2508 .probe = probe_spi_rdid,
2509 .probe_timing = TIMING_ZERO,
2510 .erase = spi_chip_erase_c7,
2511 .write = spi_chip_write_256,
2512 .read = spi_chip_read,
2513 },
2514
2515 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002516 .vendor = "Sharp",
2517 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00002518 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002519 .manufacture_id = SHARP_ID,
2520 .model_id = SHARP_LHF00L04,
2521 .total_size = 1024,
2522 .page_size = 64 * 1024,
2523 .tested = TEST_UNTESTED,
2524 .probe = probe_lhf00l04,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002525 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sharplhf00l04.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002526 .erase = erase_lhf00l04,
2527 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002528 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002529 },
2530
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002531 {
2532 .vendor = "Spansion",
2533 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002534 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002535 .manufacture_id = SPANSION_ID,
2536 .model_id = SPANSION_S25FL016A,
2537 .total_size = 2048,
2538 .page_size = 256,
2539 .tested = TEST_OK_PREW,
2540 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002541 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002542 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002543 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002544 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002545 },
2546
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002547 {
2548 .vendor = "SST",
2549 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002550 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002551 .manufacture_id = SST_ID,
2552 .model_id = SST_25VF016B,
2553 .total_size = 2048,
2554 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002555 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002556 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002557 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002558 .erase = NULL,
2559 .block_erasers =
2560 {
2561 {
2562 .eraseblocks = { {4 * 1024, 512} },
2563 .block_erase = spi_block_erase_20,
2564 }, {
2565 .eraseblocks = { {32 * 1024, 64} },
2566 .block_erase = spi_block_erase_52,
2567 }, {
2568 .eraseblocks = { {64 * 1024, 32} },
2569 .block_erase = spi_block_erase_d8,
2570 }, {
2571 .eraseblocks = { {2 * 1024 * 1024, 1} },
2572 .block_erase = spi_block_erase_60,
2573 }, {
2574 .eraseblocks = { {2 * 1024 * 1024, 1} },
2575 .block_erase = spi_block_erase_c7,
2576 },
2577 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002578 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002579 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002580 },
2581
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002582 {
2583 .vendor = "SST",
2584 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002585 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002586 .manufacture_id = SST_ID,
2587 .model_id = SST_25VF032B,
2588 .total_size = 4096,
2589 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002590 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002591 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002592 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002593 .erase = NULL,
2594 .block_erasers =
2595 {
2596 {
2597 .eraseblocks = { {4 * 1024, 1024} },
2598 .block_erase = spi_block_erase_20,
2599 }, {
2600 .eraseblocks = { {32 * 1024, 128} },
2601 .block_erase = spi_block_erase_52,
2602 }, {
2603 .eraseblocks = { {64 * 1024, 64} },
2604 .block_erase = spi_block_erase_d8,
2605 }, {
2606 .eraseblocks = { {4 * 1024 * 1024, 1} },
2607 .block_erase = spi_block_erase_60,
2608 }, {
2609 .eraseblocks = { {4 * 1024 * 1024, 1} },
2610 .block_erase = spi_block_erase_c7,
2611 },
2612 },
2613 .write = spi_chip_write_1,
2614 .read = spi_chip_read,
2615 },
2616
2617 {
2618 .vendor = "SST",
2619 .name = "SST25VF040.REMS",
2620 .bustype = CHIP_BUSTYPE_SPI,
2621 .manufacture_id = SST_ID,
2622 .model_id = SST_25VF040_REMS,
2623 .total_size = 512,
2624 .page_size = 256,
2625 .tested = TEST_OK_PR,
2626 .probe = probe_spi_rems,
2627 .probe_timing = TIMING_ZERO,
2628 .erase = NULL,
2629 .block_erasers =
2630 {
2631 {
2632 .eraseblocks = { {4 * 1024, 128} },
2633 .block_erase = spi_block_erase_20,
2634 }, {
2635 .eraseblocks = { {32 * 1024, 16} },
2636 .block_erase = spi_block_erase_52,
2637 }, {
2638 .eraseblocks = { {512 * 1024, 1} },
2639 .block_erase = spi_block_erase_60,
2640 },
2641 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002642 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002643 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002644 },
2645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002646 {
2647 .vendor = "SST",
2648 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002649 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002650 .manufacture_id = SST_ID,
2651 .model_id = SST_25VF040B,
2652 .total_size = 512,
2653 .page_size = 256,
2654 .tested = TEST_UNTESTED,
2655 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002656 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002657 .erase = NULL,
2658 .block_erasers =
2659 {
2660 {
2661 .eraseblocks = { {4 * 1024, 128} },
2662 .block_erase = spi_block_erase_20,
2663 }, {
2664 .eraseblocks = { {32 * 1024, 16} },
2665 .block_erase = spi_block_erase_52,
2666 }, {
2667 .eraseblocks = { {64 * 1024, 8} },
2668 .block_erase = spi_block_erase_d8,
2669 }, {
2670 .eraseblocks = { {512 * 1024, 1} },
2671 .block_erase = spi_block_erase_60,
2672 }, {
2673 .eraseblocks = { {512 * 1024, 1} },
2674 .block_erase = spi_block_erase_c7,
2675 },
2676 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002677 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00002678 .read = spi_chip_read,
2679 },
2680
2681 {
2682 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00002683 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002684 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002685 .manufacture_id = SST_ID,
2686 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00002687 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002688 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00002689 .tested = TEST_OK_PR,
2690 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002691 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002692 .erase = NULL,
2693 .block_erasers =
2694 {
2695 {
2696 .eraseblocks = { {4 * 1024, 128} },
2697 .block_erase = spi_block_erase_20,
2698 }, {
2699 .eraseblocks = { {32 * 1024, 16} },
2700 .block_erase = spi_block_erase_52,
2701 }, {
2702 .eraseblocks = { {64 * 1024, 8} },
2703 .block_erase = spi_block_erase_d8,
2704 }, {
2705 .eraseblocks = { {512 * 1024, 1} },
2706 .block_erase = spi_block_erase_60,
2707 }, {
2708 .eraseblocks = { {512 * 1024, 1} },
2709 .block_erase = spi_block_erase_c7,
2710 },
2711 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002712 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00002713 .read = spi_chip_read,
2714 },
2715
2716 {
2717 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002718 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002719 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002720 .manufacture_id = SST_ID,
2721 .model_id = SST_25VF080B,
2722 .total_size = 1024,
2723 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002724 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002725 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002726 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002727 .erase = NULL,
2728 .block_erasers =
2729 {
2730 {
2731 .eraseblocks = { {4 * 1024, 256} },
2732 .block_erase = spi_block_erase_20,
2733 }, {
2734 .eraseblocks = { {32 * 1024, 32} },
2735 .block_erase = spi_block_erase_52,
2736 }, {
2737 .eraseblocks = { {64 * 1024, 16} },
2738 .block_erase = spi_block_erase_d8,
2739 }, {
2740 .eraseblocks = { {1024 * 1024, 1} },
2741 .block_erase = spi_block_erase_60,
2742 }, {
2743 .eraseblocks = { {1024 * 1024, 1} },
2744 .block_erase = spi_block_erase_c7,
2745 },
2746 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002747 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002748 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002749 },
2750
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002751 {
2752 .vendor = "SST",
2753 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002754 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002755 .manufacture_id = SST_ID,
2756 .model_id = SST_28SF040,
2757 .total_size = 512,
2758 .page_size = 256,
2759 .tested = TEST_UNTESTED,
2760 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002761 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002762 .erase = erase_28sf040,
2763 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002764 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002765 },
2766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002767 {
2768 .vendor = "SST",
2769 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002770 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002771 .manufacture_id = SST_ID,
2772 .model_id = SST_29EE010,
2773 .total_size = 128,
2774 .page_size = 128,
2775 .tested = TEST_OK_PREW,
2776 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002777 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002778 .erase = erase_chip_jedec,
2779 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002780 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002781 },
2782
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002783 {
2784 .vendor = "SST",
2785 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002786 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002787 .manufacture_id = SST_ID,
2788 .model_id = SST_29LE010,
2789 .total_size = 128,
2790 .page_size = 128,
2791 .tested = TEST_UNTESTED,
2792 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002793 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002794 .erase = erase_chip_jedec,
2795 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002796 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002797 },
2798
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002799 {
2800 .vendor = "SST",
2801 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002802 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002803 .manufacture_id = SST_ID,
2804 .model_id = SST_29EE020A,
2805 .total_size = 256,
2806 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00002807 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002808 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002809 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002810 .erase = erase_chip_jedec,
2811 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002812 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002813 },
2814
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002815 {
2816 .vendor = "SST",
2817 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002818 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002819 .manufacture_id = SST_ID,
2820 .model_id = SST_29LE020,
2821 .total_size = 256,
2822 .page_size = 128,
2823 .tested = TEST_UNTESTED,
2824 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002825 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002826 .erase = erase_chip_jedec,
2827 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002828 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002829 },
2830
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002831 {
2832 .vendor = "SST",
2833 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002834 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002835 .manufacture_id = SST_ID,
2836 .model_id = SST_39SF010,
2837 .total_size = 128,
2838 .page_size = 4096,
2839 .tested = TEST_OK_PREW,
2840 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002841 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002842 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002843 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002844 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002845 },
2846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002847 {
2848 .vendor = "SST",
2849 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002850 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002851 .manufacture_id = SST_ID,
2852 .model_id = SST_39SF020,
2853 .total_size = 256,
2854 .page_size = 4096,
2855 .tested = TEST_OK_PREW,
2856 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002857 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002858 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002859 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002860 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002861 },
2862
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002863 {
2864 .vendor = "SST",
2865 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002866 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002867 .manufacture_id = SST_ID,
2868 .model_id = SST_39SF040,
2869 .total_size = 512,
2870 .page_size = 4096,
2871 .tested = TEST_OK_PREW,
2872 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002873 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002874 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002875 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002876 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002877 },
2878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002879 {
2880 .vendor = "SST",
2881 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00002882 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002883 .manufacture_id = SST_ID,
2884 .model_id = SST_39VF512,
2885 .total_size = 64,
2886 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00002887 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002889 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002890 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002891 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002892 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002893 },
2894
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002895 {
2896 .vendor = "SST",
2897 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002898 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002899 .manufacture_id = SST_ID,
2900 .model_id = SST_39VF010,
2901 .total_size = 128,
2902 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002903 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002904 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002905 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002906 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002907 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002908 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002909 },
2910
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002911 {
2912 .vendor = "SST",
2913 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002914 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002915 .manufacture_id = SST_ID,
2916 .model_id = SST_39VF020,
2917 .total_size = 256,
2918 .page_size = 4096,
2919 .tested = TEST_OK_PREW,
2920 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002921 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002922 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002923 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002924 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002925 },
2926
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002927 {
2928 .vendor = "SST",
2929 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002930 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002931 .manufacture_id = SST_ID,
2932 .model_id = SST_39VF040,
2933 .total_size = 512,
2934 .page_size = 4096,
2935 .tested = TEST_OK_PROBE,
2936 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002937 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002938 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002939 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002940 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00002941 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002942
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002943 {
2944 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00002945 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002946 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002947 .manufacture_id = SST_ID,
2948 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00002949 .total_size = 1024,
2950 .page_size = 4096,
2951 .tested = TEST_UNTESTED,
2952 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002953 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00002954 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002955 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002956 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00002957 },
2958
2959 {
2960 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002961 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002962 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002963 .manufacture_id = SST_ID,
2964 .model_id = SST_49LF002A,
2965 .total_size = 256,
2966 .page_size = 16 * 1024,
2967 .tested = TEST_OK_PREW,
2968 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002969 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002970 .erase = erase_sst_fwhub,
2971 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002972 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002973 },
2974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002975 {
2976 .vendor = "SST",
2977 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002978 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002979 .manufacture_id = SST_ID,
2980 .model_id = SST_49LF003A,
2981 .total_size = 384,
2982 .page_size = 64 * 1024,
Peter Lemenkov45835c42009-09-25 01:09:18 +00002983 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002984 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002985 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002986 .erase = erase_sst_fwhub,
2987 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002988 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002989 },
2990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002991 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002992 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
2993 * and is only honored for 64k block erase, but not 4k sector erase.
2994 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 .vendor = "SST",
2996 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002997 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002998 .manufacture_id = SST_ID,
2999 .model_id = SST_49LF004A,
3000 .total_size = 512,
3001 .page_size = 64 * 1024,
3002 .tested = TEST_OK_PREW,
3003 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003004 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003005 .erase = NULL,
3006 .block_erasers =
3007 {
3008 {
3009 .eraseblocks = { {4 * 1024, 128} },
3010 .block_erase = erase_sector_jedec, /* missing unlock */
3011 }, {
3012 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00003013 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003014 }, {
3015 .eraseblocks = { {512 * 1024, 1} },
3016 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
3017 },
3018 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003019 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003020 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003021 },
3022
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003023 {
3024 .vendor = "SST",
3025 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003026 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003027 .manufacture_id = SST_ID,
3028 .model_id = SST_49LF004C,
3029 .total_size = 512,
3030 .page_size = 4 * 1024,
3031 .tested = TEST_UNTESTED,
3032 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003033 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003034 .erase = erase_49lfxxxc,
3035 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003036 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003037 },
3038
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003039 {
3040 .vendor = "SST",
3041 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003042 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003043 .manufacture_id = SST_ID,
3044 .model_id = SST_49LF008A,
3045 .total_size = 1024,
3046 .page_size = 64 * 1024,
3047 .tested = TEST_OK_PREW,
3048 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003049 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003050 .erase = erase_sst_fwhub,
3051 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003052 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003053 },
3054
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003055 {
3056 .vendor = "SST",
3057 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003058 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003059 .manufacture_id = SST_ID,
3060 .model_id = SST_49LF008C,
3061 .total_size = 1024,
3062 .page_size = 4 * 1024,
3063 .tested = TEST_UNTESTED,
3064 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003065 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003066 .erase = erase_49lfxxxc,
3067 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003068 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003069 },
3070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003071 {
3072 .vendor = "SST",
3073 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003074 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003075 .manufacture_id = SST_ID,
3076 .model_id = SST_49LF016C,
3077 .total_size = 2048,
3078 .page_size = 4 * 1024,
3079 .tested = TEST_OK_PREW,
3080 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003081 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 .erase = erase_49lfxxxc,
3083 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003084 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003085 },
3086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003087 {
3088 .vendor = "SST",
3089 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003090 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003091 .manufacture_id = SST_ID,
3092 .model_id = SST_49LF020,
3093 .total_size = 256,
3094 .page_size = 16 * 1024,
3095 .tested = TEST_OK_PR,
3096 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003097 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003098 .erase = erase_49lf040,
3099 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003100 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00003101 },
3102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003103 {
3104 .vendor = "SST",
3105 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003106 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .manufacture_id = SST_ID,
3108 .model_id = SST_49LF020A,
3109 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00003110 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00003111 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003112 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003113 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 .erase = erase_49lf040,
3115 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003116 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003117 },
3118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003119 {
3120 .vendor = "SST",
3121 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003122 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003123 .manufacture_id = SST_ID,
3124 .model_id = SST_49LF040,
3125 .total_size = 512,
3126 .page_size = 4096,
3127 .tested = TEST_OK_PREW,
3128 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003129 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003130 .erase = erase_49lf040,
3131 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003133 },
3134
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003135 {
3136 .vendor = "SST",
3137 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003138 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003139 .manufacture_id = SST_ID,
3140 .model_id = SST_49LF040B,
3141 .total_size = 512,
3142 .page_size = 64 * 1024,
3143 .tested = TEST_OK_PREW,
3144 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003145 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 .erase = erase_sst_fwhub,
3147 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003149 },
3150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003151 {
3152 .vendor = "SST",
3153 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003154 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003155 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00003156 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003157 .total_size = 1024,
3158 .page_size = 4096,
3159 .tested = TEST_OK_PREW,
3160 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003161 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003162 .erase = erase_49lf040,
3163 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003164 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003165 },
3166
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003167 {
3168 .vendor = "SST",
3169 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003170 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003171 .manufacture_id = SST_ID,
3172 .model_id = SST_49LF160C,
3173 .total_size = 2048,
3174 .page_size = 4 * 1024,
3175 .tested = TEST_OK_PREW,
3176 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003177 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003178 .erase = erase_49lfxxxc,
3179 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003181 },
3182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003183 {
3184 .vendor = "ST",
3185 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003186 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003187 .manufacture_id = ST_ID,
3188 .model_id = ST_M25P05A,
3189 .total_size = 64,
3190 .page_size = 256,
3191 .tested = TEST_UNTESTED,
3192 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003193 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003194 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003197 },
3198
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003199 /* The ST M25P05 is a bit of a problem. It has the same ID as the
3200 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
3201 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
3202 * only is successful if RDID does not work.
3203 */
3204 {
3205 .vendor = "ST",
3206 .name = "M25P05.RES",
3207 .bustype = CHIP_BUSTYPE_SPI,
3208 .manufacture_id = ST_ID,
3209 .model_id = ST_M25P05_RES,
3210 .total_size = 64,
3211 .page_size = 256,
3212 .tested = TEST_UNTESTED,
3213 .probe = probe_spi_res,
3214 .probe_timing = TIMING_ZERO,
3215 .erase = spi_chip_erase_c7,
3216 .write = spi_chip_write_1, /* 128 */
3217 .read = spi_chip_read,
3218 },
3219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003220 {
3221 .vendor = "ST",
3222 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003223 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .manufacture_id = ST_ID,
3225 .model_id = ST_M25P10A,
3226 .total_size = 128,
3227 .page_size = 256,
3228 .tested = TEST_UNTESTED,
3229 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003230 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003232 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003234 },
3235
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003236 /* The ST M25P10 has the same problem as the M25P05. */
3237 {
3238 .vendor = "ST",
3239 .name = "M25P10.RES",
3240 .bustype = CHIP_BUSTYPE_SPI,
3241 .manufacture_id = ST_ID,
3242 .model_id = ST_M25P10_RES,
3243 .total_size = 128,
3244 .page_size = 256,
3245 .tested = TEST_UNTESTED,
3246 .probe = probe_spi_res,
3247 .probe_timing = TIMING_ZERO,
3248 .erase = spi_chip_erase_c7,
3249 .write = spi_chip_write_1, /* 128 */
3250 .read = spi_chip_read,
3251 },
3252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003253 {
3254 .vendor = "ST",
3255 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003256 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003257 .manufacture_id = ST_ID,
3258 .model_id = ST_M25P20,
3259 .total_size = 256,
3260 .page_size = 256,
3261 .tested = TEST_UNTESTED,
3262 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003263 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003264 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003265 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003266 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003267 },
3268
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003269 {
3270 .vendor = "ST",
3271 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003272 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003273 .manufacture_id = ST_ID,
3274 .model_id = ST_M25P40,
3275 .total_size = 512,
3276 .page_size = 256,
Uwe Hermann04d5dc42009-07-03 17:12:05 +00003277 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003278 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003279 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003280 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003281 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003282 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003283 },
3284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003285 {
3286 .vendor = "ST",
3287 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003288 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003289 .manufacture_id = ST_ID,
3290 .model_id = ST_M25P40_RES,
3291 .total_size = 512,
3292 .page_size = 256,
3293 .tested = TEST_UNTESTED,
3294 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003295 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003296 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003297 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003298 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003299 },
3300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003301 {
3302 .vendor = "ST",
3303 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003304 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003305 .manufacture_id = ST_ID,
3306 .model_id = ST_M25P80,
3307 .total_size = 1024,
3308 .page_size = 256,
Carl-Daniel Hailfinger5190ec12009-06-22 10:09:07 +00003309 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003310 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003311 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003312 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003313 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003314 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003315 },
3316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003317 {
3318 .vendor = "ST",
3319 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003320 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003321 .manufacture_id = ST_ID,
3322 .model_id = ST_M25P16,
3323 .total_size = 2048,
3324 .page_size = 256,
3325 .tested = TEST_OK_PREW,
3326 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003327 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003329 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003330 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003331 },
3332
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003333 {
3334 .vendor = "ST",
3335 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003336 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003337 .manufacture_id = ST_ID,
3338 .model_id = ST_M25P32,
3339 .total_size = 4096,
3340 .page_size = 256,
3341 .tested = TEST_OK_PREW,
3342 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003343 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003344 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003345 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003346 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003347 },
3348
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003349 {
3350 .vendor = "ST",
3351 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003352 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003353 .manufacture_id = ST_ID,
3354 .model_id = ST_M25P64,
3355 .total_size = 8192,
3356 .page_size = 256,
3357 .tested = TEST_UNTESTED,
3358 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003359 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003360 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003361 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003362 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003363 },
3364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003365 {
3366 .vendor = "ST",
3367 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003368 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003369 .manufacture_id = ST_ID,
3370 .model_id = ST_M25P128,
3371 .total_size = 16384,
3372 .page_size = 256,
3373 .tested = TEST_UNTESTED,
3374 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003375 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003376 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003377 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003378 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003379 },
3380
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003381 {
3382 .vendor = "ST",
3383 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003384 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003385 .manufacture_id = ST_ID,
3386 .model_id = ST_M29F002B,
3387 .total_size = 256,
3388 .page_size = 64 * 1024,
3389 .tested = TEST_UNTESTED,
3390 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003391 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003392 .erase = erase_m29f002,
3393 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003394 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003395 },
3396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003397 {
3398 .vendor = "ST",
3399 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003400 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003401 .manufacture_id = ST_ID,
3402 .model_id = ST_M29F002T,
3403 .total_size = 256,
3404 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003405 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003406 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003407 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003408 .erase = erase_m29f002,
3409 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003410 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003411 },
3412
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003413 {
3414 .vendor = "ST",
3415 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003416 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003417 .manufacture_id = ST_ID,
3418 .model_id = ST_M29F040B,
3419 .total_size = 512,
3420 .page_size = 64 * 1024,
3421 .tested = TEST_OK_PREW,
3422 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003423 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003424 .erase = erase_29f040b,
3425 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003426 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003427 },
3428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 {
3430 .vendor = "ST",
3431 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003432 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003433 .manufacture_id = ST_ID,
3434 .model_id = ST_M29F400BT,
3435 .total_size = 512,
3436 .page_size = 64 * 1024,
3437 .tested = TEST_UNTESTED,
3438 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003439 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003440 .erase = erase_m29f400bt,
3441 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003442 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003443 },
3444
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003445 {
3446 .vendor = "ST",
3447 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003448 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003449 .manufacture_id = ST_ID,
3450 .model_id = ST_M29W010B,
3451 .total_size = 128,
3452 .page_size = 16 * 1024,
3453 .tested = TEST_UNTESTED,
3454 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003455 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003456 .erase = erase_chip_jedec,
3457 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003458 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003459 },
3460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003461 {
3462 .vendor = "ST",
3463 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003464 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003465 .manufacture_id = ST_ID,
3466 .model_id = ST_M29W040B,
3467 .total_size = 512,
3468 .page_size = 64 * 1024,
3469 .tested = TEST_UNTESTED,
3470 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003471 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003472 .erase = erase_chip_jedec,
3473 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003474 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003475 },
3476
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003477 {
3478 .vendor = "ST",
3479 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003480 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003481 .manufacture_id = ST_ID,
3482 .model_id = ST_M50FLW040A,
3483 .total_size = 512,
3484 .page_size = 64 * 1024,
3485 .tested = TEST_UNTESTED,
3486 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003487 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003488 .erase = erase_stm50flw0x0x,
3489 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003490 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003491 },
3492
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003493 {
3494 .vendor = "ST",
3495 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003496 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003497 .manufacture_id = ST_ID,
3498 .model_id = ST_M50FLW040B,
3499 .total_size = 512,
3500 .page_size = 64 * 1024,
3501 .tested = TEST_UNTESTED,
3502 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003503 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003504 .erase = erase_stm50flw0x0x,
3505 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003506 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003507 },
3508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003509 {
3510 .vendor = "ST",
3511 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003512 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003513 .manufacture_id = ST_ID,
3514 .model_id = ST_M50FLW080A,
3515 .total_size = 1024,
3516 .page_size = 64 * 1024,
3517 .tested = TEST_OK_PREW,
3518 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003519 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003520 .erase = erase_stm50flw0x0x,
3521 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003522 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003523 },
3524
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003525 {
3526 .vendor = "ST",
3527 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003528 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003529 .manufacture_id = ST_ID,
3530 .model_id = ST_M50FLW080B,
3531 .total_size = 1024,
3532 .page_size = 64 * 1024,
3533 .tested = TEST_UNTESTED,
3534 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003535 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003536 .erase = erase_stm50flw0x0x,
3537 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003538 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003539 },
3540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003541 {
3542 .vendor = "ST",
3543 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00003544 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003545 .manufacture_id = ST_ID,
3546 .model_id = ST_M50FW002,
3547 .total_size = 256,
3548 .page_size = 64 * 1024,
3549 .tested = TEST_UNTESTED,
3550 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003551 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003552 .erase = NULL,
3553 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003554 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003555 },
3556
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003557 {
3558 .vendor = "ST",
3559 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00003560 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003561 .manufacture_id = ST_ID,
3562 .model_id = ST_M50FW016,
3563 .total_size = 2048,
3564 .page_size = 64 * 1024,
3565 .tested = TEST_UNTESTED,
3566 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003567 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003568 .erase = erase_82802ab,
3569 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003570 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003571 },
3572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003573 {
3574 .vendor = "ST",
3575 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003576 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 .manufacture_id = ST_ID,
3578 .model_id = ST_M50FW040,
3579 .total_size = 512,
3580 .page_size = 64 * 1024,
3581 .tested = TEST_OK_PREW,
3582 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003583 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003584 .erase = erase_82802ab,
3585 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003586 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003587 },
3588
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003589 {
3590 .vendor = "ST",
3591 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003592 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003593 .manufacture_id = ST_ID,
3594 .model_id = ST_M50FW080,
3595 .total_size = 1024,
3596 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00003597 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003598 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003599 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003600 .erase = erase_82802ab,
3601 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003602 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003603 },
3604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003605 {
3606 .vendor = "ST",
3607 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00003608 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003609 .manufacture_id = ST_ID,
3610 .model_id = ST_M50LPW116,
3611 .total_size = 2048,
3612 .page_size = 64 * 1024,
3613 .tested = TEST_UNTESTED,
3614 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003615 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003616 .erase = erase_chip_jedec,
3617 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003618 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003619 },
3620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003621 {
3622 .vendor = "SyncMOS",
3623 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003624 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003625 .manufacture_id = SYNCMOS_ID,
3626 .model_id = S29C31004T,
3627 .total_size = 512,
3628 .page_size = 128,
3629 .tested = TEST_UNTESTED,
3630 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003631 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003632 .erase = erase_chip_jedec,
3633 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003634 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003635 },
3636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003637 {
3638 .vendor = "SyncMOS",
3639 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003640 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003641 .manufacture_id = SYNCMOS_ID,
3642 .model_id = S29C51001T,
3643 .total_size = 128,
3644 .page_size = 128,
3645 .tested = TEST_UNTESTED,
3646 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003647 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003648 .erase = erase_chip_jedec,
3649 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003650 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003651 },
3652
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003653 {
3654 .vendor = "SyncMOS",
3655 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003656 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003657 .manufacture_id = SYNCMOS_ID,
3658 .model_id = S29C51002T,
3659 .total_size = 256,
3660 .page_size = 128,
3661 .tested = TEST_OK_PREW,
3662 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003663 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003664 .erase = erase_chip_jedec,
3665 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003666 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003667 },
3668
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003669 {
3670 .vendor = "SyncMOS",
3671 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003672 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003673 .manufacture_id = SYNCMOS_ID,
3674 .model_id = S29C51004T,
3675 .total_size = 512,
3676 .page_size = 128,
3677 .tested = TEST_UNTESTED,
3678 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003679 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003680 .erase = erase_chip_jedec,
3681 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003682 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003683 },
3684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003686 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003687 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00003688 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003689 .manufacture_id = TI_OLD_ID,
3690 .model_id = TI_TMS29F002RB,
3691 .total_size = 256,
3692 .page_size = 16384, /* Non-uniform sectors */
3693 .tested = TEST_UNTESTED,
3694 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003695 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003696 .erase = NULL,
3697 .write = NULL,
3698 .read = read_memmapped,
3699 },
3700
3701 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003702 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003703 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003704 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003705 .manufacture_id = TI_OLD_ID,
3706 .model_id = TI_TMS29F002RT,
3707 .total_size = 256,
3708 .page_size = 16384, /* Non-uniform sectors */
3709 .tested = TEST_UNTESTED,
3710 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003711 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003712 .erase = NULL,
3713 .write = NULL,
3714 .read = read_memmapped,
3715 },
3716
3717 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003718 .vendor = "Winbond",
3719 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003720 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .manufacture_id = WINBOND_NEX_ID,
3722 .model_id = W_25X10,
3723 .total_size = 128,
3724 .page_size = 256,
3725 .tested = TEST_UNTESTED,
3726 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003727 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003728 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003729 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003730 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003731 },
3732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003733 {
3734 .vendor = "Winbond",
3735 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003736 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003737 .manufacture_id = WINBOND_NEX_ID,
3738 .model_id = W_25X20,
3739 .total_size = 256,
3740 .page_size = 256,
3741 .tested = TEST_UNTESTED,
3742 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003743 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003744 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003745 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003747 },
3748
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003749 {
3750 .vendor = "Winbond",
3751 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003752 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 .manufacture_id = WINBOND_NEX_ID,
3754 .model_id = W_25X40,
3755 .total_size = 512,
3756 .page_size = 256,
3757 .tested = TEST_OK_PREW,
3758 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003759 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003760 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003761 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003762 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003763 },
3764
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003765 {
3766 .vendor = "Winbond",
3767 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003768 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003769 .manufacture_id = WINBOND_NEX_ID,
3770 .model_id = W_25X80,
3771 .total_size = 1024,
3772 .page_size = 256,
3773 .tested = TEST_OK_PREW,
3774 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003775 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003776 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003777 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003778 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003779 },
3780
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003781 {
3782 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00003783 .name = "W25x16",
3784 .bustype = CHIP_BUSTYPE_SPI,
3785 .manufacture_id = WINBOND_NEX_ID,
3786 .model_id = W_25X16,
3787 .total_size = 2048,
3788 .page_size = 256,
3789 .tested = TEST_OK_PR,
3790 .probe = probe_spi_rdid,
3791 .probe_timing = TIMING_ZERO,
3792 .erase = spi_chip_erase_c7,
3793 .write = spi_chip_write_256,
3794 .read = spi_chip_read,
3795 },
3796
3797 {
3798 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00003799 .name = "W25x32",
3800 .bustype = CHIP_BUSTYPE_SPI,
3801 .manufacture_id = WINBOND_NEX_ID,
3802 .model_id = W_25X32,
3803 .total_size = 4096,
3804 .page_size = 256,
3805 .tested = TEST_OK_PROBE,
3806 .probe = probe_spi_rdid,
3807 .probe_timing = TIMING_ZERO,
3808 .erase = spi_chip_erase_c7,
3809 .write = spi_chip_write_256,
3810 .read = spi_chip_read,
3811 },
3812
3813 {
3814 .vendor = "Winbond",
3815 .name = "W25x64",
3816 .bustype = CHIP_BUSTYPE_SPI,
3817 .manufacture_id = WINBOND_NEX_ID,
3818 .model_id = W_25X64,
3819 .total_size = 8192,
3820 .page_size = 256,
3821 .tested = TEST_UNTESTED,
3822 .probe = probe_spi_rdid,
3823 .probe_timing = TIMING_ZERO,
3824 .erase = spi_chip_erase_c7,
3825 .write = spi_chip_write_256,
3826 .read = spi_chip_read,
3827 },
3828
3829 {
3830 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003831 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003832 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003833 .manufacture_id = WINBOND_ID,
3834 .model_id = W_29C011,
3835 .total_size = 128,
3836 .page_size = 128,
3837 .tested = TEST_OK_PREW,
3838 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003839 .probe_timing = 10, /* used datasheet for the W29C011A */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003840 .erase = erase_chip_jedec,
3841 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003842 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003843 },
3844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003845 {
3846 .vendor = "Winbond",
3847 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00003848 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003849 .manufacture_id = WINBOND_ID,
3850 .model_id = W_29C020C,
3851 .total_size = 256,
3852 .page_size = 128,
3853 .tested = TEST_OK_PREW,
3854 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003855 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003856 .erase = erase_chip_jedec,
3857 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003858 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003859 },
3860
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 {
3862 .vendor = "Winbond",
3863 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00003864 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003865 .manufacture_id = WINBOND_ID,
3866 .model_id = W_29C040P,
3867 .total_size = 512,
3868 .page_size = 256,
Carl-Daniel Hailfinger8a8a2262009-11-14 03:48:33 +00003869 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003870 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003871 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003872 .erase = erase_chip_jedec,
3873 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003874 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003875 },
3876
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003877 {
3878 .vendor = "Winbond",
3879 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003880 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003881 .manufacture_id = WINBOND_ID,
3882 .model_id = W_29C011,
3883 .total_size = 128,
3884 .page_size = 128,
3885 .tested = TEST_OK_PREW,
3886 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003887 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003888 .erase = erase_chip_jedec,
3889 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003890 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003891 },
3892
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003893 {
3894 .vendor = "Winbond",
3895 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003896 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003897 .manufacture_id = WINBOND_ID,
3898 .model_id = W_39V040A,
3899 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003900 .page_size = 64 * 1024,
Uwe Hermann690bcba2009-05-21 17:11:25 +00003901 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003902 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003903 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003904 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003905 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003906 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003907 },
3908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003909 {
3910 .vendor = "Winbond",
3911 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003912 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003913 .manufacture_id = WINBOND_ID,
3914 .model_id = W_39V040B,
3915 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003916 .page_size = 64 * 1024,
Luc Verhaegen8bfb59c2009-07-08 14:50:36 +00003917 .tested = TEST_OK_PR | TEST_BAD_ERASE | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003918 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003919 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003920 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003921 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003922 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003923 },
3924
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003925 {
3926 .vendor = "Winbond",
3927 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003928 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003929 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003930 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003931 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003932 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003933 .tested = TEST_OK_PREW,
3934 .probe = probe_w39v040c,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003935 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v040c.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003936 .erase = erase_w39v040c,
3937 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003938 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003939 },
3940
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003941 {
3942 .vendor = "Winbond",
3943 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003944 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003945 .manufacture_id = WINBOND_ID,
3946 .model_id = W_39V040FA,
3947 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003948 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003949 .tested = TEST_OK_PREW,
3950 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003951 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003952 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003953 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003954 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003955 },
3956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003957 {
3958 .vendor = "Winbond",
3959 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003960 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003961 .manufacture_id = WINBOND_ID,
3962 .model_id = W_39V080A,
3963 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003964 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003965 .tested = TEST_OK_PREW,
3966 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003967 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003969 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003970 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003971 },
3972
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003973 {
3974 .vendor = "Winbond",
3975 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00003976 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003977 .manufacture_id = WINBOND_ID,
3978 .model_id = W_49F002U,
3979 .total_size = 256,
3980 .page_size = 128,
3981 .tested = TEST_OK_PREW,
3982 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003983 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003984 .erase = erase_chip_jedec,
3985 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003986 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003987 },
3988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003989 {
3990 .vendor = "Winbond",
3991 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003992 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003993 .manufacture_id = WINBOND_ID,
3994 .model_id = W_49V002A,
3995 .total_size = 256,
3996 .page_size = 128,
3997 .tested = TEST_OK_PREW,
3998 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003999 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .erase = erase_chip_jedec,
4001 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004002 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004003 },
4004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004005 {
4006 .vendor = "Winbond",
4007 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004008 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004009 .manufacture_id = WINBOND_ID,
4010 .model_id = W_49V002FA,
4011 .total_size = 256,
4012 .page_size = 128,
4013 .tested = TEST_UNTESTED,
4014 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004015 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004016 .erase = erase_chip_jedec,
4017 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004018 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004019 },
4020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004021 {
4022 .vendor = "Winbond",
4023 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004024 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004025 .manufacture_id = WINBOND_ID,
4026 .model_id = W_39V080FA,
4027 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00004028 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004029 .tested = TEST_OK_PREW,
4030 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004031 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004032 .erase = erase_winbond_fwhub,
4033 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004034 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004035 },
4036
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004037 {
4038 .vendor = "Winbond",
4039 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004040 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004041 .manufacture_id = WINBOND_ID,
4042 .model_id = W_39V080FA_DM,
4043 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00004044 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004045 .tested = TEST_UNTESTED,
4046 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004047 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004048 .erase = erase_winbond_fwhub,
4049 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004050 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004051 },
4052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004053 {
4054 .vendor = "Atmel",
4055 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004056 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004057 .manufacture_id = ATMEL_ID,
4058 .model_id = GENERIC_DEVICE_ID,
4059 .total_size = 0,
4060 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004061 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004062 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004063 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004064 .erase = NULL,
4065 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004066 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004067 },
4068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004069 {
4070 .vendor = "EON",
4071 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004072 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004073 .manufacture_id = EON_ID_NOPREFIX,
4074 .model_id = GENERIC_DEVICE_ID,
4075 .total_size = 0,
4076 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004077 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004078 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004079 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004080 .erase = NULL,
4081 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004082 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004083 },
4084
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004085 {
4086 .vendor = "Macronix",
4087 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004088 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004089 .manufacture_id = MX_ID,
4090 .model_id = GENERIC_DEVICE_ID,
4091 .total_size = 0,
4092 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004093 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004094 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004095 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004096 .erase = NULL,
4097 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004098 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004099 },
4100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004101 {
4102 .vendor = "PMC",
4103 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004104 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004105 .manufacture_id = PMC_ID,
4106 .model_id = GENERIC_DEVICE_ID,
4107 .total_size = 0,
4108 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004109 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004110 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004111 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004112 .erase = NULL,
4113 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004114 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004115 },
4116
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004117 {
4118 .vendor = "SST",
4119 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004120 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004121 .manufacture_id = SST_ID,
4122 .model_id = GENERIC_DEVICE_ID,
4123 .total_size = 0,
4124 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004125 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004126 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004127 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004128 .erase = NULL,
4129 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004130 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004131 },
4132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 {
4134 .vendor = "ST",
4135 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004136 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004137 .manufacture_id = ST_ID,
4138 .model_id = GENERIC_DEVICE_ID,
4139 .total_size = 0,
4140 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004141 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004142 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004143 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004144 .erase = NULL,
4145 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004146 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004147 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00004148
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004149 {
Sean Nelson118e1d62009-11-24 02:08:11 +00004150 .vendor = "Sanyo",
4151 .name = "unknown Sanyo SPI chip",
4152 .bustype = CHIP_BUSTYPE_SPI,
4153 .manufacture_id = SANYO_ID,
4154 .model_id = GENERIC_DEVICE_ID,
4155 .total_size = 0,
4156 .page_size = 256,
4157 .tested = TEST_BAD_PREW,
4158 .probe = probe_spi_rdid,
4159 .probe_timing = TIMING_ZERO,
4160 .erase = NULL,
4161 .write = NULL,
4162 .read = NULL,
4163 },
4164
4165 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004166 .vendor = "Generic",
4167 .name = "unknown SPI chip (RDID)",
4168 .bustype = CHIP_BUSTYPE_SPI,
4169 .manufacture_id = GENERIC_MANUF_ID,
4170 .model_id = GENERIC_DEVICE_ID,
4171 .total_size = 0,
4172 .page_size = 256,
4173 .tested = TEST_BAD_PREW,
4174 .probe = probe_spi_rdid,
4175 .erase = NULL,
4176 .write = NULL,
4177 },
4178 {
4179 .vendor = "Generic",
4180 .name = "unknown SPI chip (REMS)",
4181 .bustype = CHIP_BUSTYPE_SPI,
4182 .manufacture_id = GENERIC_MANUF_ID,
4183 .model_id = GENERIC_DEVICE_ID,
4184 .total_size = 0,
4185 .page_size = 256,
4186 .tested = TEST_BAD_PREW,
4187 .probe = probe_spi_rems,
4188 .erase = NULL,
4189 .write = NULL,
4190 },
4191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004192 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00004193};