blob: d1bf2fe5b3bedba6383551ac5863eddcbfe2fb4e [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
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Carl-Daniel Hailfinger4c823182011-05-04 00:39:50 +000035const struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000064 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
Uwe Hermanna8b37272009-06-19 15:54:39 +000065 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +000068 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +000069 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000090 .model_id = AMD_AM29F002BB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000121 .model_id = AMD_AM29F002BT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000152 .model_id = AMD_AM29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000158 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000178 .model_id = AMD_AM29F040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000184 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000204 .model_id = AMD_AM29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000227 .name = "Am29LV001BB",
228 .bustype = CHIP_BUSTYPE_PARALLEL,
229 .manufacture_id = AMD_ID,
230 .model_id = AMD_AM29LV001BB,
231 .total_size = 128,
232 .page_size = 64 * 1024, /* unused */
233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
234 .tested = TEST_OK_PREW,
235 .probe = probe_jedec,
236 .probe_timing = TIMING_ZERO,
237 .block_erasers =
238 {
239 {
240 .eraseblocks = {
241 {8 * 1024, 1},
242 {4 * 1024, 2},
243 {16 * 1024, 7},
244 },
245 .block_erase = erase_sector_jedec,
246 }, {
247 .eraseblocks = { {128 * 1024, 1} },
248 .block_erase = erase_chip_block_jedec,
249 },
250 },
251 .write = write_jedec_1,
252 .read = read_memmapped,
253 },
254
255 {
256 .vendor = "AMD",
257 .name = "Am29LV001BT",
258 .bustype = CHIP_BUSTYPE_PARALLEL,
259 .manufacture_id = AMD_ID,
260 .model_id = AMD_AM29LV001BT,
261 .total_size = 128,
262 .page_size = 64 * 1024, /* unused */
263 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
264 .tested = TEST_UNTESTED,
265 .probe = probe_jedec,
266 .probe_timing = TIMING_ZERO,
267 .block_erasers =
268 {
269 {
270 .eraseblocks = {
271 {16 * 1024, 7},
272 {4 * 1024, 2},
273 {8 * 1024, 1},
274 },
275 .block_erase = erase_sector_jedec,
276 }, {
277 .eraseblocks = { {128 * 1024, 1} },
278 .block_erase = erase_chip_block_jedec,
279 },
280 },
281 .write = write_jedec_1,
282 .read = read_memmapped,
283 },
284
285 {
286 .vendor = "AMD",
287 .name = "Am29LV002BB",
288 .bustype = CHIP_BUSTYPE_PARALLEL,
289 .manufacture_id = AMD_ID,
290 .model_id = AMD_AM29LV002BB,
291 .total_size = 256,
292 .page_size = 64 * 1024, /* unused */
293 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
294 .tested = TEST_UNTESTED,
295 .probe = probe_jedec,
296 .probe_timing = TIMING_ZERO,
297 .block_erasers =
298 {
299 {
300 .eraseblocks = {
301 {16 * 1024, 1},
302 {8 * 1024, 2},
303 {32 * 1024, 1},
304 {64 * 1024, 3},
305 },
306 .block_erase = erase_sector_jedec,
307 }, {
308 .eraseblocks = { {256 * 1024, 1} },
309 .block_erase = erase_chip_block_jedec,
310 },
311 },
312 .write = write_jedec_1,
313 .read = read_memmapped,
314 },
315
316 {
317 .vendor = "AMD",
318 .name = "Am29LV002BT",
319 .bustype = CHIP_BUSTYPE_PARALLEL,
320 .manufacture_id = AMD_ID,
321 .model_id = AMD_AM29LV002BT,
322 .total_size = 256,
323 .page_size = 64 * 1024, /* unused */
324 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
325 .tested = TEST_UNTESTED,
326 .probe = probe_jedec,
327 .probe_timing = TIMING_ZERO,
328 .block_erasers =
329 {
330 {
331 .eraseblocks = {
332 {64 * 1024, 3},
333 {32 * 1024, 1},
334 {8 * 1024, 2},
335 {16 * 1024, 1},
336 },
337 .block_erase = erase_sector_jedec,
338 }, {
339 .eraseblocks = { {256 * 1024, 1} },
340 .block_erase = erase_chip_block_jedec,
341 },
342 },
343 .write = write_jedec_1,
344 .read = read_memmapped,
345 },
346
347 {
348 .vendor = "AMD",
349 .name = "Am29LV004BB",
350 .bustype = CHIP_BUSTYPE_PARALLEL,
351 .manufacture_id = AMD_ID,
352 .model_id = AMD_AM29LV004BB,
353 .total_size = 512,
354 .page_size = 64 * 1024, /* unused */
355 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
356 .tested = TEST_UNTESTED,
357 .probe = probe_jedec,
358 .probe_timing = TIMING_ZERO,
359 .block_erasers =
360 {
361 {
362 .eraseblocks = {
363 {16 * 1024, 1},
364 {8 * 1024, 2},
365 {32 * 1024, 1},
366 {64 * 1024, 7},
367 },
368 .block_erase = erase_sector_jedec,
369 }, {
370 .eraseblocks = { {512 * 1024, 1} },
371 .block_erase = erase_chip_block_jedec,
372 },
373 },
374 .write = write_jedec_1,
375 .read = read_memmapped,
376 },
377
378 {
379 .vendor = "AMD",
380 .name = "Am29LV004BT",
381 .bustype = CHIP_BUSTYPE_PARALLEL,
382 .manufacture_id = AMD_ID,
383 .model_id = AMD_AM29LV004BT,
384 .total_size = 512,
385 .page_size = 64 * 1024, /* unused */
386 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
387 .tested = TEST_UNTESTED,
388 .probe = probe_jedec,
389 .probe_timing = TIMING_ZERO,
390 .block_erasers =
391 {
392 {
393 .eraseblocks = {
394 {64 * 1024, 7},
395 {32 * 1024, 1},
396 {8 * 1024, 2},
397 {16 * 1024, 1},
398 },
399 .block_erase = erase_sector_jedec,
400 }, {
401 .eraseblocks = { {512 * 1024, 1} },
402 .block_erase = erase_chip_block_jedec,
403 },
404 },
405 .write = write_jedec_1,
406 .read = read_memmapped,
407 },
408
409 {
410 .vendor = "AMD",
411 .name = "Am29LV008BB",
412 .bustype = CHIP_BUSTYPE_PARALLEL,
413 .manufacture_id = AMD_ID,
414 .model_id = AMD_AM29LV008BB,
415 .total_size = 1024,
416 .page_size = 64 * 1024, /* unused */
417 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
418 .tested = TEST_UNTESTED,
419 .probe = probe_jedec,
420 .probe_timing = TIMING_ZERO,
421 .block_erasers =
422 {
423 {
424 .eraseblocks = {
425 {16 * 1024, 1},
426 {8 * 1024, 2},
427 {32 * 1024, 1},
428 {64 * 1024, 15},
429 },
430 .block_erase = erase_sector_jedec,
431 }, {
432 .eraseblocks = { {1024 * 1024, 1} },
433 .block_erase = erase_chip_block_jedec,
434 },
435 },
436 .write = write_jedec_1,
437 .read = read_memmapped,
438 },
439
440 {
441 .vendor = "AMD",
442 .name = "Am29LV008BT",
443 .bustype = CHIP_BUSTYPE_PARALLEL,
444 .manufacture_id = AMD_ID,
445 .model_id = AMD_AM29LV008BT,
446 .total_size = 1024,
447 .page_size = 64 * 1024, /* unused */
448 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
449 .tested = TEST_UNTESTED,
450 .probe = probe_jedec,
451 .probe_timing = TIMING_ZERO,
452 .block_erasers =
453 {
454 {
455 .eraseblocks = {
456 {64 * 1024, 15},
457 {32 * 1024, 1},
458 {8 * 1024, 2},
459 {16 * 1024, 1},
460 },
461 .block_erase = erase_sector_jedec,
462 }, {
463 .eraseblocks = { {1024 * 1024, 1} },
464 .block_erase = erase_chip_block_jedec,
465 },
466 },
467 .write = write_jedec_1,
468 .read = read_memmapped,
469 },
470
471 {
472 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000473 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000474 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000476 .model_id = AMD_AM29LV040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000477 .total_size = 512,
478 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000479 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000480 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +0000481 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000482 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000483 .block_erasers =
484 {
485 {
486 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000487 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000488 }, {
489 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000490 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000491 },
492 },
Sean Nelson35727f72010-01-28 23:55:12 +0000493 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000494 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000495 },
496
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000497 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000498 .vendor = "AMD",
499 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000500 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000501 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000502 .model_id = AMD_AM29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000503 .total_size = 1024,
504 .page_size = 64 * 1024,
David Borg204f4652010-12-04 03:26:40 +0000505 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
Peter Stuge8440cc02009-01-25 23:55:12 +0000506 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000507 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000508 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000509 .block_erasers =
510 {
511 {
512 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000513 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000514 }, {
515 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000516 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000517 },
518 },
Sean Nelson35727f72010-01-28 23:55:12 +0000519 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000520 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000521 },
522
523 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000524 .vendor = "AMIC",
525 .name = "A25L05PT",
526 .bustype = CHIP_BUSTYPE_SPI,
527 .manufacture_id = AMIC_ID,
528 .model_id = AMIC_A25L05PT,
529 .total_size = 64,
530 .page_size = 256,
531 .tested = TEST_UNTESTED,
532 .probe = probe_spi_rdid4,
533 .probe_timing = TIMING_ZERO,
534 .block_erasers =
535 {
536 {
537 .eraseblocks = {
538 {32 * 1024, 1},
539 {16 * 1024, 1},
540 {8 * 1024, 1},
541 {4 * 1024, 2},
542 },
543 .block_erase = spi_block_erase_d8,
544 }, {
545 .eraseblocks = { {64 * 1024, 1} },
546 .block_erase = spi_block_erase_c7,
547 }
548 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000549 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000550 .unlock = spi_disable_blockprotect,
551 .write = spi_chip_write_256,
552 .read = spi_chip_read,
553 },
554
555 {
556 .vendor = "AMIC",
557 .name = "A25L05PU",
558 .bustype = CHIP_BUSTYPE_SPI,
559 .manufacture_id = AMIC_ID,
560 .model_id = AMIC_A25L05PU,
561 .total_size = 64,
562 .page_size = 256,
563 .tested = TEST_UNTESTED,
564 .probe = probe_spi_rdid4,
565 .probe_timing = TIMING_ZERO,
566 .block_erasers =
567 {
568 {
569 .eraseblocks = {
570 {4 * 1024, 2},
571 {8 * 1024, 1},
572 {16 * 1024, 1},
573 {32 * 1024, 1},
574 },
575 .block_erase = spi_block_erase_d8,
576 }, {
577 .eraseblocks = { {64 * 1024, 1} },
578 .block_erase = spi_block_erase_c7,
579 }
580 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000581 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000582 .unlock = spi_disable_blockprotect,
583 .write = spi_chip_write_256,
584 .read = spi_chip_read,
585 },
586
587 {
588 .vendor = "AMIC",
589 .name = "A25L10PT",
590 .bustype = CHIP_BUSTYPE_SPI,
591 .manufacture_id = AMIC_ID,
592 .model_id = AMIC_A25L10PT,
593 .total_size = 128,
594 .page_size = 256,
595 .tested = TEST_UNTESTED,
596 .probe = probe_spi_rdid4,
597 .probe_timing = TIMING_ZERO,
598 .block_erasers =
599 {
600 {
601 .eraseblocks = {
602 {64 * 1024, 1},
603 {32 * 1024, 1},
604 {16 * 1024, 1},
605 {8 * 1024, 1},
606 {4 * 1024, 2},
607 },
608 .block_erase = spi_block_erase_d8,
609 }, {
610 .eraseblocks = { {128 * 1024, 1} },
611 .block_erase = spi_block_erase_c7,
612 }
613 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000614 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000615 .unlock = spi_disable_blockprotect,
616 .write = spi_chip_write_256,
617 .read = spi_chip_read,
618 },
619
620 {
621 .vendor = "AMIC",
622 .name = "A25L10PU",
623 .bustype = CHIP_BUSTYPE_SPI,
624 .manufacture_id = AMIC_ID,
625 .model_id = AMIC_A25L10PU,
626 .total_size = 128,
627 .page_size = 256,
628 .tested = TEST_UNTESTED,
629 .probe = probe_spi_rdid4,
630 .probe_timing = TIMING_ZERO,
631 .block_erasers =
632 {
633 {
634 .eraseblocks = {
635 {4 * 1024, 2},
636 {8 * 1024, 1},
637 {16 * 1024, 1},
638 {32 * 1024, 1},
639 {64 * 1024, 1},
640 },
641 .block_erase = spi_block_erase_d8,
642 }, {
643 .eraseblocks = { {128 * 1024, 1} },
644 .block_erase = spi_block_erase_c7,
645 }
646 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000647 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000648 .unlock = spi_disable_blockprotect,
649 .write = spi_chip_write_256,
650 .read = spi_chip_read,
651 },
652
653 {
654 .vendor = "AMIC",
655 .name = "A25L20PT",
656 .bustype = CHIP_BUSTYPE_SPI,
657 .manufacture_id = AMIC_ID,
658 .model_id = AMIC_A25L20PT,
659 .total_size = 256,
660 .page_size = 256,
661 .tested = TEST_UNTESTED,
662 .probe = probe_spi_rdid4,
663 .probe_timing = TIMING_ZERO,
664 .block_erasers =
665 {
666 {
667 .eraseblocks = {
668 {64 * 1024, 3},
669 {32 * 1024, 1},
670 {16 * 1024, 1},
671 {8 * 1024, 1},
672 {4 * 1024, 2},
673 },
674 .block_erase = spi_block_erase_d8,
675 }, {
676 .eraseblocks = { {256 * 1024, 1} },
677 .block_erase = spi_block_erase_c7,
678 }
679 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000680 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000681 .unlock = spi_disable_blockprotect,
682 .write = spi_chip_write_256,
683 .read = spi_chip_read,
684 },
685
686 {
687 .vendor = "AMIC",
688 .name = "A25L20PU",
689 .bustype = CHIP_BUSTYPE_SPI,
690 .manufacture_id = AMIC_ID,
691 .model_id = AMIC_A25L20PU,
692 .total_size = 256,
693 .page_size = 256,
694 .tested = TEST_UNTESTED,
695 .probe = probe_spi_rdid4,
696 .probe_timing = TIMING_ZERO,
697 .block_erasers =
698 {
699 {
700 .eraseblocks = {
701 {4 * 1024, 2},
702 {8 * 1024, 1},
703 {16 * 1024, 1},
704 {32 * 1024, 1},
705 {64 * 1024, 3},
706 },
707 .block_erase = spi_block_erase_d8,
708 }, {
709 .eraseblocks = { {256 * 1024, 1} },
710 .block_erase = spi_block_erase_c7,
711 }
712 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000713 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000714 .unlock = spi_disable_blockprotect,
715 .write = spi_chip_write_256,
716 .read = spi_chip_read,
717 },
718
719 /* The A25L40P{T,U} chips are distinguished by their
720 * erase block layouts, but without any distinction in RDID.
721 * This inexplicable quirk was verified by Rudolf Marek
722 * and discussed on the flashrom mailing list on 2010-07-12.
723 */
724 {
725 .vendor = "AMIC",
726 .name = "A25L40PT",
727 .bustype = CHIP_BUSTYPE_SPI,
728 .manufacture_id = AMIC_ID,
729 .model_id = AMIC_A25L40PT,
730 .total_size = 512,
731 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000732 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000733 .probe = probe_spi_rdid4,
734 .probe_timing = TIMING_ZERO,
735 .block_erasers =
736 {
737 {
738 .eraseblocks = {
739 {64 * 1024, 7},
740 {32 * 1024, 1},
741 {16 * 1024, 1},
742 {8 * 1024, 1},
743 {4 * 1024, 2},
744 },
745 .block_erase = spi_block_erase_d8,
746 }, {
747 .eraseblocks = { {512 * 1024, 1} },
748 .block_erase = spi_block_erase_c7,
749 }
750 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000751 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000752 .unlock = spi_disable_blockprotect,
753 .write = spi_chip_write_256,
754 .read = spi_chip_read,
755 },
756
757 {
758 .vendor = "AMIC",
759 .name = "A25L40PU",
760 .bustype = CHIP_BUSTYPE_SPI,
761 .manufacture_id = AMIC_ID,
762 .model_id = AMIC_A25L40PU,
763 .total_size = 512,
764 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000765 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000766 .probe = probe_spi_rdid4,
767 .probe_timing = TIMING_ZERO,
768 .block_erasers =
769 {
770 {
771 .eraseblocks = {
772 {4 * 1024, 2},
773 {8 * 1024, 1},
774 {16 * 1024, 1},
775 {32 * 1024, 1},
776 {64 * 1024, 7},
777 },
778 .block_erase = spi_block_erase_d8,
779 }, {
780 .eraseblocks = { {512 * 1024, 1} },
781 .block_erase = spi_block_erase_c7,
782 }
783 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000784 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000785 .unlock = spi_disable_blockprotect,
786 .write = spi_chip_write_256,
787 .read = spi_chip_read,
788 },
789
790 {
791 .vendor = "AMIC",
792 .name = "A25L80P",
793 .bustype = CHIP_BUSTYPE_SPI,
794 .manufacture_id = AMIC_ID,
795 .model_id = AMIC_A25L80P,
796 .total_size = 1024,
797 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000798 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000799 .probe = probe_spi_rdid4,
800 .probe_timing = TIMING_ZERO,
801 .block_erasers =
802 {
803 {
804 .eraseblocks = {
805 {4 * 1024, 2},
806 {8 * 1024, 1},
807 {16 * 1024, 1},
808 {32 * 1024, 1},
809 {64 * 1024, 15},
810 },
811 .block_erase = spi_block_erase_d8,
812 }, {
813 .eraseblocks = { {1024 * 1024, 1} },
814 .block_erase = spi_block_erase_c7,
815 }
816 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000817 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000818 .unlock = spi_disable_blockprotect,
819 .write = spi_chip_write_256,
820 .read = spi_chip_read,
821 },
822
823 {
824 .vendor = "AMIC",
825 .name = "A25L16PT",
826 .bustype = CHIP_BUSTYPE_SPI,
827 .manufacture_id = AMIC_ID,
828 .model_id = AMIC_A25L16PT,
829 .total_size = 2048,
830 .page_size = 256,
831 .tested = TEST_UNTESTED,
832 .probe = probe_spi_rdid4,
833 .probe_timing = TIMING_ZERO,
834 .block_erasers =
835 {
836 {
837 .eraseblocks = {
838 {64 * 1024, 31},
839 {32 * 1024, 1},
840 {16 * 1024, 1},
841 {8 * 1024, 1},
842 {4 * 1024, 2},
843 },
844 .block_erase = spi_block_erase_d8,
845 }, {
846 .eraseblocks = { {2048 * 1024, 1} },
847 .block_erase = spi_block_erase_60,
848 }, {
849 .eraseblocks = { {2048 * 1024, 1} },
850 .block_erase = spi_block_erase_c7,
851 }
852 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000853 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000854 .unlock = spi_disable_blockprotect,
855 .write = spi_chip_write_256,
856 .read = spi_chip_read,
857 },
858
859 {
860 .vendor = "AMIC",
861 .name = "A25L16PU",
862 .bustype = CHIP_BUSTYPE_SPI,
863 .manufacture_id = AMIC_ID,
864 .model_id = AMIC_A25L16PU,
865 .total_size = 2048,
866 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000867 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000868 .probe = probe_spi_rdid4,
869 .probe_timing = TIMING_ZERO,
870 .block_erasers =
871 {
872 {
873 .eraseblocks = {
874 {4 * 1024, 2},
875 {8 * 1024, 1},
876 {16 * 1024, 1},
877 {32 * 1024, 1},
878 {64 * 1024, 31},
879 },
880 .block_erase = spi_block_erase_d8,
881 }, {
882 .eraseblocks = { {2048 * 1024, 1} },
883 .block_erase = spi_block_erase_60,
884 }, {
885 .eraseblocks = { {2048 * 1024, 1} },
886 .block_erase = spi_block_erase_c7,
887 }
888 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000889 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000890 .unlock = spi_disable_blockprotect,
891 .write = spi_chip_write_256,
892 .read = spi_chip_read,
893 },
894
895 {
896 .vendor = "AMIC",
Dan Lenski11617122010-07-29 15:00:40 +0000897 .name = "A25L512",
898 .bustype = CHIP_BUSTYPE_SPI,
899 .manufacture_id = AMIC_ID_NOPREFIX,
900 .model_id = AMIC_A25L512,
901 .total_size = 64,
902 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000903 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000904 .tested = TEST_UNTESTED,
905 .probe = probe_spi_rdid,
906 .probe_timing = TIMING_ZERO,
907 .block_erasers =
908 {
909 {
910 .eraseblocks = { { 4 * 1024, 16 } },
911 .block_erase = spi_block_erase_20,
912 }, {
913 .eraseblocks = { { 64 * 1024, 1 } },
914 .block_erase = spi_block_erase_d8,
915 }, {
916 .eraseblocks = { { 64 * 1024, 1 } },
917 .block_erase = spi_block_erase_c7,
918 }
919 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000920 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000921 .unlock = spi_disable_blockprotect,
922 .write = spi_chip_write_256,
923 .read = spi_chip_read,
924 },
925
926 {
927 .vendor = "AMIC",
928 .name = "A25L010",
929 .bustype = CHIP_BUSTYPE_SPI,
930 .manufacture_id = AMIC_ID_NOPREFIX,
931 .model_id = AMIC_A25L010,
932 .total_size = 128,
933 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000934 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000935 .tested = TEST_UNTESTED,
936 .probe = probe_spi_rdid,
937 .probe_timing = TIMING_ZERO,
938 .block_erasers =
939 {
940 {
941 .eraseblocks = { { 4 * 1024, 32 } },
942 .block_erase = spi_block_erase_20,
943 }, {
944 .eraseblocks = { { 64 * 1024, 2 } },
945 .block_erase = spi_block_erase_d8,
946 }, {
947 .eraseblocks = { { 128 * 1024, 1 } },
948 .block_erase = spi_block_erase_c7,
949 }
950 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000951 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000952 .unlock = spi_disable_blockprotect,
953 .write = spi_chip_write_256,
954 .read = spi_chip_read,
955 },
956
957 {
958 .vendor = "AMIC",
959 .name = "A25L020",
960 .bustype = CHIP_BUSTYPE_SPI,
961 .manufacture_id = AMIC_ID_NOPREFIX,
962 .model_id = AMIC_A25L020,
963 .total_size = 256,
964 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000965 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000966 .tested = TEST_UNTESTED,
967 .probe = probe_spi_rdid,
968 .probe_timing = TIMING_ZERO,
969 .block_erasers =
970 {
971 {
972 .eraseblocks = { { 4 * 1024, 64 } },
973 .block_erase = spi_block_erase_20,
974 }, {
975 .eraseblocks = { { 64 * 1024, 4 } },
976 .block_erase = spi_block_erase_d8,
977 }, {
978 .eraseblocks = { { 256 * 1024, 1 } },
979 .block_erase = spi_block_erase_c7,
980 }
981 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000982 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000983 .unlock = spi_disable_blockprotect,
984 .write = spi_chip_write_256,
985 .read = spi_chip_read,
986 },
987
988 {
989 .vendor = "AMIC",
990 .name = "A25L040",
991 .bustype = CHIP_BUSTYPE_SPI,
992 .manufacture_id = AMIC_ID_NOPREFIX,
993 .model_id = AMIC_A25L040,
994 .total_size = 512,
995 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000996 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000997 .tested = TEST_UNTESTED,
998 .probe = probe_spi_rdid,
999 .probe_timing = TIMING_ZERO,
1000 .block_erasers =
1001 {
1002 {
1003 .eraseblocks = { { 4 * 1024, 128 } },
1004 .block_erase = spi_block_erase_20,
1005 }, {
1006 .eraseblocks = { { 64 * 1024, 8 } },
1007 .block_erase = spi_block_erase_d8,
1008 }, {
1009 .eraseblocks = { { 512 * 1024, 1 } },
1010 .block_erase = spi_block_erase_c7,
1011 }
1012 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001013 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001014 .unlock = spi_disable_blockprotect,
1015 .write = spi_chip_write_256,
1016 .read = spi_chip_read,
1017 },
1018
1019 {
1020 .vendor = "AMIC",
1021 .name = "A25L080",
1022 .bustype = CHIP_BUSTYPE_SPI,
1023 .manufacture_id = AMIC_ID_NOPREFIX,
1024 .model_id = AMIC_A25L080,
1025 .total_size = 1024,
1026 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001027 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001028 .tested = TEST_UNTESTED,
1029 .probe = probe_spi_rdid,
1030 .probe_timing = TIMING_ZERO,
1031 .block_erasers =
1032 {
1033 {
1034 .eraseblocks = { { 4 * 1024, 256 } },
1035 .block_erase = spi_block_erase_20,
1036 }, {
1037 .eraseblocks = { { 64 * 1024, 16 } },
1038 .block_erase = spi_block_erase_d8,
1039 }, {
1040 .eraseblocks = { { 1024 * 1024, 1 } },
1041 .block_erase = spi_block_erase_c7,
1042 }
1043 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001044 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001045 .unlock = spi_disable_blockprotect,
1046 .write = spi_chip_write_256,
1047 .read = spi_chip_read,
1048 },
1049
1050 {
1051 .vendor = "AMIC",
1052 .name = "A25L016",
1053 .bustype = CHIP_BUSTYPE_SPI,
1054 .manufacture_id = AMIC_ID_NOPREFIX,
1055 .model_id = AMIC_A25L016,
1056 .total_size = 2048,
1057 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001058 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001059 .tested = TEST_UNTESTED,
1060 .probe = probe_spi_rdid,
1061 .probe_timing = TIMING_ZERO,
1062 .block_erasers =
1063 {
1064 {
1065 .eraseblocks = { { 4 * 1024, 512 } },
1066 .block_erase = spi_block_erase_20,
1067 }, {
1068 .eraseblocks = { { 64 * 1024, 32 } },
1069 .block_erase = spi_block_erase_d8,
1070 }, {
1071 .eraseblocks = { { 2048 * 1024, 1 } },
1072 .block_erase = spi_block_erase_c7,
1073 }
1074 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001075 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001076 .unlock = spi_disable_blockprotect,
1077 .write = spi_chip_write_256,
1078 .read = spi_chip_read,
1079 },
1080
1081 {
1082 .vendor = "AMIC",
1083 .name = "A25L032",
1084 .bustype = CHIP_BUSTYPE_SPI,
1085 .manufacture_id = AMIC_ID_NOPREFIX,
1086 .model_id = AMIC_A25L032,
1087 .total_size = 4096,
1088 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001089 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001090 .tested = TEST_UNTESTED,
1091 .probe = probe_spi_rdid,
1092 .probe_timing = TIMING_ZERO,
1093 .block_erasers =
1094 {
1095 {
1096 .eraseblocks = { { 4 * 1024, 1024 } },
1097 .block_erase = spi_block_erase_20,
1098 }, {
1099 .eraseblocks = { { 64 * 1024, 64 } },
1100 .block_erase = spi_block_erase_52,
1101 }, {
1102 .eraseblocks = { { 64 * 1024, 64 } },
1103 .block_erase = spi_block_erase_d8,
1104 }, {
1105 .eraseblocks = { { 4096 * 1024, 1 } },
1106 .block_erase = spi_block_erase_60,
1107 }, {
1108 .eraseblocks = { { 4096 * 1024, 1 } },
1109 .block_erase = spi_block_erase_c7,
1110 }
1111 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001112 .printlock = spi_prettyprint_status_register_amic_a25l032,
Dan Lenski11617122010-07-29 15:00:40 +00001113 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1114 .write = spi_chip_write_256,
1115 .read = spi_chip_read,
1116 },
1117
1118 {
1119 .vendor = "AMIC",
1120 .name = "A25LQ032",
1121 .bustype = CHIP_BUSTYPE_SPI,
1122 .manufacture_id = AMIC_ID_NOPREFIX,
1123 .model_id = AMIC_A25LQ032,
1124 .total_size = 4096,
1125 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001126 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001127 .tested = TEST_UNTESTED,
1128 .probe = probe_spi_rdid,
1129 .probe_timing = TIMING_ZERO,
1130 .block_erasers =
1131 {
1132 {
1133 .eraseblocks = { { 4 * 1024, 1024 } },
1134 .block_erase = spi_block_erase_20,
1135 }, {
1136 .eraseblocks = { { 64 * 1024, 64 } },
1137 .block_erase = spi_block_erase_52,
1138 }, {
1139 .eraseblocks = { { 64 * 1024, 64 } },
1140 .block_erase = spi_block_erase_d8,
1141 }, {
1142 .eraseblocks = { { 4096 * 1024, 1 } },
1143 .block_erase = spi_block_erase_60,
1144 }, {
1145 .eraseblocks = { { 4096 * 1024, 1 } },
1146 .block_erase = spi_block_erase_c7,
1147 }
1148 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001149 .printlock = spi_prettyprint_status_register_amic_a25lq032,
Dan Lenski11617122010-07-29 15:00:40 +00001150 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1151 .write = spi_chip_write_256,
1152 .read = spi_chip_read,
1153 },
1154
1155 {
1156 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001157 .name = "A29002B",
1158 .bustype = CHIP_BUSTYPE_PARALLEL,
1159 .manufacture_id = AMIC_ID_NOPREFIX,
1160 .model_id = AMIC_A29002B,
1161 .total_size = 256,
1162 .page_size = 64 * 1024,
1163 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1164 .tested = TEST_UNTESTED,
1165 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001166 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001167 .block_erasers =
1168 {
1169 {
1170 .eraseblocks = {
1171 {16 * 1024, 1},
1172 {8 * 1024, 2},
1173 {32 * 1024, 1},
1174 {64 * 1024, 3},
1175 },
1176 .block_erase = erase_sector_jedec,
1177 }, {
1178 .eraseblocks = { {256 * 1024, 1} },
1179 .block_erase = erase_chip_block_jedec,
1180 },
1181 },
1182 .write = write_jedec_1,
1183 .read = read_memmapped,
1184 },
1185
1186 {
1187 .vendor = "AMIC",
1188 .name = "A29002T",
1189 .bustype = CHIP_BUSTYPE_PARALLEL,
1190 .manufacture_id = AMIC_ID_NOPREFIX,
1191 .model_id = AMIC_A29002T,
1192 .total_size = 256,
1193 .page_size = 64 * 1024,
1194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001195 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001196 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001197 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001198 .block_erasers =
1199 {
1200 {
1201 .eraseblocks = {
1202 {64 * 1024, 3},
1203 {32 * 1024, 1},
1204 {8 * 1024, 2},
1205 {16 * 1024, 1},
1206 },
1207 .block_erase = erase_sector_jedec,
1208 }, {
1209 .eraseblocks = { {256 * 1024, 1} },
1210 .block_erase = erase_chip_block_jedec,
1211 },
1212 },
1213 .write = write_jedec_1,
1214 .read = read_memmapped,
1215 },
1216
1217 {
1218 .vendor = "AMIC",
1219 .name = "A29040B",
1220 .bustype = CHIP_BUSTYPE_PARALLEL,
1221 .manufacture_id = AMIC_ID_NOPREFIX,
1222 .model_id = AMIC_A29040B,
1223 .total_size = 512,
1224 .page_size = 64 * 1024,
1225 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1226 .tested = TEST_UNTESTED,
1227 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001228 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001229 .block_erasers =
1230 {
1231 {
1232 .eraseblocks = { {64 * 1024, 8} },
1233 .block_erase = erase_sector_jedec,
1234 }, {
1235 .eraseblocks = { {512 * 1024, 1} },
1236 .block_erase = erase_chip_block_jedec,
1237 },
1238 },
1239 .write = write_jedec_1,
1240 .read = read_memmapped,
1241 },
1242
1243 {
1244 .vendor = "AMIC",
1245 .name = "A49LF040A",
1246 .bustype = CHIP_BUSTYPE_LPC,
1247 .manufacture_id = AMIC_ID_NOPREFIX,
1248 .model_id = AMIC_A49LF040A,
1249 .total_size = 512,
1250 .page_size = 64 * 1024,
1251 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001252 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001253 .probe = probe_jedec,
1254 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
1255 .block_erasers =
1256 {
1257 {
1258 .eraseblocks = { {64 * 1024, 8} },
1259 .block_erase = erase_block_jedec,
1260 }, {
1261 .eraseblocks = { {512 * 1024, 1} },
1262 .block_erase = erase_chip_block_jedec,
1263 }
1264 },
1265 .unlock = unlock_49fl00x,
1266 .write = write_jedec_1,
1267 .read = read_memmapped,
1268 },
1269
1270 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001271 .vendor = "Atmel",
1272 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001273 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001274 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001275 .model_id = ATMEL_AT25DF021,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001276 .total_size = 256,
1277 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001278 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001279 .tested = TEST_UNTESTED,
1280 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001281 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001282 .block_erasers =
1283 {
1284 {
1285 .eraseblocks = { {4 * 1024, 64} },
1286 .block_erase = spi_block_erase_20,
1287 }, {
1288 .eraseblocks = { {32 * 1024, 8} },
1289 .block_erase = spi_block_erase_52,
1290 }, {
1291 .eraseblocks = { {64 * 1024, 4} },
1292 .block_erase = spi_block_erase_d8,
1293 }, {
1294 .eraseblocks = { {256 * 1024, 1} },
1295 .block_erase = spi_block_erase_60,
1296 }, {
1297 .eraseblocks = { {256 * 1024, 1} },
1298 .block_erase = spi_block_erase_c7,
1299 }
1300 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001301 .printlock = spi_prettyprint_status_register_at25df,
1302 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001303 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001304 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001305 },
1306
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001307 {
1308 .vendor = "Atmel",
1309 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001310 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001311 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001312 .model_id = ATMEL_AT25DF041A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001313 .total_size = 512,
1314 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001315 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001316 .tested = TEST_UNTESTED,
1317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001318 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001319 .block_erasers =
1320 {
1321 {
1322 .eraseblocks = { {4 * 1024, 128} },
1323 .block_erase = spi_block_erase_20,
1324 }, {
1325 .eraseblocks = { {32 * 1024, 16} },
1326 .block_erase = spi_block_erase_52,
1327 }, {
1328 .eraseblocks = { {64 * 1024, 8} },
1329 .block_erase = spi_block_erase_d8,
1330 }, {
1331 .eraseblocks = { {512 * 1024, 1} },
1332 .block_erase = spi_block_erase_60,
1333 }, {
1334 .eraseblocks = { {512 * 1024, 1} },
1335 .block_erase = spi_block_erase_c7,
1336 }
1337 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001338 .printlock = spi_prettyprint_status_register_at25df,
1339 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001340 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001341 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001342 },
1343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001344 {
1345 .vendor = "Atmel",
1346 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001347 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001348 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001349 .model_id = ATMEL_AT25DF081,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001350 .total_size = 1024,
1351 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001352 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001353 .tested = TEST_UNTESTED,
1354 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001355 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001356 .block_erasers =
1357 {
1358 {
1359 .eraseblocks = { {4 * 1024, 256} },
1360 .block_erase = spi_block_erase_20,
1361 }, {
1362 .eraseblocks = { {32 * 1024, 32} },
1363 .block_erase = spi_block_erase_52,
1364 }, {
1365 .eraseblocks = { {64 * 1024, 16} },
1366 .block_erase = spi_block_erase_d8,
1367 }, {
1368 .eraseblocks = { {1024 * 1024, 1} },
1369 .block_erase = spi_block_erase_60,
1370 }, {
1371 .eraseblocks = { {1024 * 1024, 1} },
1372 .block_erase = spi_block_erase_c7,
1373 }
1374 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001375 .printlock = spi_prettyprint_status_register_at25df,
1376 .unlock = spi_disable_blockprotect_at25df,
1377 .write = spi_chip_write_256,
1378 .read = spi_chip_read,
1379 },
1380
1381 {
1382 .vendor = "Atmel",
1383 .name = "AT25DF081A",
1384 .bustype = CHIP_BUSTYPE_SPI,
1385 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001386 .model_id = ATMEL_AT25DF081A,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001387 .total_size = 1024,
1388 .page_size = 256,
1389 .feature_bits = FEATURE_WRSR_WREN,
1390 .tested = TEST_UNTESTED,
1391 .probe = probe_spi_rdid,
1392 .probe_timing = TIMING_ZERO,
1393 .block_erasers =
1394 {
1395 {
1396 .eraseblocks = { {4 * 1024, 256} },
1397 .block_erase = spi_block_erase_20,
1398 }, {
1399 .eraseblocks = { {32 * 1024, 32} },
1400 .block_erase = spi_block_erase_52,
1401 }, {
1402 .eraseblocks = { {64 * 1024, 16} },
1403 .block_erase = spi_block_erase_d8,
1404 }, {
1405 .eraseblocks = { {1024 * 1024, 1} },
1406 .block_erase = spi_block_erase_60,
1407 }, {
1408 .eraseblocks = { {1024 * 1024, 1} },
1409 .block_erase = spi_block_erase_c7,
1410 }
1411 },
1412 .printlock = spi_prettyprint_status_register_at25df_sec,
1413 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001414 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001415 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001416 },
1417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001418 {
1419 .vendor = "Atmel",
1420 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001421 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001422 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001423 .model_id = ATMEL_AT25DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001424 .total_size = 2048,
1425 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001426 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001427 .tested = TEST_UNTESTED,
1428 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001429 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001430 .block_erasers =
1431 {
1432 {
1433 .eraseblocks = { {4 * 1024, 512} },
1434 .block_erase = spi_block_erase_20,
1435 }, {
1436 .eraseblocks = { {32 * 1024, 64} },
1437 .block_erase = spi_block_erase_52,
1438 }, {
1439 .eraseblocks = { {64 * 1024, 32} },
1440 .block_erase = spi_block_erase_d8,
1441 }, {
1442 .eraseblocks = { {2 * 1024 * 1024, 1} },
1443 .block_erase = spi_block_erase_60,
1444 }, {
1445 .eraseblocks = { {2 * 1024 * 1024, 1} },
1446 .block_erase = spi_block_erase_c7,
1447 }
1448 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001449 .printlock = spi_prettyprint_status_register_at25df_sec,
1450 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001451 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001452 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001453 },
1454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001455 {
1456 .vendor = "Atmel",
1457 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001458 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001459 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001460 .model_id = ATMEL_AT25DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001461 .total_size = 4096,
1462 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001463 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001464 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001465 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001466 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001467 .block_erasers =
1468 {
1469 {
1470 .eraseblocks = { {4 * 1024, 1024} },
1471 .block_erase = spi_block_erase_20,
1472 }, {
1473 .eraseblocks = { {32 * 1024, 128} },
1474 .block_erase = spi_block_erase_52,
1475 }, {
1476 .eraseblocks = { {64 * 1024, 64} },
1477 .block_erase = spi_block_erase_d8,
1478 }, {
1479 .eraseblocks = { {4 * 1024 * 1024, 1} },
1480 .block_erase = spi_block_erase_60,
1481 }, {
1482 .eraseblocks = { {4 * 1024 * 1024, 1} },
1483 .block_erase = spi_block_erase_c7,
1484 }
1485 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001486 .printlock = spi_prettyprint_status_register_at25df,
1487 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001488 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001489 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001490 },
1491
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001492 {
1493 .vendor = "Atmel",
1494 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001495 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001496 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001497 .model_id = ATMEL_AT25DF321A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001498 .total_size = 4096,
1499 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001500 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001501 .tested = TEST_UNTESTED,
1502 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001503 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001504 .block_erasers =
1505 {
1506 {
1507 .eraseblocks = { {4 * 1024, 1024} },
1508 .block_erase = spi_block_erase_20,
1509 }, {
1510 .eraseblocks = { {32 * 1024, 128} },
1511 .block_erase = spi_block_erase_52,
1512 }, {
1513 .eraseblocks = { {64 * 1024, 64} },
1514 .block_erase = spi_block_erase_d8,
1515 }, {
1516 .eraseblocks = { {4 * 1024 * 1024, 1} },
1517 .block_erase = spi_block_erase_60,
1518 }, {
1519 .eraseblocks = { {4 * 1024 * 1024, 1} },
1520 .block_erase = spi_block_erase_c7,
1521 }
1522 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001523 .printlock = spi_prettyprint_status_register_at25df_sec,
1524 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001525 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001526 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001527 },
1528
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001529 {
1530 .vendor = "Atmel",
1531 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001532 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001533 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001534 .model_id = ATMEL_AT25DF641,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001535 .total_size = 8192,
1536 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001537 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001538 .tested = TEST_UNTESTED,
1539 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001540 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001541 .block_erasers =
1542 {
1543 {
1544 .eraseblocks = { {4 * 1024, 2048} },
1545 .block_erase = spi_block_erase_20,
1546 }, {
1547 .eraseblocks = { {32 * 1024, 256} },
1548 .block_erase = spi_block_erase_52,
1549 }, {
1550 .eraseblocks = { {64 * 1024, 128} },
1551 .block_erase = spi_block_erase_d8,
1552 }, {
1553 .eraseblocks = { {8 * 1024 * 1024, 1} },
1554 .block_erase = spi_block_erase_60,
1555 }, {
1556 .eraseblocks = { {8 * 1024 * 1024, 1} },
1557 .block_erase = spi_block_erase_c7,
1558 }
1559 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001560 .printlock = spi_prettyprint_status_register_at25df_sec,
1561 .unlock = spi_disable_blockprotect_at25df_sec,
1562 .write = spi_chip_write_256,
1563 .read = spi_chip_read,
1564 },
1565
1566 {
1567 .vendor = "Atmel",
1568 .name = "AT25DQ161",
1569 .bustype = CHIP_BUSTYPE_SPI,
1570 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001571 .model_id = ATMEL_AT25DQ161,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001572 .total_size = 2048,
1573 .page_size = 256,
1574 .feature_bits = FEATURE_WRSR_WREN,
1575 .tested = TEST_UNTESTED,
1576 .probe = probe_spi_rdid,
1577 .probe_timing = TIMING_ZERO,
1578 .block_erasers =
1579 {
1580 {
1581 .eraseblocks = { {4 * 1024, 512} },
1582 .block_erase = spi_block_erase_20,
1583 }, {
1584 .eraseblocks = { {32 * 1024, 64} },
1585 .block_erase = spi_block_erase_52,
1586 }, {
1587 .eraseblocks = { {64 * 1024, 32} },
1588 .block_erase = spi_block_erase_d8,
1589 }, {
1590 .eraseblocks = { {2 * 1024 * 1024, 1} },
1591 .block_erase = spi_block_erase_60,
1592 }, {
1593 .eraseblocks = { {2 * 1024 * 1024, 1} },
1594 .block_erase = spi_block_erase_c7,
1595 }
1596 },
1597 .printlock = spi_prettyprint_status_register_at25df_sec,
1598 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001599 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001600 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001601 },
1602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001603 {
1604 .vendor = "Atmel",
1605 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001606 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001607 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001608 .model_id = ATMEL_AT25F512B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001609 .total_size = 64,
1610 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001611 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001612 .tested = TEST_UNTESTED,
1613 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001614 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001615 .block_erasers =
1616 {
1617 {
1618 .eraseblocks = { {4 * 1024, 16} },
1619 .block_erase = spi_block_erase_20,
1620 }, {
1621 .eraseblocks = { {32 * 1024, 2} },
1622 .block_erase = spi_block_erase_52,
1623 }, {
1624 .eraseblocks = { {32 * 1024, 2} },
1625 .block_erase = spi_block_erase_d8,
1626 }, {
1627 .eraseblocks = { {64 * 1024, 1} },
1628 .block_erase = spi_block_erase_60,
1629 }, {
1630 .eraseblocks = { {64 * 1024, 1} },
1631 .block_erase = spi_block_erase_c7,
1632 }
1633 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001634 .printlock = spi_prettyprint_status_register_at25f,
1635 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001636 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001637 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001638 },
1639
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001640 {
1641 .vendor = "Atmel",
1642 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001643 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001644 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001645 .model_id = ATMEL_AT25FS010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001646 .total_size = 128,
1647 .page_size = 256,
1648 .tested = TEST_UNTESTED,
1649 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001650 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001651 .block_erasers =
1652 {
1653 {
1654 .eraseblocks = { {4 * 1024, 32} },
1655 .block_erase = spi_block_erase_20,
1656 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001657 .eraseblocks = { {4 * 1024, 32} },
1658 .block_erase = spi_block_erase_d7,
1659 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001660 .eraseblocks = { {32 * 1024, 4} },
1661 .block_erase = spi_block_erase_52,
1662 }, {
1663 .eraseblocks = { {32 * 1024, 4} },
1664 .block_erase = spi_block_erase_d8,
1665 }, {
1666 .eraseblocks = { {128 * 1024, 1} },
1667 .block_erase = spi_block_erase_60,
1668 }, {
1669 .eraseblocks = { {128 * 1024, 1} },
1670 .block_erase = spi_block_erase_c7,
1671 }
1672 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001673 .printlock = spi_prettyprint_status_register_at25fs010,
1674 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001675 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001676 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001677 },
1678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 {
1680 .vendor = "Atmel",
1681 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001682 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001683 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001684 .model_id = ATMEL_AT25FS040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001685 .total_size = 512,
1686 .page_size = 256,
1687 .tested = TEST_UNTESTED,
1688 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001689 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001690 .block_erasers =
1691 {
1692 {
1693 .eraseblocks = { {4 * 1024, 128} },
1694 .block_erase = spi_block_erase_20,
1695 }, {
1696 .eraseblocks = { {64 * 1024, 8} },
1697 .block_erase = spi_block_erase_52,
1698 }, {
1699 .eraseblocks = { {64 * 1024, 8} },
1700 .block_erase = spi_block_erase_d8,
1701 }, {
1702 .eraseblocks = { {512 * 1024, 1} },
1703 .block_erase = spi_block_erase_60,
1704 }, {
1705 .eraseblocks = { {512 * 1024, 1} },
1706 .block_erase = spi_block_erase_c7,
1707 }
1708 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001709 .printlock = spi_prettyprint_status_register_at25fs040,
1710 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001711 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001712 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001713 },
1714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001715 {
1716 .vendor = "Atmel",
1717 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001718 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001719 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001720 .model_id = ATMEL_AT26DF041,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001721 .total_size = 512,
1722 .page_size = 256,
1723 .tested = TEST_UNTESTED,
1724 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001725 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001726 .block_erasers =
1727 {
1728 {
1729 .eraseblocks = { {4 * 1024, 128} },
1730 .block_erase = spi_block_erase_20,
1731 }
1732 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001733 .write = NULL /* Incompatible Page write */,
1734 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001735 },
1736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001737 {
1738 .vendor = "Atmel",
1739 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001740 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001741 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001742 .model_id = ATMEL_AT26DF081A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001743 .total_size = 1024,
1744 .page_size = 256,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001745 .feature_bits = FEATURE_WRSR_WREN,
1746 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001747 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001748 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001749 .block_erasers =
1750 {
1751 {
1752 .eraseblocks = { {4 * 1024, 256} },
1753 .block_erase = spi_block_erase_20,
1754 }, {
1755 .eraseblocks = { {32 * 1024, 32} },
1756 .block_erase = spi_block_erase_52,
1757 }, {
1758 .eraseblocks = { {64 * 1024, 16} },
1759 .block_erase = spi_block_erase_d8,
1760 }, {
1761 .eraseblocks = { {1024 * 1024, 1} },
1762 .block_erase = spi_block_erase_60,
1763 }, {
1764 .eraseblocks = { {1024 * 1024, 1} },
1765 .block_erase = spi_block_erase_c7,
1766 }
1767 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001768 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001769 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001770 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001771 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001772 },
1773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 {
1775 .vendor = "Atmel",
1776 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001777 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001778 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001779 .model_id = ATMEL_AT26DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001780 .total_size = 2048,
1781 .page_size = 256,
1782 .tested = TEST_UNTESTED,
1783 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001784 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001785 .block_erasers =
1786 {
1787 {
1788 .eraseblocks = { {4 * 1024, 512} },
1789 .block_erase = spi_block_erase_20,
1790 }, {
1791 .eraseblocks = { {32 * 1024, 64} },
1792 .block_erase = spi_block_erase_52,
1793 }, {
1794 .eraseblocks = { {64 * 1024, 32} },
1795 .block_erase = spi_block_erase_d8,
1796 }, {
1797 .eraseblocks = { {2 * 1024 * 1024, 1} },
1798 .block_erase = spi_block_erase_60,
1799 }, {
1800 .eraseblocks = { {2 * 1024 * 1024, 1} },
1801 .block_erase = spi_block_erase_c7,
1802 }
1803 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001804 .printlock = spi_prettyprint_status_register_at25df,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001805 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001806 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001807 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001808 },
1809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001810 {
1811 .vendor = "Atmel",
1812 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001813 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001814 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001815 .model_id = ATMEL_AT26DF161A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001816 .total_size = 2048,
1817 .page_size = 256,
1818 .tested = TEST_UNTESTED,
1819 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001820 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001821 .block_erasers =
1822 {
1823 {
1824 .eraseblocks = { {4 * 1024, 512} },
1825 .block_erase = spi_block_erase_20,
1826 }, {
1827 .eraseblocks = { {32 * 1024, 64} },
1828 .block_erase = spi_block_erase_52,
1829 }, {
1830 .eraseblocks = { {64 * 1024, 32} },
1831 .block_erase = spi_block_erase_d8,
1832 }, {
1833 .eraseblocks = { {2 * 1024 * 1024, 1} },
1834 .block_erase = spi_block_erase_60,
1835 }, {
1836 .eraseblocks = { {2 * 1024 * 1024, 1} },
1837 .block_erase = spi_block_erase_c7,
1838 }
1839 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001840 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001842 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001843 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001844 },
1845
1846 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001847 /*{
1848 .vendor = "Atmel",
1849 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001850 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001851 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001852 .model_id = ATMEL_AT26DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001853 .total_size = 4096,
1854 .page_size = 256,
1855 .tested = TEST_UNTESTED,
1856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001857 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001858 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001859 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001860 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001861 .read = spi_chip_read,
1862 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001864 {
1865 .vendor = "Atmel",
1866 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001867 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001869 .model_id = ATMEL_AT26F004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001870 .total_size = 512,
1871 .page_size = 256,
1872 .tested = TEST_UNTESTED,
1873 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001874 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001875 .block_erasers =
1876 {
1877 {
1878 .eraseblocks = { {4 * 1024, 128} },
1879 .block_erase = spi_block_erase_20,
1880 }, {
1881 .eraseblocks = { {32 * 1024, 16} },
1882 .block_erase = spi_block_erase_52,
1883 }, {
1884 .eraseblocks = { {64 * 1024, 8} },
1885 .block_erase = spi_block_erase_d8,
1886 }, {
1887 .eraseblocks = { {512 * 1024, 1} },
1888 .block_erase = spi_block_erase_60,
1889 }, {
1890 .eraseblocks = { {512 * 1024, 1} },
1891 .block_erase = spi_block_erase_c7,
1892 }
1893 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001894 .write = NULL /* Incompatible Page write */,
1895 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001896 },
1897
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001898 {
1899 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001900 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001901 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001902 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001903 .model_id = ATMEL_AT29C512,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001904 .total_size = 64,
1905 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001906 .feature_bits = FEATURE_LONG_RESET,
1907 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001908 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001909 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001910 .block_erasers =
1911 {
1912 {
1913 .eraseblocks = { {64 * 1024, 1} },
1914 .block_erase = erase_chip_block_jedec,
1915 }
1916 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001917 .write = write_jedec,
1918 .read = read_memmapped,
1919
1920 },
1921
1922 {
1923 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001924 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001925 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001926 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001927 .model_id = ATMEL_AT29C010A,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001928 .total_size = 128,
1929 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001930 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001931 .tested = TEST_OK_PRE,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001932 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001933 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001934 .block_erasers =
1935 {
1936 {
1937 .eraseblocks = { {128 * 1024, 1} },
1938 .block_erase = erase_chip_block_jedec,
1939 }
1940 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001941 .write = write_jedec, /* FIXME */
1942 .read = read_memmapped,
1943 },
1944
1945 {
1946 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001947 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001948 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001949 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001950 .model_id = ATMEL_AT29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001951 .total_size = 256,
1952 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001953 .feature_bits = FEATURE_LONG_RESET,
1954 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001955 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00001956 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00001957 .block_erasers =
1958 {
1959 {
1960 .eraseblocks = { {256 * 1024, 1} },
1961 .block_erase = erase_chip_block_jedec,
1962 }
1963 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001964 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001965 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001966 },
1967
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001968 {
1969 .vendor = "Atmel",
1970 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001971 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001972 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001973 .model_id = ATMEL_AT29C040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001974 .total_size = 512,
1975 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001976 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001977 .tested = TEST_UNTESTED,
1978 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001979 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00001980 .block_erasers =
1981 {
1982 {
1983 .eraseblocks = { {512 * 1024, 1} },
1984 .block_erase = erase_chip_block_jedec,
1985 }
1986 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001987 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001988 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001989 },
1990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001991 {
1992 .vendor = "Atmel",
1993 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001994 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001995 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001996 .model_id = ATMEL_AT45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001997 .total_size = 16896 /* No power of two sizes */,
1998 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001999 .tested = TEST_BAD_READ,
2000 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002001 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002002 .write = NULL /* Incompatible Page write */,
2003 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002004 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002006 {
2007 .vendor = "Atmel",
2008 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002009 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002010 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002011 .model_id = ATMEL_AT45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002012 .total_size = 128 /* Size can only be determined from status register */,
2013 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002014 .tested = TEST_BAD_READ,
2015 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002016 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002017 .write = NULL,
2018 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002019 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002021 {
2022 .vendor = "Atmel",
2023 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002024 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002025 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002026 .model_id = ATMEL_AT45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002027 .total_size = 256 /* Size can only be determined from status register */,
2028 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002029 .tested = TEST_BAD_READ,
2030 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002031 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002032 .write = NULL,
2033 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002034 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002035
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002036 {
2037 .vendor = "Atmel",
2038 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002039 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002040 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002041 .model_id = ATMEL_AT45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002042 .total_size = 512 /* Size can only be determined from status register */,
2043 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002044 .tested = TEST_BAD_READ,
2045 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002046 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002047 .write = NULL,
2048 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002049 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002051 {
2052 .vendor = "Atmel",
2053 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002054 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002055 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002056 .model_id = ATMEL_AT45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002057 .total_size = 1024 /* Size can only be determined from status register */,
2058 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002059 .tested = TEST_BAD_READ,
2060 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002061 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002062 .write = NULL,
2063 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002064 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002065
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002066 {
2067 .vendor = "Atmel",
2068 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002069 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002070 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002071 .model_id = ATMEL_AT45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002072 .total_size = 2048 /* Size can only be determined from status register */,
2073 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002074 .tested = TEST_BAD_READ,
2075 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002076 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002077 .write = NULL,
2078 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002079 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002080
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002081 {
2082 .vendor = "Atmel",
2083 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002084 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002085 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002086 .model_id = ATMEL_AT45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002087 .total_size = 4224 /* No power of two sizes */,
2088 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002089 .tested = TEST_BAD_READ,
2090 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002091 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002092 .write = NULL,
2093 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002094 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002095
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002096 {
2097 .vendor = "Atmel",
2098 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002099 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002100 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002101 .model_id = ATMEL_AT45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002102 .total_size = 4096 /* Size can only be determined from status register */,
2103 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002104 .tested = TEST_BAD_READ,
2105 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002106 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002107 .write = NULL,
2108 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002109 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002111 {
2112 .vendor = "Atmel",
2113 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002114 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002115 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002116 .model_id = ATMEL_AT45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002117 .total_size = 8192 /* Size can only be determined from status register */,
2118 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002119 .tested = TEST_BAD_READ,
2120 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002121 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002122 .write = NULL,
2123 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002124 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002125
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002126 {
2127 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002128 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00002129 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002130 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002131 .model_id = ATMEL_AT49BV512,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002132 .total_size = 64,
2133 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00002134 .feature_bits = FEATURE_EITHER_RESET,
2135 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002136 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002137 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002138 .block_erasers =
2139 {
2140 {
2141 .eraseblocks = { {64 * 1024, 1} },
2142 .block_erase = erase_chip_block_jedec,
2143 }
2144 },
Sean Nelson35727f72010-01-28 23:55:12 +00002145 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002146 .read = read_memmapped,
2147 },
2148
2149 {
2150 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002151 .name = "AT49F020",
2152 .bustype = CHIP_BUSTYPE_PARALLEL,
2153 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002154 .model_id = ATMEL_AT49F020,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002155 .total_size = 256,
2156 .page_size = 256,
2157 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002158 .tested = TEST_OK_PRE,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002159 .probe = probe_jedec,
2160 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2161 .block_erasers =
2162 {
2163 {
2164 .eraseblocks = { {256 * 1024, 1} },
2165 .block_erase = erase_chip_block_jedec,
2166 }
2167 },
2168 .write = write_jedec_1,
2169 .read = read_memmapped,
2170 },
2171
2172 {
2173 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002174 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00002175 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002176 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002177 .model_id = ATMEL_AT49F002N,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002178 .total_size = 256,
2179 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002180 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002181 .tested = TEST_UNTESTED,
2182 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002183 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002184 .block_erasers =
2185 {
2186 {
2187 .eraseblocks = {
2188 {16 * 1024, 1},
2189 {8 * 1024, 2},
2190 {96 * 1024, 1},
2191 {128 * 1024, 1},
2192 },
2193 .block_erase = erase_sector_jedec,
2194 }, {
2195 .eraseblocks = { {256 * 1024, 1} },
2196 .block_erase = erase_chip_block_jedec,
2197 }
2198 },
Sean Nelson35727f72010-01-28 23:55:12 +00002199 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002200 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002201 },
2202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002203 {
2204 .vendor = "Atmel",
2205 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002206 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002207 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002208 .model_id = ATMEL_AT49F002NT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002209 .total_size = 256,
2210 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002211 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002212 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002214 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002215 .block_erasers =
2216 {
2217 {
2218 .eraseblocks = {
2219 {128 * 1024, 1},
2220 {96 * 1024, 1},
2221 {8 * 1024, 2},
2222 {16 * 1024, 1},
2223 },
2224 .block_erase = erase_sector_jedec,
2225 }, {
2226 .eraseblocks = { {256 * 1024, 1} },
2227 .block_erase = erase_chip_block_jedec,
2228 }
2229 },
Sean Nelson35727f72010-01-28 23:55:12 +00002230 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002231 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002232 },
2233
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00002234 {
Joshua Roysf1324e02010-09-16 00:51:51 +00002235 .vendor = "Bright",
2236 .name = "BM29F040",
2237 .bustype = CHIP_BUSTYPE_PARALLEL,
2238 .manufacture_id = BRIGHT_ID,
2239 .model_id = BRIGHT_BM29F040,
2240 .total_size = 512,
2241 .page_size = 64 * 1024,
2242 .feature_bits = FEATURE_EITHER_RESET,
2243 .tested = TEST_OK_PR,
2244 .probe = probe_jedec,
2245 .probe_timing = TIMING_ZERO,
2246 .block_erasers =
2247 {
2248 {
2249 .eraseblocks = { {64 * 1024, 8} },
2250 .block_erase = erase_sector_jedec,
2251 }, {
2252 .eraseblocks = { {512 * 1024, 1} },
2253 .block_erase = erase_chip_block_jedec,
2254 },
2255 },
2256 .write = write_jedec_1,
2257 .read = read_memmapped,
2258 },
2259
2260 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002261 .vendor = "EMST",
2262 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00002263 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002264 .manufacture_id = EMST_ID,
2265 .model_id = EMST_F49B002UA,
2266 .total_size = 256,
2267 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00002268 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002269 .tested = TEST_UNTESTED,
2270 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002271 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002272 .block_erasers =
2273 {
2274 {
2275 .eraseblocks = {
2276 {128 * 1024, 1},
2277 {96 * 1024, 1},
2278 {8 * 1024, 2},
2279 {16 * 1024, 1},
2280 },
2281 .block_erase = erase_sector_jedec,
2282 }, {
2283 .eraseblocks = { {256 * 1024, 1} },
2284 .block_erase = erase_chip_block_jedec,
2285 }
2286 },
Sean Nelson35727f72010-01-28 23:55:12 +00002287 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002288 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002289 },
2290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002291 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002292 .vendor = "EMST",
2293 .name = "F25L008A",
2294 .bustype = CHIP_BUSTYPE_SPI,
2295 .manufacture_id = EMST_ID,
2296 .model_id = EMST_F25L008A,
2297 .total_size = 1024,
2298 .page_size = 256,
2299 .tested = TEST_UNTESTED,
2300 .probe = probe_spi_rdid,
2301 .probe_timing = TIMING_ZERO,
2302 .block_erasers =
2303 {
2304 {
2305 .eraseblocks = { {4 * 1024, 256} },
2306 .block_erase = spi_block_erase_20,
2307 }, {
2308 .eraseblocks = { {64 * 1024, 16} },
2309 .block_erase = spi_block_erase_d8,
2310 }, {
2311 .eraseblocks = { {1024 * 1024, 1} },
2312 .block_erase = spi_block_erase_60,
2313 }, {
2314 .eraseblocks = { {1024 * 1024, 1} },
2315 .block_erase = spi_block_erase_c7,
2316 }
2317 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002318 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002319 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002320 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002321 },
2322
2323 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002324 .vendor = "Eon",
2325 .name = "EN25B05",
2326 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002327 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002328 .model_id = EON_EN25B05,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002329 .total_size = 64,
2330 .page_size = 256,
2331 .tested = TEST_UNTESTED,
2332 .probe = probe_spi_rdid,
2333 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002334 .block_erasers =
2335 {
2336 {
2337 .eraseblocks = {
2338 {4 * 1024, 2},
2339 {8 * 1024, 1},
2340 {16 * 1024, 1},
2341 {32 * 1024, 1},
2342 },
2343 .block_erase = spi_block_erase_d8,
2344 }, {
2345 .eraseblocks = { {64 * 1024, 1} },
2346 .block_erase = spi_block_erase_c7,
2347 }
2348 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002349 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002350 .write = spi_chip_write_256,
2351 .read = spi_chip_read,
2352 },
2353
2354 {
2355 .vendor = "Eon",
2356 .name = "EN25B05T",
2357 .bustype = CHIP_BUSTYPE_SPI,
2358 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002359 .model_id = EON_EN25B05,
Sean Nelson54596372010-01-09 05:30:14 +00002360 .total_size = 64,
2361 .page_size = 256,
2362 .tested = TEST_UNTESTED,
2363 .probe = probe_spi_rdid,
2364 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002365 .block_erasers =
2366 {
2367 {
2368 .eraseblocks = {
2369 {32 * 1024, 1},
2370 {16 * 1024, 1},
2371 {8 * 1024, 1},
2372 {4 * 1024, 2},
2373 },
2374 .block_erase = spi_block_erase_d8,
2375 }, {
2376 .eraseblocks = { {64 * 1024, 1} },
2377 .block_erase = spi_block_erase_c7,
2378 }
2379 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002380 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002381 .write = spi_chip_write_256,
2382 .read = spi_chip_read,
2383 },
2384
2385 {
2386 .vendor = "Eon",
2387 .name = "EN25B10",
2388 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002389 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002390 .model_id = EON_EN25B10,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002391 .total_size = 128,
2392 .page_size = 256,
2393 .tested = TEST_UNTESTED,
2394 .probe = probe_spi_rdid,
2395 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002396 .block_erasers =
2397 {
2398 {
2399 .eraseblocks = {
2400 {4 * 1024, 2},
2401 {8 * 1024, 1},
2402 {16 * 1024, 1},
2403 {32 * 1024, 3},
2404 },
2405 .block_erase = spi_block_erase_d8,
2406 }, {
2407 .eraseblocks = { {128 * 1024, 1} },
2408 .block_erase = spi_block_erase_c7,
2409 }
2410 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002411 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002412 .write = spi_chip_write_256,
2413 .read = spi_chip_read,
2414 },
2415
2416 {
2417 .vendor = "Eon",
2418 .name = "EN25B10T",
2419 .bustype = CHIP_BUSTYPE_SPI,
2420 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002421 .model_id = EON_EN25B10,
Sean Nelson54596372010-01-09 05:30:14 +00002422 .total_size = 128,
2423 .page_size = 256,
2424 .tested = TEST_UNTESTED,
2425 .probe = probe_spi_rdid,
2426 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002427 .block_erasers =
2428 {
2429 {
2430 .eraseblocks = {
2431 {32 * 1024, 3},
2432 {16 * 1024, 1},
2433 {8 * 1024, 1},
2434 {4 * 1024, 2},
2435 },
2436 .block_erase = spi_block_erase_d8,
2437 }, {
2438 .eraseblocks = { {128 * 1024, 1} },
2439 .block_erase = spi_block_erase_c7,
2440 }
2441 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002442 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002443 .write = spi_chip_write_256,
2444 .read = spi_chip_read,
2445 },
2446
2447 {
2448 .vendor = "Eon",
2449 .name = "EN25B20",
2450 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002451 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002452 .model_id = EON_EN25B20,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002453 .total_size = 256,
2454 .page_size = 256,
2455 .tested = TEST_UNTESTED,
2456 .probe = probe_spi_rdid,
2457 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002458 .block_erasers =
2459 {
2460 {
2461 .eraseblocks = {
2462 {4 * 1024, 2},
2463 {8 * 1024, 1},
2464 {16 * 1024, 1},
2465 {32 * 1024, 1},
2466 {64 * 1024, 3}
2467 },
2468 .block_erase = spi_block_erase_d8,
2469 }, {
2470 .eraseblocks = { {256 * 1024, 1} },
2471 .block_erase = spi_block_erase_c7,
2472 }
2473 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002474 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002475 .write = spi_chip_write_256,
2476 .read = spi_chip_read,
2477 },
2478
2479 {
2480 .vendor = "Eon",
2481 .name = "EN25B20T",
2482 .bustype = CHIP_BUSTYPE_SPI,
2483 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002484 .model_id = EON_EN25B20,
Sean Nelson54596372010-01-09 05:30:14 +00002485 .total_size = 256,
2486 .page_size = 256,
2487 .tested = TEST_UNTESTED,
2488 .probe = probe_spi_rdid,
2489 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002490 .block_erasers =
2491 {
2492 {
2493 .eraseblocks = {
2494 {64 * 1024, 3},
2495 {32 * 1024, 1},
2496 {16 * 1024, 1},
2497 {8 * 1024, 1},
2498 {4 * 1024, 2},
2499 },
2500 .block_erase = spi_block_erase_d8,
2501 }, {
2502 .eraseblocks = { {256 * 1024, 1} },
2503 .block_erase = spi_block_erase_c7,
2504 }
2505 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002506 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002507 .write = spi_chip_write_256,
2508 .read = spi_chip_read,
2509 },
2510
2511 {
2512 .vendor = "Eon",
2513 .name = "EN25B40",
2514 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002515 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002516 .model_id = EON_EN25B40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002517 .total_size = 512,
2518 .page_size = 256,
2519 .tested = TEST_UNTESTED,
2520 .probe = probe_spi_rdid,
2521 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002522 .block_erasers =
2523 {
2524 {
2525 .eraseblocks = {
2526 {4 * 1024, 2},
2527 {8 * 1024, 1},
2528 {16 * 1024, 1},
2529 {32 * 1024, 1},
2530 {64 * 1024, 7}
2531 },
2532 .block_erase = spi_block_erase_d8,
2533 }, {
2534 .eraseblocks = { {512 * 1024, 1} },
2535 .block_erase = spi_block_erase_c7,
2536 }
2537 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002538 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002539 .write = spi_chip_write_256,
2540 .read = spi_chip_read,
2541 },
2542
2543 {
2544 .vendor = "Eon",
2545 .name = "EN25B40T",
2546 .bustype = CHIP_BUSTYPE_SPI,
2547 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002548 .model_id = EON_EN25B40,
Sean Nelson54596372010-01-09 05:30:14 +00002549 .total_size = 512,
2550 .page_size = 256,
2551 .tested = TEST_UNTESTED,
2552 .probe = probe_spi_rdid,
2553 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002554 .block_erasers =
2555 {
2556 {
2557 .eraseblocks = {
2558 {64 * 1024, 7},
2559 {32 * 1024, 1},
2560 {16 * 1024, 1},
2561 {8 * 1024, 1},
2562 {4 * 1024, 2},
2563 },
2564 .block_erase = spi_block_erase_d8,
2565 }, {
2566 .eraseblocks = { {512 * 1024, 1} },
2567 .block_erase = spi_block_erase_c7,
2568 }
2569 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002570 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002571 .write = spi_chip_write_256,
2572 .read = spi_chip_read,
2573 },
2574
2575 {
2576 .vendor = "Eon",
2577 .name = "EN25B80",
2578 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002579 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002580 .model_id = EON_EN25B80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002581 .total_size = 1024,
2582 .page_size = 256,
2583 .tested = TEST_UNTESTED,
2584 .probe = probe_spi_rdid,
2585 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002586 .block_erasers =
2587 {
2588 {
2589 .eraseblocks = {
2590 {4 * 1024, 2},
2591 {8 * 1024, 1},
2592 {16 * 1024, 1},
2593 {32 * 1024, 1},
2594 {64 * 1024, 15}
2595 },
2596 .block_erase = spi_block_erase_d8,
2597 }, {
2598 .eraseblocks = { {1024 * 1024, 1} },
2599 .block_erase = spi_block_erase_c7,
2600 }
2601 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002602 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002603 .write = spi_chip_write_256,
2604 .read = spi_chip_read,
2605 },
2606
2607 {
2608 .vendor = "Eon",
2609 .name = "EN25B80T",
2610 .bustype = CHIP_BUSTYPE_SPI,
2611 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002612 .model_id = EON_EN25B80,
Sean Nelson54596372010-01-09 05:30:14 +00002613 .total_size = 1024,
2614 .page_size = 256,
2615 .tested = TEST_UNTESTED,
2616 .probe = probe_spi_rdid,
2617 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002618 .block_erasers =
2619 {
2620 {
2621 .eraseblocks = {
2622 {64 * 1024, 15},
2623 {32 * 1024, 1},
2624 {16 * 1024, 1},
2625 {8 * 1024, 1},
2626 {4 * 1024, 2},
2627 },
2628 .block_erase = spi_block_erase_d8,
2629 }, {
2630 .eraseblocks = { {1024 * 1024, 1} },
2631 .block_erase = spi_block_erase_c7,
2632 }
2633 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002634 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002635 .write = spi_chip_write_256,
2636 .read = spi_chip_read,
2637 },
2638
2639 {
2640 .vendor = "Eon",
2641 .name = "EN25B16",
2642 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002643 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002644 .model_id = EON_EN25B16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002645 .total_size = 2048,
2646 .page_size = 256,
2647 .tested = TEST_UNTESTED,
2648 .probe = probe_spi_rdid,
2649 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002650 .block_erasers =
2651 {
2652 {
2653 .eraseblocks = {
2654 {4 * 1024, 2},
2655 {8 * 1024, 1},
2656 {16 * 1024, 1},
2657 {32 * 1024, 1},
2658 {64 * 1024, 31},
2659 },
2660 .block_erase = spi_block_erase_d8,
2661 }, {
2662 .eraseblocks = { {2 * 1024 * 1024, 1} },
2663 .block_erase = spi_block_erase_c7,
2664 }
2665 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002666 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002667 .write = spi_chip_write_256,
2668 .read = spi_chip_read,
2669 },
2670
2671 {
2672 .vendor = "Eon",
2673 .name = "EN25B16T",
2674 .bustype = CHIP_BUSTYPE_SPI,
2675 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002676 .model_id = EON_EN25B16,
Sean Nelson54596372010-01-09 05:30:14 +00002677 .total_size = 2048,
2678 .page_size = 256,
2679 .tested = TEST_UNTESTED,
2680 .probe = probe_spi_rdid,
2681 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002682 .block_erasers =
2683 {
2684 {
2685 .eraseblocks = {
2686 {64 * 1024, 31},
2687 {32 * 1024, 1},
2688 {16 * 1024, 1},
2689 {8 * 1024, 1},
2690 {4 * 1024, 2},
2691 },
2692 .block_erase = spi_block_erase_d8,
2693 }, {
2694 .eraseblocks = { {2 * 1024 * 1024, 1} },
2695 .block_erase = spi_block_erase_c7,
2696 }
2697 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002698 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002699 .write = spi_chip_write_256,
2700 .read = spi_chip_read,
2701 },
2702
2703 {
2704 .vendor = "Eon",
2705 .name = "EN25B32",
2706 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002707 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002708 .model_id = EON_EN25B32,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002709 .total_size = 4096,
2710 .page_size = 256,
2711 .tested = TEST_UNTESTED,
2712 .probe = probe_spi_rdid,
2713 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002714 .block_erasers =
2715 {
2716 {
2717 .eraseblocks = {
2718 {4 * 1024, 2},
2719 {8 * 1024, 1},
2720 {16 * 1024, 1},
2721 {32 * 1024, 1},
2722 {64 * 1024, 63},
2723 },
2724 .block_erase = spi_block_erase_d8,
2725 }, {
2726 .eraseblocks = { {4 * 1024 * 1024, 1} },
2727 .block_erase = spi_block_erase_c7,
2728 }
2729 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002730 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002731 .write = spi_chip_write_256,
2732 .read = spi_chip_read,
2733 },
2734
2735 {
2736 .vendor = "Eon",
2737 .name = "EN25B32T",
2738 .bustype = CHIP_BUSTYPE_SPI,
2739 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002740 .model_id = EON_EN25B32,
Sean Nelson54596372010-01-09 05:30:14 +00002741 .total_size = 4096,
2742 .page_size = 256,
2743 .tested = TEST_UNTESTED,
2744 .probe = probe_spi_rdid,
2745 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002746 .block_erasers =
2747 {
2748 {
2749 .eraseblocks = {
2750 {64 * 1024, 63},
2751 {32 * 1024, 1},
2752 {16 * 1024, 1},
2753 {8 * 1024, 1},
2754 {4 * 1024, 2},
2755 },
2756 .block_erase = spi_block_erase_d8,
2757 }, {
2758 .eraseblocks = { {4 * 1024 * 1024, 1} },
2759 .block_erase = spi_block_erase_c7,
2760 }
2761 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002762 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002763 .write = spi_chip_write_256,
2764 .read = spi_chip_read,
2765 },
2766
2767 {
2768 .vendor = "Eon",
2769 .name = "EN25B64",
2770 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002771 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002772 .model_id = EON_EN25B64,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002773 .total_size = 8192,
2774 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002775 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002776 .tested = TEST_UNTESTED,
2777 .probe = probe_spi_rdid,
2778 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002779 .block_erasers =
2780 {
2781 {
2782 .eraseblocks = {
2783 {4 * 1024, 2},
2784 {8 * 1024, 1},
2785 {16 * 1024, 1},
2786 {32 * 1024, 1},
2787 {64 * 1024, 127},
2788 },
2789 .block_erase = spi_block_erase_d8,
2790 }, {
2791 .eraseblocks = { {8 * 1024 * 1024, 1} },
2792 .block_erase = spi_block_erase_c7,
2793 }
2794 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002795 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002796 .write = spi_chip_write_256,
2797 .read = spi_chip_read,
2798 },
2799
2800 {
2801 .vendor = "Eon",
2802 .name = "EN25B64T",
2803 .bustype = CHIP_BUSTYPE_SPI,
2804 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002805 .model_id = EON_EN25B64,
Sean Nelson54596372010-01-09 05:30:14 +00002806 .total_size = 8192,
2807 .page_size = 256,
2808 .tested = TEST_UNTESTED,
2809 .probe = probe_spi_rdid,
2810 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002811 .block_erasers =
2812 {
2813 {
2814 .eraseblocks = {
2815 {64 * 1024, 127},
2816 {32 * 1024, 1},
2817 {16 * 1024, 1},
2818 {8 * 1024, 1},
2819 {4 * 1024, 2},
2820 },
2821 .block_erase = spi_block_erase_d8,
2822 }, {
2823 .eraseblocks = { {8 * 1024 * 1024, 1} },
2824 .block_erase = spi_block_erase_c7,
2825 }
2826 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002827 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002828 .write = spi_chip_write_256,
2829 .read = spi_chip_read,
2830 },
2831
2832 {
2833 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002834 .name = "EN25D16",
2835 .bustype = CHIP_BUSTYPE_SPI,
2836 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002837 .model_id = EON_EN25D16,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002838 .total_size = 2048,
2839 .page_size = 256,
2840 .tested = TEST_UNTESTED,
2841 .probe = probe_spi_rdid,
2842 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002843 .block_erasers =
2844 {
2845 {
2846 .eraseblocks = { {4 * 1024, 512} },
2847 .block_erase = spi_block_erase_20,
2848 }, {
2849 .eraseblocks = { {64 * 1024, 32} },
2850 .block_erase = spi_block_erase_d8,
2851 }, {
2852 .eraseblocks = { {64 * 1024, 32} },
2853 .block_erase = spi_block_erase_52,
2854 }, {
2855 .eraseblocks = { {2 * 1024 * 1024, 1} },
2856 .block_erase = spi_block_erase_60,
2857 }, {
2858 .eraseblocks = { {2 * 1024 * 1024, 1} },
2859 .block_erase = spi_block_erase_c7,
2860 }
2861 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002862 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002863 .write = spi_chip_write_256,
2864 .read = spi_chip_read,
2865 },
2866
2867 {
2868 .vendor = "Eon",
2869 .name = "EN25F05",
2870 .bustype = CHIP_BUSTYPE_SPI,
2871 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002872 .model_id = EON_EN25F05,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002873 .total_size = 64,
2874 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002875 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002876 .tested = TEST_UNTESTED,
2877 .probe = probe_spi_rdid,
2878 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002879 .block_erasers =
2880 {
2881 {
2882 .eraseblocks = { {4 * 1024, 16} },
2883 .block_erase = spi_block_erase_20,
2884 }, {
2885 .eraseblocks = { {32 * 1024, 2} },
2886 .block_erase = spi_block_erase_d8,
2887 }, {
2888 .eraseblocks = { {32 * 1024, 2} },
2889 .block_erase = spi_block_erase_52,
2890 }, {
2891 .eraseblocks = { {64 * 1024, 1} },
2892 .block_erase = spi_block_erase_60,
2893 }, {
2894 .eraseblocks = { {64 * 1024, 1} },
2895 .block_erase = spi_block_erase_c7,
2896 }
2897 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002898 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002899 .write = spi_chip_write_256,
2900 .read = spi_chip_read,
2901 },
2902
2903 {
2904 .vendor = "Eon",
2905 .name = "EN25F10",
2906 .bustype = CHIP_BUSTYPE_SPI,
2907 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002908 .model_id = EON_EN25F10,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002909 .total_size = 128,
2910 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002911 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002912 .tested = TEST_UNTESTED,
2913 .probe = probe_spi_rdid,
2914 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002915 .block_erasers =
2916 {
2917 {
2918 .eraseblocks = { {4 * 1024, 32} },
2919 .block_erase = spi_block_erase_20,
2920 }, {
2921 .eraseblocks = { {32 * 1024, 4} },
2922 .block_erase = spi_block_erase_d8,
2923 }, {
2924 .eraseblocks = { {32 * 1024, 4} },
2925 .block_erase = spi_block_erase_52,
2926 }, {
2927 .eraseblocks = { {128 * 1024, 1} },
2928 .block_erase = spi_block_erase_60,
2929 }, {
2930 .eraseblocks = { {128 * 1024, 1} },
2931 .block_erase = spi_block_erase_c7,
2932 }
2933 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002934 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002935 .write = spi_chip_write_256,
2936 .read = spi_chip_read,
2937 },
2938
2939 {
2940 .vendor = "Eon",
2941 .name = "EN25F20",
2942 .bustype = CHIP_BUSTYPE_SPI,
2943 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002944 .model_id = EON_EN25F20,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002945 .total_size = 256,
2946 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002947 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002948 .tested = TEST_UNTESTED,
2949 .probe = probe_spi_rdid,
2950 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002951 .block_erasers =
2952 {
2953 {
2954 .eraseblocks = { {4 * 1024, 64} },
2955 .block_erase = spi_block_erase_20,
2956 }, {
2957 .eraseblocks = { {64 * 1024, 4} },
2958 .block_erase = spi_block_erase_d8,
2959 }, {
2960 .eraseblocks = { {64 * 1024, 4} },
2961 .block_erase = spi_block_erase_52,
2962 }, {
2963 .eraseblocks = { {256 * 1024, 1} },
2964 .block_erase = spi_block_erase_60,
2965 }, {
2966 .eraseblocks = { {256 * 1024, 1} },
2967 .block_erase = spi_block_erase_c7,
2968 }
2969 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002970 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002971 .write = spi_chip_write_256,
2972 .read = spi_chip_read,
2973 },
2974
2975 {
2976 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002977 .name = "EN25F40",
2978 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002979 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002980 .model_id = EON_EN25F40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002981 .total_size = 512,
2982 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002983 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002984 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002985 .probe = probe_spi_rdid,
2986 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002987 .block_erasers =
2988 {
2989 {
Sean Nelson54596372010-01-09 05:30:14 +00002990 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002991 .block_erase = spi_block_erase_20,
2992 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002993 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002994 .block_erase = spi_block_erase_d8,
2995 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002996 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002997 .block_erase = spi_block_erase_60,
2998 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002999 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003000 .block_erase = spi_block_erase_c7,
3001 },
3002 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003003 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003004 .write = spi_chip_write_256,
3005 .read = spi_chip_read,
3006 },
3007
3008 {
3009 .vendor = "Eon",
3010 .name = "EN25F80",
3011 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003012 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003013 .model_id = EON_EN25F80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003014 .total_size = 1024,
3015 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003016 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003017 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003018 .probe = probe_spi_rdid,
3019 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003020 .block_erasers =
3021 {
3022 {
3023 .eraseblocks = { {4 * 1024, 256} },
3024 .block_erase = spi_block_erase_20,
3025 }, {
3026 .eraseblocks = { {64 * 1024, 16} },
3027 .block_erase = spi_block_erase_d8,
3028 }, {
3029 .eraseblocks = { {1024 * 1024, 1} },
3030 .block_erase = spi_block_erase_60,
3031 }, {
3032 .eraseblocks = { {1024 * 1024, 1} },
3033 .block_erase = spi_block_erase_c7,
3034 }
3035 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003036 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003037 .write = spi_chip_write_256,
3038 .read = spi_chip_read,
3039 },
3040
3041 {
3042 .vendor = "Eon",
3043 .name = "EN25F16",
3044 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003045 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003046 .model_id = EON_EN25F16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003047 .total_size = 2048,
3048 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003049 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003050 .tested = TEST_UNTESTED,
3051 .probe = probe_spi_rdid,
3052 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003053 .block_erasers =
3054 {
3055 {
3056 .eraseblocks = { {4 * 1024, 512} },
3057 .block_erase = spi_block_erase_20,
3058 }, {
3059 .eraseblocks = { {64 * 1024, 32} },
3060 .block_erase = spi_block_erase_d8,
3061 }, {
3062 .eraseblocks = { {2 * 1024 * 1024, 1} },
3063 .block_erase = spi_block_erase_60,
3064 }, {
3065 .eraseblocks = { {2 * 1024 * 1024, 1} },
3066 .block_erase = spi_block_erase_c7,
3067 }
3068 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003069 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003070 .write = spi_chip_write_256,
3071 .read = spi_chip_read,
3072 },
3073
3074 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003075 .vendor = "Eon",
3076 .name = "EN25F32",
3077 .bustype = CHIP_BUSTYPE_SPI,
3078 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003079 .model_id = EON_EN25F32,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003080 .total_size = 4096,
3081 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003082 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003083 .tested = TEST_UNTESTED,
3084 .probe = probe_spi_rdid,
3085 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003086 .block_erasers =
3087 {
3088 {
3089 .eraseblocks = { {4 * 1024, 1024} },
3090 .block_erase = spi_block_erase_20,
3091 }, {
3092 .eraseblocks = { {64 * 1024, 64} },
3093 .block_erase = spi_block_erase_d8,
3094 }, {
3095 .eraseblocks = { {4 * 1024 * 1024, 1} },
3096 .block_erase = spi_block_erase_60,
3097 }, {
3098 .eraseblocks = { {4 * 1024 * 1024, 1} },
3099 .block_erase = spi_block_erase_c7,
3100 }
3101 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003102 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003103 .write = spi_chip_write_256,
3104 .read = spi_chip_read,
3105 },
3106
3107 {
Russ Dill3cd5a122010-03-05 08:44:11 +00003108 .vendor = "Eon",
3109 .name = "EN29F010",
3110 .bustype = CHIP_BUSTYPE_PARALLEL,
3111 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003112 .model_id = EON_EN29F010,
Russ Dill3cd5a122010-03-05 08:44:11 +00003113 .total_size = 128,
3114 .page_size = 128,
3115 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003116 .tested = TEST_OK_PRE,
Russ Dill3cd5a122010-03-05 08:44:11 +00003117 .probe = probe_jedec,
3118 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3119 .block_erasers =
3120 {
3121 {
3122 .eraseblocks = { {16 * 1024, 8} },
3123 .block_erase = erase_sector_jedec,
3124 },
3125 {
3126 .eraseblocks = { {128 * 1024, 1} },
3127 .block_erase = erase_chip_block_jedec,
3128 },
3129 },
3130 .write = write_jedec_1,
3131 .read = read_memmapped,
3132 },
3133
3134 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003135 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003136 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003137 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003138 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003139 .model_id = EON_EN29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .total_size = 256,
3141 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003142 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003143 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003144 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003145 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003146 .block_erasers =
3147 {
3148 {
3149 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003150 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003151 {8 * 1024, 2},
3152 {32 * 1024, 1},
3153 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003154 },
3155 .block_erase = erase_sector_jedec,
3156 }, {
3157 .eraseblocks = { {256 * 1024, 1} },
3158 .block_erase = erase_chip_block_jedec,
3159 },
3160 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003161 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003162 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003163 },
3164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003165 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003166 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003167 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003168 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003170 .model_id = EON_EN29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003171 .total_size = 256,
3172 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003173 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003174 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003175 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003176 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003177 .block_erasers =
3178 {
3179 {
3180 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003181 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003182 {32 * 1024, 1},
3183 {8 * 1024, 2},
3184 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003185 },
3186 .block_erase = erase_sector_jedec,
3187 }, {
3188 .eraseblocks = { {256 * 1024, 1} },
3189 .block_erase = erase_chip_block_jedec,
3190 },
3191 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003192 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003193 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003194 },
3195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 {
3197 .vendor = "Fujitsu",
3198 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003199 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003200 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003201 .model_id = FUJITSU_MBM29F004BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003202 .total_size = 512,
3203 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003204 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003205 .tested = TEST_UNTESTED,
3206 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003207 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003208 .block_erasers =
3209 {
3210 {
3211 .eraseblocks = {
3212 {16 * 1024, 1},
3213 {8 * 1024, 2},
3214 {32 * 1024, 1},
3215 {64 * 1024, 7},
3216 },
Sean Nelson35727f72010-01-28 23:55:12 +00003217 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003218 }, {
3219 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003220 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003221 },
3222 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003223 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003224 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003225 },
3226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003227 {
3228 .vendor = "Fujitsu",
3229 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003230 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003232 .model_id = FUJITSU_MBM29F004TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 .total_size = 512,
3234 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003235 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003236 .tested = TEST_UNTESTED,
3237 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003238 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003239 .block_erasers =
3240 {
3241 {
3242 .eraseblocks = {
3243 {64 * 1024, 7},
3244 {32 * 1024, 1},
3245 {8 * 1024, 2},
3246 {16 * 1024, 1},
3247 },
Sean Nelson35727f72010-01-28 23:55:12 +00003248 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003249 }, {
3250 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003251 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003252 },
3253 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003254 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003256 },
3257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 {
Sean Nelson35727f72010-01-28 23:55:12 +00003259 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003260 .vendor = "Fujitsu",
3261 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003262 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003263 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003264 .model_id = FUJITSU_MBM29F400BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003265 .total_size = 512,
3266 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003267 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003268 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003269 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003270 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003271 .block_erasers =
3272 {
3273 {
3274 .eraseblocks = {
3275 {16 * 1024, 1},
3276 {8 * 1024, 2},
3277 {32 * 1024, 1},
3278 {64 * 1024, 7},
3279 },
3280 .block_erase = block_erase_m29f400bt,
3281 }, {
3282 .eraseblocks = { {512 * 1024, 1} },
3283 .block_erase = block_erase_chip_m29f400bt,
3284 },
3285 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003286 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003288 },
3289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 {
3291 .vendor = "Fujitsu",
3292 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003293 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003294 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003295 .model_id = FUJITSU_MBM29F400TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003296 .total_size = 512,
3297 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003298 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003299 .tested = TEST_UNTESTED,
3300 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003301 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003302 .block_erasers =
3303 {
3304 {
3305 .eraseblocks = {
3306 {64 * 1024, 7},
3307 {32 * 1024, 1},
3308 {8 * 1024, 2},
3309 {16 * 1024, 1},
3310 },
3311 .block_erase = block_erase_m29f400bt,
3312 }, {
3313 .eraseblocks = { {512 * 1024, 1} },
3314 .block_erase = block_erase_chip_m29f400bt,
3315 },
3316 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003317 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003318 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003319 },
3320
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003321 {
David Borgc96a8bd2010-06-21 16:12:22 +00003322 .vendor = "Hyundai",
3323 .name = "HY29F002T",
3324 .bustype = CHIP_BUSTYPE_PARALLEL,
3325 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003326 .model_id = HYUNDAI_HY29F002T,
David Borgc96a8bd2010-06-21 16:12:22 +00003327 .total_size = 256,
3328 .page_size = 256 * 1024,
3329 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003330 .tested = TEST_OK_PRE,
David Borgc96a8bd2010-06-21 16:12:22 +00003331 .probe = probe_jedec,
3332 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3333 .block_erasers =
3334 {
3335 {
3336 .eraseblocks = {
3337 {64 * 1024, 3},
3338 {32 * 1024, 1},
3339 {8 * 1024, 2},
3340 {16 * 1024, 1},
3341 },
3342 .block_erase = erase_sector_jedec,
3343 }, {
3344 .eraseblocks = { {256 * 1024, 1} },
3345 .block_erase = erase_chip_block_jedec,
3346 },
3347 },
3348 .write = write_jedec_1,
3349 .read = read_memmapped,
3350 },
3351
3352 {
3353 .vendor = "Hyundai",
3354 .name = "HY29F002B",
3355 .bustype = CHIP_BUSTYPE_PARALLEL,
3356 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003357 .model_id = HYUNDAI_HY29F002B,
David Borgc96a8bd2010-06-21 16:12:22 +00003358 .total_size = 256,
3359 .page_size = 256 * 1024,
3360 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3361 .tested = TEST_UNTESTED,
3362 .probe = probe_jedec,
3363 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3364 .block_erasers =
3365 {
3366 {
3367 .eraseblocks = {
3368 {16 * 1024, 1},
3369 {8 * 1024, 2},
3370 {32 * 1024, 1},
3371 {64 * 1024, 3},
3372 },
3373 .block_erase = erase_sector_jedec,
3374 }, {
3375 .eraseblocks = { {256 * 1024, 1} },
3376 .block_erase = erase_chip_block_jedec,
3377 },
3378 },
3379 .write = write_jedec_1,
3380 .read = read_memmapped,
3381 },
3382
3383 {
Joshua Roysf1324e02010-09-16 00:51:51 +00003384 .vendor = "Hyundai",
3385 .name = "HY29F040A",
3386 .bustype = CHIP_BUSTYPE_PARALLEL,
3387 .manufacture_id = HYUNDAI_ID,
3388 .model_id = HYUNDAI_HY29F040A,
3389 .total_size = 512,
3390 .page_size = 64 * 1024,
3391 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3392 .tested = TEST_UNTESTED,
3393 .probe = probe_jedec,
3394 .probe_timing = TIMING_ZERO,
3395 .block_erasers =
3396 {
3397 {
3398 .eraseblocks = { {64 * 1024, 8} },
3399 .block_erase = erase_sector_jedec,
3400 }, {
3401 .eraseblocks = { {512 * 1024, 1} },
3402 .block_erase = erase_chip_block_jedec,
3403 },
3404 },
3405 .write = write_jedec_1,
3406 .read = read_memmapped,
3407 },
3408
3409 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003410 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003411 .name = "28F001BN/BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003412 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003413 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003414 .model_id = INTEL_28F001B,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003415 .total_size = 128,
3416 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003417 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003418 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003419 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003420 .block_erasers =
3421 {
3422 {
3423 .eraseblocks = {
3424 {8 * 1024, 1},
3425 {4 * 1024, 2},
3426 {112 * 1024, 1},
3427 },
Sean Nelson28accc22010-03-19 18:47:06 +00003428 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003429 },
3430 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003431 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003432 .read = read_memmapped,
3433 },
3434
3435 {
3436 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003437 .name = "28F001BN/BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003438 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003439 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003440 .model_id = INTEL_28F001T,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003441 .total_size = 128,
3442 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003443 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003444 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003445 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003446 .block_erasers =
3447 {
3448 {
3449 .eraseblocks = {
3450 {112 * 1024, 1},
3451 {4 * 1024, 2},
3452 {8 * 1024, 1},
3453 },
Sean Nelson28accc22010-03-19 18:47:06 +00003454 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003455 },
3456 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003457 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003458 .read = read_memmapped,
3459 },
3460
3461 {
3462 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003463 .name = "28F002BC/BL/BV/BX-T",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003464 .bustype = CHIP_BUSTYPE_PARALLEL,
3465 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003466 .model_id = INTEL_28F002T,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003467 .total_size = 256,
3468 .page_size = 256 * 1024,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003469 .tested = TEST_OK_PRE,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003470 .probe = probe_82802ab,
3471 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3472 .block_erasers =
3473 {
3474 {
3475 .eraseblocks = {
3476 {128 * 1024, 1},
3477 {96 * 1024, 1},
3478 {8 * 1024, 2},
3479 {16 * 1024, 1},
3480 },
3481 .block_erase = erase_block_82802ab,
3482 },
3483 },
3484 .write = write_82802ab,
3485 .read = read_memmapped,
3486 },
3487
3488 {
3489 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003490 .name = "28F008S3/S5/SC",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003491 .bustype = CHIP_BUSTYPE_PARALLEL,
3492 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003493 .model_id = INTEL_28F004S3,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003494 .total_size = 512,
3495 .page_size = 256,
3496 .tested = TEST_UNTESTED,
3497 .probe = probe_82802ab,
3498 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003499 .block_erasers =
3500 {
3501 {
3502 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003503 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003504 },
3505 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003506 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003507 .write = write_82802ab,
3508 .read = read_memmapped,
3509 },
3510
3511 {
3512 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003513 .name = "28F004B5/BE/BV/BX-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003514 .bustype = CHIP_BUSTYPE_PARALLEL,
3515 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003516 .model_id = INTEL_28F004B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003517 .total_size = 512,
3518 .page_size = 128 * 1024, /* maximal block size */
3519 .tested = TEST_UNTESTED,
3520 .probe = probe_82802ab,
3521 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3522 .block_erasers =
3523 {
3524 {
3525 .eraseblocks = {
3526 {16 * 1024, 1},
3527 {8 * 1024, 2},
3528 {96 * 1024, 1},
3529 {128 * 1024, 3},
3530 },
3531 .block_erase = erase_block_82802ab,
3532 },
3533 },
3534 .write = write_82802ab,
3535 .read = read_memmapped,
3536 },
3537
3538 {
3539 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003540 .name = "28F004B5/BE/BV/BX-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003541 .bustype = CHIP_BUSTYPE_PARALLEL,
3542 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003543 .model_id = INTEL_28F004T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003544 .total_size = 512,
3545 .page_size = 128 * 1024, /* maximal block size */
3546 .tested = TEST_UNTESTED,
3547 .probe = probe_82802ab,
3548 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3549 .block_erasers =
3550 {
3551 {
3552 .eraseblocks = {
3553 {128 * 1024, 3},
3554 {96 * 1024, 1},
3555 {8 * 1024, 2},
3556 {16 * 1024, 1},
3557 },
3558 .block_erase = erase_block_82802ab,
3559 },
3560 },
3561 .write = write_82802ab,
3562 .read = read_memmapped,
3563 },
3564
3565 {
3566 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003567 .name = "28F400BV/BX/CE/CV-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003568 .bustype = CHIP_BUSTYPE_PARALLEL,
3569 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003570 .model_id = INTEL_28F400B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003571 .total_size = 512,
3572 .page_size = 128 * 1024, /* maximal block size */
3573 .feature_bits = FEATURE_ADDR_SHIFTED,
3574 .tested = TEST_UNTESTED,
3575 .probe = probe_82802ab,
3576 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3577 .block_erasers =
3578 {
3579 {
3580 .eraseblocks = {
3581 {16 * 1024, 1},
3582 {8 * 1024, 2},
3583 {96 * 1024, 1},
3584 {128 * 1024, 3},
3585 },
3586 .block_erase = erase_block_82802ab,
3587 },
3588 },
3589 .write = write_82802ab,
3590 .read = read_memmapped,
3591 },
3592
3593 {
3594 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003595 .name = "28F400BV/BX/CE/CV-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003596 .bustype = CHIP_BUSTYPE_PARALLEL,
3597 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003598 .model_id = INTEL_28F400T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003599 .total_size = 512,
3600 .page_size = 128 * 1024, /* maximal block size */
3601 .feature_bits = FEATURE_ADDR_SHIFTED,
3602 .tested = TEST_UNTESTED,
3603 .probe = probe_82802ab,
3604 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3605 .block_erasers =
3606 {
3607 {
3608 .eraseblocks = {
3609 {128 * 1024, 3},
3610 {96 * 1024, 1},
3611 {8 * 1024, 2},
3612 {16 * 1024, 1},
3613 },
3614 .block_erase = erase_block_82802ab,
3615 },
3616 },
3617 .write = write_82802ab,
3618 .read = read_memmapped,
3619 },
3620
3621 {
3622 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003623 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003624 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003625 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003626 .model_id = INTEL_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003627 .total_size = 512,
3628 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003629 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003630 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003631 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003632 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003633 .block_erasers =
3634 {
3635 {
3636 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003637 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003638 },
3639 },
Sean Nelson28accc22010-03-19 18:47:06 +00003640 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003641 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003642 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003643 },
3644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003645 {
3646 .vendor = "Intel",
3647 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003648 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003649 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003650 .model_id = INTEL_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003651 .total_size = 1024,
3652 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003653 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003654 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003655 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003656 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003657 .block_erasers =
3658 {
3659 {
3660 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003661 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003662 },
3663 },
Sean Nelson28accc22010-03-19 18:47:06 +00003664 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003665 .write = write_82802ab,
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 = "Macronix",
3671 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003672 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003673 .manufacture_id = MACRONIX_ID,
3674 .model_id = MACRONIX_MX25L512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003675 .total_size = 64,
3676 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003677 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003678 .tested = TEST_UNTESTED,
3679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003680 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003681 .block_erasers =
3682 {
3683 {
3684 .eraseblocks = { {4 * 1024, 16} },
3685 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003686 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003687 .eraseblocks = { {64 * 1024, 1} },
3688 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003689 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003690 .eraseblocks = { {64 * 1024, 1} },
3691 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003692 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003693 .eraseblocks = { {64 * 1024, 1} },
3694 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003695 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003696 .eraseblocks = { {64 * 1024, 1} },
3697 .block_erase = spi_block_erase_c7,
3698 },
3699 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003700 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003701 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003702 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003703 },
3704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003705 {
3706 .vendor = "Macronix",
3707 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003708 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003709 .manufacture_id = MACRONIX_ID,
3710 .model_id = MACRONIX_MX25L1005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 .total_size = 128,
3712 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003713 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003714 .tested = TEST_UNTESTED,
3715 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003716 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003717 .block_erasers =
3718 {
3719 {
3720 .eraseblocks = { {4 * 1024, 32} },
3721 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003722 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003723 .eraseblocks = { {64 * 1024, 2} },
3724 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003725 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003726 .eraseblocks = { {128 * 1024, 1} },
3727 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003728 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003729 .eraseblocks = { {128 * 1024, 1} },
3730 .block_erase = spi_block_erase_c7,
3731 },
3732 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003733 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003736 },
3737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 {
3739 .vendor = "Macronix",
3740 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003741 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003742 .manufacture_id = MACRONIX_ID,
3743 .model_id = MACRONIX_MX25L2005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003744 .total_size = 256,
3745 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003746 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003747 .tested = TEST_UNTESTED,
3748 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003749 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003750 .block_erasers =
3751 {
3752 {
3753 .eraseblocks = { {4 * 1024, 64} },
3754 .block_erase = spi_block_erase_20,
3755 }, {
3756 .eraseblocks = { {64 * 1024, 4} },
3757 .block_erase = spi_block_erase_52,
3758 }, {
3759 .eraseblocks = { {64 * 1024, 4} },
3760 .block_erase = spi_block_erase_d8,
3761 }, {
3762 .eraseblocks = { {256 * 1024, 1} },
3763 .block_erase = spi_block_erase_60,
3764 }, {
3765 .eraseblocks = { {256 * 1024, 1} },
3766 .block_erase = spi_block_erase_c7,
3767 },
3768 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003769 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003770 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003771 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003772 },
3773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003774 {
3775 .vendor = "Macronix",
3776 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003777 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003778 .manufacture_id = MACRONIX_ID,
3779 .model_id = MACRONIX_MX25L4005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .total_size = 512,
3781 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003782 .feature_bits = FEATURE_WRSR_WREN,
Raúl Sorianoe7da4672011-05-18 01:31:10 +00003783 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003785 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003786 .block_erasers =
3787 {
3788 {
3789 .eraseblocks = { {4 * 1024, 128} },
3790 .block_erase = spi_block_erase_20,
3791 }, {
3792 .eraseblocks = { {64 * 1024, 8} },
3793 .block_erase = spi_block_erase_52,
3794 }, {
3795 .eraseblocks = { {64 * 1024, 8} },
3796 .block_erase = spi_block_erase_d8,
3797 }, {
3798 .eraseblocks = { {512 * 1024, 1} },
3799 .block_erase = spi_block_erase_60,
3800 }, {
3801 .eraseblocks = { {512 * 1024, 1} },
3802 .block_erase = spi_block_erase_c7,
3803 },
3804 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003805 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003806 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003807 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003808 },
3809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003810 {
3811 .vendor = "Macronix",
3812 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003813 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003814 .manufacture_id = MACRONIX_ID,
3815 .model_id = MACRONIX_MX25L8005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003816 .total_size = 1024,
3817 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003818 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00003819 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003820 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003821 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003822 .block_erasers =
3823 {
3824 {
3825 .eraseblocks = { {4 * 1024, 256} },
3826 .block_erase = spi_block_erase_20,
3827 }, {
3828 .eraseblocks = { {64 * 1024, 16} },
3829 .block_erase = spi_block_erase_52,
3830 }, {
3831 .eraseblocks = { {64 * 1024, 16} },
3832 .block_erase = spi_block_erase_d8,
3833 }, {
3834 .eraseblocks = { {1024 * 1024, 1} },
3835 .block_erase = spi_block_erase_60,
3836 }, {
3837 .eraseblocks = { {1024 * 1024, 1} },
3838 .block_erase = spi_block_erase_c7,
3839 },
3840 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003842 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003844 },
3845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 {
3847 .vendor = "Macronix",
3848 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003849 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003850 .manufacture_id = MACRONIX_ID,
3851 .model_id = MACRONIX_MX25L1605,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003852 .total_size = 2048,
3853 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003854 .feature_bits = FEATURE_WRSR_WREN,
Sven Schnelle4bd8a402011-03-07 10:59:06 +00003855 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003857 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003858 .block_erasers =
3859 {
3860 {
3861 .eraseblocks = { {4 * 1024, 512} },
3862 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3863 }, {
3864 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3865 .block_erase = spi_block_erase_52,
3866 }, {
3867 .eraseblocks = { {64 * 1024, 32} },
3868 .block_erase = spi_block_erase_d8,
3869 }, {
3870 .eraseblocks = { {2 * 1024 * 1024, 1} },
3871 .block_erase = spi_block_erase_60,
3872 }, {
3873 .eraseblocks = { {2 * 1024 * 1024, 1} },
3874 .block_erase = spi_block_erase_c7,
3875 },
3876 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003877 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003878 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003879 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003880 },
3881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003882 {
3883 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003884 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003885 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003886 .manufacture_id = MACRONIX_ID,
3887 .model_id = MACRONIX_MX25L1635D,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003888 .total_size = 2048,
3889 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003890 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003891 .tested = TEST_UNTESTED,
3892 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003893 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003894 .block_erasers =
3895 {
3896 {
3897 .eraseblocks = { {4 * 1024, 512} },
3898 .block_erase = spi_block_erase_20,
3899 }, {
3900 .eraseblocks = { {64 * 1024, 32} },
3901 .block_erase = spi_block_erase_d8,
3902 }, {
3903 .eraseblocks = { {2 * 1024 * 1024, 1} },
3904 .block_erase = spi_block_erase_60,
3905 }, {
3906 .eraseblocks = { {2 * 1024 * 1024, 1} },
3907 .block_erase = spi_block_erase_c7,
3908 }
3909 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003910 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003911 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003912 .read = spi_chip_read,
3913 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003914
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003915 {
3916 .vendor = "Macronix",
Stephan Guilloux3611b802010-09-13 19:59:28 +00003917 .name = "MX25L1635E",
3918 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003919 .manufacture_id = MACRONIX_ID,
3920 .model_id = MACRONIX_MX25L1635E,
Stephan Guilloux3611b802010-09-13 19:59:28 +00003921 .total_size = 2048,
3922 .page_size = 256,
3923 .feature_bits = FEATURE_WRSR_WREN,
3924 .tested = TEST_UNTESTED,
3925 .probe = probe_spi_rdid,
3926 .probe_timing = TIMING_ZERO,
3927 .block_erasers =
3928 {
3929 {
3930 .eraseblocks = { {4 * 1024, 512} },
3931 .block_erase = spi_block_erase_20,
3932 }, {
3933 .eraseblocks = { {64 * 1024, 32} },
3934 .block_erase = spi_block_erase_d8,
3935 }, {
3936 .eraseblocks = { {2 * 1024 * 1024, 1} },
3937 .block_erase = spi_block_erase_60,
3938 }, {
3939 .eraseblocks = { {2 * 1024 * 1024, 1} },
3940 .block_erase = spi_block_erase_c7,
3941 }
3942 },
3943 .unlock = spi_disable_blockprotect,
3944 .write = spi_chip_write_256,
3945 .read = spi_chip_read,
3946 },
3947
3948 {
3949 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003950 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003951 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003952 .manufacture_id = MACRONIX_ID,
3953 .model_id = MACRONIX_MX25L3205,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003954 .total_size = 4096,
3955 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003956 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00003957 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003958 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003959 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003960 .block_erasers =
3961 {
3962 {
3963 .eraseblocks = { {4 * 1024, 1024} },
3964 .block_erase = spi_block_erase_20,
3965 }, {
3966 .eraseblocks = { {4 * 1024, 1024} },
3967 .block_erase = spi_block_erase_d8,
3968 }, {
3969 .eraseblocks = { {4 * 1024 * 1024, 1} },
3970 .block_erase = spi_block_erase_60,
3971 }, {
3972 .eraseblocks = { {4 * 1024 * 1024, 1} },
3973 .block_erase = spi_block_erase_c7,
3974 },
3975 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003976 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003977 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003978 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003979 },
3980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003981 {
3982 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003983 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003984 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003985 .manufacture_id = MACRONIX_ID,
3986 .model_id = MACRONIX_MX25L3235D,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003987 .total_size = 4096,
3988 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003989 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003990 .tested = TEST_UNTESTED,
3991 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003992 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003993 .block_erasers =
3994 {
3995 {
3996 .eraseblocks = { {4 * 1024, 1024} },
3997 .block_erase = spi_block_erase_20,
3998 }, {
3999 .eraseblocks = { {64 * 1024, 64} },
4000 .block_erase = spi_block_erase_d8,
4001 }, {
4002 .eraseblocks = { {4 * 1024 * 1024, 1} },
4003 .block_erase = spi_block_erase_60,
4004 }, {
4005 .eraseblocks = { {4 * 1024 * 1024, 1} },
4006 .block_erase = spi_block_erase_c7,
4007 }
4008 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004009 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004010 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004011 .read = spi_chip_read,
4012 },
4013
4014 {
4015 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004016 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004017 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004018 .manufacture_id = MACRONIX_ID,
4019 .model_id = MACRONIX_MX25L6405,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004020 .total_size = 8192,
4021 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004022 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00004023 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004024 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004025 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004026 .block_erasers =
4027 {
4028 {
4029 .eraseblocks = { {64 * 1024, 128} },
4030 .block_erase = spi_block_erase_20,
4031 }, {
4032 .eraseblocks = { {64 * 1024, 128} },
4033 .block_erase = spi_block_erase_d8,
4034 }, {
4035 .eraseblocks = { {8 * 1024 * 1024, 1} },
4036 .block_erase = spi_block_erase_60,
4037 }, {
4038 .eraseblocks = { {8 * 1024 * 1024, 1} },
4039 .block_erase = spi_block_erase_c7,
4040 }
4041 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004042 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004043 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004045 },
4046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004047 {
4048 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004049 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004050 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004051 .manufacture_id = MACRONIX_ID,
4052 .model_id = MACRONIX_MX25L12805,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004053 .total_size = 16384,
4054 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004055 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004056 .tested = TEST_UNTESTED,
4057 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004058 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004059 .block_erasers =
4060 {
4061 {
4062 .eraseblocks = { {4 * 1024, 4096} },
4063 .block_erase = spi_block_erase_20,
4064 }, {
4065 .eraseblocks = { {64 * 1024, 256} },
4066 .block_erase = spi_block_erase_d8,
4067 }, {
4068 .eraseblocks = { {16 * 1024 * 1024, 1} },
4069 .block_erase = spi_block_erase_60,
4070 }, {
4071 .eraseblocks = { {16 * 1024 * 1024, 1} },
4072 .block_erase = spi_block_erase_c7,
4073 }
4074 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004075 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004076 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004077 .read = spi_chip_read,
4078 },
4079
4080 {
4081 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00004082 .name = "MX29F001B",
4083 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004084 .manufacture_id = MACRONIX_ID,
4085 .model_id = MACRONIX_MX29F001B,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004086 .total_size = 128,
4087 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004088 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4089 .tested = TEST_UNTESTED,
4090 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004091 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004092 .block_erasers =
4093 {
4094 {
4095 .eraseblocks = {
4096 {8 * 1024, 1},
4097 {4 * 1024, 2},
4098 {8 * 1024, 2},
4099 {32 * 1024, 1},
4100 {64 * 1024, 1},
4101 },
Sean Nelson35727f72010-01-28 23:55:12 +00004102 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004103 }, {
4104 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004105 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004106 }
4107 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004108 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004109 .read = read_memmapped,
4110 },
4111
4112 {
4113 .vendor = "Macronix",
4114 .name = "MX29F001T",
4115 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004116 .manufacture_id = MACRONIX_ID,
4117 .model_id = MACRONIX_MX29F001T,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004118 .total_size = 128,
4119 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004120 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stefan Tauner74c6ec62011-05-18 01:31:46 +00004121 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00004122 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004123 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004124 .block_erasers =
4125 {
4126 {
4127 .eraseblocks = {
4128 {64 * 1024, 1},
4129 {32 * 1024, 1},
4130 {8 * 1024, 2},
4131 {4 * 1024, 2},
4132 {8 * 1024, 1},
4133 },
Sean Nelson35727f72010-01-28 23:55:12 +00004134 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004135 }, {
4136 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004137 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004138 }
4139 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004140 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004141 .read = read_memmapped,
4142 },
4143
4144 {
4145 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004146 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004147 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004148 .manufacture_id = MACRONIX_ID,
4149 .model_id = MACRONIX_MX29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004150 .total_size = 256,
4151 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004152 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004153 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004154 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004155 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004156 .block_erasers =
4157 {
4158 {
4159 .eraseblocks = {
4160 {16 * 1024, 1},
4161 {8 * 1024, 2},
4162 {32 * 1024, 1},
4163 {64 * 1024, 3},
4164 },
Sean Nelson35727f72010-01-28 23:55:12 +00004165 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004166 }, {
4167 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004168 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004169 },
4170 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004171 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004172 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004173 },
4174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004175 {
4176 .vendor = "Macronix",
4177 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00004178 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004179 .manufacture_id = MACRONIX_ID,
4180 .model_id = MACRONIX_MX29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004181 .total_size = 256,
4182 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004183 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004184 .tested = TEST_OK_PR,
Sean Nelson35727f72010-01-28 23:55:12 +00004185 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004186 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004187 .block_erasers =
4188 {
4189 {
4190 .eraseblocks = {
4191 {64 * 1024, 3},
4192 {32 * 1024, 1},
4193 {8 * 1024, 2},
4194 {16 * 1024, 1},
4195 },
Sean Nelson35727f72010-01-28 23:55:12 +00004196 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004197 }, {
4198 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004199 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004200 },
4201 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004202 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004203 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004204 },
4205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004206 {
4207 .vendor = "Macronix",
Joshua Roysf1324e02010-09-16 00:51:51 +00004208 .name = "MX29F040",
4209 .bustype = CHIP_BUSTYPE_PARALLEL,
4210 .manufacture_id = MACRONIX_ID,
4211 .model_id = MACRONIX_MX29F040,
4212 .total_size = 512,
4213 .page_size = 64 * 1024,
4214 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4215 .tested = TEST_UNTESTED,
4216 .probe = probe_jedec,
4217 .probe_timing = TIMING_ZERO,
4218 .block_erasers =
4219 {
4220 {
4221 .eraseblocks = { {64 * 1024, 8} },
4222 .block_erase = erase_sector_jedec,
4223 }, {
4224 .eraseblocks = { {512 * 1024, 1} },
4225 .block_erase = erase_chip_block_jedec,
4226 },
4227 },
4228 .write = write_jedec_1,
4229 .read = read_memmapped,
4230 },
4231
4232 {
4233 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00004234 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004235 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004236 .manufacture_id = MACRONIX_ID,
4237 .model_id = MACRONIX_MX29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004238 .total_size = 512,
4239 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004240 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4241 .tested = TEST_UNTESTED,
4242 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004243 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004244 .block_erasers =
4245 {
4246 {
4247 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004248 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004249 }, {
4250 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004251 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004252 },
4253 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004255 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00004256 },
4257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004258 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00004259 .vendor = "MoselVitelic",
4260 .name = "V29C51000B",
4261 .bustype = CHIP_BUSTYPE_PARALLEL,
4262 .manufacture_id = SYNCMOS_MVC_ID,
4263 .model_id = MVC_V29C51000B,
4264 .total_size = 64,
4265 .page_size = 512,
4266 .feature_bits = FEATURE_EITHER_RESET,
4267 .tested = TEST_UNTESTED,
4268 .probe = probe_jedec,
4269 .probe_timing = TIMING_ZERO,
4270 .block_erasers =
4271 {
4272 {
4273 .eraseblocks = { {512, 128} },
4274 .block_erase = erase_sector_jedec,
4275 }, {
4276 .eraseblocks = { {64 * 1024, 1} },
4277 .block_erase = erase_chip_block_jedec,
4278 },
4279 },
4280 .write = write_jedec_1,
4281 .read = read_memmapped,
4282 },
4283
4284 {
4285 .vendor = "MoselVitelic",
4286 .name = "V29C51000T",
4287 .bustype = CHIP_BUSTYPE_PARALLEL,
4288 .manufacture_id = SYNCMOS_MVC_ID,
4289 .model_id = MVC_V29C51000T,
4290 .total_size = 64,
4291 .page_size = 512,
4292 .feature_bits = FEATURE_EITHER_RESET,
4293 .tested = TEST_UNTESTED,
4294 .probe = probe_jedec,
4295 .probe_timing = TIMING_ZERO,
4296 .block_erasers =
4297 {
4298 {
4299 .eraseblocks = { {512, 128} },
4300 .block_erase = erase_sector_jedec,
4301 }, {
4302 .eraseblocks = { {64 * 1024, 1} },
4303 .block_erase = erase_chip_block_jedec,
4304 },
4305 },
4306 .write = write_jedec_1,
4307 .read = read_memmapped,
4308 },
4309
4310 {
4311 .vendor = "MoselVitelic",
4312 .name = "V29C51400B",
4313 .bustype = CHIP_BUSTYPE_PARALLEL,
4314 .manufacture_id = SYNCMOS_MVC_ID,
4315 .model_id = MVC_V29C51400B,
4316 .total_size = 512,
4317 .page_size = 1024,
4318 .feature_bits = FEATURE_EITHER_RESET,
4319 .tested = TEST_UNTESTED,
4320 .probe = probe_jedec,
4321 .probe_timing = TIMING_ZERO,
4322 .block_erasers =
4323 {
4324 {
4325 .eraseblocks = { {1024, 512} },
4326 .block_erase = erase_sector_jedec,
4327 }, {
4328 .eraseblocks = { {512 * 1024, 1} },
4329 .block_erase = erase_chip_block_jedec,
4330 },
4331 },
4332 .write = write_jedec_1,
4333 .read = read_memmapped,
4334 },
4335
4336 {
4337 .vendor = "MoselVitelic",
4338 .name = "V29C51400T",
4339 .bustype = CHIP_BUSTYPE_PARALLEL,
4340 .manufacture_id = SYNCMOS_MVC_ID,
4341 .model_id = MVC_V29C51400T,
4342 .total_size = 512,
4343 .page_size = 1024,
4344 .feature_bits = FEATURE_EITHER_RESET,
4345 .tested = TEST_UNTESTED,
4346 .probe = probe_jedec,
4347 .probe_timing = TIMING_ZERO,
4348 .block_erasers =
4349 {
4350 {
4351 .eraseblocks = { {1024, 512} },
4352 .block_erase = erase_sector_jedec,
4353 }, {
4354 .eraseblocks = { {512 * 1024, 1} },
4355 .block_erase = erase_chip_block_jedec,
4356 },
4357 },
4358 .write = write_jedec_1,
4359 .read = read_memmapped,
4360 },
4361
4362 {
4363 .vendor = "MoselVitelic",
4364 .name = "V29LC51000",
4365 .bustype = CHIP_BUSTYPE_PARALLEL,
4366 .manufacture_id = SYNCMOS_MVC_ID,
4367 .model_id = MVC_V29LC51000,
4368 .total_size = 64,
4369 .page_size = 512,
4370 .feature_bits = FEATURE_EITHER_RESET,
4371 .tested = TEST_UNTESTED,
4372 .probe = probe_jedec,
4373 .probe_timing = TIMING_ZERO,
4374 .block_erasers =
4375 {
4376 {
4377 .eraseblocks = { {512, 128} },
4378 .block_erase = erase_sector_jedec,
4379 }, {
4380 .eraseblocks = { {64 * 1024, 1} },
4381 .block_erase = erase_chip_block_jedec,
4382 },
4383 },
4384 .write = write_jedec_1,
4385 .read = read_memmapped,
4386 },
4387
4388 {
4389 .vendor = "MoselVitelic",
4390 .name = "V29LC51001",
4391 .bustype = CHIP_BUSTYPE_PARALLEL,
4392 .manufacture_id = SYNCMOS_MVC_ID,
4393 .model_id = MVC_V29LC51001,
4394 .total_size = 128,
4395 .page_size = 512,
4396 .feature_bits = FEATURE_EITHER_RESET,
4397 .tested = TEST_UNTESTED,
4398 .probe = probe_jedec,
4399 .probe_timing = TIMING_ZERO,
4400 .block_erasers =
4401 {
4402 {
4403 .eraseblocks = { {512, 256} },
4404 .block_erase = erase_sector_jedec,
4405 }, {
4406 .eraseblocks = { {128 * 1024, 1} },
4407 .block_erase = erase_chip_block_jedec,
4408 },
4409 },
4410 .write = write_jedec_1,
4411 .read = read_memmapped,
4412 },
4413
4414 {
4415 .vendor = "MoselVitelic",
4416 .name = "V29LC51002",
4417 .bustype = CHIP_BUSTYPE_PARALLEL,
4418 .manufacture_id = SYNCMOS_MVC_ID,
4419 .model_id = MVC_V29LC51002,
4420 .total_size = 256,
4421 .page_size = 512,
4422 .feature_bits = FEATURE_EITHER_RESET,
4423 .tested = TEST_UNTESTED,
4424 .probe = probe_jedec,
4425 .probe_timing = TIMING_ZERO,
4426 .block_erasers =
4427 {
4428 {
4429 .eraseblocks = { {512, 512} },
4430 .block_erase = erase_sector_jedec,
4431 }, {
4432 .eraseblocks = { {256 * 1024, 1} },
4433 .block_erase = erase_chip_block_jedec,
4434 },
4435 },
4436 .write = write_jedec_1,
4437 .read = read_memmapped,
4438 },
4439
4440 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004441 .vendor = "Numonyx",
4442 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004443 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004444 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004445 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004446 .total_size = 128,
4447 .page_size = 256,
4448 .tested = TEST_UNTESTED,
4449 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004450 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004451 .block_erasers =
4452 {
4453 {
4454 .eraseblocks = { {4 * 1024, 32} },
4455 .block_erase = spi_block_erase_20,
4456 }, {
4457 .eraseblocks = { {64 * 1024, 2} },
4458 .block_erase = spi_block_erase_d8,
4459 }, {
4460 .eraseblocks = { {128 * 1024, 1} },
4461 .block_erase = spi_block_erase_c7,
4462 }
4463 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004464 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004465 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004466 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004467 },
4468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004469 {
4470 .vendor = "Numonyx",
4471 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004472 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004473 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004474 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004475 .total_size = 256,
4476 .page_size = 256,
4477 .tested = TEST_UNTESTED,
4478 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004479 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004480 .block_erasers =
4481 {
4482 {
4483 .eraseblocks = { {4 * 1024, 64} },
4484 .block_erase = spi_block_erase_20,
4485 }, {
4486 .eraseblocks = { {64 * 1024, 4} },
4487 .block_erase = spi_block_erase_d8,
4488 }, {
4489 .eraseblocks = { {256 * 1024, 1} },
4490 .block_erase = spi_block_erase_c7,
4491 }
4492 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004493 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004496 },
4497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004498 {
4499 .vendor = "Numonyx",
4500 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004502 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004503 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00004504 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004505 .page_size = 256,
4506 .tested = TEST_UNTESTED,
4507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004508 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004509 .block_erasers =
4510 {
4511 {
4512 .eraseblocks = { {4 * 1024, 128} },
4513 .block_erase = spi_block_erase_20,
4514 }, {
4515 .eraseblocks = { {64 * 1024, 8} },
4516 .block_erase = spi_block_erase_d8,
4517 }, {
4518 .eraseblocks = { {512 * 1024, 1} },
4519 .block_erase = spi_block_erase_c7,
4520 }
4521 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004522 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004523 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004524 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004525 },
4526
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004527 {
4528 .vendor = "Numonyx",
4529 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004530 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004531 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004532 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004533 .total_size = 1024,
4534 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004535 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004536 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004537 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004538 .block_erasers =
4539 {
4540 {
4541 .eraseblocks = { {4 * 1024, 256} },
4542 .block_erase = spi_block_erase_20,
4543 }, {
4544 .eraseblocks = { {64 * 1024, 16} },
4545 .block_erase = spi_block_erase_d8,
4546 }, {
4547 .eraseblocks = { {1024 * 1024, 1} },
4548 .block_erase = spi_block_erase_c7,
4549 }
4550 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004551 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004552 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004553 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004554 },
4555
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004556 {
4557 .vendor = "Numonyx",
4558 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004559 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004560 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004561 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004562 .total_size = 2048,
4563 .page_size = 256,
4564 .tested = TEST_UNTESTED,
4565 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004566 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004567 .block_erasers =
4568 {
4569 {
4570 .eraseblocks = { {4 * 1024, 512} },
4571 .block_erase = spi_block_erase_20,
4572 }, {
4573 .eraseblocks = { {64 * 1024, 32} },
4574 .block_erase = spi_block_erase_d8,
4575 }, {
4576 .eraseblocks = { {2 * 1024 * 1024, 1} },
4577 .block_erase = spi_block_erase_c7,
4578 }
4579 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004580 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004581 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004582 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004583 },
4584
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 {
4586 .vendor = "PMC",
4587 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004588 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004589 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004590 .model_id = PMC_PM25LV010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 .total_size = 128,
4592 .page_size = 256,
4593 .tested = TEST_UNTESTED,
4594 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004595 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004596 .block_erasers =
4597 {
4598 {
4599 .eraseblocks = { {4 * 1024, 32} },
4600 .block_erase = spi_block_erase_d7,
4601 }, {
4602 .eraseblocks = { {32 * 1024, 4} },
4603 .block_erase = spi_block_erase_d8,
4604 }, {
4605 .eraseblocks = { {128 * 1024, 1} },
4606 .block_erase = spi_block_erase_c7,
4607 }
4608 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004609 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004612 },
4613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 {
4615 .vendor = "PMC",
4616 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004618 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004619 .model_id = PMC_PM25LV016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004620 .total_size = 2048,
4621 .page_size = 256,
4622 .tested = TEST_UNTESTED,
4623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004624 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004625 .block_erasers =
4626 {
4627 {
4628 .eraseblocks = { {4 * 1024, 512} },
4629 .block_erase = spi_block_erase_d7,
4630 }, {
4631 .eraseblocks = { {4 * 1024, 512} },
4632 .block_erase = spi_block_erase_20,
4633 }, {
4634 .eraseblocks = { {64 * 1024, 32} },
4635 .block_erase = spi_block_erase_d8,
4636 }, {
4637 .eraseblocks = { {2 * 1024 * 1024, 1} },
4638 .block_erase = spi_block_erase_60,
4639 }, {
4640 .eraseblocks = { {2 * 1024 * 1024, 1} },
4641 .block_erase = spi_block_erase_c7,
4642 }
4643 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004644 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004645 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004646 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004647 },
4648
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004649 {
4650 .vendor = "PMC",
4651 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004652 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004653 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004654 .model_id = PMC_PM25LV020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004655 .total_size = 256,
4656 .page_size = 256,
4657 .tested = TEST_UNTESTED,
4658 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004659 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004660 .block_erasers =
4661 {
4662 {
4663 .eraseblocks = { {4 * 1024, 64} },
4664 .block_erase = spi_block_erase_d7,
4665 }, {
4666 .eraseblocks = { {64 * 1024, 4} },
4667 .block_erase = spi_block_erase_d8,
4668 }, {
4669 .eraseblocks = { {256 * 1024, 1} },
4670 .block_erase = spi_block_erase_c7,
4671 }
4672 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004673 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004674 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004675 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004676 },
4677
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004678 {
4679 .vendor = "PMC",
4680 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004681 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004682 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004683 .model_id = PMC_PM25LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 .total_size = 512,
4685 .page_size = 256,
4686 .tested = TEST_UNTESTED,
4687 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004688 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004689 .block_erasers =
4690 {
4691 {
4692 .eraseblocks = { {4 * 1024, 128} },
4693 .block_erase = spi_block_erase_d7,
4694 }, {
4695 .eraseblocks = { {64 * 1024, 8} },
4696 .block_erase = spi_block_erase_d8,
4697 }, {
4698 .eraseblocks = { {512 * 1024, 1} },
4699 .block_erase = spi_block_erase_c7,
4700 }
4701 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004702 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004703 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004704 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004705 },
4706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004707 {
4708 .vendor = "PMC",
4709 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004710 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004712 .model_id = PMC_PM25LV080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 .total_size = 1024,
4714 .page_size = 256,
4715 .tested = TEST_UNTESTED,
4716 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004717 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004718 .block_erasers =
4719 {
4720 {
4721 .eraseblocks = { {4 * 1024, 256} },
4722 .block_erase = spi_block_erase_d7,
4723 }, {
4724 .eraseblocks = { {4 * 1024, 256} },
4725 .block_erase = spi_block_erase_20,
4726 }, {
4727 .eraseblocks = { {64 * 1024, 16} },
4728 .block_erase = spi_block_erase_d8,
4729 }, {
4730 .eraseblocks = { {1024 * 1024, 1} },
4731 .block_erase = spi_block_erase_60,
4732 }, {
4733 .eraseblocks = { {1024 * 1024, 1} },
4734 .block_erase = spi_block_erase_c7,
4735 }
4736 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004737 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004738 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004739 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004740 },
4741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004742 {
4743 .vendor = "PMC",
4744 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004745 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004746 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004747 .model_id = PMC_PM25LV512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 .total_size = 64,
4749 .page_size = 256,
4750 .tested = TEST_UNTESTED,
4751 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004752 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004753 .block_erasers =
4754 {
4755 {
4756 .eraseblocks = { {4 * 1024, 16} },
4757 .block_erase = spi_block_erase_d7,
4758 }, {
4759 .eraseblocks = { {32 * 1024, 2} },
4760 .block_erase = spi_block_erase_d8,
4761 }, {
4762 .eraseblocks = { {64 * 1024, 1} },
4763 .block_erase = spi_block_erase_c7,
4764 }
4765 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004766 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004767 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004768 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004769 },
4770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004771 {
4772 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004773 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004774 .bustype = CHIP_BUSTYPE_PARALLEL,
4775 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004776 .model_id = PMC_PM29F002T,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004777 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004778 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004779 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004780 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00004781 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004782 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004783 .block_erasers =
4784 {
4785 {
4786 .eraseblocks = {
4787 {128 * 1024, 1},
4788 {96 * 1024, 1},
4789 {8 * 1024, 2},
4790 {16 * 1024, 1},
4791 },
Sean Nelson35727f72010-01-28 23:55:12 +00004792 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004793 }, {
4794 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004795 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004796 },
4797 },
Sean Nelson35727f72010-01-28 23:55:12 +00004798 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004799 .read = read_memmapped,
4800 },
4801
4802 {
4803 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004804 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004805 .bustype = CHIP_BUSTYPE_PARALLEL,
4806 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004807 .model_id = PMC_PM29F002B,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004808 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004809 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004810 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004811 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004812 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004813 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004814 .block_erasers =
4815 {
4816 {
4817 .eraseblocks = {
4818 {16 * 1024, 1},
4819 {8 * 1024, 2},
4820 {96 * 1024, 1},
4821 {128 * 1024, 1},
4822 },
Sean Nelson35727f72010-01-28 23:55:12 +00004823 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004824 }, {
4825 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004826 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004827 },
4828 },
Sean Nelson35727f72010-01-28 23:55:12 +00004829 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004830 .read = read_memmapped,
4831 },
4832
4833 {
4834 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004835 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004836 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004837 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004838 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004839 .total_size = 128,
4840 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004841 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004842 .tested = TEST_OK_PRE,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004843 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004844 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004845 .block_erasers =
4846 {
4847 {
4848 .eraseblocks = { {4 * 1024, 32} },
4849 .block_erase = erase_sector_jedec,
4850 }, {
4851 .eraseblocks = { {64 * 1024, 2} },
4852 .block_erase = erase_block_jedec,
4853 }, {
4854 .eraseblocks = { {128 * 1024, 1} },
4855 .block_erase = erase_chip_block_jedec,
4856 }
4857 },
Sean Nelson35727f72010-01-28 23:55:12 +00004858 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004859 .read = read_memmapped,
4860 },
4861
4862 {
4863 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004864 .name = "Pm39LV020",
4865 .bustype = CHIP_BUSTYPE_PARALLEL,
4866 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004867 .model_id = PMC_PM39LV020,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004868 .total_size = 256,
4869 .page_size = 4096,
4870 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4871 .tested = TEST_UNTESTED,
4872 .probe = probe_jedec,
4873 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4874 .block_erasers =
4875 {
4876 {
4877 .eraseblocks = { {4 * 1024, 64} },
4878 .block_erase = erase_sector_jedec,
4879 }, {
4880 .eraseblocks = { {64 * 1024, 4} },
4881 .block_erase = erase_block_jedec,
4882 }, {
4883 .eraseblocks = { {256 * 1024, 1} },
4884 .block_erase = erase_chip_block_jedec,
4885 }
4886 },
4887 .write = write_jedec_1,
4888 .read = read_memmapped,
4889 },
4890
4891 {
4892 .vendor = "PMC",
4893 .name = "Pm39LV040",
4894 .bustype = CHIP_BUSTYPE_PARALLEL,
4895 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004896 .model_id = PMC_PM39LV040,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004897 .total_size = 512,
4898 .page_size = 4096,
4899 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4900 .tested = TEST_UNTESTED,
4901 .probe = probe_jedec,
4902 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4903 .block_erasers =
4904 {
4905 {
4906 .eraseblocks = { {4 * 1024, 128} },
4907 .block_erase = erase_sector_jedec,
4908 }, {
4909 .eraseblocks = { {64 * 1024, 8} },
4910 .block_erase = erase_block_jedec,
4911 }, {
4912 .eraseblocks = { {512 * 1024, 1} },
4913 .block_erase = erase_chip_block_jedec,
4914 }
4915 },
4916 .write = write_jedec_1,
4917 .read = read_memmapped,
4918 },
4919
4920 {
4921 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004922 .name = "Pm49FL002",
Uwe Hermann431f4f72010-09-05 12:41:25 +00004923 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004924 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004925 .model_id = PMC_PM49FL002,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004926 .total_size = 256,
4927 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004928 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004929 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004930 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004931 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004932 .block_erasers =
4933 {
4934 {
4935 .eraseblocks = { {4 * 1024, 64} },
4936 .block_erase = erase_sector_jedec,
4937 }, {
4938 .eraseblocks = { {16 * 1024, 16} },
4939 .block_erase = erase_block_jedec,
4940 }, {
4941 .eraseblocks = { {256 * 1024, 1} },
4942 .block_erase = erase_chip_block_jedec,
4943 }
4944 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004945 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004946 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004947 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004948 },
4949
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004950 {
4951 .vendor = "PMC",
4952 .name = "Pm49FL004",
Uwe Hermann431f4f72010-09-05 12:41:25 +00004953 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004954 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004955 .model_id = PMC_PM49FL004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004956 .total_size = 512,
4957 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004958 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00004959 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004960 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004961 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004962 .block_erasers =
4963 {
4964 {
4965 .eraseblocks = { {4 * 1024, 128} },
4966 .block_erase = erase_sector_jedec,
4967 }, {
4968 .eraseblocks = { {64 * 1024, 8} },
4969 .block_erase = erase_block_jedec,
4970 }, {
4971 .eraseblocks = { {512 * 1024, 1} },
4972 .block_erase = erase_chip_block_jedec,
4973 }
4974 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004975 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004976 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004977 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004978 },
4979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004980 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004981 .vendor = "Sanyo",
4982 .name = "LF25FW203A",
4983 .bustype = CHIP_BUSTYPE_SPI,
4984 .manufacture_id = SANYO_ID,
4985 .model_id = SANYO_LE25FW203A,
4986 .total_size = 2048,
4987 .page_size = 256,
4988 .tested = TEST_UNTESTED,
4989 .probe = probe_spi_rdid,
4990 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004991 .block_erasers =
4992 {
4993 {
4994 .eraseblocks = { {64 * 1024, 32} },
4995 .block_erase = spi_block_erase_d8,
4996 }, {
4997 .eraseblocks = { {2 * 1024 * 1024, 1} },
4998 .block_erase = spi_block_erase_c7,
4999 }
5000 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005001 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00005002 .write = spi_chip_write_256,
5003 .read = spi_chip_read,
5004 },
5005
5006 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005007 .vendor = "Sharp",
5008 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00005009 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005010 .manufacture_id = SHARP_ID,
5011 .model_id = SHARP_LHF00L04,
5012 .total_size = 1024,
5013 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005014 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005015 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005016 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005017 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005018 .block_erasers =
5019 {
5020 {
5021 .eraseblocks = {
5022 {64 * 1024, 15},
5023 {8 * 1024, 8}
5024 },
Sean Nelson28accc22010-03-19 18:47:06 +00005025 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005026 }, {
5027 .eraseblocks = {
5028 {1024 * 1024, 1}
5029 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005030 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005031 },
5032 },
Sean Nelson28accc22010-03-19 18:47:06 +00005033 .unlock = unlock_82802ab,
5034 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005036 },
5037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005038 {
5039 .vendor = "Spansion",
Rudy Hostf4e57772010-11-29 00:37:49 +00005040 .name = "S25FL004A",
5041 .bustype = CHIP_BUSTYPE_SPI,
5042 .manufacture_id = SPANSION_ID,
5043 .model_id = SPANSION_S25FL004A,
5044 .total_size = 512,
5045 .page_size = 256,
5046 .tested = TEST_UNTESTED,
5047 .probe = probe_spi_rdid,
5048 .probe_timing = TIMING_ZERO,
5049 .block_erasers =
5050 {
5051 {
5052 .eraseblocks = { {64 * 1024, 8} },
5053 .block_erase = spi_block_erase_d8,
5054 }, {
5055 .eraseblocks = { {512 * 1024, 1} },
5056 .block_erase = spi_block_erase_c7,
5057 }
5058 },
5059 .unlock = spi_disable_blockprotect,
5060 .write = spi_chip_write_256,
5061 .read = spi_chip_read,
5062 },
5063
5064 {
5065 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00005066 .name = "S25FL008A",
5067 .bustype = CHIP_BUSTYPE_SPI,
5068 .manufacture_id = SPANSION_ID,
5069 .model_id = SPANSION_S25FL008A,
5070 .total_size = 1024,
5071 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005072 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00005073 .probe = probe_spi_rdid,
5074 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00005075 .block_erasers =
5076 {
5077 {
5078 .eraseblocks = { {64 * 1024, 16} },
5079 .block_erase = spi_block_erase_d8,
5080 }, {
5081 .eraseblocks = { {1024 * 1024, 1} },
5082 .block_erase = spi_block_erase_c7,
5083 }
5084 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005085 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00005086 .write = spi_chip_write_256,
5087 .read = spi_chip_read,
5088 },
5089
5090 {
5091 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005092 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005093 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .manufacture_id = SPANSION_ID,
5095 .model_id = SPANSION_S25FL016A,
5096 .total_size = 2048,
5097 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005098 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005099 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005100 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005101 .block_erasers =
5102 {
5103 {
5104 .eraseblocks = { {64 * 1024, 32} },
5105 .block_erase = spi_block_erase_d8,
5106 }, {
5107 .eraseblocks = { {2 * 1024 * 1024, 1} },
5108 .block_erase = spi_block_erase_c7,
5109 }
5110 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005111 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005112 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005113 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005114 },
5115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005116 {
Rudy Hostf4e57772010-11-29 00:37:49 +00005117 .vendor = "Spansion",
5118 .name = "S25FL032A",
5119 .bustype = CHIP_BUSTYPE_SPI,
5120 .manufacture_id = SPANSION_ID,
5121 .model_id = SPANSION_S25FL032A,
5122 .total_size = 4096,
5123 .page_size = 256,
5124 .tested = TEST_UNTESTED,
5125 .probe = probe_spi_rdid,
5126 .probe_timing = TIMING_ZERO,
5127 .block_erasers =
5128 {
5129 {
5130 .eraseblocks = { {64 * 1024, 64} },
5131 .block_erase = spi_block_erase_d8,
5132 }, {
5133 .eraseblocks = { {4 * 1024 * 1024, 1} },
5134 .block_erase = spi_block_erase_c7,
5135 }
5136 },
5137 .unlock = spi_disable_blockprotect,
5138 .write = spi_chip_write_256,
5139 .read = spi_chip_read,
5140 },
5141
5142 {
5143 .vendor = "Spansion",
5144 .name = "S25FL064A",
5145 .bustype = CHIP_BUSTYPE_SPI,
5146 .manufacture_id = SPANSION_ID,
5147 .model_id = SPANSION_S25FL064A,
5148 .total_size = 8192,
5149 .page_size = 256,
5150 .tested = TEST_OK_PREW,
5151 .probe = probe_spi_rdid,
5152 .probe_timing = TIMING_ZERO,
5153 .block_erasers =
5154 {
5155 {
5156 .eraseblocks = { {64 * 1024, 128} },
5157 .block_erase = spi_block_erase_d8,
5158 }, {
5159 .eraseblocks = { {8 * 1024 * 1024, 1} },
5160 .block_erase = spi_block_erase_c7,
5161 }
5162 },
5163 .unlock = spi_disable_blockprotect,
5164 .write = spi_chip_write_256,
5165 .read = spi_chip_read,
5166 },
5167
5168 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005169 .vendor = "SST",
Mark Marshall90021f22010-12-03 14:48:11 +00005170 .name = "SST25VF010.REMS",
5171 .bustype = CHIP_BUSTYPE_SPI,
5172 .manufacture_id = SST_ID,
5173 .model_id = SST_SST25VF010_REMS,
5174 .total_size = 128,
5175 .page_size = 256,
5176 .tested = TEST_OK_PREW,
5177 .probe = probe_spi_rems,
5178 .probe_timing = TIMING_ZERO,
5179 .block_erasers =
5180 {
5181 {
5182 .eraseblocks = { {4 * 1024, 32} },
5183 .block_erase = spi_block_erase_20,
5184 }, {
5185 .eraseblocks = { {32 * 1024, 4} },
5186 .block_erase = spi_block_erase_52,
5187 }, {
5188 .eraseblocks = { {128 * 1024, 1} },
5189 .block_erase = spi_block_erase_60,
5190 },
5191 },
5192 .unlock = spi_disable_blockprotect,
5193 .write = spi_chip_write_1,
5194 .read = spi_chip_read,
5195 },
5196
5197 {
5198 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005199 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005200 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005201 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005202 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005203 .total_size = 2048,
5204 .page_size = 256,
Mark Marshall90021f22010-12-03 14:48:11 +00005205 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005206 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005207 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005208 .block_erasers =
5209 {
5210 {
5211 .eraseblocks = { {4 * 1024, 512} },
5212 .block_erase = spi_block_erase_20,
5213 }, {
5214 .eraseblocks = { {32 * 1024, 64} },
5215 .block_erase = spi_block_erase_52,
5216 }, {
5217 .eraseblocks = { {64 * 1024, 32} },
5218 .block_erase = spi_block_erase_d8,
5219 }, {
5220 .eraseblocks = { {2 * 1024 * 1024, 1} },
5221 .block_erase = spi_block_erase_60,
5222 }, {
5223 .eraseblocks = { {2 * 1024 * 1024, 1} },
5224 .block_erase = spi_block_erase_c7,
5225 },
5226 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005227 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005228 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005229 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005230 },
5231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005232 {
5233 .vendor = "SST",
5234 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005235 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005236 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005237 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 .total_size = 4096,
5239 .page_size = 256,
Stefan Taunerfcf6a8c2011-05-18 01:32:00 +00005240 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005242 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005243 .block_erasers =
5244 {
5245 {
5246 .eraseblocks = { {4 * 1024, 1024} },
5247 .block_erase = spi_block_erase_20,
5248 }, {
5249 .eraseblocks = { {32 * 1024, 128} },
5250 .block_erase = spi_block_erase_52,
5251 }, {
5252 .eraseblocks = { {64 * 1024, 64} },
5253 .block_erase = spi_block_erase_d8,
5254 }, {
5255 .eraseblocks = { {4 * 1024 * 1024, 1} },
5256 .block_erase = spi_block_erase_60,
5257 }, {
5258 .eraseblocks = { {4 * 1024 * 1024, 1} },
5259 .block_erase = spi_block_erase_c7,
5260 },
5261 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005262 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00005263 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005264 .read = spi_chip_read,
5265 },
5266
5267 {
5268 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005269 .name = "SST25VF064C",
5270 .bustype = CHIP_BUSTYPE_SPI,
5271 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005272 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005273 .total_size = 8192,
5274 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005275 .tested = TEST_OK_PRE,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005276 .probe = probe_spi_rdid,
5277 .probe_timing = TIMING_ZERO,
5278 .block_erasers =
5279 {
5280 {
5281 .eraseblocks = { {4 * 1024, 2048} },
5282 .block_erase = spi_block_erase_20,
5283 }, {
5284 .eraseblocks = { {32 * 1024, 256} },
5285 .block_erase = spi_block_erase_52,
5286 }, {
5287 .eraseblocks = { {64 * 1024, 128} },
5288 .block_erase = spi_block_erase_d8,
5289 }, {
5290 .eraseblocks = { {8 * 1024 * 1024, 1} },
5291 .block_erase = spi_block_erase_60,
5292 }, {
5293 .eraseblocks = { {8 * 1024 * 1024, 1} },
5294 .block_erase = spi_block_erase_c7,
5295 },
5296 },
5297 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00005298 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005299 .read = spi_chip_read,
5300 },
5301
5302 {
5303 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005304 .name = "SST25VF040.REMS",
5305 .bustype = CHIP_BUSTYPE_SPI,
5306 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005307 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005308 .total_size = 512,
5309 .page_size = 256,
5310 .tested = TEST_OK_PR,
5311 .probe = probe_spi_rems,
5312 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005313 .block_erasers =
5314 {
5315 {
5316 .eraseblocks = { {4 * 1024, 128} },
5317 .block_erase = spi_block_erase_20,
5318 }, {
5319 .eraseblocks = { {32 * 1024, 16} },
5320 .block_erase = spi_block_erase_52,
5321 }, {
5322 .eraseblocks = { {512 * 1024, 1} },
5323 .block_erase = spi_block_erase_60,
5324 },
5325 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005326 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005327 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005328 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005329 },
5330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005331 {
5332 .vendor = "SST",
5333 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005334 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005335 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005336 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005337 .total_size = 512,
5338 .page_size = 256,
5339 .tested = TEST_UNTESTED,
5340 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005341 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005342 .block_erasers =
5343 {
5344 {
5345 .eraseblocks = { {4 * 1024, 128} },
5346 .block_erase = spi_block_erase_20,
5347 }, {
5348 .eraseblocks = { {32 * 1024, 16} },
5349 .block_erase = spi_block_erase_52,
5350 }, {
5351 .eraseblocks = { {64 * 1024, 8} },
5352 .block_erase = spi_block_erase_d8,
5353 }, {
5354 .eraseblocks = { {512 * 1024, 1} },
5355 .block_erase = spi_block_erase_60,
5356 }, {
5357 .eraseblocks = { {512 * 1024, 1} },
5358 .block_erase = spi_block_erase_c7,
5359 },
5360 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005361 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005362 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00005363 .read = spi_chip_read,
5364 },
5365
5366 {
5367 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005368 .name = "SST25LF040A.RES",
5369 .bustype = CHIP_BUSTYPE_SPI,
5370 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005371 .model_id = SST_SST25VF040_REMS,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005372 .total_size = 512,
5373 .page_size = 256,
5374 .tested = TEST_OK_PROBE,
5375 .probe = probe_spi_res2,
5376 .probe_timing = TIMING_ZERO,
5377 .block_erasers =
5378 {
5379 {
5380 .eraseblocks = { {4 * 1024, 128} },
5381 .block_erase = spi_block_erase_20,
5382 }, {
5383 .eraseblocks = { {32 * 1024, 16} },
5384 .block_erase = spi_block_erase_52,
5385 }, {
5386 .eraseblocks = { {512 * 1024, 1} },
5387 .block_erase = spi_block_erase_60,
5388 },
5389 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005390 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005391 .write = spi_chip_write_1,
5392 .read = spi_chip_read,
5393 },
5394
5395 {
5396 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00005397 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005398 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005399 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005400 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00005401 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005402 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00005403 .tested = TEST_OK_PR,
5404 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005405 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005406 .block_erasers =
5407 {
5408 {
5409 .eraseblocks = { {4 * 1024, 128} },
5410 .block_erase = spi_block_erase_20,
5411 }, {
5412 .eraseblocks = { {32 * 1024, 16} },
5413 .block_erase = spi_block_erase_52,
5414 }, {
5415 .eraseblocks = { {64 * 1024, 8} },
5416 .block_erase = spi_block_erase_d8,
5417 }, {
5418 .eraseblocks = { {512 * 1024, 1} },
5419 .block_erase = spi_block_erase_60,
5420 }, {
5421 .eraseblocks = { {512 * 1024, 1} },
5422 .block_erase = spi_block_erase_c7,
5423 },
5424 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005425 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005426 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00005427 .read = spi_chip_read,
5428 },
5429
5430 {
5431 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005433 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005434 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005435 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005436 .total_size = 1024,
5437 .page_size = 256,
John Schmergec965c2d2011-05-18 11:28:47 +00005438 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005439 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005440 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005441 .block_erasers =
5442 {
5443 {
5444 .eraseblocks = { {4 * 1024, 256} },
5445 .block_erase = spi_block_erase_20,
5446 }, {
5447 .eraseblocks = { {32 * 1024, 32} },
5448 .block_erase = spi_block_erase_52,
5449 }, {
5450 .eraseblocks = { {64 * 1024, 16} },
5451 .block_erase = spi_block_erase_d8,
5452 }, {
5453 .eraseblocks = { {1024 * 1024, 1} },
5454 .block_erase = spi_block_erase_60,
5455 }, {
5456 .eraseblocks = { {1024 * 1024, 1} },
5457 .block_erase = spi_block_erase_c7,
5458 },
5459 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005460 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005461 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005462 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005463 },
5464
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005465 {
5466 .vendor = "SST",
5467 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005468 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005469 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005470 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005471 .total_size = 512,
5472 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005473 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005474 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005475 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005476 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005477 .block_erasers =
5478 {
5479 {
5480 .eraseblocks = { {128, 4096} },
5481 .block_erase = erase_sector_28sf040,
5482 }, {
5483 .eraseblocks = { {512 * 1024, 1} },
5484 .block_erase = erase_chip_28sf040,
5485 }
5486 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005487 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005488 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005489 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005490 },
5491
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005492 {
5493 .vendor = "SST",
5494 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005495 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005496 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005497 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005498 .total_size = 128,
5499 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005500 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005501 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005502 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005503 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005504 .block_erasers =
5505 {
5506 {
5507 .eraseblocks = { {128 * 1024, 1} },
5508 .block_erase = erase_chip_block_jedec,
5509 }
5510 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005511 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005512 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005513 },
5514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 {
5516 .vendor = "SST",
5517 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005518 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005519 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005520 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005521 .total_size = 128,
5522 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005523 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005524 .tested = TEST_UNTESTED,
5525 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005526 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005527 .block_erasers =
5528 {
5529 {
5530 .eraseblocks = { {128 * 1024, 1} },
5531 .block_erase = erase_chip_block_jedec,
5532 }
5533 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005534 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005535 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005536 },
5537
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005538 {
5539 .vendor = "SST",
5540 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005541 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005542 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005543 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005544 .total_size = 256,
5545 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005546 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005547 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005548 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005549 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005550 .block_erasers =
5551 {
5552 {
5553 .eraseblocks = { {256 * 1024, 1} },
5554 .block_erase = erase_chip_block_jedec,
5555 }
5556 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005557 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005558 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005559 },
5560
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005561 {
5562 .vendor = "SST",
5563 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005564 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005565 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005566 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005567 .total_size = 256,
5568 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005569 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005570 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005571 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005572 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005573 .block_erasers =
5574 {
5575 {
5576 .eraseblocks = { {256 * 1024, 1} },
5577 .block_erase = erase_chip_block_jedec,
5578 }
5579 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005580 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005581 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005582 },
5583
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005584 {
5585 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005586 .name = "SST39SF512",
5587 .bustype = CHIP_BUSTYPE_PARALLEL,
5588 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005589 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005590 .total_size = 64,
5591 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005592 .feature_bits = FEATURE_EITHER_RESET,
Idwer Vollering7913fb42011-03-07 15:32:58 +00005593 .tested = TEST_OK_PREW,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005594 .probe = probe_jedec,
5595 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005596 .block_erasers =
5597 {
5598 {
5599 .eraseblocks = { {4 * 1024, 16} },
5600 .block_erase = erase_sector_jedec,
5601 }, {
5602 .eraseblocks = { {64 * 1024, 1} },
5603 .block_erase = erase_chip_block_jedec,
5604 }
5605 },
Sean Nelson35727f72010-01-28 23:55:12 +00005606 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005607 .read = read_memmapped,
5608 },
5609
5610 {
5611 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005613 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005615 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005616 .total_size = 128,
5617 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005618 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005619 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005621 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005622 .block_erasers =
5623 {
5624 {
5625 .eraseblocks = { {4 * 1024, 32} },
5626 .block_erase = erase_sector_jedec,
5627 }, {
5628 .eraseblocks = { {128 * 1024, 1} },
5629 .block_erase = erase_chip_block_jedec,
5630 }
5631 },
Sean Nelson35727f72010-01-28 23:55:12 +00005632 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005633 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005634 },
5635
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005636 {
5637 .vendor = "SST",
5638 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005639 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005640 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005641 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005642 .total_size = 256,
5643 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005644 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005645 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005646 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005647 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005648 .block_erasers =
5649 {
5650 {
5651 .eraseblocks = { {4 * 1024, 64} },
5652 .block_erase = erase_sector_jedec,
5653 }, {
5654 .eraseblocks = { {256 * 1024, 1} },
5655 .block_erase = erase_chip_block_jedec,
5656 }
5657 },
Sean Nelson35727f72010-01-28 23:55:12 +00005658 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005659 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005660 },
5661
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005662 {
5663 .vendor = "SST",
5664 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005665 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005666 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005667 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 .total_size = 512,
5669 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005670 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005671 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005673 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005674 .block_erasers =
5675 {
5676 {
5677 .eraseblocks = { {4 * 1024, 128} },
5678 .block_erase = erase_sector_jedec,
5679 }, {
5680 .eraseblocks = { {512 * 1024, 1} },
5681 .block_erase = erase_chip_block_jedec,
5682 }
5683 },
Sean Nelson35727f72010-01-28 23:55:12 +00005684 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005685 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005686 },
5687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005688 {
5689 .vendor = "SST",
5690 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005691 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005692 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005693 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005694 .total_size = 64,
5695 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005696 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005697 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005698 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005699 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005700 .block_erasers =
5701 {
5702 {
5703 .eraseblocks = { {4 * 1024, 16} },
5704 .block_erase = erase_sector_jedec,
5705 }, {
5706 .eraseblocks = { {64 * 1024, 1} },
5707 .block_erase = erase_chip_block_jedec,
5708 }
5709 },
Sean Nelson35727f72010-01-28 23:55:12 +00005710 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005711 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005712 },
5713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 {
5715 .vendor = "SST",
5716 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005717 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005718 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005719 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005720 .total_size = 128,
5721 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005722 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005723 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005725 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005726 .block_erasers =
5727 {
5728 {
5729 .eraseblocks = { {4 * 1024, 32} },
5730 .block_erase = erase_sector_jedec,
5731 }, {
5732 .eraseblocks = { {128 * 1024, 1} },
5733 .block_erase = erase_chip_block_jedec,
5734 }
5735 },
Sean Nelson35727f72010-01-28 23:55:12 +00005736 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005737 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005738 },
5739
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 {
5741 .vendor = "SST",
5742 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005743 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005744 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005745 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005746 .total_size = 256,
5747 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005748 .feature_bits = FEATURE_EITHER_RESET,
5749 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005750 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005751 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005752 .block_erasers =
5753 {
5754 {
5755 .eraseblocks = { {4 * 1024, 64} },
5756 .block_erase = erase_sector_jedec,
5757 }, {
5758 .eraseblocks = { {256 * 1024, 1} },
5759 .block_erase = erase_chip_block_jedec,
5760 }
5761 },
Sean Nelson35727f72010-01-28 23:55:12 +00005762 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005763 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005764 },
5765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005766 {
5767 .vendor = "SST",
5768 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005769 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005770 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005771 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005772 .total_size = 512,
5773 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005774 .feature_bits = FEATURE_EITHER_RESET,
5775 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005776 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005777 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005778 .block_erasers =
5779 {
5780 {
5781 .eraseblocks = { {4 * 1024, 128} },
5782 .block_erase = erase_sector_jedec,
5783 }, {
5784 .eraseblocks = { {512 * 1024, 1} },
5785 .block_erase = erase_chip_block_jedec,
5786 }
5787 },
Sean Nelson35727f72010-01-28 23:55:12 +00005788 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005789 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005790 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005791
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005792 {
5793 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005794 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005795 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005796 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005797 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005798 .total_size = 1024,
5799 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005800 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005801 .tested = TEST_UNTESTED,
5802 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005803 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005804 .block_erasers =
5805 {
5806 {
5807 .eraseblocks = { {4 * 1024, 256} },
5808 .block_erase = erase_sector_jedec,
5809 }, {
5810 .eraseblocks = { {64 * 1024, 16} },
5811 .block_erase = erase_block_jedec,
5812 }, {
5813 .eraseblocks = { {1024 * 1024, 1} },
5814 .block_erase = erase_chip_block_jedec,
5815 }
5816 },
Sean Nelson35727f72010-01-28 23:55:12 +00005817 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005818 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005819 },
5820
5821 {
5822 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005823 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005824 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005825 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005826 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005827 .total_size = 256,
5828 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005829 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005830 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005831 .probe = probe_jedec,
5832 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005833 .block_erasers =
5834 {
5835 {
5836 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005837 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005838 }, {
5839 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005840 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005841 }, {
5842 .eraseblocks = { {256 * 1024, 1} },
5843 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5844 }
5845 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005846 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005847 .unlock = unlock_sst_fwhub,
5848 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005849 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005850 },
5851
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005852 {
5853 .vendor = "SST",
5854 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005855 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005857 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005858 .total_size = 384,
5859 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005860 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005861 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005862 .probe = probe_jedec,
5863 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005864 .block_erasers =
5865 {
5866 {
5867 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005868 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005869 }, {
5870 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005871 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005872 }, {
5873 .eraseblocks = { {384 * 1024, 1} },
5874 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5875 }
5876 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005877 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005878 .unlock = unlock_sst_fwhub,
5879 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005880 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005881 },
5882
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005883 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005884 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5885 * and is only honored for 64k block erase, but not 4k sector erase.
5886 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005887 .vendor = "SST",
5888 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005889 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005890 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005891 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005892 .total_size = 512,
5893 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005894 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005895 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005896 .probe = probe_jedec,
5897 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005898 .block_erasers =
5899 {
5900 {
5901 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005902 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005903 }, {
5904 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005905 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005906 }, {
5907 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005908 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005909 },
5910 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005911 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005912 .unlock = unlock_sst_fwhub,
5913 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005914 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005915 },
5916
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005917 {
5918 .vendor = "SST",
5919 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005920 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005921 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005922 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005923 .total_size = 512,
5924 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005925 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005926 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005927 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005928 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005929 .block_erasers =
5930 {
5931 {
5932 .eraseblocks = { {4 * 1024, 128} },
5933 .block_erase = erase_sector_49lfxxxc,
5934 }, {
5935 .eraseblocks = {
5936 {64 * 1024, 7},
5937 {32 * 1024, 1},
5938 {8 * 1024, 2},
5939 {16 * 1024, 1},
5940 },
Sean Nelson69e58112010-03-23 17:10:28 +00005941 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005942 }
5943 },
Sean Nelson69e58112010-03-23 17:10:28 +00005944 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005945 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005946 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005947 },
5948
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005949 {
5950 .vendor = "SST",
5951 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005952 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005953 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005954 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005955 .total_size = 1024,
5956 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005957 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005958 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005959 .probe = probe_jedec,
5960 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005961 .block_erasers =
5962 {
5963 {
5964 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005965 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005966 }, {
5967 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005968 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005969 }, {
5970 .eraseblocks = { {1024 * 1024, 1} },
5971 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5972 }
5973 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005974 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005975 .unlock = unlock_sst_fwhub,
5976 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005977 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005978 },
5979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005980 {
5981 .vendor = "SST",
5982 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005983 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005984 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005985 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .total_size = 1024,
5987 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005988 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005990 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005991 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005992 .block_erasers =
5993 {
5994 {
5995 .eraseblocks = { {4 * 1024, 256} },
5996 .block_erase = erase_sector_49lfxxxc,
5997 }, {
5998 .eraseblocks = {
5999 {64 * 1024, 15},
6000 {32 * 1024, 1},
6001 {8 * 1024, 2},
6002 {16 * 1024, 1},
6003 },
Sean Nelson69e58112010-03-23 17:10:28 +00006004 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006005 }
6006 },
Sean Nelson69e58112010-03-23 17:10:28 +00006007 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006008 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006009 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006010 },
6011
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 {
6013 .vendor = "SST",
6014 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006015 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006017 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 .total_size = 2048,
6019 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006020 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006021 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006022 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006023 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006024 .block_erasers =
6025 {
6026 {
6027 .eraseblocks = { {4 * 1024, 512} },
6028 .block_erase = erase_sector_49lfxxxc,
6029 }, {
6030 .eraseblocks = {
6031 {64 * 1024, 31},
6032 {32 * 1024, 1},
6033 {8 * 1024, 2},
6034 {16 * 1024, 1},
6035 },
Sean Nelson69e58112010-03-23 17:10:28 +00006036 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006037 }
6038 },
Sean Nelson69e58112010-03-23 17:10:28 +00006039 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006040 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006041 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006042 },
6043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006044 {
6045 .vendor = "SST",
6046 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006047 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006049 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006050 .total_size = 256,
6051 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006052 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006053 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006054 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006055 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006056 .block_erasers =
6057 {
6058 {
6059 .eraseblocks = { {4 * 1024, 64} },
6060 .block_erase = erase_sector_jedec,
6061 }, {
6062 .eraseblocks = { {16 * 1024, 16} },
6063 .block_erase = erase_block_jedec,
6064 }, {
6065 .eraseblocks = { {256 * 1024, 1} },
6066 .block_erase = NULL,
6067 }
6068 },
Sean Nelson35727f72010-01-28 23:55:12 +00006069 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006070 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00006071 },
6072
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006073 {
6074 .vendor = "SST",
6075 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006076 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006077 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006078 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006079 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00006080 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006081 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006082 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006083 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006084 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006085 .block_erasers =
6086 {
6087 {
6088 .eraseblocks = { {4 * 1024, 64} },
6089 .block_erase = erase_sector_jedec,
6090 }, {
6091 .eraseblocks = { {16 * 1024, 16} },
6092 .block_erase = erase_block_jedec,
6093 }, {
6094 .eraseblocks = { {256 * 1024, 1} },
6095 .block_erase = NULL,
6096 }
6097 },
Sean Nelson35727f72010-01-28 23:55:12 +00006098 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006099 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006100 },
6101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006102 {
6103 .vendor = "SST",
6104 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006105 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006106 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006107 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006108 .total_size = 512,
6109 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006110 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006111 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006112 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006113 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006114 .block_erasers =
6115 {
6116 {
6117 .eraseblocks = { {4 * 1024, 128} },
6118 .block_erase = erase_sector_jedec,
6119 }, {
6120 .eraseblocks = { {64 * 1024, 8} },
6121 .block_erase = erase_block_jedec,
6122 }, {
6123 .eraseblocks = { {512 * 1024, 1} },
6124 .block_erase = NULL,
6125 }
6126 },
Sean Nelson35727f72010-01-28 23:55:12 +00006127 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006128 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006129 },
6130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006131 {
6132 .vendor = "SST",
6133 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006134 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006135 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006136 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006137 .total_size = 512,
6138 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00006139 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006140 .tested = TEST_OK_PRE,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006141 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006142 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006143 .block_erasers =
6144 {
6145 {
6146 .eraseblocks = { {4 * 1024, 128} },
6147 .block_erase = erase_sector_jedec,
6148 }, {
6149 .eraseblocks = { {64 * 1024, 8} },
6150 .block_erase = erase_block_jedec,
6151 }, {
6152 .eraseblocks = { {512 * 1024, 1} },
6153 .block_erase = NULL,
6154 }
6155 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00006156 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00006157 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006159 },
6160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006161 {
6162 .vendor = "SST",
6163 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00006164 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006165 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006166 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006167 .total_size = 1024,
6168 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006169 .feature_bits = FEATURE_EITHER_RESET,
Brandon Dowdyf07bf322011-03-06 18:31:11 +00006170 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006171 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006172 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006173 .block_erasers =
6174 {
6175 {
6176 .eraseblocks = { {4 * 1024, 256} },
6177 .block_erase = erase_sector_jedec,
6178 }, {
6179 .eraseblocks = { {64 * 1024, 16} },
6180 .block_erase = erase_block_jedec,
6181 }, {
6182 .eraseblocks = { {1024 * 1024, 1} },
6183 .block_erase = NULL,
6184 }
6185 },
Sean Nelson35727f72010-01-28 23:55:12 +00006186 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006188 },
6189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006190 {
6191 .vendor = "SST",
6192 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006193 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006194 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006195 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006196 .total_size = 2048,
6197 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006198 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006199 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006200 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006201 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006202 .block_erasers =
6203 {
6204 {
6205 .eraseblocks = { {4 * 1024, 512} },
6206 .block_erase = erase_sector_49lfxxxc,
6207 }, {
6208 .eraseblocks = {
6209 {64 * 1024, 31},
6210 {32 * 1024, 1},
6211 {8 * 1024, 2},
6212 {16 * 1024, 1},
6213 },
Sean Nelson69e58112010-03-23 17:10:28 +00006214 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006215 }
6216 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006217 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006218 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006219 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006220 },
6221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006222 {
6223 .vendor = "ST",
6224 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006225 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006226 .manufacture_id = ST_ID,
6227 .model_id = ST_M25P05A,
6228 .total_size = 64,
6229 .page_size = 256,
6230 .tested = TEST_UNTESTED,
6231 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006232 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006233 .block_erasers =
6234 {
6235 {
6236 .eraseblocks = { {32 * 1024, 2} },
6237 .block_erase = spi_block_erase_d8,
6238 }, {
6239 .eraseblocks = { {64 * 1024, 1} },
6240 .block_erase = spi_block_erase_c7,
6241 }
6242 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006243 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006244 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006245 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006246 },
6247
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006248 /* The ST M25P05 is a bit of a problem. It has the same ID as the
6249 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006250 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006251 * only is successful if RDID does not work.
6252 */
6253 {
6254 .vendor = "ST",
6255 .name = "M25P05.RES",
6256 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006257 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006258 .model_id = ST_M25P05_RES,
6259 .total_size = 64,
6260 .page_size = 256,
6261 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006262 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006263 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006264 .block_erasers =
6265 {
6266 {
6267 .eraseblocks = { {32 * 1024, 2} },
6268 .block_erase = spi_block_erase_d8,
6269 }, {
6270 .eraseblocks = { {64 * 1024, 1} },
6271 .block_erase = spi_block_erase_c7,
6272 }
6273 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006274 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006275 .write = spi_chip_write_1, /* 128 */
6276 .read = spi_chip_read,
6277 },
6278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006279 {
6280 .vendor = "ST",
6281 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006282 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006283 .manufacture_id = ST_ID,
6284 .model_id = ST_M25P10A,
6285 .total_size = 128,
6286 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006287 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006288 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006289 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006290 .block_erasers =
6291 {
6292 {
6293 .eraseblocks = { {32 * 1024, 4} },
6294 .block_erase = spi_block_erase_d8,
6295 }, {
6296 .eraseblocks = { {128 * 1024, 1} },
6297 .block_erase = spi_block_erase_c7,
6298 }
6299 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006300 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006301 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006302 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006303 },
6304
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006305 /* The ST M25P10 has the same problem as the M25P05. */
6306 {
6307 .vendor = "ST",
6308 .name = "M25P10.RES",
6309 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006310 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006311 .model_id = ST_M25P10_RES,
6312 .total_size = 128,
6313 .page_size = 256,
6314 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006315 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006316 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006317 .block_erasers =
6318 {
6319 {
6320 .eraseblocks = { {32 * 1024, 4} },
6321 .block_erase = spi_block_erase_d8,
6322 }, {
6323 .eraseblocks = { {128 * 1024, 1} },
6324 .block_erase = spi_block_erase_c7,
6325 }
6326 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006327 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006328 .write = spi_chip_write_1, /* 128 */
6329 .read = spi_chip_read,
6330 },
6331
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006332 {
6333 .vendor = "ST",
6334 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006335 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006336 .manufacture_id = ST_ID,
6337 .model_id = ST_M25P20,
6338 .total_size = 256,
6339 .page_size = 256,
6340 .tested = TEST_UNTESTED,
6341 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006342 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006343 .block_erasers =
6344 {
6345 {
6346 .eraseblocks = { {64 * 1024, 4} },
6347 .block_erase = spi_block_erase_d8,
6348 }, {
6349 .eraseblocks = { {256 * 1024, 1} },
6350 .block_erase = spi_block_erase_c7,
6351 }
6352 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006353 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006354 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006355 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006356 },
6357
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006358 {
6359 .vendor = "ST",
6360 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006361 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006362 .manufacture_id = ST_ID,
6363 .model_id = ST_M25P40,
6364 .total_size = 512,
6365 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006366 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006367 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006368 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006369 .block_erasers =
6370 {
6371 {
6372 .eraseblocks = { {64 * 1024, 8} },
6373 .block_erase = spi_block_erase_d8,
6374 }, {
6375 .eraseblocks = { {512 * 1024, 1} },
6376 .block_erase = spi_block_erase_c7,
6377 }
6378 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006379 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006380 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006381 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006382 },
6383
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006384 {
6385 .vendor = "ST",
6386 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006387 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006388 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006389 .model_id = ST_M25P40_RES,
6390 .total_size = 512,
6391 .page_size = 256,
6392 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006393 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006394 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006395 .block_erasers =
6396 {
6397 {
6398 .eraseblocks = { {64 * 1024, 8} },
6399 .block_erase = spi_block_erase_d8,
6400 }, {
6401 .eraseblocks = { {512 * 1024, 1} },
6402 .block_erase = spi_block_erase_c7,
6403 }
6404 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006405 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006406 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006407 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006408 },
6409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006410 {
6411 .vendor = "ST",
6412 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006413 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006414 .manufacture_id = ST_ID,
6415 .model_id = ST_M25P80,
6416 .total_size = 1024,
6417 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006418 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006419 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006420 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006421 .block_erasers =
6422 {
6423 {
6424 .eraseblocks = { {64 * 1024, 16} },
6425 .block_erase = spi_block_erase_d8,
6426 }, {
6427 .eraseblocks = { {1024 * 1024, 1} },
6428 .block_erase = spi_block_erase_c7,
6429 }
6430 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006431 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006432 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006433 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006434 },
6435
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006436 {
6437 .vendor = "ST",
6438 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006439 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006440 .manufacture_id = ST_ID,
6441 .model_id = ST_M25P16,
6442 .total_size = 2048,
6443 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006444 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006445 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006446 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006447 .block_erasers =
6448 {
6449 {
6450 .eraseblocks = { {64 * 1024, 32} },
6451 .block_erase = spi_block_erase_d8,
6452 }, {
6453 .eraseblocks = { {2 * 1024 * 1024, 1} },
6454 .block_erase = spi_block_erase_c7,
6455 }
6456 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006457 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006458 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006459 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006460 },
6461
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006462 {
6463 .vendor = "ST",
6464 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006465 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006466 .manufacture_id = ST_ID,
6467 .model_id = ST_M25P32,
6468 .total_size = 4096,
6469 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006470 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006471 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006472 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006473 .block_erasers =
6474 {
6475 {
6476 .eraseblocks = { {64 * 1024, 64} },
6477 .block_erase = spi_block_erase_d8,
6478 }, {
6479 .eraseblocks = { {4 * 1024 * 1024, 1} },
6480 .block_erase = spi_block_erase_c7,
6481 }
6482 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006483 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006484 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006485 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006486 },
6487
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006488 {
6489 .vendor = "ST",
6490 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006491 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006492 .manufacture_id = ST_ID,
6493 .model_id = ST_M25P64,
6494 .total_size = 8192,
6495 .page_size = 256,
6496 .tested = TEST_UNTESTED,
6497 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006498 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006499 .block_erasers =
6500 {
6501 {
6502 .eraseblocks = { {64 * 1024, 128} },
6503 .block_erase = spi_block_erase_d8,
6504 }, {
6505 .eraseblocks = { {8 * 1024 * 1024, 1} },
6506 .block_erase = spi_block_erase_c7,
6507 }
6508 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006509 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006510 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006511 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006512 },
6513
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006514 {
6515 .vendor = "ST",
6516 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006517 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006518 .manufacture_id = ST_ID,
6519 .model_id = ST_M25P128,
6520 .total_size = 16384,
6521 .page_size = 256,
6522 .tested = TEST_UNTESTED,
6523 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006524 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006525 .block_erasers =
6526 {
6527 {
6528 .eraseblocks = { {256 * 1024, 64} },
6529 .block_erase = spi_block_erase_d8,
6530 }, {
6531 .eraseblocks = { {16 * 1024 * 1024, 1} },
6532 .block_erase = spi_block_erase_c7,
6533 }
6534 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006535 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006537 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006538 },
6539
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006540 {
6541 .vendor = "ST",
Carl Worthd1dd72c2011-03-06 18:45:40 +00006542 .name = "M25PX16",
6543 .bustype = CHIP_BUSTYPE_SPI,
6544 .manufacture_id = ST_ID,
6545 .model_id = ST_M25PX16,
6546 .total_size = 2048,
6547 .page_size = 256,
6548 .tested = TEST_OK_PREW,
6549 .probe = probe_spi_rdid,
6550 .probe_timing = TIMING_ZERO,
6551 .block_erasers =
6552 {
6553 {
6554 .eraseblocks = { { 4 * 1024, 512 } },
6555 .block_erase = spi_block_erase_20,
6556 }, {
6557 .eraseblocks = { {64 * 1024, 32} },
6558 .block_erase = spi_block_erase_d8,
6559 }, {
6560 .eraseblocks = { {2 * 1024 * 1024, 1} },
6561 .block_erase = spi_block_erase_c7,
6562 }
6563 },
6564 .unlock = spi_disable_blockprotect,
6565 .write = spi_chip_write_256,
6566 .read = spi_chip_read,
6567 },
6568
6569 {
6570 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00006571 .name = "M25PX32",
6572 .bustype = CHIP_BUSTYPE_SPI,
6573 .manufacture_id = ST_ID,
6574 .model_id = ST_M25PX32,
6575 .total_size = 4096,
6576 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006577 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006578 .probe = probe_spi_rdid,
6579 .probe_timing = TIMING_ZERO,
6580 .block_erasers =
6581 {
6582 {
6583 .eraseblocks = { { 4 * 1024, 1024 } },
6584 .block_erase = spi_block_erase_20,
6585 }, {
6586 .eraseblocks = { {64 * 1024, 64} },
6587 .block_erase = spi_block_erase_d8,
6588 }, {
6589 .eraseblocks = { {4 * 1024 * 1024, 1} },
6590 .block_erase = spi_block_erase_c7,
6591 }
6592 },
6593 .unlock = spi_disable_blockprotect,
6594 .write = spi_chip_write_256,
6595 .read = spi_chip_read,
6596 },
6597
6598 {
6599 .vendor = "ST",
6600 .name = "M25PX64",
6601 .bustype = CHIP_BUSTYPE_SPI,
6602 .manufacture_id = ST_ID,
6603 .model_id = ST_M25PX64,
6604 .total_size = 8192,
6605 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006606 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006607 .probe = probe_spi_rdid,
6608 .probe_timing = TIMING_ZERO,
6609 .block_erasers =
6610 {
6611 {
6612 .eraseblocks = { { 4 * 1024, 2048 } },
6613 .block_erase = spi_block_erase_20,
6614 }, {
6615 .eraseblocks = { {64 * 1024, 128} },
6616 .block_erase = spi_block_erase_d8,
6617 }, {
6618 .eraseblocks = { {8 * 1024 * 1024, 1} },
6619 .block_erase = spi_block_erase_c7,
6620 }
6621 },
6622 .unlock = spi_disable_blockprotect,
6623 .write = spi_chip_write_256,
6624 .read = spi_chip_read,
6625 },
6626
6627 {
6628 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006629 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006630 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006631 .manufacture_id = ST_ID,
6632 .model_id = ST_M29F002B,
6633 .total_size = 256,
6634 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006635 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006636 .tested = TEST_UNTESTED,
6637 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006638 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006639 .block_erasers =
6640 {
6641 {
6642 .eraseblocks = {
6643 {16 * 1024, 1},
6644 {8 * 1024, 2},
6645 {32 * 1024, 1},
6646 {64 * 1024, 3},
6647 },
6648 .block_erase = erase_sector_jedec,
6649 }, {
6650 .eraseblocks = { {256 * 1024, 1} },
6651 .block_erase = erase_chip_block_jedec,
6652 }
6653 },
Sean Nelson35727f72010-01-28 23:55:12 +00006654 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006655 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006656 },
6657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006658 {
6659 .vendor = "ST",
6660 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006661 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006662 .manufacture_id = ST_ID,
6663 .model_id = ST_M29F002T,
6664 .total_size = 256,
6665 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006666 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6667 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006668 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006669 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006670 .block_erasers =
6671 {
6672 {
6673 .eraseblocks = {
6674 {64 * 1024, 3},
6675 {32 * 1024, 1},
6676 {8 * 1024, 2},
6677 {16 * 1024, 1},
6678 },
6679 .block_erase = erase_sector_jedec,
6680 }, {
6681 .eraseblocks = { {256 * 1024, 1} },
6682 .block_erase = erase_chip_block_jedec,
6683 }
6684 },
Sean Nelson35727f72010-01-28 23:55:12 +00006685 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006686 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006687 },
6688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006689 {
6690 .vendor = "ST",
6691 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006692 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006693 .manufacture_id = ST_ID,
6694 .model_id = ST_M29F040B,
6695 .total_size = 512,
6696 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006697 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6698 .tested = TEST_UNTESTED,
6699 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00006700 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
Sean Nelson56358aa2010-01-19 16:08:51 +00006701 .block_erasers =
6702 {
6703 {
6704 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006705 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006706 }, {
6707 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006708 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006709 }
6710 },
Sean Nelson35727f72010-01-28 23:55:12 +00006711 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006712 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006713 },
6714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006715 {
Sean Nelson35727f72010-01-28 23:55:12 +00006716 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006717 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006718 .name = "M29F400BB",
6719 .bustype = CHIP_BUSTYPE_PARALLEL,
6720 .manufacture_id = ST_ID,
6721 .model_id = ST_M29F400BB,
6722 .total_size = 512,
6723 .page_size = 64 * 1024,
6724 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006725 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006726 .probe = probe_m29f400bt,
6727 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6728 .block_erasers =
6729 {
6730 {
6731 .eraseblocks = {
6732 {16 * 1024, 1},
6733 {8 * 1024, 2},
6734 {32 * 1024, 1},
6735 {64 * 1024, 7},
6736 },
6737 .block_erase = block_erase_m29f400bt,
6738 }, {
6739 .eraseblocks = { {512 * 1024, 1} },
6740 .block_erase = block_erase_chip_m29f400bt,
6741 }
6742 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006743 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006744 .read = read_memmapped,
6745 },
6746 {
6747 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6748 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006749 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006750 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006751 .manufacture_id = ST_ID,
6752 .model_id = ST_M29F400BT,
6753 .total_size = 512,
6754 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006755 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006756 .tested = TEST_UNTESTED,
6757 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006758 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006759 .block_erasers =
6760 {
6761 {
6762 .eraseblocks = {
6763 {64 * 1024, 7},
6764 {32 * 1024, 1},
6765 {8 * 1024, 2},
6766 {16 * 1024, 1},
6767 },
6768 .block_erase = block_erase_m29f400bt,
6769 }, {
6770 .eraseblocks = { {512 * 1024, 1} },
6771 .block_erase = block_erase_chip_m29f400bt,
6772 }
6773 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006774 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006775 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006776 },
6777
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006778 {
6779 .vendor = "ST",
6780 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006781 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006782 .manufacture_id = ST_ID,
6783 .model_id = ST_M29W010B,
6784 .total_size = 128,
6785 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006786 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006787 .tested = TEST_UNTESTED,
6788 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006789 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006790 .block_erasers =
6791 {
6792 {
6793 .eraseblocks = { {16 * 1024, 8}, },
6794 .block_erase = erase_sector_jedec,
6795 }, {
6796 .eraseblocks = { {128 * 1024, 1} },
6797 .block_erase = erase_chip_block_jedec,
6798 }
6799 },
Sean Nelson35727f72010-01-28 23:55:12 +00006800 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006801 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006802 },
6803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006804 {
6805 .vendor = "ST",
6806 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006807 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006808 .manufacture_id = ST_ID,
6809 .model_id = ST_M29W040B,
6810 .total_size = 512,
6811 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006812 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006813 .tested = TEST_UNTESTED,
6814 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006815 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006816 .block_erasers =
6817 {
6818 {
6819 .eraseblocks = { {64 * 1024, 8}, },
6820 .block_erase = erase_sector_jedec,
6821 }, {
6822 .eraseblocks = { {512 * 1024, 1} },
6823 .block_erase = erase_chip_block_jedec,
6824 }
6825 },
Sean Nelson35727f72010-01-28 23:55:12 +00006826 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006827 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006828 },
6829
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006830 {
6831 .vendor = "ST",
6832 .name = "M29W512B",
6833 .bustype = CHIP_BUSTYPE_PARALLEL,
6834 .manufacture_id = ST_ID,
6835 .model_id = ST_M29W512B,
6836 .total_size = 64,
6837 .page_size = 64 * 1024,
6838 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006839 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006840 .probe = probe_jedec,
6841 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006842 .block_erasers =
6843 {
6844 {
6845 .eraseblocks = { {64 * 1024, 1} },
6846 .block_erase = erase_chip_block_jedec,
6847 }
6848 },
6849 .write = write_jedec_1,
6850 .read = read_memmapped,
6851 },
6852
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006853 {
6854 .vendor = "ST",
6855 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006856 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006857 .manufacture_id = ST_ID,
6858 .model_id = ST_M50FLW040A,
6859 .total_size = 512,
6860 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006861 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006862 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006863 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006864 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006865 .block_erasers =
6866 {
6867 {
Sean Nelson329bde72010-01-19 16:39:19 +00006868 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006869 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006870 {64 * 1024, 5}, /* block */
6871 {4 * 1024, 16}, /* sector */
6872 {4 * 1024, 16}, /* sector */
6873 },
6874 .block_erase = NULL,
6875 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006876 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006877 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006878 }
6879 },
Sean Nelson28accc22010-03-19 18:47:06 +00006880 .unlock = unlock_stm50flw0x0x,
6881 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006883 },
6884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006885 {
6886 .vendor = "ST",
6887 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006888 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006889 .manufacture_id = ST_ID,
6890 .model_id = ST_M50FLW040B,
6891 .total_size = 512,
6892 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006893 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006894 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006895 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006896 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006897 .block_erasers =
6898 {
6899 {
Sean Nelson329bde72010-01-19 16:39:19 +00006900 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006901 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006902 {4 * 1024, 16}, /* sector */
6903 {64 * 1024, 5}, /* block */
6904 {4 * 1024, 16}, /* sector */
6905 },
6906 .block_erase = NULL,
6907 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006908 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006909 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006910 }
6911 },
Sean Nelson28accc22010-03-19 18:47:06 +00006912 .unlock = unlock_stm50flw0x0x,
6913 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006914 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006915 },
6916
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006917 {
6918 .vendor = "ST",
6919 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006920 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006921 .manufacture_id = ST_ID,
6922 .model_id = ST_M50FLW080A,
6923 .total_size = 1024,
6924 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006925 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006926 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00006927 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006928 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006929 .block_erasers =
6930 {
6931 {
Sean Nelson329bde72010-01-19 16:39:19 +00006932 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006933 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006934 {64 * 1024, 13}, /* block */
6935 {4 * 1024, 16}, /* sector */
6936 {4 * 1024, 16}, /* sector */
6937 },
6938 .block_erase = NULL,
6939 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006940 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006941 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006942 }
6943 },
Sean Nelson28accc22010-03-19 18:47:06 +00006944 .unlock = unlock_stm50flw0x0x,
6945 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006946 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006947 },
6948
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006949 {
6950 .vendor = "ST",
6951 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006952 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006953 .manufacture_id = ST_ID,
6954 .model_id = ST_M50FLW080B,
6955 .total_size = 1024,
6956 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006957 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006958 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006959 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006960 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006961 .block_erasers =
6962 {
6963 {
Sean Nelson329bde72010-01-19 16:39:19 +00006964 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006965 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006966 {4 * 1024, 16}, /* sector */
6967 {64 * 1024, 13}, /* block */
6968 {4 * 1024, 16}, /* sector */
6969 },
6970 .block_erase = NULL,
6971 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006972 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006973 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006974 }
6975 },
Sean Nelson28accc22010-03-19 18:47:06 +00006976 .unlock = unlock_stm50flw0x0x,
6977 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006978 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006979 },
6980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006981 {
6982 .vendor = "ST",
6983 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006984 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006985 .manufacture_id = ST_ID,
6986 .model_id = ST_M50FW002,
6987 .total_size = 256,
6988 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006989 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006990 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006991 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006992 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006993 .block_erasers =
6994 {
6995 {
6996 .eraseblocks = {
6997 {64 * 1024, 3},
6998 {32 * 1024, 1},
6999 {8 * 1024, 2},
7000 {16 * 1024, 1},
7001 },
Sean Nelson28accc22010-03-19 18:47:06 +00007002 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007003 }
7004 },
Sean Nelson28accc22010-03-19 18:47:06 +00007005 .unlock = unlock_stm50flw0x0x,
7006 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007007 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007008 },
7009
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007010 {
7011 .vendor = "ST",
7012 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00007013 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007014 .manufacture_id = ST_ID,
7015 .model_id = ST_M50FW016,
7016 .total_size = 2048,
7017 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007018 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007019 .tested = TEST_UNTESTED,
7020 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007021 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007022 .block_erasers =
7023 {
7024 {
7025 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007026 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007027 }
7028 },
Sean Nelson28accc22010-03-19 18:47:06 +00007029 .unlock = unlock_stm50flw0x0x,
7030 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007031 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007032 },
7033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007034 {
7035 .vendor = "ST",
7036 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00007037 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007038 .manufacture_id = ST_ID,
7039 .model_id = ST_M50FW040,
7040 .total_size = 512,
7041 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007042 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00007043 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007044 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007045 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007046 .block_erasers =
7047 {
7048 {
7049 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007050 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007051 }
7052 },
Sean Nelson28accc22010-03-19 18:47:06 +00007053 .unlock = unlock_stm50flw0x0x,
7054 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007055 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007056 },
7057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007058 {
7059 .vendor = "ST",
7060 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00007061 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007062 .manufacture_id = ST_ID,
7063 .model_id = ST_M50FW080,
7064 .total_size = 1024,
7065 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007066 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00007067 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007068 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007069 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007070 .block_erasers =
7071 {
7072 {
7073 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007074 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007075 }
7076 },
Sean Nelson28accc22010-03-19 18:47:06 +00007077 .unlock = unlock_stm50flw0x0x,
7078 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007079 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007080 },
7081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007082 {
7083 .vendor = "ST",
7084 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00007085 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007086 .manufacture_id = ST_ID,
7087 .model_id = ST_M50LPW116,
7088 .total_size = 2048,
7089 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007090 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007091 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007092 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00007093 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007094 .block_erasers =
7095 {
7096 {
7097 .eraseblocks = {
7098 {4 * 1024, 16},
7099 {64 * 1024, 30},
7100 {32 * 1024, 1},
7101 {8 * 1024, 2},
7102 {16 * 1024, 1},
7103 },
Sean Nelson28accc22010-03-19 18:47:06 +00007104 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007105 }
7106 },
Sean Nelson28accc22010-03-19 18:47:06 +00007107 .unlock = unlock_stm50flw0x0x,
7108 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007109 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007110 },
7111
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007112 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007113 .vendor = "SyncMOS/MoselVitelic",
7114 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00007115 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007116 .manufacture_id = SYNCMOS_MVC_ID,
7117 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007118 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007119 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00007120 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007121 .tested = TEST_UNTESTED,
7122 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007123 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007124 .block_erasers =
7125 {
7126 {
7127 .eraseblocks = { {512, 256} },
7128 .block_erase = erase_sector_jedec,
7129 }, {
7130 .eraseblocks = { {128 * 1024, 1} },
7131 .block_erase = erase_chip_block_jedec,
7132 },
7133 },
Sean Nelson35727f72010-01-28 23:55:12 +00007134 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007135 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007136 },
7137
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007138 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007139 .vendor = "SyncMOS/MoselVitelic",
7140 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00007141 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007142 .manufacture_id = SYNCMOS_MVC_ID,
7143 .model_id = SM_MVC_29C51001T,
7144 .total_size = 128,
7145 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00007146 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007147 .tested = TEST_UNTESTED,
7148 .probe = probe_jedec,
7149 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7150 .block_erasers =
7151 {
7152 {
7153 .eraseblocks = { {512, 256} },
7154 .block_erase = erase_sector_jedec,
7155 }, {
7156 .eraseblocks = { {128 * 1024, 1} },
7157 .block_erase = erase_chip_block_jedec,
7158 },
7159 },
7160 .write = write_jedec_1,
7161 .read = read_memmapped,
7162 },
7163
7164 {
7165 .vendor = "SyncMOS/MoselVitelic",
7166 .name = "{F,S,V}29C51002B",
7167 .bustype = CHIP_BUSTYPE_PARALLEL,
7168 .manufacture_id = SYNCMOS_MVC_ID,
7169 .model_id = SM_MVC_29C51002B,
7170 .total_size = 256,
7171 .page_size = 512,
7172 .feature_bits = FEATURE_EITHER_RESET,
7173 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007174 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007175 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007176 .block_erasers =
7177 {
7178 {
7179 .eraseblocks = { {512, 512} },
7180 .block_erase = erase_sector_jedec,
7181 }, {
7182 .eraseblocks = { {256 * 1024, 1} },
7183 .block_erase = erase_chip_block_jedec,
7184 },
7185 },
Sean Nelson35727f72010-01-28 23:55:12 +00007186 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007188 },
7189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007190 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007191 .vendor = "SyncMOS/MoselVitelic",
7192 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00007193 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007194 .manufacture_id = SYNCMOS_MVC_ID,
7195 .model_id = SM_MVC_29C51002T,
7196 .total_size = 256,
7197 .page_size = 512,
7198 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007199 .tested = TEST_OK_PRE,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007200 .probe = probe_jedec,
7201 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7202 .block_erasers =
7203 {
7204 {
7205 .eraseblocks = { {512, 512} },
7206 .block_erase = erase_sector_jedec,
7207 }, {
7208 .eraseblocks = { {256 * 1024, 1} },
7209 .block_erase = erase_chip_block_jedec,
7210 },
7211 },
7212 .write = write_jedec_1,
7213 .read = read_memmapped,
7214 },
7215
7216 {
7217 .vendor = "SyncMOS/MoselVitelic",
7218 .name = "{F,S,V}29C51004B",
7219 .bustype = CHIP_BUSTYPE_PARALLEL,
7220 .manufacture_id = SYNCMOS_MVC_ID,
7221 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007222 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007223 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007224 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007225 .tested = TEST_UNTESTED,
7226 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007227 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007228 .block_erasers =
7229 {
7230 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007231 .eraseblocks = { {1024, 512} },
7232 .block_erase = erase_sector_jedec,
7233 }, {
7234 .eraseblocks = { {512 * 1024, 1} },
7235 .block_erase = erase_chip_block_jedec,
7236 },
7237 },
7238 .write = write_jedec_1,
7239 .read = read_memmapped,
7240 },
7241
7242 {
7243 .vendor = "SyncMOS/MoselVitelic",
7244 .name = "{F,S,V}29C51004T",
7245 .bustype = CHIP_BUSTYPE_PARALLEL,
7246 .manufacture_id = SYNCMOS_MVC_ID,
7247 .model_id = SM_MVC_29C51004T,
7248 .total_size = 512,
7249 .page_size = 1024,
7250 .feature_bits = FEATURE_EITHER_RESET,
7251 .tested = TEST_UNTESTED,
7252 .probe = probe_jedec,
7253 .probe_timing = TIMING_ZERO,
7254 .block_erasers =
7255 {
7256 {
7257 .eraseblocks = { {1024, 512} },
7258 .block_erase = erase_sector_jedec,
7259 }, {
7260 .eraseblocks = { {512 * 1024, 1} },
7261 .block_erase = erase_chip_block_jedec,
7262 },
7263 },
7264 .write = write_jedec_1,
7265 .read = read_memmapped,
7266 },
7267
7268 {
7269 .vendor = "SyncMOS/MoselVitelic",
7270 .name = "{S,V}29C31004B",
7271 .bustype = CHIP_BUSTYPE_PARALLEL,
7272 .manufacture_id = SYNCMOS_MVC_ID,
7273 .model_id = SM_MVC_29C31004B,
7274 .total_size = 512,
7275 .page_size = 1024,
7276 .feature_bits = FEATURE_EITHER_RESET,
7277 .tested = TEST_UNTESTED,
7278 .probe = probe_jedec,
7279 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7280 .block_erasers =
7281 {
7282 {
7283 .eraseblocks = { {1024, 512} },
7284 .block_erase = erase_sector_jedec,
7285 }, {
7286 .eraseblocks = { {512 * 1024, 1} },
7287 .block_erase = erase_chip_block_jedec,
7288 },
7289 },
7290 .write = write_jedec_1,
7291 .read = read_memmapped,
7292 },
7293
7294 {
7295 .vendor = "SyncMOS/MoselVitelic",
7296 .name = "{S,V}29C31004T",
7297 .bustype = CHIP_BUSTYPE_PARALLEL,
7298 .manufacture_id = SYNCMOS_MVC_ID,
7299 .model_id = SM_MVC_29C31004T,
7300 .total_size = 512,
7301 .page_size = 1024,
7302 .feature_bits = FEATURE_EITHER_RESET,
7303 .tested = TEST_UNTESTED,
7304 .probe = probe_jedec,
7305 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7306 .block_erasers =
7307 {
7308 {
7309 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00007310 .block_erase = erase_sector_jedec,
7311 }, {
7312 .eraseblocks = { {512 * 1024, 1} },
7313 .block_erase = erase_chip_block_jedec,
7314 },
7315 },
Sean Nelson35727f72010-01-28 23:55:12 +00007316 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007317 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007318 },
7319
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007320 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007321 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007322 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00007323 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007324 .manufacture_id = TI_OLD_ID,
7325 .model_id = TI_TMS29F002RB,
7326 .total_size = 256,
7327 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007328 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007329 .tested = TEST_UNTESTED,
7330 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007331 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007332 .block_erasers =
7333 {
7334 {
7335 .eraseblocks = {
7336 {16 * 1024, 1},
7337 {8 * 1024, 2},
7338 {32 * 1024, 1},
7339 {64 * 1024, 3},
7340 },
7341 .block_erase = erase_sector_jedec,
7342 }, {
7343 .eraseblocks = { {256 * 1024, 1} },
7344 .block_erase = erase_chip_block_jedec,
7345 },
7346 },
Sean Nelson35727f72010-01-28 23:55:12 +00007347 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007348 .read = read_memmapped,
7349 },
7350
7351 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007352 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007353 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00007354 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007355 .manufacture_id = TI_OLD_ID,
7356 .model_id = TI_TMS29F002RT,
7357 .total_size = 256,
7358 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007359 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007360 .tested = TEST_UNTESTED,
7361 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007362 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007363 .block_erasers =
7364 {
7365 {
7366 .eraseblocks = {
7367 {64 * 1024, 3},
7368 {32 * 1024, 1},
7369 {8 * 1024, 2},
7370 {16 * 1024, 1},
7371 },
7372 .block_erase = erase_sector_jedec,
7373 }, {
7374 .eraseblocks = { {256 * 1024, 1} },
7375 .block_erase = erase_chip_block_jedec,
7376 },
7377 },
Sean Nelson35727f72010-01-28 23:55:12 +00007378 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007379 .read = read_memmapped,
7380 },
7381
7382 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007383 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00007384 .name = "W25Q80",
7385 .bustype = CHIP_BUSTYPE_SPI,
7386 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007387 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007388 .total_size = 1024,
7389 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007390 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007391 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007392 .probe = probe_spi_rdid,
7393 .probe_timing = TIMING_ZERO,
7394 .block_erasers =
7395 {
7396 {
7397 .eraseblocks = { {4 * 1024, 256} },
7398 .block_erase = spi_block_erase_20,
7399 }, {
7400 .eraseblocks = { {32 * 1024, 32} },
7401 .block_erase = spi_block_erase_52,
7402 }, {
7403 .eraseblocks = { {64 * 1024, 16} },
7404 .block_erase = spi_block_erase_d8,
7405 }, {
7406 .eraseblocks = { {1024 * 1024, 1} },
7407 .block_erase = spi_block_erase_60,
7408 }, {
7409 .eraseblocks = { {1024 * 1024, 1} },
7410 .block_erase = spi_block_erase_c7,
7411 }
7412 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007413 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007414 .write = spi_chip_write_256,
7415 .read = spi_chip_read,
7416 },
7417
7418 {
7419 .vendor = "Winbond",
7420 .name = "W25Q16",
7421 .bustype = CHIP_BUSTYPE_SPI,
7422 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007423 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007424 .total_size = 2048,
7425 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007426 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007427 .tested = TEST_UNTESTED,
7428 .probe = probe_spi_rdid,
7429 .probe_timing = TIMING_ZERO,
7430 .block_erasers =
7431 {
7432 {
7433 .eraseblocks = { {4 * 1024, 512} },
7434 .block_erase = spi_block_erase_20,
7435 }, {
7436 .eraseblocks = { {32 * 1024, 64} },
7437 .block_erase = spi_block_erase_52,
7438 }, {
7439 .eraseblocks = { {64 * 1024, 32} },
7440 .block_erase = spi_block_erase_d8,
7441 }, {
7442 .eraseblocks = { {2 * 1024 * 1024, 1} },
7443 .block_erase = spi_block_erase_60,
7444 }, {
7445 .eraseblocks = { {2 * 1024 * 1024, 1} },
7446 .block_erase = spi_block_erase_c7,
7447 }
7448 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007449 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007450 .write = spi_chip_write_256,
7451 .read = spi_chip_read,
7452 },
7453
7454 {
7455 .vendor = "Winbond",
7456 .name = "W25Q32",
7457 .bustype = CHIP_BUSTYPE_SPI,
7458 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007459 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007460 .total_size = 4096,
7461 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007462 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007463 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007464 .probe = probe_spi_rdid,
7465 .probe_timing = TIMING_ZERO,
7466 .block_erasers =
7467 {
7468 {
7469 .eraseblocks = { {4 * 1024, 1024} },
7470 .block_erase = spi_block_erase_20,
7471 }, {
7472 .eraseblocks = { {32 * 1024, 128} },
7473 .block_erase = spi_block_erase_52,
7474 }, {
7475 .eraseblocks = { {64 * 1024, 64} },
7476 .block_erase = spi_block_erase_d8,
7477 }, {
7478 .eraseblocks = { {4 * 1024 * 1024, 1} },
7479 .block_erase = spi_block_erase_60,
7480 }, {
7481 .eraseblocks = { {4 * 1024 * 1024, 1} },
7482 .block_erase = spi_block_erase_c7,
7483 }
7484 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007485 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007486 .write = spi_chip_write_256,
7487 .read = spi_chip_read,
7488 },
7489
7490 {
7491 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00007492 .name = "W25Q64",
7493 .bustype = CHIP_BUSTYPE_SPI,
7494 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007495 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00007496 .total_size = 8192,
7497 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007498 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007499 .tested = TEST_OK_PREW,
David Hendricksc4acec92010-06-24 11:39:57 +00007500 .probe = probe_spi_rdid,
7501 .probe_timing = TIMING_ZERO,
7502 .block_erasers =
7503 {
7504 {
7505 .eraseblocks = { {4 * 1024, 2048} },
7506 .block_erase = spi_block_erase_20,
7507 }, {
7508 .eraseblocks = { {32 * 1024, 256} },
7509 .block_erase = spi_block_erase_52,
7510 }, {
7511 .eraseblocks = { {64 * 1024, 128} },
7512 .block_erase = spi_block_erase_d8,
7513 }, {
7514 .eraseblocks = { {8 * 1024 * 1024, 1} },
7515 .block_erase = spi_block_erase_60,
7516 }, {
7517 .eraseblocks = { {8 * 1024 * 1024, 1} },
7518 .block_erase = spi_block_erase_c7,
7519 }
7520 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007521 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00007522 .write = spi_chip_write_256,
7523 .read = spi_chip_read,
7524 },
7525
7526 {
7527 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007528 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007529 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007530 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007531 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007532 .total_size = 128,
7533 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007534 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007535 .tested = TEST_UNTESTED,
7536 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007537 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007538 .block_erasers =
7539 {
7540 {
7541 .eraseblocks = { {4 * 1024, 32} },
7542 .block_erase = spi_block_erase_20,
7543 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007544 .eraseblocks = { {64 * 1024, 2} },
7545 .block_erase = spi_block_erase_d8,
7546 }, {
7547 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007548 .block_erase = spi_block_erase_c7,
7549 }
7550 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007551 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007552 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007553 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007554 },
7555
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007556 {
7557 .vendor = "Winbond",
7558 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007559 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007560 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007561 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007562 .total_size = 256,
7563 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007564 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007565 .tested = TEST_UNTESTED,
7566 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007567 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007568 .block_erasers =
7569 {
7570 {
7571 .eraseblocks = { {4 * 1024, 64} },
7572 .block_erase = spi_block_erase_20,
7573 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007574 .eraseblocks = { {64 * 1024, 4} },
7575 .block_erase = spi_block_erase_d8,
7576 }, {
7577 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007578 .block_erase = spi_block_erase_c7,
7579 }
7580 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007581 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007582 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007583 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007584 },
7585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007586 {
7587 .vendor = "Winbond",
7588 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007590 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007591 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007592 .total_size = 512,
7593 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007594 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00007595 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007596 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007597 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007598 .block_erasers =
7599 {
7600 {
7601 .eraseblocks = { {4 * 1024, 128} },
7602 .block_erase = spi_block_erase_20,
7603 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007604 .eraseblocks = { {64 * 1024, 8} },
7605 .block_erase = spi_block_erase_d8,
7606 }, {
7607 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007608 .block_erase = spi_block_erase_c7,
7609 }
7610 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007611 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007612 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007613 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007614 },
7615
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007616 {
7617 .vendor = "Winbond",
7618 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007619 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007620 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007621 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007622 .total_size = 1024,
7623 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007624 .feature_bits = FEATURE_WRSR_WREN,
Yul Rottmann6d6ab742011-03-05 16:31:57 +00007625 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007626 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007627 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007628 .block_erasers =
7629 {
7630 {
7631 .eraseblocks = { {4 * 1024, 256} },
7632 .block_erase = spi_block_erase_20,
7633 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007634 .eraseblocks = { {64 * 1024, 16} },
7635 .block_erase = spi_block_erase_d8,
7636 }, {
7637 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007638 .block_erase = spi_block_erase_c7,
7639 }
7640 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007641 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007642 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007643 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007644 },
7645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007646 {
7647 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007648 .name = "W25x16",
7649 .bustype = CHIP_BUSTYPE_SPI,
7650 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007651 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00007652 .total_size = 2048,
7653 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007654 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007655 .tested = TEST_OK_PRE,
Hector Martina721ae22009-07-11 19:39:11 +00007656 .probe = probe_spi_rdid,
7657 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007658 .block_erasers =
7659 {
7660 {
7661 .eraseblocks = { {4 * 1024, 512} },
7662 .block_erase = spi_block_erase_20,
7663 }, {
7664 .eraseblocks = { {32 * 1024, 64} },
7665 .block_erase = spi_block_erase_52,
7666 }, {
7667 .eraseblocks = { {64 * 1024, 32} },
7668 .block_erase = spi_block_erase_d8,
7669 }, {
7670 .eraseblocks = { {2 * 1024 * 1024, 1} },
7671 .block_erase = spi_block_erase_60,
7672 }, {
7673 .eraseblocks = { {2 * 1024 * 1024, 1} },
7674 .block_erase = spi_block_erase_c7,
7675 }
7676 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007677 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007678 .write = spi_chip_write_256,
7679 .read = spi_chip_read,
7680 },
7681
7682 {
7683 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007684 .name = "W25x32",
7685 .bustype = CHIP_BUSTYPE_SPI,
7686 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007687 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00007688 .total_size = 4096,
7689 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007690 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007691 .tested = TEST_OK_PROBE,
7692 .probe = probe_spi_rdid,
7693 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007694 .block_erasers =
7695 {
7696 {
7697 .eraseblocks = { {4 * 1024, 1024} },
7698 .block_erase = spi_block_erase_20,
7699 }, {
7700 .eraseblocks = { {32 * 1024, 128} },
7701 .block_erase = spi_block_erase_52,
7702 }, {
7703 .eraseblocks = { {64 * 1024, 64} },
7704 .block_erase = spi_block_erase_d8,
7705 }, {
7706 .eraseblocks = { {4 * 1024 * 1024, 1} },
7707 .block_erase = spi_block_erase_60,
7708 }, {
7709 .eraseblocks = { {4 * 1024 * 1024, 1} },
7710 .block_erase = spi_block_erase_c7,
7711 }
7712 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007713 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007714 .write = spi_chip_write_256,
7715 .read = spi_chip_read,
7716 },
7717
7718 {
7719 .vendor = "Winbond",
7720 .name = "W25x64",
7721 .bustype = CHIP_BUSTYPE_SPI,
7722 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007723 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00007724 .total_size = 8192,
7725 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007726 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007727 .tested = TEST_UNTESTED,
7728 .probe = probe_spi_rdid,
7729 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007730 .block_erasers =
7731 {
7732 {
7733 .eraseblocks = { {4 * 1024, 2048} },
7734 .block_erase = spi_block_erase_20,
7735 }, {
7736 .eraseblocks = { {32 * 1024, 256} },
7737 .block_erase = spi_block_erase_52,
7738 }, {
7739 .eraseblocks = { {64 * 1024, 128} },
7740 .block_erase = spi_block_erase_d8,
7741 }, {
7742 .eraseblocks = { {8 * 1024 * 1024, 1} },
7743 .block_erase = spi_block_erase_60,
7744 }, {
7745 .eraseblocks = { {8 * 1024 * 1024, 1} },
7746 .block_erase = spi_block_erase_c7,
7747 }
7748 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007749 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007750 .write = spi_chip_write_256,
7751 .read = spi_chip_read,
7752 },
7753
7754 {
7755 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007756 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007757 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007758 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007759 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007760 .total_size = 128,
7761 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007762 .feature_bits = FEATURE_LONG_RESET,
David Hendricks567b7b82011-05-18 01:31:03 +00007763 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007764 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007765 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007766 .block_erasers =
7767 {
7768 {
7769 .eraseblocks = { {128 * 1024, 1} },
7770 .block_erase = erase_chip_block_jedec,
7771 }
7772 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007773 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007774 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007775 },
7776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007777 {
7778 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007779 .name = "W29C020(C)/W29C022",
Urja Rannikko161b8852009-06-05 08:47:37 +00007780 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007781 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007782 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007783 .total_size = 256,
7784 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007785 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007786 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007787 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007788 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007789 .block_erasers =
7790 {
7791 {
7792 .eraseblocks = { {256 * 1024, 1} },
7793 .block_erase = erase_chip_block_jedec,
7794 }
7795 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007796 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007798 },
7799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007800 {
7801 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007802 .name = "W29C040/P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007803 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007804 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007805 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007806 .total_size = 512,
7807 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007808 .feature_bits = FEATURE_LONG_RESET,
7809 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007810 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007811 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007812 .block_erasers =
7813 {
7814 {
7815 .eraseblocks = { {512 * 1024, 1} },
7816 .block_erase = erase_chip_block_jedec,
7817 }
7818 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007819 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007820 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007821 },
7822
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007823 {
7824 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007825 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007826 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007827 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007828 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007829 .total_size = 128,
7830 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007831 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007832 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007833 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007834 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007835 .block_erasers =
7836 {
7837 {
7838 .eraseblocks = { {128 * 1024, 1} },
7839 .block_erase = erase_chip_block_jedec,
7840 }
7841 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007842 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007844 },
7845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007846 {
7847 .vendor = "Winbond",
Michael Karcher19e0aac2011-03-06 17:58:05 +00007848 .name = "W39L040",
7849 .bustype = CHIP_BUSTYPE_PARALLEL,
7850 .manufacture_id = WINBOND_ID,
7851 .model_id = WINBOND_W39L040,
7852 .total_size = 512,
7853 .page_size = 64 * 1024,
7854 .feature_bits = FEATURE_EITHER_RESET,
7855 .tested = TEST_OK_PR,
7856 .probe = probe_jedec,
7857 .probe_timing = 10,
7858 .block_erasers =
7859 {
7860 {
7861 .eraseblocks = { {4 * 1024, 128} },
7862 .block_erase = erase_block_jedec,
7863 }, {
7864 .eraseblocks = { {64 * 1024, 8} },
7865 .block_erase = erase_sector_jedec,
7866 }, {
7867 .eraseblocks = { {512 * 1024, 1} },
7868 .block_erase = erase_chip_block_jedec,
7869 }
7870 },
7871 .printlock = printlock_w39l040,
7872 .write = write_jedec_1,
7873 .read = read_memmapped,
7874 },
7875
7876 {
7877 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007878 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007879 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007880 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007881 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007882 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007883 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007884 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007885 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007886 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007887 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007888 .block_erasers =
7889 {
7890 {
7891 .eraseblocks = { {64 * 1024, 8} },
7892 .block_erase = erase_sector_jedec,
7893 }, {
7894 .eraseblocks = { {512 * 1024, 1} },
7895 .block_erase = erase_chip_block_jedec,
7896 }
7897 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007898 .printlock = printlock_w39v040a,
Sean Nelson35727f72010-01-28 23:55:12 +00007899 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007900 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007901 },
7902
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007903 {
7904 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007905 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007906 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007907 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007908 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007909 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007910 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007911 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007912 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007913 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007914 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007915 .block_erasers =
7916 {
7917 {
7918 .eraseblocks = { {64 * 1024, 8} },
7919 .block_erase = erase_sector_jedec,
7920 }, {
7921 .eraseblocks = { {512 * 1024, 1} },
7922 .block_erase = erase_chip_block_jedec,
7923 }
7924 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007925 .printlock = printlock_w39v040b,
Sean Nelson35727f72010-01-28 23:55:12 +00007926 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007927 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007928 },
7929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007930 {
7931 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007932 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007933 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007934 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007935 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007936 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007937 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007938 .feature_bits = FEATURE_EITHER_RESET,
7939 .tested = TEST_UNTESTED,
7940 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007941 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007942 .block_erasers =
7943 {
7944 {
7945 .eraseblocks = { {64 * 1024, 8} },
7946 .block_erase = erase_sector_jedec,
7947 }, {
7948 .eraseblocks = { {512 * 1024, 1} },
7949 .block_erase = erase_chip_block_jedec,
7950 }
7951 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007952 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007953 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007954 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007955 },
7956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007957 {
7958 .vendor = "Winbond",
7959 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007960 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007961 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007962 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007963 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007964 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007965 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007966 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007967 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007968 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007969 .block_erasers =
7970 {
7971 {
7972 .eraseblocks = { {4 * 1024, 128} },
7973 .block_erase = erase_block_jedec,
7974 }, {
7975 .eraseblocks = { {64 * 1024, 8} },
7976 .block_erase = erase_sector_jedec,
7977 }, {
7978 .eraseblocks = { {512 * 1024, 1} },
7979 .block_erase = erase_chip_block_jedec,
7980 }
7981 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007982 .printlock = printlock_w39v040fa,
Michael Karcherc9b63412010-05-30 16:55:18 +00007983 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007984 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007985 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007986 },
7987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007988 {
7989 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007990 .name = "W39V040FB",
7991 .bustype = CHIP_BUSTYPE_FWH,
7992 .manufacture_id = WINBOND_ID,
7993 .model_id = WINBOND_W39V040B,
7994 .total_size = 512,
7995 .page_size = 64 * 1024,
7996 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00007997 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007998 .probe = probe_jedec,
7999 .probe_timing = 10,
8000 .block_erasers =
8001 {
8002 {
8003 .eraseblocks = { {64 * 1024, 8} },
8004 .block_erase = erase_sector_jedec,
8005 }, {
8006 .eraseblocks = { {512 * 1024, 1} },
8007 .block_erase = erase_chip_block_jedec,
8008 }
8009 },
8010 .printlock = printlock_w39v040fb,
Idwer Volleringecc67072010-12-26 23:55:12 +00008011 .unlock = unlock_w39v040fb,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008012 .write = write_jedec_1,
8013 .read = read_memmapped,
8014 },
8015
8016 {
8017 .vendor = "Winbond",
8018 .name = "W39V040FC",
8019 .bustype = CHIP_BUSTYPE_FWH,
8020 .manufacture_id = WINBOND_ID,
8021 .model_id = WINBOND_W39V040C,
8022 .total_size = 512,
8023 .page_size = 64 * 1024,
8024 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
8025 .tested = TEST_UNTESTED,
8026 .probe = probe_jedec,
8027 .probe_timing = 10,
8028 .block_erasers =
8029 {
8030 {
8031 .eraseblocks = { {64 * 1024, 8} },
8032 .block_erase = erase_sector_jedec,
8033 }, {
8034 .eraseblocks = { {512 * 1024, 1} },
8035 .block_erase = erase_chip_block_jedec,
8036 }
8037 },
8038 .printlock = printlock_w39v040fc,
8039 .write = write_jedec_1,
8040 .read = read_memmapped,
8041 },
8042
8043 {
8044 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008045 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008046 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008047 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008048 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008049 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00008050 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008051 .feature_bits = FEATURE_EITHER_RESET,
8052 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008053 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008054 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008055 .block_erasers =
8056 {
8057 {
8058 .eraseblocks = { {64 * 1024, 16} },
8059 .block_erase = erase_sector_jedec,
8060 }, {
8061 .eraseblocks = { {1024 * 1024, 1} },
8062 .block_erase = erase_chip_block_jedec,
8063 }
8064 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008065 .printlock = printlock_w39v080a,
Sean Nelson35727f72010-01-28 23:55:12 +00008066 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008067 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008068 },
8069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008070 {
8071 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008072 .name = "W49F002U/N",
Urja Rannikko038a3122009-06-28 19:19:25 +00008073 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008074 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008075 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008076 .total_size = 256,
8077 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008078 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008079 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008080 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008081 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008082 .block_erasers =
8083 {
8084 {
8085 .eraseblocks = {
8086 {128 * 1024, 1},
8087 {96 * 1024, 1},
8088 {8 * 1024, 2},
8089 {16 * 1024, 1},
8090 },
8091 .block_erase = erase_sector_jedec,
8092 }, {
8093 .eraseblocks = { {256 * 1024, 1} },
8094 .block_erase = erase_chip_block_jedec,
8095 }
8096 },
Sean Nelson35727f72010-01-28 23:55:12 +00008097 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008099 },
8100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008101 {
8102 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00008103 .name = "W49F020",
8104 .bustype = CHIP_BUSTYPE_PARALLEL,
8105 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008106 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00008107 .total_size = 256,
8108 .page_size = 128,
8109 .feature_bits = FEATURE_EITHER_RESET,
8110 .tested = TEST_OK_PROBE,
8111 .probe = probe_jedec,
8112 .probe_timing = 10,
8113 .block_erasers =
8114 {
8115 {
8116 .eraseblocks = { {256 * 1024, 1} },
8117 .block_erase = erase_chip_block_jedec,
8118 }
8119 },
8120 .write = write_jedec_1,
8121 .read = read_memmapped,
8122 },
8123
8124 {
8125 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008126 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008127 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008128 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008129 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008130 .total_size = 256,
8131 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008132 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008133 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008134 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008135 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008136 .block_erasers =
8137 {
8138 {
8139 .eraseblocks = {
8140 {64 * 1024, 3},
8141 {32 * 1024, 1},
8142 {8 * 1024, 2},
8143 {16 * 1024, 1},
8144 },
8145 .block_erase = erase_sector_jedec,
8146 }, {
8147 .eraseblocks = { {256 * 1024, 1} },
8148 .block_erase = erase_chip_block_jedec,
8149 }
8150 },
Sean Nelson35727f72010-01-28 23:55:12 +00008151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008153 },
8154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008155 {
8156 .vendor = "Winbond",
8157 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008158 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008159 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008160 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008161 .total_size = 256,
8162 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008163 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008164 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008166 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008167 .block_erasers =
8168 {
8169 {
8170 .eraseblocks = {
8171 {64 * 1024, 3},
8172 {32 * 1024, 1},
8173 {8 * 1024, 2},
8174 {16 * 1024, 1},
8175 },
8176 .block_erase = erase_sector_jedec,
8177 }, {
8178 .eraseblocks = { {256 * 1024, 1} },
8179 .block_erase = erase_chip_block_jedec,
8180 }
8181 },
Sean Nelson35727f72010-01-28 23:55:12 +00008182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008184 },
8185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008186 {
8187 .vendor = "Winbond",
8188 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008189 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008190 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008191 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008192 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00008193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008194 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008195 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00008196 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008197 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008198 .block_erasers =
8199 {
8200 {
8201 .eraseblocks = { {64 * 1024, 16}, },
8202 .block_erase = erase_sector_jedec,
8203 }, {
8204 .eraseblocks = { {1024 * 1024, 1} },
8205 .block_erase = erase_chip_block_jedec,
8206 }
8207 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008208 .printlock = printlock_w39v080fa,
8209 .unlock = unlock_w39v080fa,
Sean Nelson35727f72010-01-28 23:55:12 +00008210 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008211 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008212 },
8213
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008214 {
8215 .vendor = "Winbond",
8216 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008217 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008218 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008219 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008220 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008221 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008222 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008223 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00008224 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008225 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008226 .block_erasers =
8227 {
8228 {
8229 .eraseblocks = { {64 * 1024, 8}, },
8230 .block_erase = erase_sector_jedec,
8231 }, {
8232 .eraseblocks = { {512 * 1024, 1} },
8233 .block_erase = erase_chip_block_jedec,
8234 }
8235 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008236 .printlock = printlock_w39v080fa_dual,
Sean Nelson35727f72010-01-28 23:55:12 +00008237 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008238 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008239 },
8240
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008241 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00008242 .vendor = "AMIC",
8243 .name = "unknown AMIC SPI chip",
8244 .bustype = CHIP_BUSTYPE_SPI,
8245 .manufacture_id = AMIC_ID,
8246 .model_id = GENERIC_DEVICE_ID,
8247 .total_size = 0,
8248 .page_size = 256,
8249 .tested = TEST_BAD_PREW,
8250 .probe = probe_spi_rdid4,
8251 .probe_timing = TIMING_ZERO,
8252 .write = NULL,
8253 .read = NULL,
8254 },
8255
8256 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008257 .vendor = "Atmel",
8258 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008259 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008260 .manufacture_id = ATMEL_ID,
8261 .model_id = GENERIC_DEVICE_ID,
8262 .total_size = 0,
8263 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008264 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008265 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008266 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008267 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008268 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008269 },
8270
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008271 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00008272 .vendor = "Eon",
8273 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008274 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008275 .manufacture_id = EON_ID_NOPREFIX,
8276 .model_id = GENERIC_DEVICE_ID,
8277 .total_size = 0,
8278 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008279 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008280 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008281 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008282 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008283 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008284 },
8285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008286 {
8287 .vendor = "Macronix",
8288 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008289 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00008290 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008291 .model_id = GENERIC_DEVICE_ID,
8292 .total_size = 0,
8293 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008294 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008295 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008296 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008297 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008298 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008299 },
8300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008301 {
8302 .vendor = "PMC",
8303 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008304 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008305 .manufacture_id = PMC_ID,
8306 .model_id = GENERIC_DEVICE_ID,
8307 .total_size = 0,
8308 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008309 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008310 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008311 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008312 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008313 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008314 },
8315
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008316 {
8317 .vendor = "SST",
8318 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008319 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008320 .manufacture_id = SST_ID,
8321 .model_id = GENERIC_DEVICE_ID,
8322 .total_size = 0,
8323 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008324 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008325 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008326 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008327 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008328 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008329 },
8330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008331 {
8332 .vendor = "ST",
8333 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008334 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008335 .manufacture_id = ST_ID,
8336 .model_id = GENERIC_DEVICE_ID,
8337 .total_size = 0,
8338 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008339 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008340 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008341 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008342 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008343 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008344 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00008345
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008346 {
Sean Nelson118e1d62009-11-24 02:08:11 +00008347 .vendor = "Sanyo",
8348 .name = "unknown Sanyo SPI chip",
8349 .bustype = CHIP_BUSTYPE_SPI,
8350 .manufacture_id = SANYO_ID,
8351 .model_id = GENERIC_DEVICE_ID,
8352 .total_size = 0,
8353 .page_size = 256,
8354 .tested = TEST_BAD_PREW,
8355 .probe = probe_spi_rdid,
8356 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00008357 .write = NULL,
8358 .read = NULL,
8359 },
8360
8361 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008362 .vendor = "Generic",
8363 .name = "unknown SPI chip (RDID)",
8364 .bustype = CHIP_BUSTYPE_SPI,
8365 .manufacture_id = GENERIC_MANUF_ID,
8366 .model_id = GENERIC_DEVICE_ID,
8367 .total_size = 0,
8368 .page_size = 256,
8369 .tested = TEST_BAD_PREW,
8370 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008371 .write = NULL,
8372 },
8373 {
8374 .vendor = "Generic",
8375 .name = "unknown SPI chip (REMS)",
8376 .bustype = CHIP_BUSTYPE_SPI,
8377 .manufacture_id = GENERIC_MANUF_ID,
8378 .model_id = GENERIC_DEVICE_ID,
8379 .total_size = 0,
8380 .page_size = 256,
8381 .tested = TEST_BAD_PREW,
8382 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008383 .write = NULL,
8384 },
8385
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008386 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00008387};