blob: 1b5c88a7b7c21d55fadef7b00d201efe835febd7 [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
Steven Zakuleccbe370e2011-06-03 07:26:31 +000057 * .voltage = Voltage range in millivolt
FENG yu ningff692fb2008-12-08 18:15:10 +000058 */
59
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000060 {
61 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000062 .name = "Am29F010A/B",
63 .bustype = CHIP_BUSTYPE_PARALLEL,
64 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000065 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
Uwe Hermanna8b37272009-06-19 15:54:39 +000066 .total_size = 128,
67 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000068 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +000069 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +000070 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000071 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000072 .block_erasers =
73 {
74 {
75 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000076 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000077 }, {
78 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000079 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000080 },
81 },
Sean Nelson35727f72010-01-28 23:55:12 +000082 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000083 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +000084 .voltage = {4500, 5500},
Uwe Hermanna8b37272009-06-19 15:54:39 +000085 },
86
87 {
88 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000090 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000092 .model_id = AMD_AM29F002BB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000093 .total_size = 256,
94 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000095 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000096 .tested = TEST_UNTESTED,
97 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000098 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000099 .block_erasers =
100 {
101 {
102 .eraseblocks = {
103 {16 * 1024, 1},
104 {8 * 1024, 2},
105 {32 * 1024, 1},
106 {64 * 1024, 3},
107 },
108 .block_erase = erase_sector_jedec,
109 }, {
110 .eraseblocks = { {256 * 1024, 1} },
111 .block_erase = erase_chip_block_jedec,
112 },
113 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000114 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000115 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000116 .voltage = {4750, 5250}, /* -55 speed is +-5%, all others +-10% */
FENG yu ningff692fb2008-12-08 18:15:10 +0000117 },
118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000119 {
120 .vendor = "AMD",
121 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000122 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000123 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000124 .model_id = AMD_AM29F002BT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000125 .total_size = 256,
126 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000127 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
128 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000129 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000130 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000131 .block_erasers =
132 {
133 {
134 .eraseblocks = {
135 {64 * 1024, 3},
136 {32 * 1024, 1},
137 {8 * 1024, 2},
138 {16 * 1024, 1},
139 },
140 .block_erase = erase_sector_jedec,
141 }, {
142 .eraseblocks = { {256 * 1024, 1} },
143 .block_erase = erase_chip_block_jedec,
144 },
145 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000146 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000147 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000148 },
149
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000150 {
151 .vendor = "AMD",
152 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000153 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000155 .model_id = AMD_AM29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000156 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000157 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000158 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000159 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000160 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000161 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000162 .block_erasers =
163 {
164 {
165 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 }, {
168 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000170 },
171 },
Sean Nelson35727f72010-01-28 23:55:12 +0000172 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000173 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000174 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +0000175 },
176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 {
178 .vendor = "AMD",
179 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000180 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000181 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000182 .model_id = AMD_AM29F040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000183 .total_size = 512,
184 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000185 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
186 .tested = TEST_UNTESTED,
187 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000188 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000189 .block_erasers =
190 {
191 {
192 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000193 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000194 }, {
195 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000196 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000197 },
198 },
Sean Nelson35727f72010-01-28 23:55:12 +0000199 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000200 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000201 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +0000202 },
203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000204 {
205 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000206 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000207 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000208 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000209 .model_id = AMD_AM29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000210 .total_size = 1024,
211 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000212 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000213 .tested = TEST_UNTESTED,
214 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000215 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 .block_erasers =
217 {
218 {
219 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000220 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000221 }, {
222 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000223 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000224 },
225 },
Sean Nelson35727f72010-01-28 23:55:12 +0000226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000227 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000228 .voltage = {4500, 5500},
Peter Stuge8440cc02009-01-25 23:55:12 +0000229 },
230
231 {
232 .vendor = "AMD",
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000233 .name = "Am29LV001BB",
234 .bustype = CHIP_BUSTYPE_PARALLEL,
235 .manufacture_id = AMD_ID,
236 .model_id = AMD_AM29LV001BB,
237 .total_size = 128,
238 .page_size = 64 * 1024, /* unused */
239 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
240 .tested = TEST_OK_PREW,
241 .probe = probe_jedec,
242 .probe_timing = TIMING_ZERO,
243 .block_erasers =
244 {
245 {
246 .eraseblocks = {
247 {8 * 1024, 1},
248 {4 * 1024, 2},
249 {16 * 1024, 7},
250 },
251 .block_erase = erase_sector_jedec,
252 }, {
253 .eraseblocks = { {128 * 1024, 1} },
254 .block_erase = erase_chip_block_jedec,
255 },
256 },
257 .write = write_jedec_1,
258 .read = read_memmapped,
259 },
260
261 {
262 .vendor = "AMD",
263 .name = "Am29LV001BT",
264 .bustype = CHIP_BUSTYPE_PARALLEL,
265 .manufacture_id = AMD_ID,
266 .model_id = AMD_AM29LV001BT,
267 .total_size = 128,
268 .page_size = 64 * 1024, /* unused */
269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
270 .tested = TEST_UNTESTED,
271 .probe = probe_jedec,
272 .probe_timing = TIMING_ZERO,
273 .block_erasers =
274 {
275 {
276 .eraseblocks = {
277 {16 * 1024, 7},
278 {4 * 1024, 2},
279 {8 * 1024, 1},
280 },
281 .block_erase = erase_sector_jedec,
282 }, {
283 .eraseblocks = { {128 * 1024, 1} },
284 .block_erase = erase_chip_block_jedec,
285 },
286 },
287 .write = write_jedec_1,
288 .read = read_memmapped,
289 },
290
291 {
292 .vendor = "AMD",
293 .name = "Am29LV002BB",
294 .bustype = CHIP_BUSTYPE_PARALLEL,
295 .manufacture_id = AMD_ID,
296 .model_id = AMD_AM29LV002BB,
297 .total_size = 256,
298 .page_size = 64 * 1024, /* unused */
299 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
300 .tested = TEST_UNTESTED,
301 .probe = probe_jedec,
302 .probe_timing = TIMING_ZERO,
303 .block_erasers =
304 {
305 {
306 .eraseblocks = {
307 {16 * 1024, 1},
308 {8 * 1024, 2},
309 {32 * 1024, 1},
310 {64 * 1024, 3},
311 },
312 .block_erase = erase_sector_jedec,
313 }, {
314 .eraseblocks = { {256 * 1024, 1} },
315 .block_erase = erase_chip_block_jedec,
316 },
317 },
318 .write = write_jedec_1,
319 .read = read_memmapped,
320 },
321
322 {
323 .vendor = "AMD",
324 .name = "Am29LV002BT",
325 .bustype = CHIP_BUSTYPE_PARALLEL,
326 .manufacture_id = AMD_ID,
327 .model_id = AMD_AM29LV002BT,
328 .total_size = 256,
329 .page_size = 64 * 1024, /* unused */
330 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
331 .tested = TEST_UNTESTED,
332 .probe = probe_jedec,
333 .probe_timing = TIMING_ZERO,
334 .block_erasers =
335 {
336 {
337 .eraseblocks = {
338 {64 * 1024, 3},
339 {32 * 1024, 1},
340 {8 * 1024, 2},
341 {16 * 1024, 1},
342 },
343 .block_erase = erase_sector_jedec,
344 }, {
345 .eraseblocks = { {256 * 1024, 1} },
346 .block_erase = erase_chip_block_jedec,
347 },
348 },
349 .write = write_jedec_1,
350 .read = read_memmapped,
351 },
352
353 {
354 .vendor = "AMD",
355 .name = "Am29LV004BB",
356 .bustype = CHIP_BUSTYPE_PARALLEL,
357 .manufacture_id = AMD_ID,
358 .model_id = AMD_AM29LV004BB,
359 .total_size = 512,
360 .page_size = 64 * 1024, /* unused */
361 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
362 .tested = TEST_UNTESTED,
363 .probe = probe_jedec,
364 .probe_timing = TIMING_ZERO,
365 .block_erasers =
366 {
367 {
368 .eraseblocks = {
369 {16 * 1024, 1},
370 {8 * 1024, 2},
371 {32 * 1024, 1},
372 {64 * 1024, 7},
373 },
374 .block_erase = erase_sector_jedec,
375 }, {
376 .eraseblocks = { {512 * 1024, 1} },
377 .block_erase = erase_chip_block_jedec,
378 },
379 },
380 .write = write_jedec_1,
381 .read = read_memmapped,
382 },
383
384 {
385 .vendor = "AMD",
386 .name = "Am29LV004BT",
387 .bustype = CHIP_BUSTYPE_PARALLEL,
388 .manufacture_id = AMD_ID,
389 .model_id = AMD_AM29LV004BT,
390 .total_size = 512,
391 .page_size = 64 * 1024, /* unused */
392 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
393 .tested = TEST_UNTESTED,
394 .probe = probe_jedec,
395 .probe_timing = TIMING_ZERO,
396 .block_erasers =
397 {
398 {
399 .eraseblocks = {
400 {64 * 1024, 7},
401 {32 * 1024, 1},
402 {8 * 1024, 2},
403 {16 * 1024, 1},
404 },
405 .block_erase = erase_sector_jedec,
406 }, {
407 .eraseblocks = { {512 * 1024, 1} },
408 .block_erase = erase_chip_block_jedec,
409 },
410 },
411 .write = write_jedec_1,
412 .read = read_memmapped,
413 },
414
415 {
416 .vendor = "AMD",
417 .name = "Am29LV008BB",
418 .bustype = CHIP_BUSTYPE_PARALLEL,
419 .manufacture_id = AMD_ID,
420 .model_id = AMD_AM29LV008BB,
421 .total_size = 1024,
422 .page_size = 64 * 1024, /* unused */
423 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
424 .tested = TEST_UNTESTED,
425 .probe = probe_jedec,
426 .probe_timing = TIMING_ZERO,
427 .block_erasers =
428 {
429 {
430 .eraseblocks = {
431 {16 * 1024, 1},
432 {8 * 1024, 2},
433 {32 * 1024, 1},
434 {64 * 1024, 15},
435 },
436 .block_erase = erase_sector_jedec,
437 }, {
438 .eraseblocks = { {1024 * 1024, 1} },
439 .block_erase = erase_chip_block_jedec,
440 },
441 },
442 .write = write_jedec_1,
443 .read = read_memmapped,
444 },
445
446 {
447 .vendor = "AMD",
448 .name = "Am29LV008BT",
449 .bustype = CHIP_BUSTYPE_PARALLEL,
450 .manufacture_id = AMD_ID,
451 .model_id = AMD_AM29LV008BT,
452 .total_size = 1024,
453 .page_size = 64 * 1024, /* unused */
454 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
455 .tested = TEST_UNTESTED,
456 .probe = probe_jedec,
457 .probe_timing = TIMING_ZERO,
458 .block_erasers =
459 {
460 {
461 .eraseblocks = {
462 {64 * 1024, 15},
463 {32 * 1024, 1},
464 {8 * 1024, 2},
465 {16 * 1024, 1},
466 },
467 .block_erase = erase_sector_jedec,
468 }, {
469 .eraseblocks = { {1024 * 1024, 1} },
470 .block_erase = erase_chip_block_jedec,
471 },
472 },
473 .write = write_jedec_1,
474 .read = read_memmapped,
475 },
476
477 {
478 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000479 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000480 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000481 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000482 .model_id = AMD_AM29LV040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000483 .total_size = 512,
484 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000485 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000486 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +0000487 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000488 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000489 .block_erasers =
490 {
491 {
492 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000493 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000494 }, {
495 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000496 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000497 },
498 },
Sean Nelson35727f72010-01-28 23:55:12 +0000499 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000500 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000501 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +0000502 },
503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000504 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000505 .vendor = "AMD",
506 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000507 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000508 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000509 .model_id = AMD_AM29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000510 .total_size = 1024,
511 .page_size = 64 * 1024,
David Borg204f4652010-12-04 03:26:40 +0000512 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
Peter Stuge8440cc02009-01-25 23:55:12 +0000513 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000514 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000515 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000516 .block_erasers =
517 {
518 {
519 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000520 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000521 }, {
522 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000523 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000524 },
525 },
Sean Nelson35727f72010-01-28 23:55:12 +0000526 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000527 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000528 .voltage = {2700, 3600},
Peter Stuge8440cc02009-01-25 23:55:12 +0000529 },
530
531 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000532 .vendor = "AMIC",
533 .name = "A25L05PT",
534 .bustype = CHIP_BUSTYPE_SPI,
535 .manufacture_id = AMIC_ID,
536 .model_id = AMIC_A25L05PT,
537 .total_size = 64,
538 .page_size = 256,
539 .tested = TEST_UNTESTED,
540 .probe = probe_spi_rdid4,
541 .probe_timing = TIMING_ZERO,
542 .block_erasers =
543 {
544 {
545 .eraseblocks = {
546 {32 * 1024, 1},
547 {16 * 1024, 1},
548 {8 * 1024, 1},
549 {4 * 1024, 2},
550 },
551 .block_erase = spi_block_erase_d8,
552 }, {
553 .eraseblocks = { {64 * 1024, 1} },
554 .block_erase = spi_block_erase_c7,
555 }
556 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000557 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000558 .unlock = spi_disable_blockprotect,
559 .write = spi_chip_write_256,
560 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000561 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000562 },
563
564 {
565 .vendor = "AMIC",
566 .name = "A25L05PU",
567 .bustype = CHIP_BUSTYPE_SPI,
568 .manufacture_id = AMIC_ID,
569 .model_id = AMIC_A25L05PU,
570 .total_size = 64,
571 .page_size = 256,
572 .tested = TEST_UNTESTED,
573 .probe = probe_spi_rdid4,
574 .probe_timing = TIMING_ZERO,
575 .block_erasers =
576 {
577 {
578 .eraseblocks = {
579 {4 * 1024, 2},
580 {8 * 1024, 1},
581 {16 * 1024, 1},
582 {32 * 1024, 1},
583 },
584 .block_erase = spi_block_erase_d8,
585 }, {
586 .eraseblocks = { {64 * 1024, 1} },
587 .block_erase = spi_block_erase_c7,
588 }
589 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000590 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000591 .unlock = spi_disable_blockprotect,
592 .write = spi_chip_write_256,
593 .read = spi_chip_read,
594 },
595
596 {
597 .vendor = "AMIC",
598 .name = "A25L10PT",
599 .bustype = CHIP_BUSTYPE_SPI,
600 .manufacture_id = AMIC_ID,
601 .model_id = AMIC_A25L10PT,
602 .total_size = 128,
603 .page_size = 256,
604 .tested = TEST_UNTESTED,
605 .probe = probe_spi_rdid4,
606 .probe_timing = TIMING_ZERO,
607 .block_erasers =
608 {
609 {
610 .eraseblocks = {
611 {64 * 1024, 1},
612 {32 * 1024, 1},
613 {16 * 1024, 1},
614 {8 * 1024, 1},
615 {4 * 1024, 2},
616 },
617 .block_erase = spi_block_erase_d8,
618 }, {
619 .eraseblocks = { {128 * 1024, 1} },
620 .block_erase = spi_block_erase_c7,
621 }
622 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000623 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000624 .unlock = spi_disable_blockprotect,
625 .write = spi_chip_write_256,
626 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000627 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000628 },
629
630 {
631 .vendor = "AMIC",
632 .name = "A25L10PU",
633 .bustype = CHIP_BUSTYPE_SPI,
634 .manufacture_id = AMIC_ID,
635 .model_id = AMIC_A25L10PU,
636 .total_size = 128,
637 .page_size = 256,
638 .tested = TEST_UNTESTED,
639 .probe = probe_spi_rdid4,
640 .probe_timing = TIMING_ZERO,
641 .block_erasers =
642 {
643 {
644 .eraseblocks = {
645 {4 * 1024, 2},
646 {8 * 1024, 1},
647 {16 * 1024, 1},
648 {32 * 1024, 1},
649 {64 * 1024, 1},
650 },
651 .block_erase = spi_block_erase_d8,
652 }, {
653 .eraseblocks = { {128 * 1024, 1} },
654 .block_erase = spi_block_erase_c7,
655 }
656 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000657 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000658 .unlock = spi_disable_blockprotect,
659 .write = spi_chip_write_256,
660 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000661 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000662 },
663
664 {
665 .vendor = "AMIC",
666 .name = "A25L20PT",
667 .bustype = CHIP_BUSTYPE_SPI,
668 .manufacture_id = AMIC_ID,
669 .model_id = AMIC_A25L20PT,
670 .total_size = 256,
671 .page_size = 256,
672 .tested = TEST_UNTESTED,
673 .probe = probe_spi_rdid4,
674 .probe_timing = TIMING_ZERO,
675 .block_erasers =
676 {
677 {
678 .eraseblocks = {
679 {64 * 1024, 3},
680 {32 * 1024, 1},
681 {16 * 1024, 1},
682 {8 * 1024, 1},
683 {4 * 1024, 2},
684 },
685 .block_erase = spi_block_erase_d8,
686 }, {
687 .eraseblocks = { {256 * 1024, 1} },
688 .block_erase = spi_block_erase_c7,
689 }
690 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000691 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000692 .unlock = spi_disable_blockprotect,
693 .write = spi_chip_write_256,
694 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000695 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000696 },
697
698 {
699 .vendor = "AMIC",
700 .name = "A25L20PU",
701 .bustype = CHIP_BUSTYPE_SPI,
702 .manufacture_id = AMIC_ID,
703 .model_id = AMIC_A25L20PU,
704 .total_size = 256,
705 .page_size = 256,
706 .tested = TEST_UNTESTED,
707 .probe = probe_spi_rdid4,
708 .probe_timing = TIMING_ZERO,
709 .block_erasers =
710 {
711 {
712 .eraseblocks = {
713 {4 * 1024, 2},
714 {8 * 1024, 1},
715 {16 * 1024, 1},
716 {32 * 1024, 1},
717 {64 * 1024, 3},
718 },
719 .block_erase = spi_block_erase_d8,
720 }, {
721 .eraseblocks = { {256 * 1024, 1} },
722 .block_erase = spi_block_erase_c7,
723 }
724 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000725 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000726 .unlock = spi_disable_blockprotect,
727 .write = spi_chip_write_256,
728 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000729 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000730 },
731
732 /* The A25L40P{T,U} chips are distinguished by their
733 * erase block layouts, but without any distinction in RDID.
734 * This inexplicable quirk was verified by Rudolf Marek
735 * and discussed on the flashrom mailing list on 2010-07-12.
736 */
737 {
738 .vendor = "AMIC",
739 .name = "A25L40PT",
740 .bustype = CHIP_BUSTYPE_SPI,
741 .manufacture_id = AMIC_ID,
742 .model_id = AMIC_A25L40PT,
743 .total_size = 512,
744 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000745 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000746 .probe = probe_spi_rdid4,
747 .probe_timing = TIMING_ZERO,
748 .block_erasers =
749 {
750 {
751 .eraseblocks = {
752 {64 * 1024, 7},
753 {32 * 1024, 1},
754 {16 * 1024, 1},
755 {8 * 1024, 1},
756 {4 * 1024, 2},
757 },
758 .block_erase = spi_block_erase_d8,
759 }, {
760 .eraseblocks = { {512 * 1024, 1} },
761 .block_erase = spi_block_erase_c7,
762 }
763 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000764 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000765 .unlock = spi_disable_blockprotect,
766 .write = spi_chip_write_256,
767 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000768 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000769 },
770
771 {
772 .vendor = "AMIC",
773 .name = "A25L40PU",
774 .bustype = CHIP_BUSTYPE_SPI,
775 .manufacture_id = AMIC_ID,
776 .model_id = AMIC_A25L40PU,
777 .total_size = 512,
778 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000779 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000780 .probe = probe_spi_rdid4,
781 .probe_timing = TIMING_ZERO,
782 .block_erasers =
783 {
784 {
785 .eraseblocks = {
786 {4 * 1024, 2},
787 {8 * 1024, 1},
788 {16 * 1024, 1},
789 {32 * 1024, 1},
790 {64 * 1024, 7},
791 },
792 .block_erase = spi_block_erase_d8,
793 }, {
794 .eraseblocks = { {512 * 1024, 1} },
795 .block_erase = spi_block_erase_c7,
796 }
797 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000798 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000799 .unlock = spi_disable_blockprotect,
800 .write = spi_chip_write_256,
801 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000802 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000803 },
804
805 {
806 .vendor = "AMIC",
807 .name = "A25L80P",
808 .bustype = CHIP_BUSTYPE_SPI,
809 .manufacture_id = AMIC_ID,
810 .model_id = AMIC_A25L80P,
811 .total_size = 1024,
812 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000813 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000814 .probe = probe_spi_rdid4,
815 .probe_timing = TIMING_ZERO,
816 .block_erasers =
817 {
818 {
819 .eraseblocks = {
820 {4 * 1024, 2},
821 {8 * 1024, 1},
822 {16 * 1024, 1},
823 {32 * 1024, 1},
824 {64 * 1024, 15},
825 },
826 .block_erase = spi_block_erase_d8,
827 }, {
828 .eraseblocks = { {1024 * 1024, 1} },
829 .block_erase = spi_block_erase_c7,
830 }
831 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000832 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000833 .unlock = spi_disable_blockprotect,
834 .write = spi_chip_write_256,
835 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000836 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000837 },
838
839 {
840 .vendor = "AMIC",
841 .name = "A25L16PT",
842 .bustype = CHIP_BUSTYPE_SPI,
843 .manufacture_id = AMIC_ID,
844 .model_id = AMIC_A25L16PT,
845 .total_size = 2048,
846 .page_size = 256,
847 .tested = TEST_UNTESTED,
848 .probe = probe_spi_rdid4,
849 .probe_timing = TIMING_ZERO,
850 .block_erasers =
851 {
852 {
853 .eraseblocks = {
854 {64 * 1024, 31},
855 {32 * 1024, 1},
856 {16 * 1024, 1},
857 {8 * 1024, 1},
858 {4 * 1024, 2},
859 },
860 .block_erase = spi_block_erase_d8,
861 }, {
862 .eraseblocks = { {2048 * 1024, 1} },
863 .block_erase = spi_block_erase_60,
864 }, {
865 .eraseblocks = { {2048 * 1024, 1} },
866 .block_erase = spi_block_erase_c7,
867 }
868 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000869 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000870 .unlock = spi_disable_blockprotect,
871 .write = spi_chip_write_256,
872 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000873 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000874 },
875
876 {
877 .vendor = "AMIC",
878 .name = "A25L16PU",
879 .bustype = CHIP_BUSTYPE_SPI,
880 .manufacture_id = AMIC_ID,
881 .model_id = AMIC_A25L16PU,
882 .total_size = 2048,
883 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000884 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000885 .probe = probe_spi_rdid4,
886 .probe_timing = TIMING_ZERO,
887 .block_erasers =
888 {
889 {
890 .eraseblocks = {
891 {4 * 1024, 2},
892 {8 * 1024, 1},
893 {16 * 1024, 1},
894 {32 * 1024, 1},
895 {64 * 1024, 31},
896 },
897 .block_erase = spi_block_erase_d8,
898 }, {
899 .eraseblocks = { {2048 * 1024, 1} },
900 .block_erase = spi_block_erase_60,
901 }, {
902 .eraseblocks = { {2048 * 1024, 1} },
903 .block_erase = spi_block_erase_c7,
904 }
905 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000906 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000907 .unlock = spi_disable_blockprotect,
908 .write = spi_chip_write_256,
909 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000910 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000911 },
912
913 {
914 .vendor = "AMIC",
Dan Lenski11617122010-07-29 15:00:40 +0000915 .name = "A25L512",
916 .bustype = CHIP_BUSTYPE_SPI,
917 .manufacture_id = AMIC_ID_NOPREFIX,
918 .model_id = AMIC_A25L512,
919 .total_size = 64,
920 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000921 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000922 .tested = TEST_UNTESTED,
923 .probe = probe_spi_rdid,
924 .probe_timing = TIMING_ZERO,
925 .block_erasers =
926 {
927 {
928 .eraseblocks = { { 4 * 1024, 16 } },
929 .block_erase = spi_block_erase_20,
930 }, {
931 .eraseblocks = { { 64 * 1024, 1 } },
932 .block_erase = spi_block_erase_d8,
933 }, {
934 .eraseblocks = { { 64 * 1024, 1 } },
935 .block_erase = spi_block_erase_c7,
936 }
937 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000938 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000939 .unlock = spi_disable_blockprotect,
940 .write = spi_chip_write_256,
941 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000942 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000943 },
944
945 {
946 .vendor = "AMIC",
947 .name = "A25L010",
948 .bustype = CHIP_BUSTYPE_SPI,
949 .manufacture_id = AMIC_ID_NOPREFIX,
950 .model_id = AMIC_A25L010,
951 .total_size = 128,
952 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000953 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000954 .tested = TEST_UNTESTED,
955 .probe = probe_spi_rdid,
956 .probe_timing = TIMING_ZERO,
957 .block_erasers =
958 {
959 {
960 .eraseblocks = { { 4 * 1024, 32 } },
961 .block_erase = spi_block_erase_20,
962 }, {
963 .eraseblocks = { { 64 * 1024, 2 } },
964 .block_erase = spi_block_erase_d8,
965 }, {
966 .eraseblocks = { { 128 * 1024, 1 } },
967 .block_erase = spi_block_erase_c7,
968 }
969 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000970 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000971 .unlock = spi_disable_blockprotect,
972 .write = spi_chip_write_256,
973 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000974 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000975 },
976
977 {
978 .vendor = "AMIC",
979 .name = "A25L020",
980 .bustype = CHIP_BUSTYPE_SPI,
981 .manufacture_id = AMIC_ID_NOPREFIX,
982 .model_id = AMIC_A25L020,
983 .total_size = 256,
984 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000985 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000986 .tested = TEST_UNTESTED,
987 .probe = probe_spi_rdid,
988 .probe_timing = TIMING_ZERO,
989 .block_erasers =
990 {
991 {
992 .eraseblocks = { { 4 * 1024, 64 } },
993 .block_erase = spi_block_erase_20,
994 }, {
995 .eraseblocks = { { 64 * 1024, 4 } },
996 .block_erase = spi_block_erase_d8,
997 }, {
998 .eraseblocks = { { 256 * 1024, 1 } },
999 .block_erase = spi_block_erase_c7,
1000 }
1001 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001002 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001003 .unlock = spi_disable_blockprotect,
1004 .write = spi_chip_write_256,
1005 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001006 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001007 },
1008
1009 {
1010 .vendor = "AMIC",
1011 .name = "A25L040",
1012 .bustype = CHIP_BUSTYPE_SPI,
1013 .manufacture_id = AMIC_ID_NOPREFIX,
1014 .model_id = AMIC_A25L040,
1015 .total_size = 512,
1016 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001017 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001018 .tested = TEST_UNTESTED,
1019 .probe = probe_spi_rdid,
1020 .probe_timing = TIMING_ZERO,
1021 .block_erasers =
1022 {
1023 {
1024 .eraseblocks = { { 4 * 1024, 128 } },
1025 .block_erase = spi_block_erase_20,
1026 }, {
1027 .eraseblocks = { { 64 * 1024, 8 } },
1028 .block_erase = spi_block_erase_d8,
1029 }, {
1030 .eraseblocks = { { 512 * 1024, 1 } },
1031 .block_erase = spi_block_erase_c7,
1032 }
1033 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001034 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001035 .unlock = spi_disable_blockprotect,
1036 .write = spi_chip_write_256,
1037 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001038 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001039 },
1040
1041 {
1042 .vendor = "AMIC",
1043 .name = "A25L080",
1044 .bustype = CHIP_BUSTYPE_SPI,
1045 .manufacture_id = AMIC_ID_NOPREFIX,
1046 .model_id = AMIC_A25L080,
1047 .total_size = 1024,
1048 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001049 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001050 .tested = TEST_UNTESTED,
1051 .probe = probe_spi_rdid,
1052 .probe_timing = TIMING_ZERO,
1053 .block_erasers =
1054 {
1055 {
1056 .eraseblocks = { { 4 * 1024, 256 } },
1057 .block_erase = spi_block_erase_20,
1058 }, {
1059 .eraseblocks = { { 64 * 1024, 16 } },
1060 .block_erase = spi_block_erase_d8,
1061 }, {
1062 .eraseblocks = { { 1024 * 1024, 1 } },
1063 .block_erase = spi_block_erase_c7,
1064 }
1065 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001066 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001067 .unlock = spi_disable_blockprotect,
1068 .write = spi_chip_write_256,
1069 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001070 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001071 },
1072
1073 {
1074 .vendor = "AMIC",
1075 .name = "A25L016",
1076 .bustype = CHIP_BUSTYPE_SPI,
1077 .manufacture_id = AMIC_ID_NOPREFIX,
1078 .model_id = AMIC_A25L016,
1079 .total_size = 2048,
1080 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001081 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001082 .tested = TEST_UNTESTED,
1083 .probe = probe_spi_rdid,
1084 .probe_timing = TIMING_ZERO,
1085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = { { 4 * 1024, 512 } },
1089 .block_erase = spi_block_erase_20,
1090 }, {
1091 .eraseblocks = { { 64 * 1024, 32 } },
1092 .block_erase = spi_block_erase_d8,
1093 }, {
1094 .eraseblocks = { { 2048 * 1024, 1 } },
1095 .block_erase = spi_block_erase_c7,
1096 }
1097 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001098 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001099 .unlock = spi_disable_blockprotect,
1100 .write = spi_chip_write_256,
1101 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001102 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001103 },
1104
1105 {
1106 .vendor = "AMIC",
1107 .name = "A25L032",
1108 .bustype = CHIP_BUSTYPE_SPI,
1109 .manufacture_id = AMIC_ID_NOPREFIX,
1110 .model_id = AMIC_A25L032,
1111 .total_size = 4096,
1112 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001113 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001114 .tested = TEST_UNTESTED,
1115 .probe = probe_spi_rdid,
1116 .probe_timing = TIMING_ZERO,
1117 .block_erasers =
1118 {
1119 {
1120 .eraseblocks = { { 4 * 1024, 1024 } },
1121 .block_erase = spi_block_erase_20,
1122 }, {
1123 .eraseblocks = { { 64 * 1024, 64 } },
1124 .block_erase = spi_block_erase_52,
1125 }, {
1126 .eraseblocks = { { 64 * 1024, 64 } },
1127 .block_erase = spi_block_erase_d8,
1128 }, {
1129 .eraseblocks = { { 4096 * 1024, 1 } },
1130 .block_erase = spi_block_erase_60,
1131 }, {
1132 .eraseblocks = { { 4096 * 1024, 1 } },
1133 .block_erase = spi_block_erase_c7,
1134 }
1135 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001136 .printlock = spi_prettyprint_status_register_amic_a25l032,
Dan Lenski11617122010-07-29 15:00:40 +00001137 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1138 .write = spi_chip_write_256,
1139 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001140 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001141 },
1142
1143 {
1144 .vendor = "AMIC",
1145 .name = "A25LQ032",
1146 .bustype = CHIP_BUSTYPE_SPI,
1147 .manufacture_id = AMIC_ID_NOPREFIX,
1148 .model_id = AMIC_A25LQ032,
1149 .total_size = 4096,
1150 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001151 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001152 .tested = TEST_UNTESTED,
1153 .probe = probe_spi_rdid,
1154 .probe_timing = TIMING_ZERO,
1155 .block_erasers =
1156 {
1157 {
1158 .eraseblocks = { { 4 * 1024, 1024 } },
1159 .block_erase = spi_block_erase_20,
1160 }, {
1161 .eraseblocks = { { 64 * 1024, 64 } },
1162 .block_erase = spi_block_erase_52,
1163 }, {
1164 .eraseblocks = { { 64 * 1024, 64 } },
1165 .block_erase = spi_block_erase_d8,
1166 }, {
1167 .eraseblocks = { { 4096 * 1024, 1 } },
1168 .block_erase = spi_block_erase_60,
1169 }, {
1170 .eraseblocks = { { 4096 * 1024, 1 } },
1171 .block_erase = spi_block_erase_c7,
1172 }
1173 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001174 .printlock = spi_prettyprint_status_register_amic_a25lq032,
Dan Lenski11617122010-07-29 15:00:40 +00001175 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1176 .write = spi_chip_write_256,
1177 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001178 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001179 },
1180
1181 {
1182 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001183 .name = "A29002B",
1184 .bustype = CHIP_BUSTYPE_PARALLEL,
1185 .manufacture_id = AMIC_ID_NOPREFIX,
1186 .model_id = AMIC_A29002B,
1187 .total_size = 256,
1188 .page_size = 64 * 1024,
1189 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1190 .tested = TEST_UNTESTED,
1191 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001192 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001193 .block_erasers =
1194 {
1195 {
1196 .eraseblocks = {
1197 {16 * 1024, 1},
1198 {8 * 1024, 2},
1199 {32 * 1024, 1},
1200 {64 * 1024, 3},
1201 },
1202 .block_erase = erase_sector_jedec,
1203 }, {
1204 .eraseblocks = { {256 * 1024, 1} },
1205 .block_erase = erase_chip_block_jedec,
1206 },
1207 },
1208 .write = write_jedec_1,
1209 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001210 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001211 },
1212
1213 {
1214 .vendor = "AMIC",
1215 .name = "A29002T",
1216 .bustype = CHIP_BUSTYPE_PARALLEL,
1217 .manufacture_id = AMIC_ID_NOPREFIX,
1218 .model_id = AMIC_A29002T,
1219 .total_size = 256,
1220 .page_size = 64 * 1024,
1221 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001222 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001223 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001224 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001225 .block_erasers =
1226 {
1227 {
1228 .eraseblocks = {
1229 {64 * 1024, 3},
1230 {32 * 1024, 1},
1231 {8 * 1024, 2},
1232 {16 * 1024, 1},
1233 },
1234 .block_erase = erase_sector_jedec,
1235 }, {
1236 .eraseblocks = { {256 * 1024, 1} },
1237 .block_erase = erase_chip_block_jedec,
1238 },
1239 },
1240 .write = write_jedec_1,
1241 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001242 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001243 },
1244
1245 {
1246 .vendor = "AMIC",
1247 .name = "A29040B",
1248 .bustype = CHIP_BUSTYPE_PARALLEL,
1249 .manufacture_id = AMIC_ID_NOPREFIX,
1250 .model_id = AMIC_A29040B,
1251 .total_size = 512,
1252 .page_size = 64 * 1024,
1253 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1254 .tested = TEST_UNTESTED,
1255 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001256 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001257 .block_erasers =
1258 {
1259 {
1260 .eraseblocks = { {64 * 1024, 8} },
1261 .block_erase = erase_sector_jedec,
1262 }, {
1263 .eraseblocks = { {512 * 1024, 1} },
1264 .block_erase = erase_chip_block_jedec,
1265 },
1266 },
1267 .write = write_jedec_1,
1268 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001269 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001270 },
1271
1272 {
1273 .vendor = "AMIC",
1274 .name = "A49LF040A",
1275 .bustype = CHIP_BUSTYPE_LPC,
1276 .manufacture_id = AMIC_ID_NOPREFIX,
1277 .model_id = AMIC_A49LF040A,
1278 .total_size = 512,
1279 .page_size = 64 * 1024,
1280 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001281 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001282 .probe = probe_jedec,
1283 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
1284 .block_erasers =
1285 {
1286 {
1287 .eraseblocks = { {64 * 1024, 8} },
1288 .block_erase = erase_block_jedec,
1289 }, {
1290 .eraseblocks = { {512 * 1024, 1} },
1291 .block_erase = erase_chip_block_jedec,
1292 }
1293 },
1294 .unlock = unlock_49fl00x,
1295 .write = write_jedec_1,
1296 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001297 .voltage = {3000, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001298 },
1299
1300 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001301 .vendor = "Atmel",
1302 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001303 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001304 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001305 .model_id = ATMEL_AT25DF021,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001306 .total_size = 256,
1307 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001308 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001309 .tested = TEST_UNTESTED,
1310 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001311 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001312 .block_erasers =
1313 {
1314 {
1315 .eraseblocks = { {4 * 1024, 64} },
1316 .block_erase = spi_block_erase_20,
1317 }, {
1318 .eraseblocks = { {32 * 1024, 8} },
1319 .block_erase = spi_block_erase_52,
1320 }, {
1321 .eraseblocks = { {64 * 1024, 4} },
1322 .block_erase = spi_block_erase_d8,
1323 }, {
1324 .eraseblocks = { {256 * 1024, 1} },
1325 .block_erase = spi_block_erase_60,
1326 }, {
1327 .eraseblocks = { {256 * 1024, 1} },
1328 .block_erase = spi_block_erase_c7,
1329 }
1330 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001331 .printlock = spi_prettyprint_status_register_at25df,
1332 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001333 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001334 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001335 .voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
FENG yu ningff692fb2008-12-08 18:15:10 +00001336 },
1337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001338 {
1339 .vendor = "Atmel",
1340 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001341 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001342 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001343 .model_id = ATMEL_AT25DF041A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001344 .total_size = 512,
1345 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001346 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001347 .tested = TEST_UNTESTED,
1348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001349 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001350 .block_erasers =
1351 {
1352 {
1353 .eraseblocks = { {4 * 1024, 128} },
1354 .block_erase = spi_block_erase_20,
1355 }, {
1356 .eraseblocks = { {32 * 1024, 16} },
1357 .block_erase = spi_block_erase_52,
1358 }, {
1359 .eraseblocks = { {64 * 1024, 8} },
1360 .block_erase = spi_block_erase_d8,
1361 }, {
1362 .eraseblocks = { {512 * 1024, 1} },
1363 .block_erase = spi_block_erase_60,
1364 }, {
1365 .eraseblocks = { {512 * 1024, 1} },
1366 .block_erase = spi_block_erase_c7,
1367 }
1368 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001369 .printlock = spi_prettyprint_status_register_at25df,
1370 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001371 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001372 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001373 .voltage = {2300, 3600}, /* Datasheet says 2.3-3.6V or 2.7-3.6V */
FENG yu ningff692fb2008-12-08 18:15:10 +00001374 },
1375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001376 {
1377 .vendor = "Atmel",
1378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001380 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001381 .model_id = ATMEL_AT25DF081,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001382 .total_size = 1024,
1383 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001384 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001385 .tested = TEST_UNTESTED,
1386 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001387 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001388 .block_erasers =
1389 {
1390 {
1391 .eraseblocks = { {4 * 1024, 256} },
1392 .block_erase = spi_block_erase_20,
1393 }, {
1394 .eraseblocks = { {32 * 1024, 32} },
1395 .block_erase = spi_block_erase_52,
1396 }, {
1397 .eraseblocks = { {64 * 1024, 16} },
1398 .block_erase = spi_block_erase_d8,
1399 }, {
1400 .eraseblocks = { {1024 * 1024, 1} },
1401 .block_erase = spi_block_erase_60,
1402 }, {
1403 .eraseblocks = { {1024 * 1024, 1} },
1404 .block_erase = spi_block_erase_c7,
1405 }
1406 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001407 .printlock = spi_prettyprint_status_register_at25df,
1408 .unlock = spi_disable_blockprotect_at25df,
1409 .write = spi_chip_write_256,
1410 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001411 .voltage = {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001412 },
1413
1414 {
1415 .vendor = "Atmel",
1416 .name = "AT25DF081A",
1417 .bustype = CHIP_BUSTYPE_SPI,
1418 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001419 .model_id = ATMEL_AT25DF081A,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001420 .total_size = 1024,
1421 .page_size = 256,
1422 .feature_bits = FEATURE_WRSR_WREN,
1423 .tested = TEST_UNTESTED,
1424 .probe = probe_spi_rdid,
1425 .probe_timing = TIMING_ZERO,
1426 .block_erasers =
1427 {
1428 {
1429 .eraseblocks = { {4 * 1024, 256} },
1430 .block_erase = spi_block_erase_20,
1431 }, {
1432 .eraseblocks = { {32 * 1024, 32} },
1433 .block_erase = spi_block_erase_52,
1434 }, {
1435 .eraseblocks = { {64 * 1024, 16} },
1436 .block_erase = spi_block_erase_d8,
1437 }, {
1438 .eraseblocks = { {1024 * 1024, 1} },
1439 .block_erase = spi_block_erase_60,
1440 }, {
1441 .eraseblocks = { {1024 * 1024, 1} },
1442 .block_erase = spi_block_erase_c7,
1443 }
1444 },
1445 .printlock = spi_prettyprint_status_register_at25df_sec,
1446 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001447 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001448 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001449 },
1450
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001451 {
1452 .vendor = "Atmel",
1453 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001454 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001455 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001456 .model_id = ATMEL_AT25DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001457 .total_size = 2048,
1458 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001459 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001460 .tested = TEST_UNTESTED,
1461 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001462 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001463 .block_erasers =
1464 {
1465 {
1466 .eraseblocks = { {4 * 1024, 512} },
1467 .block_erase = spi_block_erase_20,
1468 }, {
1469 .eraseblocks = { {32 * 1024, 64} },
1470 .block_erase = spi_block_erase_52,
1471 }, {
1472 .eraseblocks = { {64 * 1024, 32} },
1473 .block_erase = spi_block_erase_d8,
1474 }, {
1475 .eraseblocks = { {2 * 1024 * 1024, 1} },
1476 .block_erase = spi_block_erase_60,
1477 }, {
1478 .eraseblocks = { {2 * 1024 * 1024, 1} },
1479 .block_erase = spi_block_erase_c7,
1480 }
1481 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001482 .printlock = spi_prettyprint_status_register_at25df_sec,
1483 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001484 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001485 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001486 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001487 },
1488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001489 {
1490 .vendor = "Atmel",
1491 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001492 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001493 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001494 .model_id = ATMEL_AT25DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 .total_size = 4096,
1496 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001497 .feature_bits = FEATURE_WRSR_WREN,
Stefan Taunerd06d9412011-06-12 19:47:55 +00001498 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001499 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001500 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001501 .block_erasers =
1502 {
1503 {
1504 .eraseblocks = { {4 * 1024, 1024} },
1505 .block_erase = spi_block_erase_20,
1506 }, {
1507 .eraseblocks = { {32 * 1024, 128} },
1508 .block_erase = spi_block_erase_52,
1509 }, {
1510 .eraseblocks = { {64 * 1024, 64} },
1511 .block_erase = spi_block_erase_d8,
1512 }, {
1513 .eraseblocks = { {4 * 1024 * 1024, 1} },
1514 .block_erase = spi_block_erase_60,
1515 }, {
1516 .eraseblocks = { {4 * 1024 * 1024, 1} },
1517 .block_erase = spi_block_erase_c7,
1518 }
1519 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001520 .printlock = spi_prettyprint_status_register_at25df,
1521 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001522 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001523 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001524 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001525 },
1526
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001527 {
1528 .vendor = "Atmel",
1529 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001530 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001531 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001532 .model_id = ATMEL_AT25DF321A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001533 .total_size = 4096,
1534 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001535 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001536 .tested = TEST_UNTESTED,
1537 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001538 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001539 .block_erasers =
1540 {
1541 {
1542 .eraseblocks = { {4 * 1024, 1024} },
1543 .block_erase = spi_block_erase_20,
1544 }, {
1545 .eraseblocks = { {32 * 1024, 128} },
1546 .block_erase = spi_block_erase_52,
1547 }, {
1548 .eraseblocks = { {64 * 1024, 64} },
1549 .block_erase = spi_block_erase_d8,
1550 }, {
1551 .eraseblocks = { {4 * 1024 * 1024, 1} },
1552 .block_erase = spi_block_erase_60,
1553 }, {
1554 .eraseblocks = { {4 * 1024 * 1024, 1} },
1555 .block_erase = spi_block_erase_c7,
1556 }
1557 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001558 .printlock = spi_prettyprint_status_register_at25df_sec,
1559 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001560 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001561 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001562 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "Atmel",
1567 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001569 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001570 .model_id = ATMEL_AT25DF641,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001571 .total_size = 8192,
1572 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001573 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001574 .tested = TEST_UNTESTED,
1575 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001576 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001577 .block_erasers =
1578 {
1579 {
1580 .eraseblocks = { {4 * 1024, 2048} },
1581 .block_erase = spi_block_erase_20,
1582 }, {
1583 .eraseblocks = { {32 * 1024, 256} },
1584 .block_erase = spi_block_erase_52,
1585 }, {
1586 .eraseblocks = { {64 * 1024, 128} },
1587 .block_erase = spi_block_erase_d8,
1588 }, {
1589 .eraseblocks = { {8 * 1024 * 1024, 1} },
1590 .block_erase = spi_block_erase_60,
1591 }, {
1592 .eraseblocks = { {8 * 1024 * 1024, 1} },
1593 .block_erase = spi_block_erase_c7,
1594 }
1595 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001596 .printlock = spi_prettyprint_status_register_at25df_sec,
1597 .unlock = spi_disable_blockprotect_at25df_sec,
1598 .write = spi_chip_write_256,
1599 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001600 .voltage = {2700, 3600},
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001601 },
1602
1603 {
1604 .vendor = "Atmel",
1605 .name = "AT25DQ161",
1606 .bustype = CHIP_BUSTYPE_SPI,
1607 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001608 .model_id = ATMEL_AT25DQ161,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001609 .total_size = 2048,
1610 .page_size = 256,
1611 .feature_bits = FEATURE_WRSR_WREN,
1612 .tested = TEST_UNTESTED,
1613 .probe = probe_spi_rdid,
1614 .probe_timing = TIMING_ZERO,
1615 .block_erasers =
1616 {
1617 {
1618 .eraseblocks = { {4 * 1024, 512} },
1619 .block_erase = spi_block_erase_20,
1620 }, {
1621 .eraseblocks = { {32 * 1024, 64} },
1622 .block_erase = spi_block_erase_52,
1623 }, {
1624 .eraseblocks = { {64 * 1024, 32} },
1625 .block_erase = spi_block_erase_d8,
1626 }, {
1627 .eraseblocks = { {2 * 1024 * 1024, 1} },
1628 .block_erase = spi_block_erase_60,
1629 }, {
1630 .eraseblocks = { {2 * 1024 * 1024, 1} },
1631 .block_erase = spi_block_erase_c7,
1632 }
1633 },
1634 .printlock = spi_prettyprint_status_register_at25df_sec,
1635 .unlock = spi_disable_blockprotect_at25df_sec,
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,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001638 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001639 },
1640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001641 {
1642 .vendor = "Atmel",
1643 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001645 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001646 .model_id = ATMEL_AT25F512B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 .total_size = 64,
1648 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001649 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001650 .tested = TEST_UNTESTED,
1651 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001652 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001653 .block_erasers =
1654 {
1655 {
1656 .eraseblocks = { {4 * 1024, 16} },
1657 .block_erase = spi_block_erase_20,
1658 }, {
1659 .eraseblocks = { {32 * 1024, 2} },
1660 .block_erase = spi_block_erase_52,
1661 }, {
1662 .eraseblocks = { {32 * 1024, 2} },
1663 .block_erase = spi_block_erase_d8,
1664 }, {
1665 .eraseblocks = { {64 * 1024, 1} },
1666 .block_erase = spi_block_erase_60,
1667 }, {
1668 .eraseblocks = { {64 * 1024, 1} },
1669 .block_erase = spi_block_erase_c7,
1670 }
1671 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001672 .printlock = spi_prettyprint_status_register_at25f,
1673 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001674 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001675 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001676 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001677 },
1678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 {
1680 .vendor = "Atmel",
1681 .name = "AT25FS010",
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_AT25FS010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001685 .total_size = 128,
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, 32} },
1694 .block_erase = spi_block_erase_20,
1695 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001696 .eraseblocks = { {4 * 1024, 32} },
1697 .block_erase = spi_block_erase_d7,
1698 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001699 .eraseblocks = { {32 * 1024, 4} },
1700 .block_erase = spi_block_erase_52,
1701 }, {
1702 .eraseblocks = { {32 * 1024, 4} },
1703 .block_erase = spi_block_erase_d8,
1704 }, {
1705 .eraseblocks = { {128 * 1024, 1} },
1706 .block_erase = spi_block_erase_60,
1707 }, {
1708 .eraseblocks = { {128 * 1024, 1} },
1709 .block_erase = spi_block_erase_c7,
1710 }
1711 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001712 .printlock = spi_prettyprint_status_register_at25fs010,
1713 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001714 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001715 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001716 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001717 },
1718
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001719 {
1720 .vendor = "Atmel",
1721 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001722 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001723 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001724 .model_id = ATMEL_AT25FS040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 .total_size = 512,
1726 .page_size = 256,
1727 .tested = TEST_UNTESTED,
1728 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001729 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001730 .block_erasers =
1731 {
1732 {
1733 .eraseblocks = { {4 * 1024, 128} },
1734 .block_erase = spi_block_erase_20,
1735 }, {
1736 .eraseblocks = { {64 * 1024, 8} },
1737 .block_erase = spi_block_erase_52,
1738 }, {
1739 .eraseblocks = { {64 * 1024, 8} },
1740 .block_erase = spi_block_erase_d8,
1741 }, {
1742 .eraseblocks = { {512 * 1024, 1} },
1743 .block_erase = spi_block_erase_60,
1744 }, {
1745 .eraseblocks = { {512 * 1024, 1} },
1746 .block_erase = spi_block_erase_c7,
1747 }
1748 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001749 .printlock = spi_prettyprint_status_register_at25fs040,
1750 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001751 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001753 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001754 },
1755
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001756 {
1757 .vendor = "Atmel",
1758 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001759 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001760 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001761 .model_id = ATMEL_AT26DF041,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001762 .total_size = 512,
1763 .page_size = 256,
1764 .tested = TEST_UNTESTED,
1765 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001766 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001767 .block_erasers =
1768 {
1769 {
1770 .eraseblocks = { {4 * 1024, 128} },
1771 .block_erase = spi_block_erase_20,
1772 }
1773 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 .write = NULL /* Incompatible Page write */,
1775 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001776 .voltage = {2700, 3600}, /* Datasheet says 3.0-3.6 V or 2.7-3.6 V */
FENG yu ningff692fb2008-12-08 18:15:10 +00001777 },
1778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001779 {
1780 .vendor = "Atmel",
1781 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001782 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001783 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001784 .model_id = ATMEL_AT26DF081A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001785 .total_size = 1024,
1786 .page_size = 256,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001787 .feature_bits = FEATURE_WRSR_WREN,
1788 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001790 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001791 .block_erasers =
1792 {
1793 {
1794 .eraseblocks = { {4 * 1024, 256} },
1795 .block_erase = spi_block_erase_20,
1796 }, {
1797 .eraseblocks = { {32 * 1024, 32} },
1798 .block_erase = spi_block_erase_52,
1799 }, {
1800 .eraseblocks = { {64 * 1024, 16} },
1801 .block_erase = spi_block_erase_d8,
1802 }, {
1803 .eraseblocks = { {1024 * 1024, 1} },
1804 .block_erase = spi_block_erase_60,
1805 }, {
1806 .eraseblocks = { {1024 * 1024, 1} },
1807 .block_erase = spi_block_erase_c7,
1808 }
1809 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001810 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001811 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001812 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001813 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001814 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001815 },
1816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001817 {
1818 .vendor = "Atmel",
1819 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001820 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001821 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001822 .model_id = ATMEL_AT26DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001823 .total_size = 2048,
1824 .page_size = 256,
1825 .tested = TEST_UNTESTED,
1826 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001827 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001828 .block_erasers =
1829 {
1830 {
1831 .eraseblocks = { {4 * 1024, 512} },
1832 .block_erase = spi_block_erase_20,
1833 }, {
1834 .eraseblocks = { {32 * 1024, 64} },
1835 .block_erase = spi_block_erase_52,
1836 }, {
1837 .eraseblocks = { {64 * 1024, 32} },
1838 .block_erase = spi_block_erase_d8,
1839 }, {
1840 .eraseblocks = { {2 * 1024 * 1024, 1} },
1841 .block_erase = spi_block_erase_60,
1842 }, {
1843 .eraseblocks = { {2 * 1024 * 1024, 1} },
1844 .block_erase = spi_block_erase_c7,
1845 }
1846 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001847 .printlock = spi_prettyprint_status_register_at25df,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001848 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001849 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001850 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001851 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001852 },
1853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001854 {
1855 .vendor = "Atmel",
1856 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001857 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001858 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001859 .model_id = ATMEL_AT26DF161A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001860 .total_size = 2048,
1861 .page_size = 256,
1862 .tested = TEST_UNTESTED,
1863 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001864 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001865 .block_erasers =
1866 {
1867 {
1868 .eraseblocks = { {4 * 1024, 512} },
1869 .block_erase = spi_block_erase_20,
1870 }, {
1871 .eraseblocks = { {32 * 1024, 64} },
1872 .block_erase = spi_block_erase_52,
1873 }, {
1874 .eraseblocks = { {64 * 1024, 32} },
1875 .block_erase = spi_block_erase_d8,
1876 }, {
1877 .eraseblocks = { {2 * 1024 * 1024, 1} },
1878 .block_erase = spi_block_erase_60,
1879 }, {
1880 .eraseblocks = { {2 * 1024 * 1024, 1} },
1881 .block_erase = spi_block_erase_c7,
1882 }
1883 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001884 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001885 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001886 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001887 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001888 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001889 },
1890
1891 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001892 /*{
1893 .vendor = "Atmel",
1894 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001895 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001896 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001897 .model_id = ATMEL_AT26DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001898 .total_size = 4096,
1899 .page_size = 256,
1900 .tested = TEST_UNTESTED,
1901 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001902 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001903 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001904 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001905 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001906 .read = spi_chip_read,
1907 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001909 {
1910 .vendor = "Atmel",
1911 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001912 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001913 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001914 .model_id = ATMEL_AT26F004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001915 .total_size = 512,
1916 .page_size = 256,
1917 .tested = TEST_UNTESTED,
1918 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001919 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001920 .block_erasers =
1921 {
1922 {
1923 .eraseblocks = { {4 * 1024, 128} },
1924 .block_erase = spi_block_erase_20,
1925 }, {
1926 .eraseblocks = { {32 * 1024, 16} },
1927 .block_erase = spi_block_erase_52,
1928 }, {
1929 .eraseblocks = { {64 * 1024, 8} },
1930 .block_erase = spi_block_erase_d8,
1931 }, {
1932 .eraseblocks = { {512 * 1024, 1} },
1933 .block_erase = spi_block_erase_60,
1934 }, {
1935 .eraseblocks = { {512 * 1024, 1} },
1936 .block_erase = spi_block_erase_c7,
1937 }
1938 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001939 .write = NULL /* Incompatible Page write */,
1940 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001941 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001942 },
1943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001944 {
1945 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001946 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001947 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001948 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001949 .model_id = ATMEL_AT29C512,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001950 .total_size = 64,
1951 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001952 .feature_bits = FEATURE_LONG_RESET,
1953 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001954 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001955 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001956 .block_erasers =
1957 {
1958 {
1959 .eraseblocks = { {64 * 1024, 1} },
1960 .block_erase = erase_chip_block_jedec,
1961 }
1962 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001963 .write = write_jedec,
1964 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001965 .voltage = {4500, 5500},
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001966 },
1967
1968 {
1969 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001970 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001971 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001972 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001973 .model_id = ATMEL_AT29C010A,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001974 .total_size = 128,
1975 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001976 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001977 .tested = TEST_OK_PRE,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001978 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001979 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001980 .block_erasers =
1981 {
1982 {
1983 .eraseblocks = { {128 * 1024, 1} },
1984 .block_erase = erase_chip_block_jedec,
1985 }
1986 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001987 .write = write_jedec, /* FIXME */
1988 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001989 .voltage = {4500, 5500},
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001990 },
1991
1992 {
1993 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001994 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001995 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001996 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001997 .model_id = ATMEL_AT29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001998 .total_size = 256,
1999 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002000 .feature_bits = FEATURE_LONG_RESET,
2001 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002002 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00002003 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00002004 .block_erasers =
2005 {
2006 {
2007 .eraseblocks = { {256 * 1024, 1} },
2008 .block_erase = erase_chip_block_jedec,
2009 }
2010 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002011 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002012 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002013 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002014 },
2015
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002016 {
2017 .vendor = "Atmel",
2018 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00002019 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002020 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002021 .model_id = ATMEL_AT29C040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002022 .total_size = 512,
2023 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002024 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002025 .tested = TEST_UNTESTED,
2026 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00002027 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00002028 .block_erasers =
2029 {
2030 {
2031 .eraseblocks = { {512 * 1024, 1} },
2032 .block_erase = erase_chip_block_jedec,
2033 }
2034 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002035 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002036 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002037 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002038 },
2039
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002040 {
2041 .vendor = "Atmel",
2042 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002043 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002044 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002045 .model_id = ATMEL_AT45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002046 .total_size = 16896 /* No power of two sizes */,
2047 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002048 .tested = TEST_BAD_READ,
2049 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002050 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002051 .write = NULL /* Incompatible Page write */,
2052 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002053 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002054 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002056 {
2057 .vendor = "Atmel",
2058 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002059 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002060 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002061 .model_id = ATMEL_AT45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002062 .total_size = 128 /* Size can only be determined from status register */,
2063 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002064 .tested = TEST_BAD_READ,
2065 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002066 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002067 .write = NULL,
2068 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002069 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002070 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002071
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002072 {
2073 .vendor = "Atmel",
2074 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002075 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002076 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002077 .model_id = ATMEL_AT45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002078 .total_size = 256 /* Size can only be determined from status register */,
2079 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002080 .tested = TEST_BAD_READ,
2081 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002082 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002083 .write = NULL,
2084 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002085 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002086 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002088 {
2089 .vendor = "Atmel",
2090 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002091 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002092 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002093 .model_id = ATMEL_AT45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002094 .total_size = 512 /* Size can only be determined from status register */,
2095 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002096 .tested = TEST_BAD_READ,
2097 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002098 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002099 .write = NULL,
2100 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002101 .voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002102 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002104 {
2105 .vendor = "Atmel",
2106 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002107 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002108 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002109 .model_id = ATMEL_AT45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002110 .total_size = 1024 /* Size can only be determined from status register */,
2111 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002112 .tested = TEST_BAD_READ,
2113 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002114 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002115 .write = NULL,
2116 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002117 .voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002118 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002119
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002120 {
2121 .vendor = "Atmel",
2122 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002123 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002124 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002125 .model_id = ATMEL_AT45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002126 .total_size = 2048 /* Size can only be determined from status register */,
2127 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .tested = TEST_BAD_READ,
2129 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002130 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002131 .write = NULL,
2132 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002133 .voltage = {2500, 3600}, /* Datasheet says 2.5-3.6 V or 2.7-3.6 V */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002134 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002135
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002136 {
2137 .vendor = "Atmel",
2138 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002139 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002140 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002141 .model_id = ATMEL_AT45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002142 .total_size = 4224 /* No power of two sizes */,
2143 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002144 .tested = TEST_BAD_READ,
2145 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002146 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002147 .write = NULL,
2148 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002149 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002150 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002151
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002152 {
2153 .vendor = "Atmel",
2154 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002155 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002156 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002157 .model_id = ATMEL_AT45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002158 .total_size = 4096 /* Size can only be determined from status register */,
2159 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002160 .tested = TEST_BAD_READ,
2161 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002162 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002163 .write = NULL,
2164 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002165 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002166 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002168 {
2169 .vendor = "Atmel",
2170 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002171 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002172 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002173 .model_id = ATMEL_AT45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002174 .total_size = 8192 /* Size can only be determined from status register */,
2175 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002176 .tested = TEST_BAD_READ,
2177 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002178 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002179 .write = NULL,
2180 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002181 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002182 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002184 {
2185 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002186 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00002187 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002188 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002189 .model_id = ATMEL_AT49BV512,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002190 .total_size = 64,
2191 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00002192 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00002193 .tested = TEST_OK_PREW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002194 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002195 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002196 .block_erasers =
2197 {
2198 {
2199 .eraseblocks = { {64 * 1024, 1} },
2200 .block_erase = erase_chip_block_jedec,
2201 }
2202 },
Sean Nelson35727f72010-01-28 23:55:12 +00002203 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002204 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002205 .voltage = {2700, 3600},
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002206 },
2207
2208 {
2209 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002210 .name = "AT49F020",
2211 .bustype = CHIP_BUSTYPE_PARALLEL,
2212 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002213 .model_id = ATMEL_AT49F020,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002214 .total_size = 256,
2215 .page_size = 256,
2216 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002217 .tested = TEST_OK_PRE,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002218 .probe = probe_jedec,
2219 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2220 .block_erasers =
2221 {
2222 {
2223 .eraseblocks = { {256 * 1024, 1} },
2224 .block_erase = erase_chip_block_jedec,
2225 }
2226 },
2227 .write = write_jedec_1,
2228 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002229 .voltage = {4500, 5500},
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00002230 },
2231
2232 {
2233 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002234 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00002235 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002236 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002237 .model_id = ATMEL_AT49F002N,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002238 .total_size = 256,
2239 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002240 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002241 .tested = TEST_UNTESTED,
2242 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002243 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002244 .block_erasers =
2245 {
2246 {
2247 .eraseblocks = {
2248 {16 * 1024, 1},
2249 {8 * 1024, 2},
2250 {96 * 1024, 1},
2251 {128 * 1024, 1},
2252 },
2253 .block_erase = erase_sector_jedec,
2254 }, {
2255 .eraseblocks = { {256 * 1024, 1} },
2256 .block_erase = erase_chip_block_jedec,
2257 }
2258 },
Sean Nelson35727f72010-01-28 23:55:12 +00002259 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002260 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002261 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002262 },
2263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002264 {
2265 .vendor = "Atmel",
2266 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002267 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002268 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002269 .model_id = ATMEL_AT49F002NT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002270 .total_size = 256,
2271 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002272 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002273 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002274 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002275 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002276 .block_erasers =
2277 {
2278 {
2279 .eraseblocks = {
2280 {128 * 1024, 1},
2281 {96 * 1024, 1},
2282 {8 * 1024, 2},
2283 {16 * 1024, 1},
2284 },
2285 .block_erase = erase_sector_jedec,
2286 }, {
2287 .eraseblocks = { {256 * 1024, 1} },
2288 .block_erase = erase_chip_block_jedec,
2289 }
2290 },
Sean Nelson35727f72010-01-28 23:55:12 +00002291 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002292 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002293 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002294 },
2295
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00002296 {
Joshua Roysf1324e02010-09-16 00:51:51 +00002297 .vendor = "Bright",
2298 .name = "BM29F040",
2299 .bustype = CHIP_BUSTYPE_PARALLEL,
2300 .manufacture_id = BRIGHT_ID,
2301 .model_id = BRIGHT_BM29F040,
2302 .total_size = 512,
2303 .page_size = 64 * 1024,
2304 .feature_bits = FEATURE_EITHER_RESET,
2305 .tested = TEST_OK_PR,
2306 .probe = probe_jedec,
2307 .probe_timing = TIMING_ZERO,
2308 .block_erasers =
2309 {
2310 {
2311 .eraseblocks = { {64 * 1024, 8} },
2312 .block_erase = erase_sector_jedec,
2313 }, {
2314 .eraseblocks = { {512 * 1024, 1} },
2315 .block_erase = erase_chip_block_jedec,
2316 },
2317 },
2318 .write = write_jedec_1,
2319 .read = read_memmapped,
2320 },
2321
2322 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002323 .vendor = "EMST",
2324 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00002325 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002326 .manufacture_id = EMST_ID,
2327 .model_id = EMST_F49B002UA,
2328 .total_size = 256,
2329 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00002330 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002331 .tested = TEST_UNTESTED,
2332 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002333 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002334 .block_erasers =
2335 {
2336 {
2337 .eraseblocks = {
2338 {128 * 1024, 1},
2339 {96 * 1024, 1},
2340 {8 * 1024, 2},
2341 {16 * 1024, 1},
2342 },
2343 .block_erase = erase_sector_jedec,
2344 }, {
2345 .eraseblocks = { {256 * 1024, 1} },
2346 .block_erase = erase_chip_block_jedec,
2347 }
2348 },
Sean Nelson35727f72010-01-28 23:55:12 +00002349 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002350 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002351 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002352 },
2353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002354 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002355 .vendor = "EMST",
2356 .name = "F25L008A",
2357 .bustype = CHIP_BUSTYPE_SPI,
2358 .manufacture_id = EMST_ID,
2359 .model_id = EMST_F25L008A,
2360 .total_size = 1024,
2361 .page_size = 256,
2362 .tested = TEST_UNTESTED,
2363 .probe = probe_spi_rdid,
2364 .probe_timing = TIMING_ZERO,
2365 .block_erasers =
2366 {
2367 {
2368 .eraseblocks = { {4 * 1024, 256} },
2369 .block_erase = spi_block_erase_20,
2370 }, {
2371 .eraseblocks = { {64 * 1024, 16} },
2372 .block_erase = spi_block_erase_d8,
2373 }, {
2374 .eraseblocks = { {1024 * 1024, 1} },
2375 .block_erase = spi_block_erase_60,
2376 }, {
2377 .eraseblocks = { {1024 * 1024, 1} },
2378 .block_erase = spi_block_erase_c7,
2379 }
2380 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002381 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002382 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002383 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002384 .voltage = {2700, 3600},
Michael Karcher80a59ea2010-06-19 22:06:35 +00002385 },
2386
2387 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002388 .vendor = "Eon",
2389 .name = "EN25B05",
2390 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002391 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002392 .model_id = EON_EN25B05,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002393 .total_size = 64,
2394 .page_size = 256,
2395 .tested = TEST_UNTESTED,
2396 .probe = probe_spi_rdid,
2397 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002398 .block_erasers =
2399 {
2400 {
2401 .eraseblocks = {
2402 {4 * 1024, 2},
2403 {8 * 1024, 1},
2404 {16 * 1024, 1},
2405 {32 * 1024, 1},
2406 },
2407 .block_erase = spi_block_erase_d8,
2408 }, {
2409 .eraseblocks = { {64 * 1024, 1} },
2410 .block_erase = spi_block_erase_c7,
2411 }
2412 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002413 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002414 .write = spi_chip_write_256,
2415 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002416 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002417 },
2418
2419 {
2420 .vendor = "Eon",
2421 .name = "EN25B05T",
2422 .bustype = CHIP_BUSTYPE_SPI,
2423 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002424 .model_id = EON_EN25B05,
Sean Nelson54596372010-01-09 05:30:14 +00002425 .total_size = 64,
2426 .page_size = 256,
2427 .tested = TEST_UNTESTED,
2428 .probe = probe_spi_rdid,
2429 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002430 .block_erasers =
2431 {
2432 {
2433 .eraseblocks = {
2434 {32 * 1024, 1},
2435 {16 * 1024, 1},
2436 {8 * 1024, 1},
2437 {4 * 1024, 2},
2438 },
2439 .block_erase = spi_block_erase_d8,
2440 }, {
2441 .eraseblocks = { {64 * 1024, 1} },
2442 .block_erase = spi_block_erase_c7,
2443 }
2444 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002445 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002446 .write = spi_chip_write_256,
2447 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002448 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002449 },
2450
2451 {
2452 .vendor = "Eon",
2453 .name = "EN25B10",
2454 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002455 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002456 .model_id = EON_EN25B10,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002457 .total_size = 128,
2458 .page_size = 256,
2459 .tested = TEST_UNTESTED,
2460 .probe = probe_spi_rdid,
2461 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002462 .block_erasers =
2463 {
2464 {
2465 .eraseblocks = {
2466 {4 * 1024, 2},
2467 {8 * 1024, 1},
2468 {16 * 1024, 1},
2469 {32 * 1024, 3},
2470 },
2471 .block_erase = spi_block_erase_d8,
2472 }, {
2473 .eraseblocks = { {128 * 1024, 1} },
2474 .block_erase = spi_block_erase_c7,
2475 }
2476 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002477 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002478 .write = spi_chip_write_256,
2479 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002480 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002481 },
2482
2483 {
2484 .vendor = "Eon",
2485 .name = "EN25B10T",
2486 .bustype = CHIP_BUSTYPE_SPI,
2487 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002488 .model_id = EON_EN25B10,
Sean Nelson54596372010-01-09 05:30:14 +00002489 .total_size = 128,
2490 .page_size = 256,
2491 .tested = TEST_UNTESTED,
2492 .probe = probe_spi_rdid,
2493 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002494 .block_erasers =
2495 {
2496 {
2497 .eraseblocks = {
2498 {32 * 1024, 3},
2499 {16 * 1024, 1},
2500 {8 * 1024, 1},
2501 {4 * 1024, 2},
2502 },
2503 .block_erase = spi_block_erase_d8,
2504 }, {
2505 .eraseblocks = { {128 * 1024, 1} },
2506 .block_erase = spi_block_erase_c7,
2507 }
2508 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002509 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002510 .write = spi_chip_write_256,
2511 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002512 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002513 },
2514
2515 {
2516 .vendor = "Eon",
2517 .name = "EN25B20",
2518 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002519 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002520 .model_id = EON_EN25B20,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002521 .total_size = 256,
2522 .page_size = 256,
2523 .tested = TEST_UNTESTED,
2524 .probe = probe_spi_rdid,
2525 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002526 .block_erasers =
2527 {
2528 {
2529 .eraseblocks = {
2530 {4 * 1024, 2},
2531 {8 * 1024, 1},
2532 {16 * 1024, 1},
2533 {32 * 1024, 1},
2534 {64 * 1024, 3}
2535 },
2536 .block_erase = spi_block_erase_d8,
2537 }, {
2538 .eraseblocks = { {256 * 1024, 1} },
2539 .block_erase = spi_block_erase_c7,
2540 }
2541 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002542 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002543 .write = spi_chip_write_256,
2544 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002545 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002546 },
2547
2548 {
2549 .vendor = "Eon",
2550 .name = "EN25B20T",
2551 .bustype = CHIP_BUSTYPE_SPI,
2552 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002553 .model_id = EON_EN25B20,
Sean Nelson54596372010-01-09 05:30:14 +00002554 .total_size = 256,
2555 .page_size = 256,
2556 .tested = TEST_UNTESTED,
2557 .probe = probe_spi_rdid,
2558 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002559 .block_erasers =
2560 {
2561 {
2562 .eraseblocks = {
2563 {64 * 1024, 3},
2564 {32 * 1024, 1},
2565 {16 * 1024, 1},
2566 {8 * 1024, 1},
2567 {4 * 1024, 2},
2568 },
2569 .block_erase = spi_block_erase_d8,
2570 }, {
2571 .eraseblocks = { {256 * 1024, 1} },
2572 .block_erase = spi_block_erase_c7,
2573 }
2574 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002575 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002576 .write = spi_chip_write_256,
2577 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002578 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002579 },
2580
2581 {
2582 .vendor = "Eon",
2583 .name = "EN25B40",
2584 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002585 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002586 .model_id = EON_EN25B40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002587 .total_size = 512,
2588 .page_size = 256,
2589 .tested = TEST_UNTESTED,
2590 .probe = probe_spi_rdid,
2591 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002592 .block_erasers =
2593 {
2594 {
2595 .eraseblocks = {
2596 {4 * 1024, 2},
2597 {8 * 1024, 1},
2598 {16 * 1024, 1},
2599 {32 * 1024, 1},
2600 {64 * 1024, 7}
2601 },
2602 .block_erase = spi_block_erase_d8,
2603 }, {
2604 .eraseblocks = { {512 * 1024, 1} },
2605 .block_erase = spi_block_erase_c7,
2606 }
2607 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002608 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002609 .write = spi_chip_write_256,
2610 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002611 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002612 },
2613
2614 {
2615 .vendor = "Eon",
2616 .name = "EN25B40T",
2617 .bustype = CHIP_BUSTYPE_SPI,
2618 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002619 .model_id = EON_EN25B40,
Sean Nelson54596372010-01-09 05:30:14 +00002620 .total_size = 512,
2621 .page_size = 256,
2622 .tested = TEST_UNTESTED,
2623 .probe = probe_spi_rdid,
2624 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002625 .block_erasers =
2626 {
2627 {
2628 .eraseblocks = {
2629 {64 * 1024, 7},
2630 {32 * 1024, 1},
2631 {16 * 1024, 1},
2632 {8 * 1024, 1},
2633 {4 * 1024, 2},
2634 },
2635 .block_erase = spi_block_erase_d8,
2636 }, {
2637 .eraseblocks = { {512 * 1024, 1} },
2638 .block_erase = spi_block_erase_c7,
2639 }
2640 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002641 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002642 .write = spi_chip_write_256,
2643 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002644 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002645 },
2646
2647 {
2648 .vendor = "Eon",
2649 .name = "EN25B80",
2650 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002651 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002652 .model_id = EON_EN25B80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002653 .total_size = 1024,
2654 .page_size = 256,
2655 .tested = TEST_UNTESTED,
2656 .probe = probe_spi_rdid,
2657 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002658 .block_erasers =
2659 {
2660 {
2661 .eraseblocks = {
2662 {4 * 1024, 2},
2663 {8 * 1024, 1},
2664 {16 * 1024, 1},
2665 {32 * 1024, 1},
2666 {64 * 1024, 15}
2667 },
2668 .block_erase = spi_block_erase_d8,
2669 }, {
2670 .eraseblocks = { {1024 * 1024, 1} },
2671 .block_erase = spi_block_erase_c7,
2672 }
2673 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002674 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002675 .write = spi_chip_write_256,
2676 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002677 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002678 },
2679
2680 {
2681 .vendor = "Eon",
2682 .name = "EN25B80T",
2683 .bustype = CHIP_BUSTYPE_SPI,
2684 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002685 .model_id = EON_EN25B80,
Sean Nelson54596372010-01-09 05:30:14 +00002686 .total_size = 1024,
2687 .page_size = 256,
2688 .tested = TEST_UNTESTED,
2689 .probe = probe_spi_rdid,
2690 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002691 .block_erasers =
2692 {
2693 {
2694 .eraseblocks = {
2695 {64 * 1024, 15},
2696 {32 * 1024, 1},
2697 {16 * 1024, 1},
2698 {8 * 1024, 1},
2699 {4 * 1024, 2},
2700 },
2701 .block_erase = spi_block_erase_d8,
2702 }, {
2703 .eraseblocks = { {1024 * 1024, 1} },
2704 .block_erase = spi_block_erase_c7,
2705 }
2706 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002707 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002708 .write = spi_chip_write_256,
2709 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002710 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002711 },
2712
2713 {
2714 .vendor = "Eon",
2715 .name = "EN25B16",
2716 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002717 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002718 .model_id = EON_EN25B16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002719 .total_size = 2048,
2720 .page_size = 256,
2721 .tested = TEST_UNTESTED,
2722 .probe = probe_spi_rdid,
2723 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002724 .block_erasers =
2725 {
2726 {
2727 .eraseblocks = {
2728 {4 * 1024, 2},
2729 {8 * 1024, 1},
2730 {16 * 1024, 1},
2731 {32 * 1024, 1},
2732 {64 * 1024, 31},
2733 },
2734 .block_erase = spi_block_erase_d8,
2735 }, {
2736 .eraseblocks = { {2 * 1024 * 1024, 1} },
2737 .block_erase = spi_block_erase_c7,
2738 }
2739 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002740 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002741 .write = spi_chip_write_256,
2742 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002743 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002744 },
2745
2746 {
2747 .vendor = "Eon",
2748 .name = "EN25B16T",
2749 .bustype = CHIP_BUSTYPE_SPI,
2750 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002751 .model_id = EON_EN25B16,
Sean Nelson54596372010-01-09 05:30:14 +00002752 .total_size = 2048,
2753 .page_size = 256,
2754 .tested = TEST_UNTESTED,
2755 .probe = probe_spi_rdid,
2756 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002757 .block_erasers =
2758 {
2759 {
2760 .eraseblocks = {
2761 {64 * 1024, 31},
2762 {32 * 1024, 1},
2763 {16 * 1024, 1},
2764 {8 * 1024, 1},
2765 {4 * 1024, 2},
2766 },
2767 .block_erase = spi_block_erase_d8,
2768 }, {
2769 .eraseblocks = { {2 * 1024 * 1024, 1} },
2770 .block_erase = spi_block_erase_c7,
2771 }
2772 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002773 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002774 .write = spi_chip_write_256,
2775 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002776 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002777 },
2778
2779 {
2780 .vendor = "Eon",
2781 .name = "EN25B32",
2782 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002783 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002784 .model_id = EON_EN25B32,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002785 .total_size = 4096,
2786 .page_size = 256,
2787 .tested = TEST_UNTESTED,
2788 .probe = probe_spi_rdid,
2789 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002790 .block_erasers =
2791 {
2792 {
2793 .eraseblocks = {
2794 {4 * 1024, 2},
2795 {8 * 1024, 1},
2796 {16 * 1024, 1},
2797 {32 * 1024, 1},
2798 {64 * 1024, 63},
2799 },
2800 .block_erase = spi_block_erase_d8,
2801 }, {
2802 .eraseblocks = { {4 * 1024 * 1024, 1} },
2803 .block_erase = spi_block_erase_c7,
2804 }
2805 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002806 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002807 .write = spi_chip_write_256,
2808 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002809 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002810 },
2811
2812 {
2813 .vendor = "Eon",
2814 .name = "EN25B32T",
2815 .bustype = CHIP_BUSTYPE_SPI,
2816 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002817 .model_id = EON_EN25B32,
Sean Nelson54596372010-01-09 05:30:14 +00002818 .total_size = 4096,
2819 .page_size = 256,
2820 .tested = TEST_UNTESTED,
2821 .probe = probe_spi_rdid,
2822 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002823 .block_erasers =
2824 {
2825 {
2826 .eraseblocks = {
2827 {64 * 1024, 63},
2828 {32 * 1024, 1},
2829 {16 * 1024, 1},
2830 {8 * 1024, 1},
2831 {4 * 1024, 2},
2832 },
2833 .block_erase = spi_block_erase_d8,
2834 }, {
2835 .eraseblocks = { {4 * 1024 * 1024, 1} },
2836 .block_erase = spi_block_erase_c7,
2837 }
2838 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002839 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002840 .write = spi_chip_write_256,
2841 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002842 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002843 },
2844
2845 {
2846 .vendor = "Eon",
2847 .name = "EN25B64",
2848 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002849 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002850 .model_id = EON_EN25B64,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002851 .total_size = 8192,
2852 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002853 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002854 .tested = TEST_UNTESTED,
2855 .probe = probe_spi_rdid,
2856 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002857 .block_erasers =
2858 {
2859 {
2860 .eraseblocks = {
2861 {4 * 1024, 2},
2862 {8 * 1024, 1},
2863 {16 * 1024, 1},
2864 {32 * 1024, 1},
2865 {64 * 1024, 127},
2866 },
2867 .block_erase = spi_block_erase_d8,
2868 }, {
2869 .eraseblocks = { {8 * 1024 * 1024, 1} },
2870 .block_erase = spi_block_erase_c7,
2871 }
2872 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002873 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002874 .write = spi_chip_write_256,
2875 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002876 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002877 },
2878
2879 {
2880 .vendor = "Eon",
2881 .name = "EN25B64T",
2882 .bustype = CHIP_BUSTYPE_SPI,
2883 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002884 .model_id = EON_EN25B64,
Sean Nelson54596372010-01-09 05:30:14 +00002885 .total_size = 8192,
2886 .page_size = 256,
2887 .tested = TEST_UNTESTED,
2888 .probe = probe_spi_rdid,
2889 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002890 .block_erasers =
2891 {
2892 {
2893 .eraseblocks = {
2894 {64 * 1024, 127},
2895 {32 * 1024, 1},
2896 {16 * 1024, 1},
2897 {8 * 1024, 1},
2898 {4 * 1024, 2},
2899 },
2900 .block_erase = spi_block_erase_d8,
2901 }, {
2902 .eraseblocks = { {8 * 1024 * 1024, 1} },
2903 .block_erase = spi_block_erase_c7,
2904 }
2905 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002906 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002907 .write = spi_chip_write_256,
2908 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002909 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002910 },
2911
2912 {
2913 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002914 .name = "EN25D16",
2915 .bustype = CHIP_BUSTYPE_SPI,
2916 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002917 .model_id = EON_EN25D16,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002918 .total_size = 2048,
2919 .page_size = 256,
2920 .tested = TEST_UNTESTED,
2921 .probe = probe_spi_rdid,
2922 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002923 .block_erasers =
2924 {
2925 {
2926 .eraseblocks = { {4 * 1024, 512} },
2927 .block_erase = spi_block_erase_20,
2928 }, {
2929 .eraseblocks = { {64 * 1024, 32} },
2930 .block_erase = spi_block_erase_d8,
2931 }, {
2932 .eraseblocks = { {64 * 1024, 32} },
2933 .block_erase = spi_block_erase_52,
2934 }, {
2935 .eraseblocks = { {2 * 1024 * 1024, 1} },
2936 .block_erase = spi_block_erase_60,
2937 }, {
2938 .eraseblocks = { {2 * 1024 * 1024, 1} },
2939 .block_erase = spi_block_erase_c7,
2940 }
2941 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002942 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002943 .write = spi_chip_write_256,
2944 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002945 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002946 },
2947
2948 {
2949 .vendor = "Eon",
2950 .name = "EN25F05",
2951 .bustype = CHIP_BUSTYPE_SPI,
2952 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002953 .model_id = EON_EN25F05,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002954 .total_size = 64,
2955 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002956 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002957 .tested = TEST_UNTESTED,
2958 .probe = probe_spi_rdid,
2959 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002960 .block_erasers =
2961 {
2962 {
2963 .eraseblocks = { {4 * 1024, 16} },
2964 .block_erase = spi_block_erase_20,
2965 }, {
2966 .eraseblocks = { {32 * 1024, 2} },
2967 .block_erase = spi_block_erase_d8,
2968 }, {
2969 .eraseblocks = { {32 * 1024, 2} },
2970 .block_erase = spi_block_erase_52,
2971 }, {
2972 .eraseblocks = { {64 * 1024, 1} },
2973 .block_erase = spi_block_erase_60,
2974 }, {
2975 .eraseblocks = { {64 * 1024, 1} },
2976 .block_erase = spi_block_erase_c7,
2977 }
2978 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002979 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002980 .write = spi_chip_write_256,
2981 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002982 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002983 },
2984
2985 {
2986 .vendor = "Eon",
2987 .name = "EN25F10",
2988 .bustype = CHIP_BUSTYPE_SPI,
2989 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002990 .model_id = EON_EN25F10,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002991 .total_size = 128,
2992 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002993 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002994 .tested = TEST_UNTESTED,
2995 .probe = probe_spi_rdid,
2996 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002997 .block_erasers =
2998 {
2999 {
3000 .eraseblocks = { {4 * 1024, 32} },
3001 .block_erase = spi_block_erase_20,
3002 }, {
3003 .eraseblocks = { {32 * 1024, 4} },
3004 .block_erase = spi_block_erase_d8,
3005 }, {
3006 .eraseblocks = { {32 * 1024, 4} },
3007 .block_erase = spi_block_erase_52,
3008 }, {
3009 .eraseblocks = { {128 * 1024, 1} },
3010 .block_erase = spi_block_erase_60,
3011 }, {
3012 .eraseblocks = { {128 * 1024, 1} },
3013 .block_erase = spi_block_erase_c7,
3014 }
3015 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003016 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003017 .write = spi_chip_write_256,
3018 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003019 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003020 },
3021
3022 {
3023 .vendor = "Eon",
3024 .name = "EN25F20",
3025 .bustype = CHIP_BUSTYPE_SPI,
3026 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003027 .model_id = EON_EN25F20,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003028 .total_size = 256,
3029 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003030 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003031 .tested = TEST_UNTESTED,
3032 .probe = probe_spi_rdid,
3033 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003034 .block_erasers =
3035 {
3036 {
3037 .eraseblocks = { {4 * 1024, 64} },
3038 .block_erase = spi_block_erase_20,
3039 }, {
3040 .eraseblocks = { {64 * 1024, 4} },
3041 .block_erase = spi_block_erase_d8,
3042 }, {
3043 .eraseblocks = { {64 * 1024, 4} },
3044 .block_erase = spi_block_erase_52,
3045 }, {
3046 .eraseblocks = { {256 * 1024, 1} },
3047 .block_erase = spi_block_erase_60,
3048 }, {
3049 .eraseblocks = { {256 * 1024, 1} },
3050 .block_erase = spi_block_erase_c7,
3051 }
3052 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003053 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003054 .write = spi_chip_write_256,
3055 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003056 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003057 },
3058
3059 {
3060 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003061 .name = "EN25F40",
3062 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003063 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003064 .model_id = EON_EN25F40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003065 .total_size = 512,
3066 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003067 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00003068 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003069 .probe = probe_spi_rdid,
3070 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003071 .block_erasers =
3072 {
3073 {
Sean Nelson54596372010-01-09 05:30:14 +00003074 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003075 .block_erase = spi_block_erase_20,
3076 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003077 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003078 .block_erase = spi_block_erase_d8,
3079 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003080 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003081 .block_erase = spi_block_erase_60,
3082 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003083 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003084 .block_erase = spi_block_erase_c7,
3085 },
3086 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003087 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003088 .write = spi_chip_write_256,
3089 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003090 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003091 },
3092
3093 {
3094 .vendor = "Eon",
3095 .name = "EN25F80",
3096 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003097 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003098 .model_id = EON_EN25F80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003099 .total_size = 1024,
3100 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003101 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003102 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003103 .probe = probe_spi_rdid,
3104 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003105 .block_erasers =
3106 {
3107 {
3108 .eraseblocks = { {4 * 1024, 256} },
3109 .block_erase = spi_block_erase_20,
3110 }, {
3111 .eraseblocks = { {64 * 1024, 16} },
3112 .block_erase = spi_block_erase_d8,
3113 }, {
3114 .eraseblocks = { {1024 * 1024, 1} },
3115 .block_erase = spi_block_erase_60,
3116 }, {
3117 .eraseblocks = { {1024 * 1024, 1} },
3118 .block_erase = spi_block_erase_c7,
3119 }
3120 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003121 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003122 .write = spi_chip_write_256,
3123 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003124 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003125 },
3126
3127 {
3128 .vendor = "Eon",
3129 .name = "EN25F16",
3130 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003131 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003132 .model_id = EON_EN25F16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003133 .total_size = 2048,
3134 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003135 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003136 .tested = TEST_UNTESTED,
3137 .probe = probe_spi_rdid,
3138 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003139 .block_erasers =
3140 {
3141 {
3142 .eraseblocks = { {4 * 1024, 512} },
3143 .block_erase = spi_block_erase_20,
3144 }, {
3145 .eraseblocks = { {64 * 1024, 32} },
3146 .block_erase = spi_block_erase_d8,
3147 }, {
3148 .eraseblocks = { {2 * 1024 * 1024, 1} },
3149 .block_erase = spi_block_erase_60,
3150 }, {
3151 .eraseblocks = { {2 * 1024 * 1024, 1} },
3152 .block_erase = spi_block_erase_c7,
3153 }
3154 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003155 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003156 .write = spi_chip_write_256,
3157 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003158 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003159 },
3160
3161 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003162 .vendor = "Eon",
3163 .name = "EN25F32",
3164 .bustype = CHIP_BUSTYPE_SPI,
3165 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003166 .model_id = EON_EN25F32,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003167 .total_size = 4096,
3168 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003169 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003170 .tested = TEST_UNTESTED,
3171 .probe = probe_spi_rdid,
3172 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003173 .block_erasers =
3174 {
3175 {
3176 .eraseblocks = { {4 * 1024, 1024} },
3177 .block_erase = spi_block_erase_20,
3178 }, {
3179 .eraseblocks = { {64 * 1024, 64} },
3180 .block_erase = spi_block_erase_d8,
3181 }, {
3182 .eraseblocks = { {4 * 1024 * 1024, 1} },
3183 .block_erase = spi_block_erase_60,
3184 }, {
3185 .eraseblocks = { {4 * 1024 * 1024, 1} },
3186 .block_erase = spi_block_erase_c7,
3187 }
3188 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003189 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003190 .write = spi_chip_write_256,
3191 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003192 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003193 },
3194
3195 {
Russ Dill3cd5a122010-03-05 08:44:11 +00003196 .vendor = "Eon",
3197 .name = "EN29F010",
3198 .bustype = CHIP_BUSTYPE_PARALLEL,
3199 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003200 .model_id = EON_EN29F010,
Russ Dill3cd5a122010-03-05 08:44:11 +00003201 .total_size = 128,
3202 .page_size = 128,
3203 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003204 .tested = TEST_OK_PRE,
Russ Dill3cd5a122010-03-05 08:44:11 +00003205 .probe = probe_jedec,
3206 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3207 .block_erasers =
3208 {
3209 {
3210 .eraseblocks = { {16 * 1024, 8} },
3211 .block_erase = erase_sector_jedec,
3212 },
3213 {
3214 .eraseblocks = { {128 * 1024, 1} },
3215 .block_erase = erase_chip_block_jedec,
3216 },
3217 },
3218 .write = write_jedec_1,
3219 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003220 .voltage = {4500, 5500},
Russ Dill3cd5a122010-03-05 08:44:11 +00003221 },
3222
3223 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003224 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003225 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003226 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003227 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003228 .model_id = EON_EN29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003229 .total_size = 256,
3230 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003231 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003232 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003234 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003235 .block_erasers =
3236 {
3237 {
3238 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003239 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003240 {8 * 1024, 2},
3241 {32 * 1024, 1},
3242 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003243 },
3244 .block_erase = erase_sector_jedec,
3245 }, {
3246 .eraseblocks = { {256 * 1024, 1} },
3247 .block_erase = erase_chip_block_jedec,
3248 },
3249 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003250 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003251 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003252 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003253 },
3254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003255 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003256 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003257 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003258 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003259 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003260 .model_id = EON_EN29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003261 .total_size = 256,
3262 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003263 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003264 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003265 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003266 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003267 .block_erasers =
3268 {
3269 {
3270 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003271 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003272 {32 * 1024, 1},
3273 {8 * 1024, 2},
3274 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003275 },
3276 .block_erase = erase_sector_jedec,
3277 }, {
3278 .eraseblocks = { {256 * 1024, 1} },
3279 .block_erase = erase_chip_block_jedec,
3280 },
3281 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003282 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003283 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003284 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003285 },
3286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003287 {
3288 .vendor = "Fujitsu",
3289 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003290 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003291 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003292 .model_id = FUJITSU_MBM29F004BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003293 .total_size = 512,
3294 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003295 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003296 .tested = TEST_UNTESTED,
3297 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003298 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003299 .block_erasers =
3300 {
3301 {
3302 .eraseblocks = {
3303 {16 * 1024, 1},
3304 {8 * 1024, 2},
3305 {32 * 1024, 1},
3306 {64 * 1024, 7},
3307 },
Sean Nelson35727f72010-01-28 23:55:12 +00003308 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003309 }, {
3310 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003311 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003312 },
3313 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003314 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003315 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003316 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003317 },
3318
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003319 {
3320 .vendor = "Fujitsu",
3321 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003322 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003323 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003324 .model_id = FUJITSU_MBM29F004TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 .total_size = 512,
3326 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003327 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .tested = TEST_UNTESTED,
3329 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003330 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003331 .block_erasers =
3332 {
3333 {
3334 .eraseblocks = {
3335 {64 * 1024, 7},
3336 {32 * 1024, 1},
3337 {8 * 1024, 2},
3338 {16 * 1024, 1},
3339 },
Sean Nelson35727f72010-01-28 23:55:12 +00003340 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003341 }, {
3342 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003343 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003344 },
3345 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003346 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003347 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003348 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003349 },
3350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003351 {
Sean Nelson35727f72010-01-28 23:55:12 +00003352 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003353 .vendor = "Fujitsu",
3354 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003355 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003356 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003357 .model_id = FUJITSU_MBM29F400BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003358 .total_size = 512,
3359 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003360 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003361 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003362 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003363 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003364 .block_erasers =
3365 {
3366 {
3367 .eraseblocks = {
3368 {16 * 1024, 1},
3369 {8 * 1024, 2},
3370 {32 * 1024, 1},
3371 {64 * 1024, 7},
3372 },
3373 .block_erase = block_erase_m29f400bt,
3374 }, {
3375 .eraseblocks = { {512 * 1024, 1} },
3376 .block_erase = block_erase_chip_m29f400bt,
3377 },
3378 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003379 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003380 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003381 .voltage = {4750, 5250}, /* 5.0V +-5% for -55 model, +-10% for rest */
FENG yu ningff692fb2008-12-08 18:15:10 +00003382 },
3383
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003384 {
3385 .vendor = "Fujitsu",
3386 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003387 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003388 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003389 .model_id = FUJITSU_MBM29F400TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003390 .total_size = 512,
3391 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003392 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003393 .tested = TEST_UNTESTED,
3394 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003395 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003396 .block_erasers =
3397 {
3398 {
3399 .eraseblocks = {
3400 {64 * 1024, 7},
3401 {32 * 1024, 1},
3402 {8 * 1024, 2},
3403 {16 * 1024, 1},
3404 },
3405 .block_erase = block_erase_m29f400bt,
3406 }, {
3407 .eraseblocks = { {512 * 1024, 1} },
3408 .block_erase = block_erase_chip_m29f400bt,
3409 },
3410 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003411 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003412 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003413 .voltage = {4750, 5250}, /* 5.0V +-5% for -55 model, +-10% for rest */
FENG yu ningff692fb2008-12-08 18:15:10 +00003414 },
3415
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003416 {
David Borgc96a8bd2010-06-21 16:12:22 +00003417 .vendor = "Hyundai",
3418 .name = "HY29F002T",
3419 .bustype = CHIP_BUSTYPE_PARALLEL,
3420 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003421 .model_id = HYUNDAI_HY29F002T,
David Borgc96a8bd2010-06-21 16:12:22 +00003422 .total_size = 256,
3423 .page_size = 256 * 1024,
3424 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003425 .tested = TEST_OK_PRE,
David Borgc96a8bd2010-06-21 16:12:22 +00003426 .probe = probe_jedec,
3427 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3428 .block_erasers =
3429 {
3430 {
3431 .eraseblocks = {
3432 {64 * 1024, 3},
3433 {32 * 1024, 1},
3434 {8 * 1024, 2},
3435 {16 * 1024, 1},
3436 },
3437 .block_erase = erase_sector_jedec,
3438 }, {
3439 .eraseblocks = { {256 * 1024, 1} },
3440 .block_erase = erase_chip_block_jedec,
3441 },
3442 },
3443 .write = write_jedec_1,
3444 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003445 .voltage = {4750, 5250}, /* 5.0V +-5% for -45 model, +-10% for rest */
David Borgc96a8bd2010-06-21 16:12:22 +00003446 },
3447
3448 {
3449 .vendor = "Hyundai",
3450 .name = "HY29F002B",
3451 .bustype = CHIP_BUSTYPE_PARALLEL,
3452 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003453 .model_id = HYUNDAI_HY29F002B,
David Borgc96a8bd2010-06-21 16:12:22 +00003454 .total_size = 256,
3455 .page_size = 256 * 1024,
3456 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3457 .tested = TEST_UNTESTED,
3458 .probe = probe_jedec,
3459 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3460 .block_erasers =
3461 {
3462 {
3463 .eraseblocks = {
3464 {16 * 1024, 1},
3465 {8 * 1024, 2},
3466 {32 * 1024, 1},
3467 {64 * 1024, 3},
3468 },
3469 .block_erase = erase_sector_jedec,
3470 }, {
3471 .eraseblocks = { {256 * 1024, 1} },
3472 .block_erase = erase_chip_block_jedec,
3473 },
3474 },
3475 .write = write_jedec_1,
3476 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003477 .voltage = {4750, 5250}, /* 5.0V +-5% for -45 model, +-10% for rest */
David Borgc96a8bd2010-06-21 16:12:22 +00003478 },
3479
3480 {
Joshua Roysf1324e02010-09-16 00:51:51 +00003481 .vendor = "Hyundai",
3482 .name = "HY29F040A",
3483 .bustype = CHIP_BUSTYPE_PARALLEL,
3484 .manufacture_id = HYUNDAI_ID,
3485 .model_id = HYUNDAI_HY29F040A,
3486 .total_size = 512,
3487 .page_size = 64 * 1024,
3488 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3489 .tested = TEST_UNTESTED,
3490 .probe = probe_jedec,
3491 .probe_timing = TIMING_ZERO,
3492 .block_erasers =
3493 {
3494 {
3495 .eraseblocks = { {64 * 1024, 8} },
3496 .block_erase = erase_sector_jedec,
3497 }, {
3498 .eraseblocks = { {512 * 1024, 1} },
3499 .block_erase = erase_chip_block_jedec,
3500 },
3501 },
3502 .write = write_jedec_1,
3503 .read = read_memmapped,
3504 },
3505
3506 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003507 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003508 .name = "28F001BN/BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003509 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003510 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003511 .model_id = INTEL_28F001B,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003512 .total_size = 128,
3513 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003514 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003515 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003516 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003517 .block_erasers =
3518 {
3519 {
3520 .eraseblocks = {
3521 {8 * 1024, 1},
3522 {4 * 1024, 2},
3523 {112 * 1024, 1},
3524 },
Sean Nelson28accc22010-03-19 18:47:06 +00003525 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003526 },
3527 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003528 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003529 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003530 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003531 },
3532
3533 {
3534 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003535 .name = "28F001BN/BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003536 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003537 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003538 .model_id = INTEL_28F001T,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003539 .total_size = 128,
3540 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003541 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003542 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003543 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003544 .block_erasers =
3545 {
3546 {
3547 .eraseblocks = {
3548 {112 * 1024, 1},
3549 {4 * 1024, 2},
3550 {8 * 1024, 1},
3551 },
Sean Nelson28accc22010-03-19 18:47:06 +00003552 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003553 },
3554 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003555 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003556 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003557 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003558 },
3559
3560 {
3561 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003562 .name = "28F002BC/BL/BV/BX-T",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003563 .bustype = CHIP_BUSTYPE_PARALLEL,
3564 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003565 .model_id = INTEL_28F002T,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003566 .total_size = 256,
3567 .page_size = 256 * 1024,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003568 .tested = TEST_OK_PRE,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003569 .probe = probe_82802ab,
3570 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3571 .block_erasers =
3572 {
3573 {
3574 .eraseblocks = {
3575 {128 * 1024, 1},
3576 {96 * 1024, 1},
3577 {8 * 1024, 2},
3578 {16 * 1024, 1},
3579 },
3580 .block_erase = erase_block_82802ab,
3581 },
3582 },
3583 .write = write_82802ab,
3584 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003585 .voltage = {4500, 5500}, /* 5.0V +-10% read, 12V fast program & erase- +-5% standard, +-10% option */
Joshua Roysd97c0e02010-07-22 15:20:43 +00003586 },
3587
3588 {
3589 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003590 .name = "28F008S3/S5/SC",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003591 .bustype = CHIP_BUSTYPE_PARALLEL,
3592 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003593 .model_id = INTEL_28F004S3,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003594 .total_size = 512,
3595 .page_size = 256,
3596 .tested = TEST_UNTESTED,
3597 .probe = probe_82802ab,
3598 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003599 .block_erasers =
3600 {
3601 {
3602 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003603 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003604 },
3605 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003606 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003607 .write = write_82802ab,
3608 .read = read_memmapped,
3609 },
3610
3611 {
3612 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003613 .name = "28F004B5/BE/BV/BX-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003614 .bustype = CHIP_BUSTYPE_PARALLEL,
3615 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003616 .model_id = INTEL_28F004B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003617 .total_size = 512,
3618 .page_size = 128 * 1024, /* maximal block size */
3619 .tested = TEST_UNTESTED,
3620 .probe = probe_82802ab,
3621 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3622 .block_erasers =
3623 {
3624 {
3625 .eraseblocks = {
3626 {16 * 1024, 1},
3627 {8 * 1024, 2},
3628 {96 * 1024, 1},
3629 {128 * 1024, 3},
3630 },
3631 .block_erase = erase_block_82802ab,
3632 },
3633 },
3634 .write = write_82802ab,
3635 .read = read_memmapped,
3636 },
3637
3638 {
3639 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003640 .name = "28F004B5/BE/BV/BX-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003641 .bustype = CHIP_BUSTYPE_PARALLEL,
3642 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003643 .model_id = INTEL_28F004T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003644 .total_size = 512,
3645 .page_size = 128 * 1024, /* maximal block size */
3646 .tested = TEST_UNTESTED,
3647 .probe = probe_82802ab,
3648 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3649 .block_erasers =
3650 {
3651 {
3652 .eraseblocks = {
3653 {128 * 1024, 3},
3654 {96 * 1024, 1},
3655 {8 * 1024, 2},
3656 {16 * 1024, 1},
3657 },
3658 .block_erase = erase_block_82802ab,
3659 },
3660 },
3661 .write = write_82802ab,
3662 .read = read_memmapped,
3663 },
3664
3665 {
3666 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003667 .name = "28F400BV/BX/CE/CV-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003668 .bustype = CHIP_BUSTYPE_PARALLEL,
3669 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003670 .model_id = INTEL_28F400B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003671 .total_size = 512,
3672 .page_size = 128 * 1024, /* maximal block size */
3673 .feature_bits = FEATURE_ADDR_SHIFTED,
3674 .tested = TEST_UNTESTED,
3675 .probe = probe_82802ab,
3676 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3677 .block_erasers =
3678 {
3679 {
3680 .eraseblocks = {
3681 {16 * 1024, 1},
3682 {8 * 1024, 2},
3683 {96 * 1024, 1},
3684 {128 * 1024, 3},
3685 },
3686 .block_erase = erase_block_82802ab,
3687 },
3688 },
3689 .write = write_82802ab,
3690 .read = read_memmapped,
3691 },
3692
3693 {
3694 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003695 .name = "28F400BV/BX/CE/CV-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003696 .bustype = CHIP_BUSTYPE_PARALLEL,
3697 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003698 .model_id = INTEL_28F400T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003699 .total_size = 512,
3700 .page_size = 128 * 1024, /* maximal block size */
3701 .feature_bits = FEATURE_ADDR_SHIFTED,
3702 .tested = TEST_UNTESTED,
3703 .probe = probe_82802ab,
3704 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3705 .block_erasers =
3706 {
3707 {
3708 .eraseblocks = {
3709 {128 * 1024, 3},
3710 {96 * 1024, 1},
3711 {8 * 1024, 2},
3712 {16 * 1024, 1},
3713 },
3714 .block_erase = erase_block_82802ab,
3715 },
3716 },
3717 .write = write_82802ab,
3718 .read = read_memmapped,
3719 },
3720
3721 {
3722 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003723 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003724 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003725 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003726 .model_id = INTEL_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003727 .total_size = 512,
3728 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003729 .feature_bits = FEATURE_REGISTERMAP,
Stefan Taunerd06d9412011-06-12 19:47:55 +00003730 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003732 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003733 .block_erasers =
3734 {
3735 {
3736 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003737 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003738 },
3739 },
Sean Nelson28accc22010-03-19 18:47:06 +00003740 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003741 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003742 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003743 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003744 },
3745
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 {
3747 .vendor = "Intel",
3748 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003749 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003751 .model_id = INTEL_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003752 .total_size = 1024,
3753 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003754 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003755 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003756 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003757 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003758 .block_erasers =
3759 {
3760 {
3761 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003762 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003763 },
3764 },
Sean Nelson28accc22010-03-19 18:47:06 +00003765 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003766 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003767 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003768 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003769 },
3770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003771 {
3772 .vendor = "Macronix",
3773 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003774 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003775 .manufacture_id = MACRONIX_ID,
3776 .model_id = MACRONIX_MX25L512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 .total_size = 64,
3778 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003779 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .tested = TEST_UNTESTED,
3781 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003782 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003783 .block_erasers =
3784 {
3785 {
3786 .eraseblocks = { {4 * 1024, 16} },
3787 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003788 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003789 .eraseblocks = { {64 * 1024, 1} },
3790 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003791 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003792 .eraseblocks = { {64 * 1024, 1} },
3793 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003794 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003795 .eraseblocks = { {64 * 1024, 1} },
3796 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003797 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003798 .eraseblocks = { {64 * 1024, 1} },
3799 .block_erase = spi_block_erase_c7,
3800 },
3801 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003802 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003803 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003804 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003805 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003806 },
3807
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003808 {
3809 .vendor = "Macronix",
3810 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003811 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003812 .manufacture_id = MACRONIX_ID,
3813 .model_id = MACRONIX_MX25L1005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003814 .total_size = 128,
3815 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003816 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003817 .tested = TEST_UNTESTED,
3818 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003819 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003820 .block_erasers =
3821 {
3822 {
3823 .eraseblocks = { {4 * 1024, 32} },
3824 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003825 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003826 .eraseblocks = { {64 * 1024, 2} },
3827 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003828 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003829 .eraseblocks = { {128 * 1024, 1} },
3830 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003831 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003832 .eraseblocks = { {128 * 1024, 1} },
3833 .block_erase = spi_block_erase_c7,
3834 },
3835 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003836 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003837 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003838 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003839 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003840 },
3841
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003842 {
3843 .vendor = "Macronix",
3844 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003845 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003846 .manufacture_id = MACRONIX_ID,
3847 .model_id = MACRONIX_MX25L2005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003848 .total_size = 256,
3849 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003850 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003851 .tested = TEST_UNTESTED,
3852 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003853 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003854 .block_erasers =
3855 {
3856 {
3857 .eraseblocks = { {4 * 1024, 64} },
3858 .block_erase = spi_block_erase_20,
3859 }, {
3860 .eraseblocks = { {64 * 1024, 4} },
3861 .block_erase = spi_block_erase_52,
3862 }, {
3863 .eraseblocks = { {64 * 1024, 4} },
3864 .block_erase = spi_block_erase_d8,
3865 }, {
3866 .eraseblocks = { {256 * 1024, 1} },
3867 .block_erase = spi_block_erase_60,
3868 }, {
3869 .eraseblocks = { {256 * 1024, 1} },
3870 .block_erase = spi_block_erase_c7,
3871 },
3872 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003873 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003874 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003875 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003876 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003877 },
3878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003879 {
3880 .vendor = "Macronix",
3881 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003882 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003883 .manufacture_id = MACRONIX_ID,
3884 .model_id = MACRONIX_MX25L4005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 .total_size = 512,
3886 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003887 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00003888 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003890 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003891 .block_erasers =
3892 {
3893 {
3894 .eraseblocks = { {4 * 1024, 128} },
3895 .block_erase = spi_block_erase_20,
3896 }, {
3897 .eraseblocks = { {64 * 1024, 8} },
3898 .block_erase = spi_block_erase_52,
3899 }, {
3900 .eraseblocks = { {64 * 1024, 8} },
3901 .block_erase = spi_block_erase_d8,
3902 }, {
3903 .eraseblocks = { {512 * 1024, 1} },
3904 .block_erase = spi_block_erase_60,
3905 }, {
3906 .eraseblocks = { {512 * 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 Guilloux5c5b5252009-01-08 03:40:17 +00003912 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003913 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003914 },
3915
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003916 {
3917 .vendor = "Macronix",
3918 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003919 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003920 .manufacture_id = MACRONIX_ID,
3921 .model_id = MACRONIX_MX25L8005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .total_size = 1024,
3923 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003924 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00003925 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003926 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003927 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003928 .block_erasers =
3929 {
3930 {
3931 .eraseblocks = { {4 * 1024, 256} },
3932 .block_erase = spi_block_erase_20,
3933 }, {
3934 .eraseblocks = { {64 * 1024, 16} },
3935 .block_erase = spi_block_erase_52,
3936 }, {
3937 .eraseblocks = { {64 * 1024, 16} },
3938 .block_erase = spi_block_erase_d8,
3939 }, {
3940 .eraseblocks = { {1024 * 1024, 1} },
3941 .block_erase = spi_block_erase_60,
3942 }, {
3943 .eraseblocks = { {1024 * 1024, 1} },
3944 .block_erase = spi_block_erase_c7,
3945 },
3946 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003947 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003948 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003949 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003950 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003951 },
3952
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003953 {
3954 .vendor = "Macronix",
3955 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003956 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003957 .manufacture_id = MACRONIX_ID,
3958 .model_id = MACRONIX_MX25L1605,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003959 .total_size = 2048,
3960 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003961 .feature_bits = FEATURE_WRSR_WREN,
Sven Schnelle4bd8a402011-03-07 10:59:06 +00003962 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003964 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003965 .block_erasers =
3966 {
3967 {
3968 .eraseblocks = { {4 * 1024, 512} },
3969 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3970 }, {
3971 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3972 .block_erase = spi_block_erase_52,
3973 }, {
3974 .eraseblocks = { {64 * 1024, 32} },
3975 .block_erase = spi_block_erase_d8,
3976 }, {
3977 .eraseblocks = { {2 * 1024 * 1024, 1} },
3978 .block_erase = spi_block_erase_60,
3979 }, {
3980 .eraseblocks = { {2 * 1024 * 1024, 1} },
3981 .block_erase = spi_block_erase_c7,
3982 },
3983 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003984 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003985 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003986 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003987 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00003988 },
3989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 {
3991 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003992 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003993 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003994 .manufacture_id = MACRONIX_ID,
3995 .model_id = MACRONIX_MX25L1635D,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003996 .total_size = 2048,
3997 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003998 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003999 .tested = TEST_UNTESTED,
4000 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004001 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004002 .block_erasers =
4003 {
4004 {
4005 .eraseblocks = { {4 * 1024, 512} },
4006 .block_erase = spi_block_erase_20,
4007 }, {
4008 .eraseblocks = { {64 * 1024, 32} },
4009 .block_erase = spi_block_erase_d8,
4010 }, {
4011 .eraseblocks = { {2 * 1024 * 1024, 1} },
4012 .block_erase = spi_block_erase_60,
4013 }, {
4014 .eraseblocks = { {2 * 1024 * 1024, 1} },
4015 .block_erase = spi_block_erase_c7,
4016 }
4017 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004018 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004019 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004020 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004021 .voltage = {2700, 3600},
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004022 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00004023
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004024 {
4025 .vendor = "Macronix",
Stephan Guilloux3611b802010-09-13 19:59:28 +00004026 .name = "MX25L1635E",
4027 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004028 .manufacture_id = MACRONIX_ID,
4029 .model_id = MACRONIX_MX25L1635E,
Stephan Guilloux3611b802010-09-13 19:59:28 +00004030 .total_size = 2048,
4031 .page_size = 256,
4032 .feature_bits = FEATURE_WRSR_WREN,
4033 .tested = TEST_UNTESTED,
4034 .probe = probe_spi_rdid,
4035 .probe_timing = TIMING_ZERO,
4036 .block_erasers =
4037 {
4038 {
4039 .eraseblocks = { {4 * 1024, 512} },
4040 .block_erase = spi_block_erase_20,
4041 }, {
4042 .eraseblocks = { {64 * 1024, 32} },
4043 .block_erase = spi_block_erase_d8,
4044 }, {
4045 .eraseblocks = { {2 * 1024 * 1024, 1} },
4046 .block_erase = spi_block_erase_60,
4047 }, {
4048 .eraseblocks = { {2 * 1024 * 1024, 1} },
4049 .block_erase = spi_block_erase_c7,
4050 }
4051 },
4052 .unlock = spi_disable_blockprotect,
4053 .write = spi_chip_write_256,
4054 .read = spi_chip_read,
4055 },
4056
4057 {
4058 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004059 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004060 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004061 .manufacture_id = MACRONIX_ID,
4062 .model_id = MACRONIX_MX25L3205,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004063 .total_size = 4096,
4064 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004065 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00004066 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004067 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004068 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004069 .block_erasers =
4070 {
4071 {
4072 .eraseblocks = { {4 * 1024, 1024} },
4073 .block_erase = spi_block_erase_20,
4074 }, {
4075 .eraseblocks = { {4 * 1024, 1024} },
4076 .block_erase = spi_block_erase_d8,
4077 }, {
4078 .eraseblocks = { {4 * 1024 * 1024, 1} },
4079 .block_erase = spi_block_erase_60,
4080 }, {
4081 .eraseblocks = { {4 * 1024 * 1024, 1} },
4082 .block_erase = spi_block_erase_c7,
4083 },
4084 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004085 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004086 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004087 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004088 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004089 },
4090
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004091 {
4092 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004093 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004094 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004095 .manufacture_id = MACRONIX_ID,
4096 .model_id = MACRONIX_MX25L3235D,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004097 .total_size = 4096,
4098 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004099 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004100 .tested = TEST_UNTESTED,
4101 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004102 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004103 .block_erasers =
4104 {
4105 {
4106 .eraseblocks = { {4 * 1024, 1024} },
4107 .block_erase = spi_block_erase_20,
4108 }, {
4109 .eraseblocks = { {64 * 1024, 64} },
4110 .block_erase = spi_block_erase_d8,
4111 }, {
4112 .eraseblocks = { {4 * 1024 * 1024, 1} },
4113 .block_erase = spi_block_erase_60,
4114 }, {
4115 .eraseblocks = { {4 * 1024 * 1024, 1} },
4116 .block_erase = spi_block_erase_c7,
4117 }
4118 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004119 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004120 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004121 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004122 .voltage = {2700, 3600},
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004123 },
4124
4125 {
4126 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004127 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004128 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004129 .manufacture_id = MACRONIX_ID,
4130 .model_id = MACRONIX_MX25L6405,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004131 .total_size = 8192,
4132 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004133 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00004134 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004136 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004137 .block_erasers =
4138 {
4139 {
4140 .eraseblocks = { {64 * 1024, 128} },
4141 .block_erase = spi_block_erase_20,
4142 }, {
4143 .eraseblocks = { {64 * 1024, 128} },
4144 .block_erase = spi_block_erase_d8,
4145 }, {
4146 .eraseblocks = { {8 * 1024 * 1024, 1} },
4147 .block_erase = spi_block_erase_60,
4148 }, {
4149 .eraseblocks = { {8 * 1024 * 1024, 1} },
4150 .block_erase = spi_block_erase_c7,
4151 }
4152 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004153 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004154 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004155 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004156 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004157 },
4158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004159 {
4160 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004161 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004162 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004163 .manufacture_id = MACRONIX_ID,
4164 .model_id = MACRONIX_MX25L12805,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004165 .total_size = 16384,
4166 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004167 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004168 .tested = TEST_UNTESTED,
4169 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004170 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004171 .block_erasers =
4172 {
4173 {
4174 .eraseblocks = { {4 * 1024, 4096} },
4175 .block_erase = spi_block_erase_20,
4176 }, {
4177 .eraseblocks = { {64 * 1024, 256} },
4178 .block_erase = spi_block_erase_d8,
4179 }, {
4180 .eraseblocks = { {16 * 1024 * 1024, 1} },
4181 .block_erase = spi_block_erase_60,
4182 }, {
4183 .eraseblocks = { {16 * 1024 * 1024, 1} },
4184 .block_erase = spi_block_erase_c7,
4185 }
4186 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004187 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004188 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004189 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004190 .voltage = {2700, 3600},
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004191 },
4192
4193 {
4194 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00004195 .name = "MX29F001B",
4196 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004197 .manufacture_id = MACRONIX_ID,
4198 .model_id = MACRONIX_MX29F001B,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004199 .total_size = 128,
4200 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004201 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4202 .tested = TEST_UNTESTED,
4203 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004204 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004205 .block_erasers =
4206 {
4207 {
4208 .eraseblocks = {
4209 {8 * 1024, 1},
4210 {4 * 1024, 2},
4211 {8 * 1024, 2},
4212 {32 * 1024, 1},
4213 {64 * 1024, 1},
4214 },
Sean Nelson35727f72010-01-28 23:55:12 +00004215 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004216 }, {
4217 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004218 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004219 }
4220 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004221 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004222 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004223 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00004224 },
4225
4226 {
4227 .vendor = "Macronix",
4228 .name = "MX29F001T",
4229 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004230 .manufacture_id = MACRONIX_ID,
4231 .model_id = MACRONIX_MX29F001T,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004232 .total_size = 128,
4233 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004234 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stefan Tauner74c6ec62011-05-18 01:31:46 +00004235 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00004236 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004237 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004238 .block_erasers =
4239 {
4240 {
4241 .eraseblocks = {
4242 {64 * 1024, 1},
4243 {32 * 1024, 1},
4244 {8 * 1024, 2},
4245 {4 * 1024, 2},
4246 {8 * 1024, 1},
4247 },
Sean Nelson35727f72010-01-28 23:55:12 +00004248 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004249 }, {
4250 .eraseblocks = { {128 * 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,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004255 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004256 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00004257 },
4258
4259 {
4260 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004261 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004262 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004263 .manufacture_id = MACRONIX_ID,
4264 .model_id = MACRONIX_MX29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004265 .total_size = 256,
4266 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004267 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004268 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004269 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004270 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004271 .block_erasers =
4272 {
4273 {
4274 .eraseblocks = {
4275 {16 * 1024, 1},
4276 {8 * 1024, 2},
4277 {32 * 1024, 1},
4278 {64 * 1024, 3},
4279 },
Sean Nelson35727f72010-01-28 23:55:12 +00004280 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004281 }, {
4282 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004283 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004284 },
4285 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004286 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004287 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004288 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00004289 },
4290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004291 {
4292 .vendor = "Macronix",
4293 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00004294 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004295 .manufacture_id = MACRONIX_ID,
4296 .model_id = MACRONIX_MX29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004297 .total_size = 256,
4298 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004299 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004300 .tested = TEST_OK_PR,
Sean Nelson35727f72010-01-28 23:55:12 +00004301 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004302 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004303 .block_erasers =
4304 {
4305 {
4306 .eraseblocks = {
4307 {64 * 1024, 3},
4308 {32 * 1024, 1},
4309 {8 * 1024, 2},
4310 {16 * 1024, 1},
4311 },
Sean Nelson35727f72010-01-28 23:55:12 +00004312 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004313 }, {
4314 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004315 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004316 },
4317 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004318 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004319 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004320 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00004321 },
4322
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004323 {
4324 .vendor = "Macronix",
Joshua Roysf1324e02010-09-16 00:51:51 +00004325 .name = "MX29F040",
4326 .bustype = CHIP_BUSTYPE_PARALLEL,
4327 .manufacture_id = MACRONIX_ID,
4328 .model_id = MACRONIX_MX29F040,
4329 .total_size = 512,
4330 .page_size = 64 * 1024,
4331 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4332 .tested = TEST_UNTESTED,
4333 .probe = probe_jedec,
4334 .probe_timing = TIMING_ZERO,
4335 .block_erasers =
4336 {
4337 {
4338 .eraseblocks = { {64 * 1024, 8} },
4339 .block_erase = erase_sector_jedec,
4340 }, {
4341 .eraseblocks = { {512 * 1024, 1} },
4342 .block_erase = erase_chip_block_jedec,
4343 },
4344 },
4345 .write = write_jedec_1,
4346 .read = read_memmapped,
4347 },
4348
4349 {
4350 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00004351 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004352 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004353 .manufacture_id = MACRONIX_ID,
4354 .model_id = MACRONIX_MX29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004355 .total_size = 512,
4356 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004357 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4358 .tested = TEST_UNTESTED,
4359 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004360 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004361 .block_erasers =
4362 {
4363 {
4364 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004365 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004366 }, {
4367 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004368 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004369 },
4370 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004371 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004372 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004373 .voltage = {2700, 3600},
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00004374 },
4375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004376 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00004377 .vendor = "MoselVitelic",
4378 .name = "V29C51000B",
4379 .bustype = CHIP_BUSTYPE_PARALLEL,
4380 .manufacture_id = SYNCMOS_MVC_ID,
4381 .model_id = MVC_V29C51000B,
4382 .total_size = 64,
4383 .page_size = 512,
4384 .feature_bits = FEATURE_EITHER_RESET,
4385 .tested = TEST_UNTESTED,
4386 .probe = probe_jedec,
4387 .probe_timing = TIMING_ZERO,
4388 .block_erasers =
4389 {
4390 {
4391 .eraseblocks = { {512, 128} },
4392 .block_erase = erase_sector_jedec,
4393 }, {
4394 .eraseblocks = { {64 * 1024, 1} },
4395 .block_erase = erase_chip_block_jedec,
4396 },
4397 },
4398 .write = write_jedec_1,
4399 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004400 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004401 },
4402
4403 {
4404 .vendor = "MoselVitelic",
4405 .name = "V29C51000T",
4406 .bustype = CHIP_BUSTYPE_PARALLEL,
4407 .manufacture_id = SYNCMOS_MVC_ID,
4408 .model_id = MVC_V29C51000T,
4409 .total_size = 64,
4410 .page_size = 512,
4411 .feature_bits = FEATURE_EITHER_RESET,
4412 .tested = TEST_UNTESTED,
4413 .probe = probe_jedec,
4414 .probe_timing = TIMING_ZERO,
4415 .block_erasers =
4416 {
4417 {
4418 .eraseblocks = { {512, 128} },
4419 .block_erase = erase_sector_jedec,
4420 }, {
4421 .eraseblocks = { {64 * 1024, 1} },
4422 .block_erase = erase_chip_block_jedec,
4423 },
4424 },
4425 .write = write_jedec_1,
4426 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004427 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004428 },
4429
4430 {
4431 .vendor = "MoselVitelic",
4432 .name = "V29C51400B",
4433 .bustype = CHIP_BUSTYPE_PARALLEL,
4434 .manufacture_id = SYNCMOS_MVC_ID,
4435 .model_id = MVC_V29C51400B,
4436 .total_size = 512,
4437 .page_size = 1024,
4438 .feature_bits = FEATURE_EITHER_RESET,
4439 .tested = TEST_UNTESTED,
4440 .probe = probe_jedec,
4441 .probe_timing = TIMING_ZERO,
4442 .block_erasers =
4443 {
4444 {
4445 .eraseblocks = { {1024, 512} },
4446 .block_erase = erase_sector_jedec,
4447 }, {
4448 .eraseblocks = { {512 * 1024, 1} },
4449 .block_erase = erase_chip_block_jedec,
4450 },
4451 },
4452 .write = write_jedec_1,
4453 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004454 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004455 },
4456
4457 {
4458 .vendor = "MoselVitelic",
4459 .name = "V29C51400T",
4460 .bustype = CHIP_BUSTYPE_PARALLEL,
4461 .manufacture_id = SYNCMOS_MVC_ID,
4462 .model_id = MVC_V29C51400T,
4463 .total_size = 512,
4464 .page_size = 1024,
4465 .feature_bits = FEATURE_EITHER_RESET,
4466 .tested = TEST_UNTESTED,
4467 .probe = probe_jedec,
4468 .probe_timing = TIMING_ZERO,
4469 .block_erasers =
4470 {
4471 {
4472 .eraseblocks = { {1024, 512} },
4473 .block_erase = erase_sector_jedec,
4474 }, {
4475 .eraseblocks = { {512 * 1024, 1} },
4476 .block_erase = erase_chip_block_jedec,
4477 },
4478 },
4479 .write = write_jedec_1,
4480 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004481 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004482 },
4483
4484 {
4485 .vendor = "MoselVitelic",
4486 .name = "V29LC51000",
4487 .bustype = CHIP_BUSTYPE_PARALLEL,
4488 .manufacture_id = SYNCMOS_MVC_ID,
4489 .model_id = MVC_V29LC51000,
4490 .total_size = 64,
4491 .page_size = 512,
4492 .feature_bits = FEATURE_EITHER_RESET,
4493 .tested = TEST_UNTESTED,
4494 .probe = probe_jedec,
4495 .probe_timing = TIMING_ZERO,
4496 .block_erasers =
4497 {
4498 {
4499 .eraseblocks = { {512, 128} },
4500 .block_erase = erase_sector_jedec,
4501 }, {
4502 .eraseblocks = { {64 * 1024, 1} },
4503 .block_erase = erase_chip_block_jedec,
4504 },
4505 },
4506 .write = write_jedec_1,
4507 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004508 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004509 },
4510
4511 {
4512 .vendor = "MoselVitelic",
4513 .name = "V29LC51001",
4514 .bustype = CHIP_BUSTYPE_PARALLEL,
4515 .manufacture_id = SYNCMOS_MVC_ID,
4516 .model_id = MVC_V29LC51001,
4517 .total_size = 128,
4518 .page_size = 512,
4519 .feature_bits = FEATURE_EITHER_RESET,
4520 .tested = TEST_UNTESTED,
4521 .probe = probe_jedec,
4522 .probe_timing = TIMING_ZERO,
4523 .block_erasers =
4524 {
4525 {
4526 .eraseblocks = { {512, 256} },
4527 .block_erase = erase_sector_jedec,
4528 }, {
4529 .eraseblocks = { {128 * 1024, 1} },
4530 .block_erase = erase_chip_block_jedec,
4531 },
4532 },
4533 .write = write_jedec_1,
4534 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004535 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004536 },
4537
4538 {
4539 .vendor = "MoselVitelic",
4540 .name = "V29LC51002",
4541 .bustype = CHIP_BUSTYPE_PARALLEL,
4542 .manufacture_id = SYNCMOS_MVC_ID,
4543 .model_id = MVC_V29LC51002,
4544 .total_size = 256,
4545 .page_size = 512,
4546 .feature_bits = FEATURE_EITHER_RESET,
4547 .tested = TEST_UNTESTED,
4548 .probe = probe_jedec,
4549 .probe_timing = TIMING_ZERO,
4550 .block_erasers =
4551 {
4552 {
4553 .eraseblocks = { {512, 512} },
4554 .block_erase = erase_sector_jedec,
4555 }, {
4556 .eraseblocks = { {256 * 1024, 1} },
4557 .block_erase = erase_chip_block_jedec,
4558 },
4559 },
4560 .write = write_jedec_1,
4561 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004562 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00004563 },
4564
4565 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004566 .vendor = "Numonyx",
4567 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004569 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004570 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004571 .total_size = 128,
4572 .page_size = 256,
4573 .tested = TEST_UNTESTED,
4574 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004575 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004576 .block_erasers =
4577 {
4578 {
4579 .eraseblocks = { {4 * 1024, 32} },
4580 .block_erase = spi_block_erase_20,
4581 }, {
4582 .eraseblocks = { {64 * 1024, 2} },
4583 .block_erase = spi_block_erase_d8,
4584 }, {
4585 .eraseblocks = { {128 * 1024, 1} },
4586 .block_erase = spi_block_erase_c7,
4587 }
4588 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004589 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004590 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004592 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004593 },
4594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004595 {
4596 .vendor = "Numonyx",
4597 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004598 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004599 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004600 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004601 .total_size = 256,
4602 .page_size = 256,
4603 .tested = TEST_UNTESTED,
4604 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004605 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004606 .block_erasers =
4607 {
4608 {
4609 .eraseblocks = { {4 * 1024, 64} },
4610 .block_erase = spi_block_erase_20,
4611 }, {
4612 .eraseblocks = { {64 * 1024, 4} },
4613 .block_erase = spi_block_erase_d8,
4614 }, {
4615 .eraseblocks = { {256 * 1024, 1} },
4616 .block_erase = spi_block_erase_c7,
4617 }
4618 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004619 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004620 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004621 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004622 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004623 },
4624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004625 {
4626 .vendor = "Numonyx",
4627 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004628 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004629 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004630 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00004631 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004632 .page_size = 256,
4633 .tested = TEST_UNTESTED,
4634 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004635 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004636 .block_erasers =
4637 {
4638 {
4639 .eraseblocks = { {4 * 1024, 128} },
4640 .block_erase = spi_block_erase_20,
4641 }, {
4642 .eraseblocks = { {64 * 1024, 8} },
4643 .block_erase = spi_block_erase_d8,
4644 }, {
4645 .eraseblocks = { {512 * 1024, 1} },
4646 .block_erase = spi_block_erase_c7,
4647 }
4648 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004649 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004650 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004651 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004652 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004653 },
4654
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004655 {
4656 .vendor = "Numonyx",
4657 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004658 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004659 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004660 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004661 .total_size = 1024,
4662 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004663 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004664 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004665 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004666 .block_erasers =
4667 {
4668 {
4669 .eraseblocks = { {4 * 1024, 256} },
4670 .block_erase = spi_block_erase_20,
4671 }, {
4672 .eraseblocks = { {64 * 1024, 16} },
4673 .block_erase = spi_block_erase_d8,
4674 }, {
4675 .eraseblocks = { {1024 * 1024, 1} },
4676 .block_erase = spi_block_erase_c7,
4677 }
4678 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004679 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004680 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004681 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004682 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004683 },
4684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 {
4686 .vendor = "Numonyx",
4687 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004688 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004689 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004690 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 .total_size = 2048,
4692 .page_size = 256,
4693 .tested = TEST_UNTESTED,
4694 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004695 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004696 .block_erasers =
4697 {
4698 {
4699 .eraseblocks = { {4 * 1024, 512} },
4700 .block_erase = spi_block_erase_20,
4701 }, {
4702 .eraseblocks = { {64 * 1024, 32} },
4703 .block_erase = spi_block_erase_d8,
4704 }, {
4705 .eraseblocks = { {2 * 1024 * 1024, 1} },
4706 .block_erase = spi_block_erase_c7,
4707 }
4708 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004709 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004710 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004712 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004713 },
4714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004715 {
4716 .vendor = "PMC",
4717 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004718 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004719 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004720 .model_id = PMC_PM25LV010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004721 .total_size = 128,
4722 .page_size = 256,
4723 .tested = TEST_UNTESTED,
4724 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004725 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004726 .block_erasers =
4727 {
4728 {
4729 .eraseblocks = { {4 * 1024, 32} },
4730 .block_erase = spi_block_erase_d7,
4731 }, {
4732 .eraseblocks = { {32 * 1024, 4} },
4733 .block_erase = spi_block_erase_d8,
4734 }, {
4735 .eraseblocks = { {128 * 1024, 1} },
4736 .block_erase = spi_block_erase_c7,
4737 }
4738 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004739 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004740 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004741 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004742 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004743 },
4744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 {
4746 .vendor = "PMC",
4747 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004749 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004750 .model_id = PMC_PM25LV016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004751 .total_size = 2048,
4752 .page_size = 256,
4753 .tested = TEST_UNTESTED,
4754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004755 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004756 .block_erasers =
4757 {
4758 {
4759 .eraseblocks = { {4 * 1024, 512} },
4760 .block_erase = spi_block_erase_d7,
4761 }, {
4762 .eraseblocks = { {4 * 1024, 512} },
4763 .block_erase = spi_block_erase_20,
4764 }, {
4765 .eraseblocks = { {64 * 1024, 32} },
4766 .block_erase = spi_block_erase_d8,
4767 }, {
4768 .eraseblocks = { {2 * 1024 * 1024, 1} },
4769 .block_erase = spi_block_erase_60,
4770 }, {
4771 .eraseblocks = { {2 * 1024 * 1024, 1} },
4772 .block_erase = spi_block_erase_c7,
4773 }
4774 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004775 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004776 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004777 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004778 },
4779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004780 {
4781 .vendor = "PMC",
4782 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004783 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004784 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004785 .model_id = PMC_PM25LV020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004786 .total_size = 256,
4787 .page_size = 256,
4788 .tested = TEST_UNTESTED,
4789 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004790 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004791 .block_erasers =
4792 {
4793 {
4794 .eraseblocks = { {4 * 1024, 64} },
4795 .block_erase = spi_block_erase_d7,
4796 }, {
4797 .eraseblocks = { {64 * 1024, 4} },
4798 .block_erase = spi_block_erase_d8,
4799 }, {
4800 .eraseblocks = { {256 * 1024, 1} },
4801 .block_erase = spi_block_erase_c7,
4802 }
4803 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004804 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004805 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004806 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004807 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004808 },
4809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004810 {
4811 .vendor = "PMC",
4812 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004813 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004814 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004815 .model_id = PMC_PM25LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004816 .total_size = 512,
4817 .page_size = 256,
4818 .tested = TEST_UNTESTED,
4819 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004820 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004821 .block_erasers =
4822 {
4823 {
4824 .eraseblocks = { {4 * 1024, 128} },
4825 .block_erase = spi_block_erase_d7,
4826 }, {
4827 .eraseblocks = { {64 * 1024, 8} },
4828 .block_erase = spi_block_erase_d8,
4829 }, {
4830 .eraseblocks = { {512 * 1024, 1} },
4831 .block_erase = spi_block_erase_c7,
4832 }
4833 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004834 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004835 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004836 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004837 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004838 },
4839
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004840 {
4841 .vendor = "PMC",
4842 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004843 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004844 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004845 .model_id = PMC_PM25LV080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 .total_size = 1024,
4847 .page_size = 256,
4848 .tested = TEST_UNTESTED,
4849 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004850 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004851 .block_erasers =
4852 {
4853 {
4854 .eraseblocks = { {4 * 1024, 256} },
4855 .block_erase = spi_block_erase_d7,
4856 }, {
4857 .eraseblocks = { {4 * 1024, 256} },
4858 .block_erase = spi_block_erase_20,
4859 }, {
4860 .eraseblocks = { {64 * 1024, 16} },
4861 .block_erase = spi_block_erase_d8,
4862 }, {
4863 .eraseblocks = { {1024 * 1024, 1} },
4864 .block_erase = spi_block_erase_60,
4865 }, {
4866 .eraseblocks = { {1024 * 1024, 1} },
4867 .block_erase = spi_block_erase_c7,
4868 }
4869 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004870 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004871 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004873 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004874 },
4875
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004876 {
4877 .vendor = "PMC",
4878 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004879 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004880 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004881 .model_id = PMC_PM25LV512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004882 .total_size = 64,
4883 .page_size = 256,
4884 .tested = TEST_UNTESTED,
4885 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004886 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004887 .block_erasers =
4888 {
4889 {
4890 .eraseblocks = { {4 * 1024, 16} },
4891 .block_erase = spi_block_erase_d7,
4892 }, {
4893 .eraseblocks = { {32 * 1024, 2} },
4894 .block_erase = spi_block_erase_d8,
4895 }, {
4896 .eraseblocks = { {64 * 1024, 1} },
4897 .block_erase = spi_block_erase_c7,
4898 }
4899 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004900 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004901 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004902 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004903 },
4904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004905 {
4906 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004907 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004908 .bustype = CHIP_BUSTYPE_PARALLEL,
4909 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004910 .model_id = PMC_PM29F002T,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004911 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004912 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004913 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004914 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00004915 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004916 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004917 .block_erasers =
4918 {
4919 {
4920 .eraseblocks = {
4921 {128 * 1024, 1},
4922 {96 * 1024, 1},
4923 {8 * 1024, 2},
4924 {16 * 1024, 1},
4925 },
Sean Nelson35727f72010-01-28 23:55:12 +00004926 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004927 }, {
4928 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004929 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004930 },
4931 },
Sean Nelson35727f72010-01-28 23:55:12 +00004932 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004933 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004934 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004935 },
4936
4937 {
4938 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004939 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004940 .bustype = CHIP_BUSTYPE_PARALLEL,
4941 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004942 .model_id = PMC_PM29F002B,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004943 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004944 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004945 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004946 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004947 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004948 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004949 .block_erasers =
4950 {
4951 {
4952 .eraseblocks = {
4953 {16 * 1024, 1},
4954 {8 * 1024, 2},
4955 {96 * 1024, 1},
4956 {128 * 1024, 1},
4957 },
Sean Nelson35727f72010-01-28 23:55:12 +00004958 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004959 }, {
4960 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004961 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004962 },
4963 },
Sean Nelson35727f72010-01-28 23:55:12 +00004964 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004965 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004966 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004967 },
4968
4969 {
4970 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004971 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004972 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004973 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004974 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004975 .total_size = 128,
4976 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004977 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004978 .tested = TEST_OK_PRE,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004979 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004980 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004981 .block_erasers =
4982 {
4983 {
4984 .eraseblocks = { {4 * 1024, 32} },
4985 .block_erase = erase_sector_jedec,
4986 }, {
4987 .eraseblocks = { {64 * 1024, 2} },
4988 .block_erase = erase_block_jedec,
4989 }, {
4990 .eraseblocks = { {128 * 1024, 1} },
4991 .block_erase = erase_chip_block_jedec,
4992 }
4993 },
Sean Nelson35727f72010-01-28 23:55:12 +00004994 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004995 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004996 .voltage = {2700, 3600},
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004997 },
4998
4999 {
5000 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005001 .name = "Pm39LV020",
5002 .bustype = CHIP_BUSTYPE_PARALLEL,
5003 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005004 .model_id = PMC_PM39LV020,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005005 .total_size = 256,
5006 .page_size = 4096,
5007 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5008 .tested = TEST_UNTESTED,
5009 .probe = probe_jedec,
5010 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5011 .block_erasers =
5012 {
5013 {
5014 .eraseblocks = { {4 * 1024, 64} },
5015 .block_erase = erase_sector_jedec,
5016 }, {
5017 .eraseblocks = { {64 * 1024, 4} },
5018 .block_erase = erase_block_jedec,
5019 }, {
5020 .eraseblocks = { {256 * 1024, 1} },
5021 .block_erase = erase_chip_block_jedec,
5022 }
5023 },
5024 .write = write_jedec_1,
5025 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005026 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005027 },
5028
5029 {
5030 .vendor = "PMC",
5031 .name = "Pm39LV040",
5032 .bustype = CHIP_BUSTYPE_PARALLEL,
5033 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005034 .model_id = PMC_PM39LV040,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005035 .total_size = 512,
5036 .page_size = 4096,
5037 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5038 .tested = TEST_UNTESTED,
5039 .probe = probe_jedec,
5040 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5041 .block_erasers =
5042 {
5043 {
5044 .eraseblocks = { {4 * 1024, 128} },
5045 .block_erase = erase_sector_jedec,
5046 }, {
5047 .eraseblocks = { {64 * 1024, 8} },
5048 .block_erase = erase_block_jedec,
5049 }, {
5050 .eraseblocks = { {512 * 1024, 1} },
5051 .block_erase = erase_chip_block_jedec,
5052 }
5053 },
5054 .write = write_jedec_1,
5055 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005056 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005057 },
5058
5059 {
5060 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005061 .name = "Pm49FL002",
Uwe Hermann431f4f72010-09-05 12:41:25 +00005062 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005064 .model_id = PMC_PM49FL002,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005065 .total_size = 256,
5066 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005067 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Taunerd06d9412011-06-12 19:47:55 +00005068 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005069 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005070 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00005071 .block_erasers =
5072 {
5073 {
5074 .eraseblocks = { {4 * 1024, 64} },
5075 .block_erase = erase_sector_jedec,
5076 }, {
5077 .eraseblocks = { {16 * 1024, 16} },
5078 .block_erase = erase_block_jedec,
5079 }, {
5080 .eraseblocks = { {256 * 1024, 1} },
5081 .block_erase = erase_chip_block_jedec,
5082 }
5083 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005084 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00005085 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005086 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005087 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005088 },
5089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005090 {
5091 .vendor = "PMC",
5092 .name = "Pm49FL004",
Uwe Hermann431f4f72010-09-05 12:41:25 +00005093 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005095 .model_id = PMC_PM49FL004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005096 .total_size = 512,
5097 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005098 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005099 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005100 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005101 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00005102 .block_erasers =
5103 {
5104 {
5105 .eraseblocks = { {4 * 1024, 128} },
5106 .block_erase = erase_sector_jedec,
5107 }, {
5108 .eraseblocks = { {64 * 1024, 8} },
5109 .block_erase = erase_block_jedec,
5110 }, {
5111 .eraseblocks = { {512 * 1024, 1} },
5112 .block_erase = erase_chip_block_jedec,
5113 }
5114 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005115 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00005116 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005117 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005118 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005119 },
5120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005121 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00005122 .vendor = "Sanyo",
5123 .name = "LF25FW203A",
5124 .bustype = CHIP_BUSTYPE_SPI,
5125 .manufacture_id = SANYO_ID,
5126 .model_id = SANYO_LE25FW203A,
5127 .total_size = 2048,
5128 .page_size = 256,
5129 .tested = TEST_UNTESTED,
5130 .probe = probe_spi_rdid,
5131 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005132 .block_erasers =
5133 {
5134 {
5135 .eraseblocks = { {64 * 1024, 32} },
5136 .block_erase = spi_block_erase_d8,
5137 }, {
5138 .eraseblocks = { {2 * 1024 * 1024, 1} },
5139 .block_erase = spi_block_erase_c7,
5140 }
5141 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005142 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00005143 .write = spi_chip_write_256,
5144 .read = spi_chip_read,
5145 },
5146
5147 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005148 .vendor = "Sharp",
5149 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00005150 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005151 .manufacture_id = SHARP_ID,
5152 .model_id = SHARP_LHF00L04,
5153 .total_size = 1024,
5154 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005155 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005156 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005157 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005158 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005159 .block_erasers =
5160 {
5161 {
5162 .eraseblocks = {
5163 {64 * 1024, 15},
5164 {8 * 1024, 8}
5165 },
Sean Nelson28accc22010-03-19 18:47:06 +00005166 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005167 }, {
5168 .eraseblocks = {
5169 {1024 * 1024, 1}
5170 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005171 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005172 },
5173 },
Sean Nelson28accc22010-03-19 18:47:06 +00005174 .unlock = unlock_82802ab,
5175 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005176 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005177 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005178 },
5179
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005180 {
5181 .vendor = "Spansion",
Rudy Hostf4e57772010-11-29 00:37:49 +00005182 .name = "S25FL004A",
5183 .bustype = CHIP_BUSTYPE_SPI,
5184 .manufacture_id = SPANSION_ID,
5185 .model_id = SPANSION_S25FL004A,
5186 .total_size = 512,
5187 .page_size = 256,
5188 .tested = TEST_UNTESTED,
5189 .probe = probe_spi_rdid,
5190 .probe_timing = TIMING_ZERO,
5191 .block_erasers =
5192 {
5193 {
5194 .eraseblocks = { {64 * 1024, 8} },
5195 .block_erase = spi_block_erase_d8,
5196 }, {
5197 .eraseblocks = { {512 * 1024, 1} },
5198 .block_erase = spi_block_erase_c7,
5199 }
5200 },
5201 .unlock = spi_disable_blockprotect,
5202 .write = spi_chip_write_256,
5203 .read = spi_chip_read,
5204 },
5205
5206 {
5207 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00005208 .name = "S25FL008A",
5209 .bustype = CHIP_BUSTYPE_SPI,
5210 .manufacture_id = SPANSION_ID,
5211 .model_id = SPANSION_S25FL008A,
5212 .total_size = 1024,
5213 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005214 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00005215 .probe = probe_spi_rdid,
5216 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00005217 .block_erasers =
5218 {
5219 {
5220 .eraseblocks = { {64 * 1024, 16} },
5221 .block_erase = spi_block_erase_d8,
5222 }, {
5223 .eraseblocks = { {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,
Michael Karcher23ff4602010-01-12 23:29:30 +00005228 .write = spi_chip_write_256,
5229 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005230 .voltage = {2700, 3600},
Michael Karcher23ff4602010-01-12 23:29:30 +00005231 },
5232
5233 {
5234 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005235 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005236 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 .manufacture_id = SPANSION_ID,
5238 .model_id = SPANSION_S25FL016A,
5239 .total_size = 2048,
5240 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005241 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005242 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005243 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005244 .block_erasers =
5245 {
5246 {
5247 .eraseblocks = { {64 * 1024, 32} },
5248 .block_erase = spi_block_erase_d8,
5249 }, {
5250 .eraseblocks = { {2 * 1024 * 1024, 1} },
5251 .block_erase = spi_block_erase_c7,
5252 }
5253 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005254 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005255 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005256 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005257 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005258 },
5259
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005260 {
Rudy Hostf4e57772010-11-29 00:37:49 +00005261 .vendor = "Spansion",
5262 .name = "S25FL032A",
5263 .bustype = CHIP_BUSTYPE_SPI,
5264 .manufacture_id = SPANSION_ID,
5265 .model_id = SPANSION_S25FL032A,
5266 .total_size = 4096,
5267 .page_size = 256,
5268 .tested = TEST_UNTESTED,
5269 .probe = probe_spi_rdid,
5270 .probe_timing = TIMING_ZERO,
5271 .block_erasers =
5272 {
5273 {
5274 .eraseblocks = { {64 * 1024, 64} },
5275 .block_erase = spi_block_erase_d8,
5276 }, {
5277 .eraseblocks = { {4 * 1024 * 1024, 1} },
5278 .block_erase = spi_block_erase_c7,
5279 }
5280 },
5281 .unlock = spi_disable_blockprotect,
5282 .write = spi_chip_write_256,
5283 .read = spi_chip_read,
5284 },
5285
5286 {
5287 .vendor = "Spansion",
5288 .name = "S25FL064A",
5289 .bustype = CHIP_BUSTYPE_SPI,
5290 .manufacture_id = SPANSION_ID,
5291 .model_id = SPANSION_S25FL064A,
5292 .total_size = 8192,
5293 .page_size = 256,
5294 .tested = TEST_OK_PREW,
5295 .probe = probe_spi_rdid,
5296 .probe_timing = TIMING_ZERO,
5297 .block_erasers =
5298 {
5299 {
5300 .eraseblocks = { {64 * 1024, 128} },
5301 .block_erase = spi_block_erase_d8,
5302 }, {
5303 .eraseblocks = { {8 * 1024 * 1024, 1} },
5304 .block_erase = spi_block_erase_c7,
5305 }
5306 },
5307 .unlock = spi_disable_blockprotect,
5308 .write = spi_chip_write_256,
5309 .read = spi_chip_read,
5310 },
5311
5312 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005313 .vendor = "SST",
Mark Marshall90021f22010-12-03 14:48:11 +00005314 .name = "SST25VF010.REMS",
5315 .bustype = CHIP_BUSTYPE_SPI,
5316 .manufacture_id = SST_ID,
5317 .model_id = SST_SST25VF010_REMS,
5318 .total_size = 128,
5319 .page_size = 256,
5320 .tested = TEST_OK_PREW,
5321 .probe = probe_spi_rems,
5322 .probe_timing = TIMING_ZERO,
5323 .block_erasers =
5324 {
5325 {
5326 .eraseblocks = { {4 * 1024, 32} },
5327 .block_erase = spi_block_erase_20,
5328 }, {
5329 .eraseblocks = { {32 * 1024, 4} },
5330 .block_erase = spi_block_erase_52,
5331 }, {
5332 .eraseblocks = { {128 * 1024, 1} },
5333 .block_erase = spi_block_erase_60,
5334 },
5335 },
5336 .unlock = spi_disable_blockprotect,
5337 .write = spi_chip_write_1,
5338 .read = spi_chip_read,
5339 },
5340
5341 {
5342 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005343 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005344 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005345 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005346 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005347 .total_size = 2048,
5348 .page_size = 256,
Mark Marshall90021f22010-12-03 14:48:11 +00005349 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005350 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005351 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005352 .block_erasers =
5353 {
5354 {
5355 .eraseblocks = { {4 * 1024, 512} },
5356 .block_erase = spi_block_erase_20,
5357 }, {
5358 .eraseblocks = { {32 * 1024, 64} },
5359 .block_erase = spi_block_erase_52,
5360 }, {
5361 .eraseblocks = { {64 * 1024, 32} },
5362 .block_erase = spi_block_erase_d8,
5363 }, {
5364 .eraseblocks = { {2 * 1024 * 1024, 1} },
5365 .block_erase = spi_block_erase_60,
5366 }, {
5367 .eraseblocks = { {2 * 1024 * 1024, 1} },
5368 .block_erase = spi_block_erase_c7,
5369 },
5370 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005371 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005372 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005373 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005374 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005375 },
5376
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005377 {
5378 .vendor = "SST",
5379 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005380 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005381 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005382 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005383 .total_size = 4096,
5384 .page_size = 256,
Stefan Taunerfcf6a8c2011-05-18 01:32:00 +00005385 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005386 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005387 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005388 .block_erasers =
5389 {
5390 {
5391 .eraseblocks = { {4 * 1024, 1024} },
5392 .block_erase = spi_block_erase_20,
5393 }, {
5394 .eraseblocks = { {32 * 1024, 128} },
5395 .block_erase = spi_block_erase_52,
5396 }, {
5397 .eraseblocks = { {64 * 1024, 64} },
5398 .block_erase = spi_block_erase_d8,
5399 }, {
5400 .eraseblocks = { {4 * 1024 * 1024, 1} },
5401 .block_erase = spi_block_erase_60,
5402 }, {
5403 .eraseblocks = { {4 * 1024 * 1024, 1} },
5404 .block_erase = spi_block_erase_c7,
5405 },
5406 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005407 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00005408 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005409 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005410 .voltage = {2700, 3600},
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005411 },
5412
5413 {
5414 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005415 .name = "SST25VF064C",
5416 .bustype = CHIP_BUSTYPE_SPI,
5417 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005418 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005419 .total_size = 8192,
5420 .page_size = 256,
Stefan Tauner8179be52011-06-04 13:13:34 +00005421 .tested = TEST_OK_PREW,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005422 .probe = probe_spi_rdid,
5423 .probe_timing = TIMING_ZERO,
5424 .block_erasers =
5425 {
5426 {
5427 .eraseblocks = { {4 * 1024, 2048} },
5428 .block_erase = spi_block_erase_20,
5429 }, {
5430 .eraseblocks = { {32 * 1024, 256} },
5431 .block_erase = spi_block_erase_52,
5432 }, {
5433 .eraseblocks = { {64 * 1024, 128} },
5434 .block_erase = spi_block_erase_d8,
5435 }, {
5436 .eraseblocks = { {8 * 1024 * 1024, 1} },
5437 .block_erase = spi_block_erase_60,
5438 }, {
5439 .eraseblocks = { {8 * 1024 * 1024, 1} },
5440 .block_erase = spi_block_erase_c7,
5441 },
5442 },
5443 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00005444 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005445 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005446 .voltage = {2700, 3600},
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005447 },
5448
5449 {
5450 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005451 .name = "SST25VF040.REMS",
5452 .bustype = CHIP_BUSTYPE_SPI,
5453 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005454 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005455 .total_size = 512,
5456 .page_size = 256,
5457 .tested = TEST_OK_PR,
5458 .probe = probe_spi_rems,
5459 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005460 .block_erasers =
5461 {
5462 {
5463 .eraseblocks = { {4 * 1024, 128} },
5464 .block_erase = spi_block_erase_20,
5465 }, {
5466 .eraseblocks = { {32 * 1024, 16} },
5467 .block_erase = spi_block_erase_52,
5468 }, {
5469 .eraseblocks = { {512 * 1024, 1} },
5470 .block_erase = spi_block_erase_60,
5471 },
5472 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005473 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005474 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005475 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005476 },
5477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005478 {
5479 .vendor = "SST",
5480 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005482 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005483 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .total_size = 512,
5485 .page_size = 256,
5486 .tested = TEST_UNTESTED,
5487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005488 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005489 .block_erasers =
5490 {
5491 {
5492 .eraseblocks = { {4 * 1024, 128} },
5493 .block_erase = spi_block_erase_20,
5494 }, {
5495 .eraseblocks = { {32 * 1024, 16} },
5496 .block_erase = spi_block_erase_52,
5497 }, {
5498 .eraseblocks = { {64 * 1024, 8} },
5499 .block_erase = spi_block_erase_d8,
5500 }, {
5501 .eraseblocks = { {512 * 1024, 1} },
5502 .block_erase = spi_block_erase_60,
5503 }, {
5504 .eraseblocks = { {512 * 1024, 1} },
5505 .block_erase = spi_block_erase_c7,
5506 },
5507 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005508 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005509 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00005510 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005511 .voltage = {2700, 3600},
Zheng Bao0677dff2009-02-25 08:07:33 +00005512 },
5513
5514 {
5515 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005516 .name = "SST25LF040A.RES",
5517 .bustype = CHIP_BUSTYPE_SPI,
5518 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005519 .model_id = SST_SST25VF040_REMS,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005520 .total_size = 512,
5521 .page_size = 256,
5522 .tested = TEST_OK_PROBE,
5523 .probe = probe_spi_res2,
5524 .probe_timing = TIMING_ZERO,
5525 .block_erasers =
5526 {
5527 {
5528 .eraseblocks = { {4 * 1024, 128} },
5529 .block_erase = spi_block_erase_20,
5530 }, {
5531 .eraseblocks = { {32 * 1024, 16} },
5532 .block_erase = spi_block_erase_52,
5533 }, {
5534 .eraseblocks = { {512 * 1024, 1} },
5535 .block_erase = spi_block_erase_60,
5536 },
5537 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005538 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005539 .write = spi_chip_write_1,
5540 .read = spi_chip_read,
5541 },
5542
5543 {
5544 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00005545 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005546 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005547 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005548 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00005549 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005550 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00005551 .tested = TEST_OK_PR,
5552 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005553 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005554 .block_erasers =
5555 {
5556 {
5557 .eraseblocks = { {4 * 1024, 128} },
5558 .block_erase = spi_block_erase_20,
5559 }, {
5560 .eraseblocks = { {32 * 1024, 16} },
5561 .block_erase = spi_block_erase_52,
5562 }, {
5563 .eraseblocks = { {64 * 1024, 8} },
5564 .block_erase = spi_block_erase_d8,
5565 }, {
5566 .eraseblocks = { {512 * 1024, 1} },
5567 .block_erase = spi_block_erase_60,
5568 }, {
5569 .eraseblocks = { {512 * 1024, 1} },
5570 .block_erase = spi_block_erase_c7,
5571 },
5572 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005573 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005574 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00005575 .read = spi_chip_read,
5576 },
5577
5578 {
5579 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005580 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005581 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005582 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005583 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005584 .total_size = 1024,
5585 .page_size = 256,
John Schmergec965c2d2011-05-18 11:28:47 +00005586 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005587 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005588 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005589 .block_erasers =
5590 {
5591 {
5592 .eraseblocks = { {4 * 1024, 256} },
5593 .block_erase = spi_block_erase_20,
5594 }, {
5595 .eraseblocks = { {32 * 1024, 32} },
5596 .block_erase = spi_block_erase_52,
5597 }, {
5598 .eraseblocks = { {64 * 1024, 16} },
5599 .block_erase = spi_block_erase_d8,
5600 }, {
5601 .eraseblocks = { {1024 * 1024, 1} },
5602 .block_erase = spi_block_erase_60,
5603 }, {
5604 .eraseblocks = { {1024 * 1024, 1} },
5605 .block_erase = spi_block_erase_c7,
5606 },
5607 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005608 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005609 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005610 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005611 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005612 },
5613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 {
5615 .vendor = "SST",
5616 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005617 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005618 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005619 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .total_size = 512,
5621 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005622 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005623 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005624 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00005625 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005626 .block_erasers =
5627 {
5628 {
5629 .eraseblocks = { {128, 4096} },
5630 .block_erase = erase_sector_28sf040,
5631 }, {
5632 .eraseblocks = { {512 * 1024, 1} },
5633 .block_erase = erase_chip_28sf040,
5634 }
5635 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005636 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005637 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005638 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005639 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005640 },
5641
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005642 {
5643 .vendor = "SST",
5644 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005645 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005646 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005647 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005648 .total_size = 128,
5649 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005650 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005651 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005652 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005653 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005654 .block_erasers =
5655 {
5656 {
5657 .eraseblocks = { {128 * 1024, 1} },
5658 .block_erase = erase_chip_block_jedec,
5659 }
5660 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005661 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005662 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005663 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005664 },
5665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005666 {
5667 .vendor = "SST",
5668 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005669 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005670 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005671 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .total_size = 128,
5673 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005674 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005675 .tested = TEST_UNTESTED,
5676 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005677 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005678 .block_erasers =
5679 {
5680 {
5681 .eraseblocks = { {128 * 1024, 1} },
5682 .block_erase = erase_chip_block_jedec,
5683 }
5684 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005686 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005687 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005688 },
5689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005690 {
5691 .vendor = "SST",
5692 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005693 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005694 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005695 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005696 .total_size = 256,
5697 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005698 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005699 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005700 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005701 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005702 .block_erasers =
5703 {
5704 {
5705 .eraseblocks = { {256 * 1024, 1} },
5706 .block_erase = erase_chip_block_jedec,
5707 }
5708 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005709 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005710 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005711 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005712 },
5713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 {
5715 .vendor = "SST",
5716 .name = "SST29LE020",
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_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005720 .total_size = 256,
5721 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005722 .feature_bits = FEATURE_LONG_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,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005725 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005726 .block_erasers =
5727 {
5728 {
5729 .eraseblocks = { {256 * 1024, 1} },
5730 .block_erase = erase_chip_block_jedec,
5731 }
5732 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005733 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005734 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005735 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005736 },
5737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005738 {
5739 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005740 .name = "SST39SF512",
5741 .bustype = CHIP_BUSTYPE_PARALLEL,
5742 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005743 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005744 .total_size = 64,
5745 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005746 .feature_bits = FEATURE_EITHER_RESET,
Idwer Vollering7913fb42011-03-07 15:32:58 +00005747 .tested = TEST_OK_PREW,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005748 .probe = probe_jedec,
5749 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005750 .block_erasers =
5751 {
5752 {
5753 .eraseblocks = { {4 * 1024, 16} },
5754 .block_erase = erase_sector_jedec,
5755 }, {
5756 .eraseblocks = { {64 * 1024, 1} },
5757 .block_erase = erase_chip_block_jedec,
5758 }
5759 },
Sean Nelson35727f72010-01-28 23:55:12 +00005760 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005761 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005762 .voltage = {4500, 5500},
Uwe Hermann48da3f92010-01-23 15:15:19 +00005763 },
5764
5765 {
5766 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005767 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005768 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005769 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005770 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .total_size = 128,
5772 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005773 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00005774 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005775 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005776 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005777 .block_erasers =
5778 {
5779 {
5780 .eraseblocks = { {4 * 1024, 32} },
5781 .block_erase = erase_sector_jedec,
5782 }, {
5783 .eraseblocks = { {128 * 1024, 1} },
5784 .block_erase = erase_chip_block_jedec,
5785 }
5786 },
Sean Nelson35727f72010-01-28 23:55:12 +00005787 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005788 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005789 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005790 },
5791
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005792 {
5793 .vendor = "SST",
5794 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005795 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005796 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005797 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005798 .total_size = 256,
5799 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005800 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann19f46f22011-06-18 22:56:14 +00005801 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005802 .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, 64} },
5808 .block_erase = erase_sector_jedec,
5809 }, {
5810 .eraseblocks = { {256 * 1024, 1} },
5811 .block_erase = erase_chip_block_jedec,
5812 }
5813 },
Sean Nelson35727f72010-01-28 23:55:12 +00005814 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005815 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005816 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005817 },
5818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005819 {
5820 .vendor = "SST",
5821 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005822 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005823 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005824 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005825 .total_size = 512,
5826 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005827 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005828 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005829 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005830 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005831 .block_erasers =
5832 {
5833 {
5834 .eraseblocks = { {4 * 1024, 128} },
5835 .block_erase = erase_sector_jedec,
5836 }, {
5837 .eraseblocks = { {512 * 1024, 1} },
5838 .block_erase = erase_chip_block_jedec,
5839 }
5840 },
Sean Nelson35727f72010-01-28 23:55:12 +00005841 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005842 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005843 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005844 },
5845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 {
5847 .vendor = "SST",
5848 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005849 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005850 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005851 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005852 .total_size = 64,
5853 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005854 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005855 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005857 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005858 .block_erasers =
5859 {
5860 {
5861 .eraseblocks = { {4 * 1024, 16} },
5862 .block_erase = erase_sector_jedec,
5863 }, {
5864 .eraseblocks = { {64 * 1024, 1} },
5865 .block_erase = erase_chip_block_jedec,
5866 }
5867 },
Sean Nelson35727f72010-01-28 23:55:12 +00005868 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005869 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005870 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005871 },
5872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005873 {
5874 .vendor = "SST",
5875 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005876 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005877 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005878 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 .total_size = 128,
5880 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005881 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005882 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005883 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005884 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005885 .block_erasers =
5886 {
5887 {
5888 .eraseblocks = { {4 * 1024, 32} },
5889 .block_erase = erase_sector_jedec,
5890 }, {
5891 .eraseblocks = { {128 * 1024, 1} },
5892 .block_erase = erase_chip_block_jedec,
5893 }
5894 },
Sean Nelson35727f72010-01-28 23:55:12 +00005895 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005896 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005897 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005898 },
5899
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005900 {
5901 .vendor = "SST",
5902 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005903 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005904 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005905 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 .total_size = 256,
5907 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005908 .feature_bits = FEATURE_EITHER_RESET,
5909 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005911 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005912 .block_erasers =
5913 {
5914 {
5915 .eraseblocks = { {4 * 1024, 64} },
5916 .block_erase = erase_sector_jedec,
5917 }, {
5918 .eraseblocks = { {256 * 1024, 1} },
5919 .block_erase = erase_chip_block_jedec,
5920 }
5921 },
Sean Nelson35727f72010-01-28 23:55:12 +00005922 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005923 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005924 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005925 },
5926
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005927 {
5928 .vendor = "SST",
5929 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005930 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005931 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005932 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 .total_size = 512,
5934 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005935 .feature_bits = FEATURE_EITHER_RESET,
5936 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005938 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005939 .block_erasers =
5940 {
5941 {
5942 .eraseblocks = { {4 * 1024, 128} },
5943 .block_erase = erase_sector_jedec,
5944 }, {
5945 .eraseblocks = { {512 * 1024, 1} },
5946 .block_erase = erase_chip_block_jedec,
5947 }
5948 },
Sean Nelson35727f72010-01-28 23:55:12 +00005949 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005950 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005951 .voltage = {2700, 3600},
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005952 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005954 {
5955 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005956 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005957 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005958 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005959 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005960 .total_size = 1024,
5961 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005962 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005963 .tested = TEST_UNTESTED,
5964 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005965 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005966 .block_erasers =
5967 {
5968 {
5969 .eraseblocks = { {4 * 1024, 256} },
5970 .block_erase = erase_sector_jedec,
5971 }, {
5972 .eraseblocks = { {64 * 1024, 16} },
5973 .block_erase = erase_block_jedec,
5974 }, {
5975 .eraseblocks = { {1024 * 1024, 1} },
5976 .block_erase = erase_chip_block_jedec,
5977 }
5978 },
Sean Nelson35727f72010-01-28 23:55:12 +00005979 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005980 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005981 .voltage = {2700, 3600},
Peter Stuge8440cc02009-01-25 23:55:12 +00005982 },
5983
5984 {
5985 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005987 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005988 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005989 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 .total_size = 256,
5991 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005992 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005993 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005994 .probe = probe_jedec,
5995 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005996 .block_erasers =
5997 {
5998 {
5999 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006000 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006001 }, {
6002 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006003 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006004 }, {
6005 .eraseblocks = { {256 * 1024, 1} },
6006 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6007 }
6008 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006009 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006010 .unlock = unlock_sst_fwhub,
6011 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006012 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006013 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006014 },
6015
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 {
6017 .vendor = "SST",
6018 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006019 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006020 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006021 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 .total_size = 384,
6023 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006024 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00006025 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006026 .probe = probe_jedec,
6027 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006028 .block_erasers =
6029 {
6030 {
6031 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006032 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006033 }, {
6034 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006035 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006036 }, {
6037 .eraseblocks = { {384 * 1024, 1} },
6038 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6039 }
6040 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006041 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006042 .unlock = unlock_sst_fwhub,
6043 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006044 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006045 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006046 },
6047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006049 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
6050 * and is only honored for 64k block erase, but not 4k sector erase.
6051 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006052 .vendor = "SST",
6053 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006054 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006055 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006056 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006057 .total_size = 512,
6058 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006059 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00006060 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006061 .probe = probe_jedec,
6062 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006063 .block_erasers =
6064 {
6065 {
6066 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006067 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006068 }, {
6069 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006070 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006071 }, {
6072 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00006073 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006074 },
6075 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006076 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006077 .unlock = unlock_sst_fwhub,
6078 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006079 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006080 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006081 },
6082
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006083 {
6084 .vendor = "SST",
6085 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006086 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006087 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006088 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006089 .total_size = 512,
6090 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006091 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006092 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006093 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006094 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006095 .block_erasers =
6096 {
6097 {
6098 .eraseblocks = { {4 * 1024, 128} },
6099 .block_erase = erase_sector_49lfxxxc,
6100 }, {
6101 .eraseblocks = {
6102 {64 * 1024, 7},
6103 {32 * 1024, 1},
6104 {8 * 1024, 2},
6105 {16 * 1024, 1},
6106 },
Sean Nelson69e58112010-03-23 17:10:28 +00006107 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006108 }
6109 },
Sean Nelson69e58112010-03-23 17:10:28 +00006110 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006111 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006112 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006113 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006114 },
6115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 {
6117 .vendor = "SST",
6118 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00006119 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006120 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006121 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006122 .total_size = 1024,
6123 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006124 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006125 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006126 .probe = probe_jedec,
6127 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006128 .block_erasers =
6129 {
6130 {
6131 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006132 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006133 }, {
6134 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006135 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006136 }, {
6137 .eraseblocks = { {1024 * 1024, 1} },
6138 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6139 }
6140 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006141 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006142 .unlock = unlock_sst_fwhub,
6143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006144 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006145 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006146 },
6147
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006148 {
6149 .vendor = "SST",
6150 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006151 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006152 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006153 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006154 .total_size = 1024,
6155 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006156 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006157 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006158 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006159 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006160 .block_erasers =
6161 {
6162 {
6163 .eraseblocks = { {4 * 1024, 256} },
6164 .block_erase = erase_sector_49lfxxxc,
6165 }, {
6166 .eraseblocks = {
6167 {64 * 1024, 15},
6168 {32 * 1024, 1},
6169 {8 * 1024, 2},
6170 {16 * 1024, 1},
6171 },
Sean Nelson69e58112010-03-23 17:10:28 +00006172 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006173 }
6174 },
Sean Nelson69e58112010-03-23 17:10:28 +00006175 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006176 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006177 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006178 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006179 },
6180
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006181 {
6182 .vendor = "SST",
6183 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006184 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006185 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006186 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006187 .total_size = 2048,
6188 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006189 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006190 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006191 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006192 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006193 .block_erasers =
6194 {
6195 {
6196 .eraseblocks = { {4 * 1024, 512} },
6197 .block_erase = erase_sector_49lfxxxc,
6198 }, {
6199 .eraseblocks = {
6200 {64 * 1024, 31},
6201 {32 * 1024, 1},
6202 {8 * 1024, 2},
6203 {16 * 1024, 1},
6204 },
Sean Nelson69e58112010-03-23 17:10:28 +00006205 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006206 }
6207 },
Sean Nelson69e58112010-03-23 17:10:28 +00006208 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006209 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006210 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006211 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006212 },
6213
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006214 {
6215 .vendor = "SST",
6216 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006217 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006218 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006219 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006220 .total_size = 256,
6221 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006222 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00006223 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006224 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006225 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006226 .block_erasers =
6227 {
6228 {
6229 .eraseblocks = { {4 * 1024, 64} },
6230 .block_erase = erase_sector_jedec,
6231 }, {
6232 .eraseblocks = { {16 * 1024, 16} },
6233 .block_erase = erase_block_jedec,
6234 }, {
6235 .eraseblocks = { {256 * 1024, 1} },
6236 .block_erase = NULL,
6237 }
6238 },
Sean Nelson35727f72010-01-28 23:55:12 +00006239 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006240 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006241 .voltage = {3000, 3600},
Sven Schnellec208dfb2009-01-07 12:35:09 +00006242 },
6243
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006244 {
6245 .vendor = "SST",
6246 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006247 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006248 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006249 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006250 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00006251 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006252 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006253 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006254 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006255 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006256 .block_erasers =
6257 {
6258 {
6259 .eraseblocks = { {4 * 1024, 64} },
6260 .block_erase = erase_sector_jedec,
6261 }, {
6262 .eraseblocks = { {16 * 1024, 16} },
6263 .block_erase = erase_block_jedec,
6264 }, {
6265 .eraseblocks = { {256 * 1024, 1} },
6266 .block_erase = NULL,
6267 }
6268 },
Sean Nelson35727f72010-01-28 23:55:12 +00006269 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006270 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006271 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006272 },
6273
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006274 {
6275 .vendor = "SST",
6276 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006277 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006278 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006279 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006280 .total_size = 512,
6281 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006282 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006283 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006284 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006285 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006286 .block_erasers =
6287 {
6288 {
6289 .eraseblocks = { {4 * 1024, 128} },
6290 .block_erase = erase_sector_jedec,
6291 }, {
6292 .eraseblocks = { {64 * 1024, 8} },
6293 .block_erase = erase_block_jedec,
6294 }, {
6295 .eraseblocks = { {512 * 1024, 1} },
6296 .block_erase = NULL,
6297 }
6298 },
Sean Nelson35727f72010-01-28 23:55:12 +00006299 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006300 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006301 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006302 },
6303
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006304 {
6305 .vendor = "SST",
6306 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006307 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006308 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006309 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006310 .total_size = 512,
6311 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00006312 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006313 .tested = TEST_OK_PRE,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006314 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006315 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006316 .block_erasers =
6317 {
6318 {
6319 .eraseblocks = { {4 * 1024, 128} },
6320 .block_erase = erase_sector_jedec,
6321 }, {
6322 .eraseblocks = { {64 * 1024, 8} },
6323 .block_erase = erase_block_jedec,
6324 }, {
6325 .eraseblocks = { {512 * 1024, 1} },
6326 .block_erase = NULL,
6327 }
6328 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00006329 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00006330 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006331 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006332 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006333 },
6334
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006335 {
6336 .vendor = "SST",
6337 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00006338 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006339 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006340 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006341 .total_size = 1024,
6342 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006343 .feature_bits = FEATURE_EITHER_RESET,
Brandon Dowdyf07bf322011-03-06 18:31:11 +00006344 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006345 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006346 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006347 .block_erasers =
6348 {
6349 {
6350 .eraseblocks = { {4 * 1024, 256} },
6351 .block_erase = erase_sector_jedec,
6352 }, {
6353 .eraseblocks = { {64 * 1024, 16} },
6354 .block_erase = erase_block_jedec,
6355 }, {
6356 .eraseblocks = { {1024 * 1024, 1} },
6357 .block_erase = NULL,
6358 }
6359 },
Sean Nelson35727f72010-01-28 23:55:12 +00006360 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006361 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006362 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006363 },
6364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006365 {
6366 .vendor = "SST",
6367 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00006368 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006369 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006370 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006371 .total_size = 2048,
6372 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006373 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006374 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006375 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006376 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006377 .block_erasers =
6378 {
6379 {
6380 .eraseblocks = { {4 * 1024, 512} },
6381 .block_erase = erase_sector_49lfxxxc,
6382 }, {
6383 .eraseblocks = {
6384 {64 * 1024, 31},
6385 {32 * 1024, 1},
6386 {8 * 1024, 2},
6387 {16 * 1024, 1},
6388 },
Sean Nelson69e58112010-03-23 17:10:28 +00006389 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006390 }
6391 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006392 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006393 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006394 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006395 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006396 },
6397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006398 {
6399 .vendor = "ST",
6400 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006401 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006402 .manufacture_id = ST_ID,
6403 .model_id = ST_M25P05A,
6404 .total_size = 64,
6405 .page_size = 256,
6406 .tested = TEST_UNTESTED,
6407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006408 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006409 .block_erasers =
6410 {
6411 {
6412 .eraseblocks = { {32 * 1024, 2} },
6413 .block_erase = spi_block_erase_d8,
6414 }, {
6415 .eraseblocks = { {64 * 1024, 1} },
6416 .block_erase = spi_block_erase_c7,
6417 }
6418 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006419 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006420 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006421 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006422 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006423 },
6424
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006425 /* The ST M25P05 is a bit of a problem. It has the same ID as the
6426 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006427 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006428 * only is successful if RDID does not work.
6429 */
6430 {
6431 .vendor = "ST",
6432 .name = "M25P05.RES",
6433 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006434 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006435 .model_id = ST_M25P05_RES,
6436 .total_size = 64,
6437 .page_size = 256,
6438 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006439 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006440 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006441 .block_erasers =
6442 {
6443 {
6444 .eraseblocks = { {32 * 1024, 2} },
6445 .block_erase = spi_block_erase_d8,
6446 }, {
6447 .eraseblocks = { {64 * 1024, 1} },
6448 .block_erase = spi_block_erase_c7,
6449 }
6450 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006451 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006452 .write = spi_chip_write_1, /* 128 */
6453 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006454 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006455 },
6456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006457 {
6458 .vendor = "ST",
6459 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006460 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006461 .manufacture_id = ST_ID,
6462 .model_id = ST_M25P10A,
6463 .total_size = 128,
6464 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006465 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006466 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006467 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006468 .block_erasers =
6469 {
6470 {
6471 .eraseblocks = { {32 * 1024, 4} },
6472 .block_erase = spi_block_erase_d8,
6473 }, {
6474 .eraseblocks = { {128 * 1024, 1} },
6475 .block_erase = spi_block_erase_c7,
6476 }
6477 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006478 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006479 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006480 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006481 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006482 },
6483
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006484 /* The ST M25P10 has the same problem as the M25P05. */
6485 {
6486 .vendor = "ST",
6487 .name = "M25P10.RES",
6488 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006489 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006490 .model_id = ST_M25P10_RES,
6491 .total_size = 128,
6492 .page_size = 256,
6493 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006494 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006495 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006496 .block_erasers =
6497 {
6498 {
6499 .eraseblocks = { {32 * 1024, 4} },
6500 .block_erase = spi_block_erase_d8,
6501 }, {
6502 .eraseblocks = { {128 * 1024, 1} },
6503 .block_erase = spi_block_erase_c7,
6504 }
6505 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006506 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006507 .write = spi_chip_write_1, /* 128 */
6508 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006509 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006510 },
6511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006512 {
6513 .vendor = "ST",
6514 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006516 .manufacture_id = ST_ID,
6517 .model_id = ST_M25P20,
6518 .total_size = 256,
6519 .page_size = 256,
6520 .tested = TEST_UNTESTED,
6521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006522 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006523 .block_erasers =
6524 {
6525 {
6526 .eraseblocks = { {64 * 1024, 4} },
6527 .block_erase = spi_block_erase_d8,
6528 }, {
6529 .eraseblocks = { {256 * 1024, 1} },
6530 .block_erase = spi_block_erase_c7,
6531 }
6532 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006533 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006534 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006535 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006536 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006537 },
6538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006539 {
6540 .vendor = "ST",
6541 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006542 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006543 .manufacture_id = ST_ID,
6544 .model_id = ST_M25P40,
6545 .total_size = 512,
6546 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006547 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006548 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006549 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006550 .block_erasers =
6551 {
6552 {
6553 .eraseblocks = { {64 * 1024, 8} },
6554 .block_erase = spi_block_erase_d8,
6555 }, {
6556 .eraseblocks = { {512 * 1024, 1} },
6557 .block_erase = spi_block_erase_c7,
6558 }
6559 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006560 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006561 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006562 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006563 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006564 },
6565
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006566 {
6567 .vendor = "ST",
6568 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006569 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006570 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006571 .model_id = ST_M25P40_RES,
6572 .total_size = 512,
6573 .page_size = 256,
6574 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006575 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006576 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006577 .block_erasers =
6578 {
6579 {
6580 .eraseblocks = { {64 * 1024, 8} },
6581 .block_erase = spi_block_erase_d8,
6582 }, {
6583 .eraseblocks = { {512 * 1024, 1} },
6584 .block_erase = spi_block_erase_c7,
6585 }
6586 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006587 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006588 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006589 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006590 },
6591
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006592 {
6593 .vendor = "ST",
6594 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006595 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006596 .manufacture_id = ST_ID,
6597 .model_id = ST_M25P80,
6598 .total_size = 1024,
6599 .page_size = 256,
Uwe Hermann19f46f22011-06-18 22:56:14 +00006600 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006601 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006602 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006603 .block_erasers =
6604 {
6605 {
6606 .eraseblocks = { {64 * 1024, 16} },
6607 .block_erase = spi_block_erase_d8,
6608 }, {
6609 .eraseblocks = { {1024 * 1024, 1} },
6610 .block_erase = spi_block_erase_c7,
6611 }
6612 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006613 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006614 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006615 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006616 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006617 },
6618
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006619 {
6620 .vendor = "ST",
6621 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006622 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006623 .manufacture_id = ST_ID,
6624 .model_id = ST_M25P16,
6625 .total_size = 2048,
6626 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006627 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006629 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006630 .block_erasers =
6631 {
6632 {
6633 .eraseblocks = { {64 * 1024, 32} },
6634 .block_erase = spi_block_erase_d8,
6635 }, {
6636 .eraseblocks = { {2 * 1024 * 1024, 1} },
6637 .block_erase = spi_block_erase_c7,
6638 }
6639 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006640 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006641 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006642 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006643 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006644 },
6645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006646 {
6647 .vendor = "ST",
6648 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006649 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006650 .manufacture_id = ST_ID,
6651 .model_id = ST_M25P32,
6652 .total_size = 4096,
6653 .page_size = 256,
Antony Rheneus0fbba982011-05-26 14:28:51 +00006654 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006655 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006656 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006657 .block_erasers =
6658 {
6659 {
6660 .eraseblocks = { {64 * 1024, 64} },
6661 .block_erase = spi_block_erase_d8,
6662 }, {
6663 .eraseblocks = { {4 * 1024 * 1024, 1} },
6664 .block_erase = spi_block_erase_c7,
6665 }
6666 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006667 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006668 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006669 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006670 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006671 },
6672
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006673 {
6674 .vendor = "ST",
6675 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006676 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006677 .manufacture_id = ST_ID,
6678 .model_id = ST_M25P64,
6679 .total_size = 8192,
6680 .page_size = 256,
6681 .tested = TEST_UNTESTED,
6682 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006683 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006684 .block_erasers =
6685 {
6686 {
6687 .eraseblocks = { {64 * 1024, 128} },
6688 .block_erase = spi_block_erase_d8,
6689 }, {
6690 .eraseblocks = { {8 * 1024 * 1024, 1} },
6691 .block_erase = spi_block_erase_c7,
6692 }
6693 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006694 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006695 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006696 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006697 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006698 },
6699
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006700 {
6701 .vendor = "ST",
6702 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006703 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006704 .manufacture_id = ST_ID,
6705 .model_id = ST_M25P128,
6706 .total_size = 16384,
6707 .page_size = 256,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00006708 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006709 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006710 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006711 .block_erasers =
6712 {
6713 {
6714 .eraseblocks = { {256 * 1024, 64} },
6715 .block_erase = spi_block_erase_d8,
6716 }, {
6717 .eraseblocks = { {16 * 1024 * 1024, 1} },
6718 .block_erase = spi_block_erase_c7,
6719 }
6720 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006721 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006722 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006723 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006724 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006725 },
6726
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006727 {
6728 .vendor = "ST",
Carl Worthd1dd72c2011-03-06 18:45:40 +00006729 .name = "M25PX16",
6730 .bustype = CHIP_BUSTYPE_SPI,
6731 .manufacture_id = ST_ID,
6732 .model_id = ST_M25PX16,
6733 .total_size = 2048,
6734 .page_size = 256,
6735 .tested = TEST_OK_PREW,
6736 .probe = probe_spi_rdid,
6737 .probe_timing = TIMING_ZERO,
6738 .block_erasers =
6739 {
6740 {
6741 .eraseblocks = { { 4 * 1024, 512 } },
6742 .block_erase = spi_block_erase_20,
6743 }, {
6744 .eraseblocks = { {64 * 1024, 32} },
6745 .block_erase = spi_block_erase_d8,
6746 }, {
6747 .eraseblocks = { {2 * 1024 * 1024, 1} },
6748 .block_erase = spi_block_erase_c7,
6749 }
6750 },
6751 .unlock = spi_disable_blockprotect,
6752 .write = spi_chip_write_256,
6753 .read = spi_chip_read,
6754 },
6755
6756 {
6757 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00006758 .name = "M25PX32",
6759 .bustype = CHIP_BUSTYPE_SPI,
6760 .manufacture_id = ST_ID,
6761 .model_id = ST_M25PX32,
6762 .total_size = 4096,
6763 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006764 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006765 .probe = probe_spi_rdid,
6766 .probe_timing = TIMING_ZERO,
6767 .block_erasers =
6768 {
6769 {
6770 .eraseblocks = { { 4 * 1024, 1024 } },
6771 .block_erase = spi_block_erase_20,
6772 }, {
6773 .eraseblocks = { {64 * 1024, 64} },
6774 .block_erase = spi_block_erase_d8,
6775 }, {
6776 .eraseblocks = { {4 * 1024 * 1024, 1} },
6777 .block_erase = spi_block_erase_c7,
6778 }
6779 },
6780 .unlock = spi_disable_blockprotect,
6781 .write = spi_chip_write_256,
6782 .read = spi_chip_read,
6783 },
6784
6785 {
6786 .vendor = "ST",
6787 .name = "M25PX64",
6788 .bustype = CHIP_BUSTYPE_SPI,
6789 .manufacture_id = ST_ID,
6790 .model_id = ST_M25PX64,
6791 .total_size = 8192,
6792 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006793 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006794 .probe = probe_spi_rdid,
6795 .probe_timing = TIMING_ZERO,
6796 .block_erasers =
6797 {
6798 {
6799 .eraseblocks = { { 4 * 1024, 2048 } },
6800 .block_erase = spi_block_erase_20,
6801 }, {
6802 .eraseblocks = { {64 * 1024, 128} },
6803 .block_erase = spi_block_erase_d8,
6804 }, {
6805 .eraseblocks = { {8 * 1024 * 1024, 1} },
6806 .block_erase = spi_block_erase_c7,
6807 }
6808 },
6809 .unlock = spi_disable_blockprotect,
6810 .write = spi_chip_write_256,
6811 .read = spi_chip_read,
6812 },
6813
6814 {
6815 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006816 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006817 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006818 .manufacture_id = ST_ID,
6819 .model_id = ST_M29F002B,
6820 .total_size = 256,
6821 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006822 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006823 .tested = TEST_UNTESTED,
6824 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006825 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006826 .block_erasers =
6827 {
6828 {
6829 .eraseblocks = {
6830 {16 * 1024, 1},
6831 {8 * 1024, 2},
6832 {32 * 1024, 1},
6833 {64 * 1024, 3},
6834 },
6835 .block_erase = erase_sector_jedec,
6836 }, {
6837 .eraseblocks = { {256 * 1024, 1} },
6838 .block_erase = erase_chip_block_jedec,
6839 }
6840 },
Sean Nelson35727f72010-01-28 23:55:12 +00006841 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006842 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006843 .voltage = {4750, 5250}, /* Datasheet says some are only 4.75-5.25 V */
FENG yu ningff692fb2008-12-08 18:15:10 +00006844 },
6845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006846 {
6847 .vendor = "ST",
6848 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006849 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006850 .manufacture_id = ST_ID,
6851 .model_id = ST_M29F002T,
6852 .total_size = 256,
6853 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006854 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6855 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006856 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006857 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006858 .block_erasers =
6859 {
6860 {
6861 .eraseblocks = {
6862 {64 * 1024, 3},
6863 {32 * 1024, 1},
6864 {8 * 1024, 2},
6865 {16 * 1024, 1},
6866 },
6867 .block_erase = erase_sector_jedec,
6868 }, {
6869 .eraseblocks = { {256 * 1024, 1} },
6870 .block_erase = erase_chip_block_jedec,
6871 }
6872 },
Sean Nelson35727f72010-01-28 23:55:12 +00006873 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006874 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006875 .voltage = {4750, 5250}, /* Datasheet says some are only 4.75-5.25 V */
FENG yu ningff692fb2008-12-08 18:15:10 +00006876 },
6877
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006878 {
6879 .vendor = "ST",
6880 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006881 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006882 .manufacture_id = ST_ID,
6883 .model_id = ST_M29F040B,
6884 .total_size = 512,
6885 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006886 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6887 .tested = TEST_UNTESTED,
6888 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00006889 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
Sean Nelson56358aa2010-01-19 16:08:51 +00006890 .block_erasers =
6891 {
6892 {
6893 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006894 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006895 }, {
6896 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006897 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006898 }
6899 },
Sean Nelson35727f72010-01-28 23:55:12 +00006900 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006901 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006902 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006903 },
6904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006905 {
Sean Nelson35727f72010-01-28 23:55:12 +00006906 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006907 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006908 .name = "M29F400BB",
6909 .bustype = CHIP_BUSTYPE_PARALLEL,
6910 .manufacture_id = ST_ID,
6911 .model_id = ST_M29F400BB,
6912 .total_size = 512,
6913 .page_size = 64 * 1024,
6914 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006915 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006916 .probe = probe_m29f400bt,
6917 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6918 .block_erasers =
6919 {
6920 {
6921 .eraseblocks = {
6922 {16 * 1024, 1},
6923 {8 * 1024, 2},
6924 {32 * 1024, 1},
6925 {64 * 1024, 7},
6926 },
6927 .block_erase = block_erase_m29f400bt,
6928 }, {
6929 .eraseblocks = { {512 * 1024, 1} },
6930 .block_erase = block_erase_chip_m29f400bt,
6931 }
6932 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006933 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006934 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006935 .voltage = {4500, 5500},
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006936 },
6937 {
6938 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6939 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006940 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006941 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006942 .manufacture_id = ST_ID,
6943 .model_id = ST_M29F400BT,
6944 .total_size = 512,
6945 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006946 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006947 .tested = TEST_UNTESTED,
6948 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006949 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006950 .block_erasers =
6951 {
6952 {
6953 .eraseblocks = {
6954 {64 * 1024, 7},
6955 {32 * 1024, 1},
6956 {8 * 1024, 2},
6957 {16 * 1024, 1},
6958 },
6959 .block_erase = block_erase_m29f400bt,
6960 }, {
6961 .eraseblocks = { {512 * 1024, 1} },
6962 .block_erase = block_erase_chip_m29f400bt,
6963 }
6964 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006965 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006966 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006967 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006968 },
6969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006970 {
6971 .vendor = "ST",
6972 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006973 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006974 .manufacture_id = ST_ID,
6975 .model_id = ST_M29W010B,
6976 .total_size = 128,
6977 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006978 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006979 .tested = TEST_UNTESTED,
6980 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006981 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006982 .block_erasers =
6983 {
6984 {
6985 .eraseblocks = { {16 * 1024, 8}, },
6986 .block_erase = erase_sector_jedec,
6987 }, {
6988 .eraseblocks = { {128 * 1024, 1} },
6989 .block_erase = erase_chip_block_jedec,
6990 }
6991 },
Sean Nelson35727f72010-01-28 23:55:12 +00006992 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006993 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006994 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006995 },
6996
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006997 {
6998 .vendor = "ST",
6999 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00007000 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007001 .manufacture_id = ST_ID,
7002 .model_id = ST_M29W040B,
7003 .total_size = 512,
7004 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007005 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007006 .tested = TEST_UNTESTED,
7007 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007008 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007009 .block_erasers =
7010 {
7011 {
7012 .eraseblocks = { {64 * 1024, 8}, },
7013 .block_erase = erase_sector_jedec,
7014 }, {
7015 .eraseblocks = { {512 * 1024, 1} },
7016 .block_erase = erase_chip_block_jedec,
7017 }
7018 },
Sean Nelson35727f72010-01-28 23:55:12 +00007019 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007020 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007021 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007022 },
7023
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007024 {
7025 .vendor = "ST",
7026 .name = "M29W512B",
7027 .bustype = CHIP_BUSTYPE_PARALLEL,
7028 .manufacture_id = ST_ID,
7029 .model_id = ST_M29W512B,
7030 .total_size = 64,
7031 .page_size = 64 * 1024,
7032 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007033 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007034 .probe = probe_jedec,
7035 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007036 .block_erasers =
7037 {
7038 {
7039 .eraseblocks = { {64 * 1024, 1} },
7040 .block_erase = erase_chip_block_jedec,
7041 }
7042 },
7043 .write = write_jedec_1,
7044 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007045 .voltage = {2700, 3600},
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007046 },
7047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007048 {
7049 .vendor = "ST",
7050 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00007051 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007052 .manufacture_id = ST_ID,
7053 .model_id = ST_M50FLW040A,
7054 .total_size = 512,
7055 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007056 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007057 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007058 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007059 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007060 .block_erasers =
7061 {
7062 {
Sean Nelson329bde72010-01-19 16:39:19 +00007063 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007064 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007065 {64 * 1024, 5}, /* block */
7066 {4 * 1024, 16}, /* sector */
7067 {4 * 1024, 16}, /* sector */
7068 },
7069 .block_erase = NULL,
7070 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007071 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007072 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007073 }
7074 },
Sean Nelson28accc22010-03-19 18:47:06 +00007075 .unlock = unlock_stm50flw0x0x,
7076 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007077 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007078 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007079 },
7080
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007081 {
7082 .vendor = "ST",
7083 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00007084 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007085 .manufacture_id = ST_ID,
7086 .model_id = ST_M50FLW040B,
7087 .total_size = 512,
7088 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007089 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007090 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007091 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007092 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007093 .block_erasers =
7094 {
7095 {
Sean Nelson329bde72010-01-19 16:39:19 +00007096 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007097 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007098 {4 * 1024, 16}, /* sector */
7099 {64 * 1024, 5}, /* block */
7100 {4 * 1024, 16}, /* sector */
7101 },
7102 .block_erase = NULL,
7103 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007104 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007105 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007106 }
7107 },
Sean Nelson28accc22010-03-19 18:47:06 +00007108 .unlock = unlock_stm50flw0x0x,
7109 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007110 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007111 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007112 },
7113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007114 {
7115 .vendor = "ST",
7116 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00007117 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007118 .manufacture_id = ST_ID,
7119 .model_id = ST_M50FLW080A,
7120 .total_size = 1024,
7121 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007122 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007123 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00007124 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007125 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007126 .block_erasers =
7127 {
7128 {
Sean Nelson329bde72010-01-19 16:39:19 +00007129 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007130 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007131 {64 * 1024, 13}, /* block */
7132 {4 * 1024, 16}, /* sector */
7133 {4 * 1024, 16}, /* sector */
7134 },
7135 .block_erase = NULL,
7136 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007137 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007138 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007139 }
7140 },
Sean Nelson28accc22010-03-19 18:47:06 +00007141 .unlock = unlock_stm50flw0x0x,
7142 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007143 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007144 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007145 },
7146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007147 {
7148 .vendor = "ST",
7149 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00007150 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007151 .manufacture_id = ST_ID,
7152 .model_id = ST_M50FLW080B,
7153 .total_size = 1024,
7154 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007155 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007157 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007158 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007159 .block_erasers =
7160 {
7161 {
Sean Nelson329bde72010-01-19 16:39:19 +00007162 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007163 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007164 {4 * 1024, 16}, /* sector */
7165 {64 * 1024, 13}, /* block */
7166 {4 * 1024, 16}, /* sector */
7167 },
7168 .block_erase = NULL,
7169 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007170 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007171 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007172 }
7173 },
Sean Nelson28accc22010-03-19 18:47:06 +00007174 .unlock = unlock_stm50flw0x0x,
7175 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007176 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007177 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007178 },
7179
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007180 {
7181 .vendor = "ST",
7182 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00007183 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007184 .manufacture_id = ST_ID,
7185 .model_id = ST_M50FW002,
7186 .total_size = 256,
7187 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007188 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007189 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007190 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007191 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007192 .block_erasers =
7193 {
7194 {
7195 .eraseblocks = {
7196 {64 * 1024, 3},
7197 {32 * 1024, 1},
7198 {8 * 1024, 2},
7199 {16 * 1024, 1},
7200 },
Sean Nelson28accc22010-03-19 18:47:06 +00007201 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007202 }
7203 },
Sean Nelson28accc22010-03-19 18:47:06 +00007204 .unlock = unlock_stm50flw0x0x,
7205 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007206 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007207 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007208 },
7209
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007210 {
7211 .vendor = "ST",
7212 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00007213 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007214 .manufacture_id = ST_ID,
7215 .model_id = ST_M50FW016,
7216 .total_size = 2048,
7217 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007218 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007219 .tested = TEST_UNTESTED,
7220 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007221 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007222 .block_erasers =
7223 {
7224 {
7225 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007226 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007227 }
7228 },
Sean Nelson28accc22010-03-19 18:47:06 +00007229 .unlock = unlock_stm50flw0x0x,
7230 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007231 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007232 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007233 },
7234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007235 {
7236 .vendor = "ST",
7237 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00007238 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007239 .manufacture_id = ST_ID,
7240 .model_id = ST_M50FW040,
7241 .total_size = 512,
7242 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007243 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00007244 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007245 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007246 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007247 .block_erasers =
7248 {
7249 {
7250 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007251 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007252 }
7253 },
Sean Nelson28accc22010-03-19 18:47:06 +00007254 .unlock = unlock_stm50flw0x0x,
7255 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007256 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007257 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007258 },
7259
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007260 {
7261 .vendor = "ST",
7262 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00007263 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007264 .manufacture_id = ST_ID,
7265 .model_id = ST_M50FW080,
7266 .total_size = 1024,
7267 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007268 .feature_bits = FEATURE_REGISTERMAP,
Antony Rheneus0fbba982011-05-26 14:28:51 +00007269 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007270 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007271 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007272 .block_erasers =
7273 {
7274 {
7275 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007276 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007277 }
7278 },
Sean Nelson28accc22010-03-19 18:47:06 +00007279 .unlock = unlock_stm50flw0x0x,
7280 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007281 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007282 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007283 },
7284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007285 {
7286 .vendor = "ST",
7287 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00007288 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007289 .manufacture_id = ST_ID,
7290 .model_id = ST_M50LPW116,
7291 .total_size = 2048,
7292 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007293 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007294 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007295 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00007296 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007297 .block_erasers =
7298 {
7299 {
7300 .eraseblocks = {
7301 {4 * 1024, 16},
7302 {64 * 1024, 30},
7303 {32 * 1024, 1},
7304 {8 * 1024, 2},
7305 {16 * 1024, 1},
7306 },
Sean Nelson28accc22010-03-19 18:47:06 +00007307 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007308 }
7309 },
Sean Nelson28accc22010-03-19 18:47:06 +00007310 .unlock = unlock_stm50flw0x0x,
7311 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007312 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007313 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007314 },
7315
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007316 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007317 .vendor = "SyncMOS/MoselVitelic",
7318 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00007319 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007320 .manufacture_id = SYNCMOS_MVC_ID,
7321 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007322 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007323 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00007324 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007325 .tested = TEST_UNTESTED,
7326 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007327 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007328 .block_erasers =
7329 {
7330 {
7331 .eraseblocks = { {512, 256} },
7332 .block_erase = erase_sector_jedec,
7333 }, {
7334 .eraseblocks = { {128 * 1024, 1} },
7335 .block_erase = erase_chip_block_jedec,
7336 },
7337 },
Sean Nelson35727f72010-01-28 23:55:12 +00007338 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007339 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007340 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00007341 },
7342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007343 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007344 .vendor = "SyncMOS/MoselVitelic",
7345 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00007346 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007347 .manufacture_id = SYNCMOS_MVC_ID,
7348 .model_id = SM_MVC_29C51001T,
7349 .total_size = 128,
7350 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00007351 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007352 .tested = TEST_UNTESTED,
7353 .probe = probe_jedec,
7354 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7355 .block_erasers =
7356 {
7357 {
7358 .eraseblocks = { {512, 256} },
7359 .block_erase = erase_sector_jedec,
7360 }, {
7361 .eraseblocks = { {128 * 1024, 1} },
7362 .block_erase = erase_chip_block_jedec,
7363 },
7364 },
7365 .write = write_jedec_1,
7366 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007367 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00007368 },
7369
7370 {
7371 .vendor = "SyncMOS/MoselVitelic",
7372 .name = "{F,S,V}29C51002B",
7373 .bustype = CHIP_BUSTYPE_PARALLEL,
7374 .manufacture_id = SYNCMOS_MVC_ID,
7375 .model_id = SM_MVC_29C51002B,
7376 .total_size = 256,
7377 .page_size = 512,
7378 .feature_bits = FEATURE_EITHER_RESET,
7379 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007380 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007381 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007382 .block_erasers =
7383 {
7384 {
7385 .eraseblocks = { {512, 512} },
7386 .block_erase = erase_sector_jedec,
7387 }, {
7388 .eraseblocks = { {256 * 1024, 1} },
7389 .block_erase = erase_chip_block_jedec,
7390 },
7391 },
Sean Nelson35727f72010-01-28 23:55:12 +00007392 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007393 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007394 },
7395
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007396 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007397 .vendor = "SyncMOS/MoselVitelic",
7398 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00007399 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007400 .manufacture_id = SYNCMOS_MVC_ID,
7401 .model_id = SM_MVC_29C51002T,
7402 .total_size = 256,
7403 .page_size = 512,
7404 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007405 .tested = TEST_OK_PRE,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007406 .probe = probe_jedec,
7407 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7408 .block_erasers =
7409 {
7410 {
7411 .eraseblocks = { {512, 512} },
7412 .block_erase = erase_sector_jedec,
7413 }, {
7414 .eraseblocks = { {256 * 1024, 1} },
7415 .block_erase = erase_chip_block_jedec,
7416 },
7417 },
7418 .write = write_jedec_1,
7419 .read = read_memmapped,
7420 },
7421
7422 {
7423 .vendor = "SyncMOS/MoselVitelic",
7424 .name = "{F,S,V}29C51004B",
7425 .bustype = CHIP_BUSTYPE_PARALLEL,
7426 .manufacture_id = SYNCMOS_MVC_ID,
7427 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007428 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00007429 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007430 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007431 .tested = TEST_UNTESTED,
7432 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007433 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007434 .block_erasers =
7435 {
7436 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00007437 .eraseblocks = { {1024, 512} },
7438 .block_erase = erase_sector_jedec,
7439 }, {
7440 .eraseblocks = { {512 * 1024, 1} },
7441 .block_erase = erase_chip_block_jedec,
7442 },
7443 },
7444 .write = write_jedec_1,
7445 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007446 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00007447 },
7448
7449 {
7450 .vendor = "SyncMOS/MoselVitelic",
7451 .name = "{F,S,V}29C51004T",
7452 .bustype = CHIP_BUSTYPE_PARALLEL,
7453 .manufacture_id = SYNCMOS_MVC_ID,
7454 .model_id = SM_MVC_29C51004T,
7455 .total_size = 512,
7456 .page_size = 1024,
7457 .feature_bits = FEATURE_EITHER_RESET,
7458 .tested = TEST_UNTESTED,
7459 .probe = probe_jedec,
7460 .probe_timing = TIMING_ZERO,
7461 .block_erasers =
7462 {
7463 {
7464 .eraseblocks = { {1024, 512} },
7465 .block_erase = erase_sector_jedec,
7466 }, {
7467 .eraseblocks = { {512 * 1024, 1} },
7468 .block_erase = erase_chip_block_jedec,
7469 },
7470 },
7471 .write = write_jedec_1,
7472 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007473 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00007474 },
7475
7476 {
7477 .vendor = "SyncMOS/MoselVitelic",
7478 .name = "{S,V}29C31004B",
7479 .bustype = CHIP_BUSTYPE_PARALLEL,
7480 .manufacture_id = SYNCMOS_MVC_ID,
7481 .model_id = SM_MVC_29C31004B,
7482 .total_size = 512,
7483 .page_size = 1024,
7484 .feature_bits = FEATURE_EITHER_RESET,
7485 .tested = TEST_UNTESTED,
7486 .probe = probe_jedec,
7487 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7488 .block_erasers =
7489 {
7490 {
7491 .eraseblocks = { {1024, 512} },
7492 .block_erase = erase_sector_jedec,
7493 }, {
7494 .eraseblocks = { {512 * 1024, 1} },
7495 .block_erase = erase_chip_block_jedec,
7496 },
7497 },
7498 .write = write_jedec_1,
7499 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007500 .voltage = {3000, 3600},
Mattias Mattsson4c066502010-07-29 20:01:13 +00007501 },
7502
7503 {
7504 .vendor = "SyncMOS/MoselVitelic",
7505 .name = "{S,V}29C31004T",
7506 .bustype = CHIP_BUSTYPE_PARALLEL,
7507 .manufacture_id = SYNCMOS_MVC_ID,
7508 .model_id = SM_MVC_29C31004T,
7509 .total_size = 512,
7510 .page_size = 1024,
7511 .feature_bits = FEATURE_EITHER_RESET,
7512 .tested = TEST_UNTESTED,
7513 .probe = probe_jedec,
7514 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7515 .block_erasers =
7516 {
7517 {
7518 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00007519 .block_erase = erase_sector_jedec,
7520 }, {
7521 .eraseblocks = { {512 * 1024, 1} },
7522 .block_erase = erase_chip_block_jedec,
7523 },
7524 },
Sean Nelson35727f72010-01-28 23:55:12 +00007525 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007526 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007527 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007528 },
7529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007530 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007531 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007532 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00007533 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007534 .manufacture_id = TI_OLD_ID,
7535 .model_id = TI_TMS29F002RB,
7536 .total_size = 256,
7537 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007538 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007539 .tested = TEST_UNTESTED,
7540 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007541 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007542 .block_erasers =
7543 {
7544 {
7545 .eraseblocks = {
7546 {16 * 1024, 1},
7547 {8 * 1024, 2},
7548 {32 * 1024, 1},
7549 {64 * 1024, 3},
7550 },
7551 .block_erase = erase_sector_jedec,
7552 }, {
7553 .eraseblocks = { {256 * 1024, 1} },
7554 .block_erase = erase_chip_block_jedec,
7555 },
7556 },
Sean Nelson35727f72010-01-28 23:55:12 +00007557 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007558 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007559 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007560 },
7561
7562 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007563 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007564 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00007565 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007566 .manufacture_id = TI_OLD_ID,
7567 .model_id = TI_TMS29F002RT,
7568 .total_size = 256,
7569 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007570 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007571 .tested = TEST_UNTESTED,
7572 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007573 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007574 .block_erasers =
7575 {
7576 {
7577 .eraseblocks = {
7578 {64 * 1024, 3},
7579 {32 * 1024, 1},
7580 {8 * 1024, 2},
7581 {16 * 1024, 1},
7582 },
7583 .block_erase = erase_sector_jedec,
7584 }, {
7585 .eraseblocks = { {256 * 1024, 1} },
7586 .block_erase = erase_chip_block_jedec,
7587 },
7588 },
Sean Nelson35727f72010-01-28 23:55:12 +00007589 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007590 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007591 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007592 },
7593
7594 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007595 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00007596 .name = "W25Q80",
7597 .bustype = CHIP_BUSTYPE_SPI,
7598 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007599 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007600 .total_size = 1024,
7601 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007602 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007603 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007604 .probe = probe_spi_rdid,
7605 .probe_timing = TIMING_ZERO,
7606 .block_erasers =
7607 {
7608 {
7609 .eraseblocks = { {4 * 1024, 256} },
7610 .block_erase = spi_block_erase_20,
7611 }, {
7612 .eraseblocks = { {32 * 1024, 32} },
7613 .block_erase = spi_block_erase_52,
7614 }, {
7615 .eraseblocks = { {64 * 1024, 16} },
7616 .block_erase = spi_block_erase_d8,
7617 }, {
7618 .eraseblocks = { {1024 * 1024, 1} },
7619 .block_erase = spi_block_erase_60,
7620 }, {
7621 .eraseblocks = { {1024 * 1024, 1} },
7622 .block_erase = spi_block_erase_c7,
7623 }
7624 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007625 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007626 .write = spi_chip_write_256,
7627 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007628 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00007629 },
7630
7631 {
7632 .vendor = "Winbond",
7633 .name = "W25Q16",
7634 .bustype = CHIP_BUSTYPE_SPI,
7635 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007636 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007637 .total_size = 2048,
7638 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007639 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007640 .tested = TEST_UNTESTED,
7641 .probe = probe_spi_rdid,
7642 .probe_timing = TIMING_ZERO,
7643 .block_erasers =
7644 {
7645 {
7646 .eraseblocks = { {4 * 1024, 512} },
7647 .block_erase = spi_block_erase_20,
7648 }, {
7649 .eraseblocks = { {32 * 1024, 64} },
7650 .block_erase = spi_block_erase_52,
7651 }, {
7652 .eraseblocks = { {64 * 1024, 32} },
7653 .block_erase = spi_block_erase_d8,
7654 }, {
7655 .eraseblocks = { {2 * 1024 * 1024, 1} },
7656 .block_erase = spi_block_erase_60,
7657 }, {
7658 .eraseblocks = { {2 * 1024 * 1024, 1} },
7659 .block_erase = spi_block_erase_c7,
7660 }
7661 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007662 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007663 .write = spi_chip_write_256,
7664 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007665 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00007666 },
7667
7668 {
7669 .vendor = "Winbond",
7670 .name = "W25Q32",
7671 .bustype = CHIP_BUSTYPE_SPI,
7672 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007673 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007674 .total_size = 4096,
7675 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007676 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007677 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007678 .probe = probe_spi_rdid,
7679 .probe_timing = TIMING_ZERO,
7680 .block_erasers =
7681 {
7682 {
7683 .eraseblocks = { {4 * 1024, 1024} },
7684 .block_erase = spi_block_erase_20,
7685 }, {
7686 .eraseblocks = { {32 * 1024, 128} },
7687 .block_erase = spi_block_erase_52,
7688 }, {
7689 .eraseblocks = { {64 * 1024, 64} },
7690 .block_erase = spi_block_erase_d8,
7691 }, {
7692 .eraseblocks = { {4 * 1024 * 1024, 1} },
7693 .block_erase = spi_block_erase_60,
7694 }, {
7695 .eraseblocks = { {4 * 1024 * 1024, 1} },
7696 .block_erase = spi_block_erase_c7,
7697 }
7698 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007699 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007700 .write = spi_chip_write_256,
7701 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007702 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00007703 },
7704
7705 {
7706 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00007707 .name = "W25Q64",
7708 .bustype = CHIP_BUSTYPE_SPI,
7709 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007710 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00007711 .total_size = 8192,
7712 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007713 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007714 .tested = TEST_OK_PREW,
David Hendricksc4acec92010-06-24 11:39:57 +00007715 .probe = probe_spi_rdid,
7716 .probe_timing = TIMING_ZERO,
7717 .block_erasers =
7718 {
7719 {
7720 .eraseblocks = { {4 * 1024, 2048} },
7721 .block_erase = spi_block_erase_20,
7722 }, {
7723 .eraseblocks = { {32 * 1024, 256} },
7724 .block_erase = spi_block_erase_52,
7725 }, {
7726 .eraseblocks = { {64 * 1024, 128} },
7727 .block_erase = spi_block_erase_d8,
7728 }, {
7729 .eraseblocks = { {8 * 1024 * 1024, 1} },
7730 .block_erase = spi_block_erase_60,
7731 }, {
7732 .eraseblocks = { {8 * 1024 * 1024, 1} },
7733 .block_erase = spi_block_erase_c7,
7734 }
7735 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007736 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00007737 .write = spi_chip_write_256,
7738 .read = spi_chip_read,
7739 },
7740
7741 {
7742 .vendor = "Winbond",
Antony Rheneus0fbba982011-05-26 14:28:51 +00007743 .name = "W25Q128",
7744 .bustype = CHIP_BUSTYPE_SPI,
7745 .manufacture_id = WINBOND_NEX_ID,
7746 .model_id = WINBOND_NEX_W25Q128,
7747 .total_size = 16384,
7748 .page_size = 256,
7749 .feature_bits = FEATURE_WRSR_WREN,
7750 .tested = TEST_OK_PROBE,
7751 .probe = probe_spi_rdid,
7752 .probe_timing = TIMING_ZERO,
7753 .block_erasers =
7754 {
7755 {
7756 .eraseblocks = { {4 * 1024, 4096} },
7757 .block_erase = spi_block_erase_20,
7758 }, {
7759 .eraseblocks = { {32 * 1024, 512} },
7760 .block_erase = spi_block_erase_52,
7761 }, {
7762 .eraseblocks = { {64 * 1024, 256} },
7763 .block_erase = spi_block_erase_d8,
7764 }, {
7765 .eraseblocks = { {16 * 1024 * 1024, 1} },
7766 .block_erase = spi_block_erase_60,
7767 }, {
7768 .eraseblocks = { {16 * 1024 * 1024, 1} },
7769 .block_erase = spi_block_erase_c7,
7770 }
7771 },
7772 .unlock = spi_disable_blockprotect,
7773 .write = spi_chip_write_256,
7774 .read = spi_chip_read,
7775 },
7776
7777 {
7778 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007779 .name = "W25X10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007780 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007781 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007782 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007783 .total_size = 128,
7784 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007785 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007786 .tested = TEST_UNTESTED,
7787 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007788 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007789 .block_erasers =
7790 {
7791 {
7792 .eraseblocks = { {4 * 1024, 32} },
7793 .block_erase = spi_block_erase_20,
7794 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007795 .eraseblocks = { {64 * 1024, 2} },
7796 .block_erase = spi_block_erase_d8,
7797 }, {
7798 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007799 .block_erase = spi_block_erase_c7,
7800 }
7801 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007802 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007803 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007804 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007805 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007806 },
7807
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007808 {
7809 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007810 .name = "W25X20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007811 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007812 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007813 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007814 .total_size = 256,
7815 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007816 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007817 .tested = TEST_UNTESTED,
7818 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007819 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007820 .block_erasers =
7821 {
7822 {
7823 .eraseblocks = { {4 * 1024, 64} },
7824 .block_erase = spi_block_erase_20,
7825 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007826 .eraseblocks = { {64 * 1024, 4} },
7827 .block_erase = spi_block_erase_d8,
7828 }, {
7829 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007830 .block_erase = spi_block_erase_c7,
7831 }
7832 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007833 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007834 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007835 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007836 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007837 },
7838
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007839 {
7840 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007841 .name = "W25X40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007842 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007843 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007844 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007845 .total_size = 512,
7846 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007847 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00007848 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007849 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007850 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007851 .block_erasers =
7852 {
7853 {
7854 .eraseblocks = { {4 * 1024, 128} },
7855 .block_erase = spi_block_erase_20,
7856 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007857 .eraseblocks = { {64 * 1024, 8} },
7858 .block_erase = spi_block_erase_d8,
7859 }, {
7860 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007861 .block_erase = spi_block_erase_c7,
7862 }
7863 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007864 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007865 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007866 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007867 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007868 },
7869
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007870 {
7871 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007872 .name = "W25X80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007873 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007874 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007875 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007876 .total_size = 1024,
7877 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007878 .feature_bits = FEATURE_WRSR_WREN,
Yul Rottmann6d6ab742011-03-05 16:31:57 +00007879 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007880 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007881 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007882 .block_erasers =
7883 {
7884 {
7885 .eraseblocks = { {4 * 1024, 256} },
7886 .block_erase = spi_block_erase_20,
7887 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007888 .eraseblocks = { {64 * 1024, 16} },
7889 .block_erase = spi_block_erase_d8,
7890 }, {
7891 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007892 .block_erase = spi_block_erase_c7,
7893 }
7894 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007895 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007896 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007897 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007898 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007899 },
7900
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007901 {
7902 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007903 .name = "W25X16",
Hector Martina721ae22009-07-11 19:39:11 +00007904 .bustype = CHIP_BUSTYPE_SPI,
7905 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007906 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00007907 .total_size = 2048,
7908 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007909 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00007910 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00007911 .probe = probe_spi_rdid,
7912 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007913 .block_erasers =
7914 {
7915 {
7916 .eraseblocks = { {4 * 1024, 512} },
7917 .block_erase = spi_block_erase_20,
7918 }, {
7919 .eraseblocks = { {32 * 1024, 64} },
7920 .block_erase = spi_block_erase_52,
7921 }, {
7922 .eraseblocks = { {64 * 1024, 32} },
7923 .block_erase = spi_block_erase_d8,
7924 }, {
7925 .eraseblocks = { {2 * 1024 * 1024, 1} },
7926 .block_erase = spi_block_erase_60,
7927 }, {
7928 .eraseblocks = { {2 * 1024 * 1024, 1} },
7929 .block_erase = spi_block_erase_c7,
7930 }
7931 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007932 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007933 .write = spi_chip_write_256,
7934 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007935 .voltage = {2700, 3600},
Hector Martina721ae22009-07-11 19:39:11 +00007936 },
7937
7938 {
7939 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007940 .name = "W25X32",
Zheng Bao1db2b752009-11-26 11:05:01 +00007941 .bustype = CHIP_BUSTYPE_SPI,
7942 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007943 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00007944 .total_size = 4096,
7945 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007946 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007947 .tested = TEST_OK_PROBE,
7948 .probe = probe_spi_rdid,
7949 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007950 .block_erasers =
7951 {
7952 {
7953 .eraseblocks = { {4 * 1024, 1024} },
7954 .block_erase = spi_block_erase_20,
7955 }, {
7956 .eraseblocks = { {32 * 1024, 128} },
7957 .block_erase = spi_block_erase_52,
7958 }, {
7959 .eraseblocks = { {64 * 1024, 64} },
7960 .block_erase = spi_block_erase_d8,
7961 }, {
7962 .eraseblocks = { {4 * 1024 * 1024, 1} },
7963 .block_erase = spi_block_erase_60,
7964 }, {
7965 .eraseblocks = { {4 * 1024 * 1024, 1} },
7966 .block_erase = spi_block_erase_c7,
7967 }
7968 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007969 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007970 .write = spi_chip_write_256,
7971 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007972 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00007973 },
7974
7975 {
7976 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007977 .name = "W25X64",
Zheng Bao1db2b752009-11-26 11:05:01 +00007978 .bustype = CHIP_BUSTYPE_SPI,
7979 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007980 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00007981 .total_size = 8192,
7982 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007983 .feature_bits = FEATURE_WRSR_WREN,
Antony Rheneus0fbba982011-05-26 14:28:51 +00007984 .tested = TEST_OK_PROBE,
Zheng Bao1db2b752009-11-26 11:05:01 +00007985 .probe = probe_spi_rdid,
7986 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007987 .block_erasers =
7988 {
7989 {
7990 .eraseblocks = { {4 * 1024, 2048} },
7991 .block_erase = spi_block_erase_20,
7992 }, {
7993 .eraseblocks = { {32 * 1024, 256} },
7994 .block_erase = spi_block_erase_52,
7995 }, {
7996 .eraseblocks = { {64 * 1024, 128} },
7997 .block_erase = spi_block_erase_d8,
7998 }, {
7999 .eraseblocks = { {8 * 1024 * 1024, 1} },
8000 .block_erase = spi_block_erase_60,
8001 }, {
8002 .eraseblocks = { {8 * 1024 * 1024, 1} },
8003 .block_erase = spi_block_erase_c7,
8004 }
8005 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008006 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00008007 .write = spi_chip_write_256,
8008 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008009 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00008010 },
8011
8012 {
8013 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008014 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00008015 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008016 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008017 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008018 .total_size = 128,
8019 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008020 .feature_bits = FEATURE_LONG_RESET,
David Hendricks567b7b82011-05-18 01:31:03 +00008021 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008022 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008023 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008024 .block_erasers =
8025 {
8026 {
8027 .eraseblocks = { {128 * 1024, 1} },
8028 .block_erase = erase_chip_block_jedec,
8029 }
8030 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008031 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008032 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008033 },
8034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008035 {
8036 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008037 .name = "W29C020(C)/W29C022",
Urja Rannikko161b8852009-06-05 08:47:37 +00008038 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008039 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008040 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008041 .total_size = 256,
8042 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008043 .feature_bits = FEATURE_LONG_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008044 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008045 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008046 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008047 .block_erasers =
8048 {
8049 {
8050 .eraseblocks = { {256 * 1024, 1} },
8051 .block_erase = erase_chip_block_jedec,
8052 }
8053 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008054 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008055 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008056 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008057 },
8058
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008059 {
8060 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008061 .name = "W29C040/P",
Urja Rannikko161b8852009-06-05 08:47:37 +00008062 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008063 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008064 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008065 .total_size = 512,
8066 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00008067 .feature_bits = FEATURE_LONG_RESET,
8068 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008069 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008070 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008071 .block_erasers =
8072 {
8073 {
8074 .eraseblocks = { {512 * 1024, 1} },
8075 .block_erase = erase_chip_block_jedec,
8076 }
8077 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008078 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008079 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008080 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008081 },
8082
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008083 {
8084 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008085 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00008086 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008087 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008088 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008089 .total_size = 128,
8090 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008091 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008092 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008093 .probe = probe_w29ee011,
Paul Menzelc07a41c2011-06-19 17:23:55 +00008094 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008095 .block_erasers =
8096 {
8097 {
8098 .eraseblocks = { {128 * 1024, 1} },
8099 .block_erase = erase_chip_block_jedec,
8100 }
8101 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008102 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008103 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008104 },
8105
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008106 {
8107 .vendor = "Winbond",
Michael Karcher19e0aac2011-03-06 17:58:05 +00008108 .name = "W39L040",
8109 .bustype = CHIP_BUSTYPE_PARALLEL,
8110 .manufacture_id = WINBOND_ID,
8111 .model_id = WINBOND_W39L040,
8112 .total_size = 512,
8113 .page_size = 64 * 1024,
8114 .feature_bits = FEATURE_EITHER_RESET,
8115 .tested = TEST_OK_PR,
8116 .probe = probe_jedec,
8117 .probe_timing = 10,
8118 .block_erasers =
8119 {
8120 {
8121 .eraseblocks = { {4 * 1024, 128} },
8122 .block_erase = erase_block_jedec,
8123 }, {
8124 .eraseblocks = { {64 * 1024, 8} },
8125 .block_erase = erase_sector_jedec,
8126 }, {
8127 .eraseblocks = { {512 * 1024, 1} },
8128 .block_erase = erase_chip_block_jedec,
8129 }
8130 },
8131 .printlock = printlock_w39l040,
8132 .write = write_jedec_1,
8133 .read = read_memmapped,
8134 },
8135
8136 {
8137 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008138 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008139 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008140 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008141 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008142 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008143 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008144 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008145 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008146 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008147 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008148 .block_erasers =
8149 {
8150 {
8151 .eraseblocks = { {64 * 1024, 8} },
8152 .block_erase = erase_sector_jedec,
8153 }, {
8154 .eraseblocks = { {512 * 1024, 1} },
8155 .block_erase = erase_chip_block_jedec,
8156 }
8157 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008158 .printlock = printlock_w39v040a,
Sean Nelson35727f72010-01-28 23:55:12 +00008159 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008160 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008161 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008162 },
8163
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008164 {
8165 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008166 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008167 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008168 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008169 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008170 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008171 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008172 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008173 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008174 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008175 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008176 .block_erasers =
8177 {
8178 {
8179 .eraseblocks = { {64 * 1024, 8} },
8180 .block_erase = erase_sector_jedec,
8181 }, {
8182 .eraseblocks = { {512 * 1024, 1} },
8183 .block_erase = erase_chip_block_jedec,
8184 }
8185 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008186 .printlock = printlock_w39v040b,
Sean Nelson35727f72010-01-28 23:55:12 +00008187 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008188 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008189 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008190 },
8191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008192 {
8193 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008194 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008195 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008196 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008197 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008198 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008199 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008200 .feature_bits = FEATURE_EITHER_RESET,
8201 .tested = TEST_UNTESTED,
8202 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008203 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008204 .block_erasers =
8205 {
8206 {
8207 .eraseblocks = { {64 * 1024, 8} },
8208 .block_erase = erase_sector_jedec,
8209 }, {
8210 .eraseblocks = { {512 * 1024, 1} },
8211 .block_erase = erase_chip_block_jedec,
8212 }
8213 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00008214 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00008215 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008216 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008217 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008218 },
8219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008220 {
8221 .vendor = "Winbond",
8222 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008223 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008224 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008225 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008226 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008227 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00008228 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008229 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008230 .probe = probe_jedec,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008231 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008232 .block_erasers =
8233 {
8234 {
8235 .eraseblocks = { {4 * 1024, 128} },
8236 .block_erase = erase_block_jedec,
8237 }, {
8238 .eraseblocks = { {64 * 1024, 8} },
8239 .block_erase = erase_sector_jedec,
8240 }, {
8241 .eraseblocks = { {512 * 1024, 1} },
8242 .block_erase = erase_chip_block_jedec,
8243 }
8244 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008245 .printlock = printlock_w39v040fa,
Michael Karcherc9b63412010-05-30 16:55:18 +00008246 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00008247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008248 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008249 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008250 },
8251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008252 {
8253 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008254 .name = "W39V040FB",
8255 .bustype = CHIP_BUSTYPE_FWH,
8256 .manufacture_id = WINBOND_ID,
8257 .model_id = WINBOND_W39V040B,
8258 .total_size = 512,
8259 .page_size = 64 * 1024,
8260 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00008261 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008262 .probe = probe_jedec,
8263 .probe_timing = 10,
8264 .block_erasers =
8265 {
8266 {
8267 .eraseblocks = { {64 * 1024, 8} },
8268 .block_erase = erase_sector_jedec,
8269 }, {
8270 .eraseblocks = { {512 * 1024, 1} },
8271 .block_erase = erase_chip_block_jedec,
8272 }
8273 },
8274 .printlock = printlock_w39v040fb,
Idwer Volleringecc67072010-12-26 23:55:12 +00008275 .unlock = unlock_w39v040fb,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008276 .write = write_jedec_1,
8277 .read = read_memmapped,
8278 },
8279
8280 {
8281 .vendor = "Winbond",
8282 .name = "W39V040FC",
8283 .bustype = CHIP_BUSTYPE_FWH,
8284 .manufacture_id = WINBOND_ID,
8285 .model_id = WINBOND_W39V040C,
8286 .total_size = 512,
8287 .page_size = 64 * 1024,
8288 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
8289 .tested = TEST_UNTESTED,
8290 .probe = probe_jedec,
8291 .probe_timing = 10,
8292 .block_erasers =
8293 {
8294 {
8295 .eraseblocks = { {64 * 1024, 8} },
8296 .block_erase = erase_sector_jedec,
8297 }, {
8298 .eraseblocks = { {512 * 1024, 1} },
8299 .block_erase = erase_chip_block_jedec,
8300 }
8301 },
8302 .printlock = printlock_w39v040fc,
8303 .write = write_jedec_1,
8304 .read = read_memmapped,
8305 },
8306
8307 {
8308 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008309 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008310 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008311 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008312 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008313 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00008314 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008315 .feature_bits = FEATURE_EITHER_RESET,
8316 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008317 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008318 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008319 .block_erasers =
8320 {
8321 {
8322 .eraseblocks = { {64 * 1024, 16} },
8323 .block_erase = erase_sector_jedec,
8324 }, {
8325 .eraseblocks = { {1024 * 1024, 1} },
8326 .block_erase = erase_chip_block_jedec,
8327 }
8328 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008329 .printlock = printlock_w39v080a,
Sean Nelson35727f72010-01-28 23:55:12 +00008330 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008331 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008332 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008333 },
8334
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008335 {
8336 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008337 .name = "W49F002U/N",
Urja Rannikko038a3122009-06-28 19:19:25 +00008338 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008339 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008340 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008341 .total_size = 256,
8342 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008343 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008344 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008345 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008346 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008347 .block_erasers =
8348 {
8349 {
8350 .eraseblocks = {
8351 {128 * 1024, 1},
8352 {96 * 1024, 1},
8353 {8 * 1024, 2},
8354 {16 * 1024, 1},
8355 },
8356 .block_erase = erase_sector_jedec,
8357 }, {
8358 .eraseblocks = { {256 * 1024, 1} },
8359 .block_erase = erase_chip_block_jedec,
8360 }
8361 },
Sean Nelson35727f72010-01-28 23:55:12 +00008362 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008363 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008364 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008365 },
8366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008367 {
8368 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00008369 .name = "W49F020",
8370 .bustype = CHIP_BUSTYPE_PARALLEL,
8371 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008372 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00008373 .total_size = 256,
8374 .page_size = 128,
8375 .feature_bits = FEATURE_EITHER_RESET,
8376 .tested = TEST_OK_PROBE,
8377 .probe = probe_jedec,
8378 .probe_timing = 10,
8379 .block_erasers =
8380 {
8381 {
8382 .eraseblocks = { {256 * 1024, 1} },
8383 .block_erase = erase_chip_block_jedec,
8384 }
8385 },
8386 .write = write_jedec_1,
8387 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008388 .voltage = {4500, 5500},
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00008389 },
8390
8391 {
8392 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008393 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008394 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008395 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008396 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008397 .total_size = 256,
8398 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008399 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008400 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008401 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008402 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008403 .block_erasers =
8404 {
8405 {
8406 .eraseblocks = {
8407 {64 * 1024, 3},
8408 {32 * 1024, 1},
8409 {8 * 1024, 2},
8410 {16 * 1024, 1},
8411 },
8412 .block_erase = erase_sector_jedec,
8413 }, {
8414 .eraseblocks = { {256 * 1024, 1} },
8415 .block_erase = erase_chip_block_jedec,
8416 }
8417 },
Sean Nelson35727f72010-01-28 23:55:12 +00008418 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008419 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008420 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008421 },
8422
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008423 {
8424 .vendor = "Winbond",
8425 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008426 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008427 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008428 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008429 .total_size = 256,
8430 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008431 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008432 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008433 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008434 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008435 .block_erasers =
8436 {
8437 {
8438 .eraseblocks = {
8439 {64 * 1024, 3},
8440 {32 * 1024, 1},
8441 {8 * 1024, 2},
8442 {16 * 1024, 1},
8443 },
8444 .block_erase = erase_sector_jedec,
8445 }, {
8446 .eraseblocks = { {256 * 1024, 1} },
8447 .block_erase = erase_chip_block_jedec,
8448 }
8449 },
Sean Nelson35727f72010-01-28 23:55:12 +00008450 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008451 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008452 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008453 },
8454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008455 {
8456 .vendor = "Winbond",
8457 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008458 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008459 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008460 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008461 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00008462 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008463 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008464 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00008465 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008466 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008467 .block_erasers =
8468 {
8469 {
8470 .eraseblocks = { {64 * 1024, 16}, },
8471 .block_erase = erase_sector_jedec,
8472 }, {
8473 .eraseblocks = { {1024 * 1024, 1} },
8474 .block_erase = erase_chip_block_jedec,
8475 }
8476 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008477 .printlock = printlock_w39v080fa,
8478 .unlock = unlock_w39v080fa,
Sean Nelson35727f72010-01-28 23:55:12 +00008479 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008480 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008481 .voltage = {3000, 3600}, /* 12 V fast program mode */
FENG yu ningff692fb2008-12-08 18:15:10 +00008482 },
8483
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008484 {
8485 .vendor = "Winbond",
8486 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008487 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008488 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008489 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008490 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008491 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008492 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008493 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00008494 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008495 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008496 .block_erasers =
8497 {
8498 {
8499 .eraseblocks = { {64 * 1024, 8}, },
8500 .block_erase = erase_sector_jedec,
8501 }, {
8502 .eraseblocks = { {512 * 1024, 1} },
8503 .block_erase = erase_chip_block_jedec,
8504 }
8505 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008506 .printlock = printlock_w39v080fa_dual,
Sean Nelson35727f72010-01-28 23:55:12 +00008507 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008508 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008509 },
8510
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008511 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00008512 .vendor = "AMIC",
8513 .name = "unknown AMIC SPI chip",
8514 .bustype = CHIP_BUSTYPE_SPI,
8515 .manufacture_id = AMIC_ID,
8516 .model_id = GENERIC_DEVICE_ID,
8517 .total_size = 0,
8518 .page_size = 256,
8519 .tested = TEST_BAD_PREW,
8520 .probe = probe_spi_rdid4,
8521 .probe_timing = TIMING_ZERO,
8522 .write = NULL,
8523 .read = NULL,
8524 },
8525
8526 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008527 .vendor = "Atmel",
8528 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008529 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008530 .manufacture_id = ATMEL_ID,
8531 .model_id = GENERIC_DEVICE_ID,
8532 .total_size = 0,
8533 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008534 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008535 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008536 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008537 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008538 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008539 },
8540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008541 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00008542 .vendor = "Eon",
8543 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008544 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008545 .manufacture_id = EON_ID_NOPREFIX,
8546 .model_id = GENERIC_DEVICE_ID,
8547 .total_size = 0,
8548 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008549 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008550 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008551 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008552 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008553 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008554 },
8555
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008556 {
8557 .vendor = "Macronix",
8558 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008559 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00008560 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008561 .model_id = GENERIC_DEVICE_ID,
8562 .total_size = 0,
8563 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008564 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008565 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008566 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008567 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008568 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008569 },
8570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008571 {
8572 .vendor = "PMC",
8573 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008574 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008575 .manufacture_id = PMC_ID,
8576 .model_id = GENERIC_DEVICE_ID,
8577 .total_size = 0,
8578 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008579 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008580 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008581 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008582 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008583 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008584 },
8585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008586 {
8587 .vendor = "SST",
8588 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008590 .manufacture_id = SST_ID,
8591 .model_id = GENERIC_DEVICE_ID,
8592 .total_size = 0,
8593 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008594 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008595 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008596 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008597 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008598 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008599 },
8600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008601 {
8602 .vendor = "ST",
8603 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008605 .manufacture_id = ST_ID,
8606 .model_id = GENERIC_DEVICE_ID,
8607 .total_size = 0,
8608 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008609 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008611 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008612 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008613 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008614 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00008615
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008616 {
Sean Nelson118e1d62009-11-24 02:08:11 +00008617 .vendor = "Sanyo",
8618 .name = "unknown Sanyo SPI chip",
8619 .bustype = CHIP_BUSTYPE_SPI,
8620 .manufacture_id = SANYO_ID,
8621 .model_id = GENERIC_DEVICE_ID,
8622 .total_size = 0,
8623 .page_size = 256,
8624 .tested = TEST_BAD_PREW,
8625 .probe = probe_spi_rdid,
8626 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00008627 .write = NULL,
8628 .read = NULL,
8629 },
8630
8631 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008632 .vendor = "Generic",
8633 .name = "unknown SPI chip (RDID)",
8634 .bustype = CHIP_BUSTYPE_SPI,
8635 .manufacture_id = GENERIC_MANUF_ID,
8636 .model_id = GENERIC_DEVICE_ID,
8637 .total_size = 0,
8638 .page_size = 256,
8639 .tested = TEST_BAD_PREW,
8640 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008641 .write = NULL,
8642 },
8643 {
8644 .vendor = "Generic",
8645 .name = "unknown SPI chip (REMS)",
8646 .bustype = CHIP_BUSTYPE_SPI,
8647 .manufacture_id = GENERIC_MANUF_ID,
8648 .model_id = GENERIC_DEVICE_ID,
8649 .total_size = 0,
8650 .page_size = 256,
8651 .tested = TEST_BAD_PREW,
8652 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008653 .write = NULL,
8654 },
8655
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008656 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00008657};