blob: c60a7fb4e76a4280797f0ea3eb86fda8bbecb554 [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 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000278 .vendor = "AMIC",
279 .name = "A25L05PT",
280 .bustype = CHIP_BUSTYPE_SPI,
281 .manufacture_id = AMIC_ID,
282 .model_id = AMIC_A25L05PT,
283 .total_size = 64,
284 .page_size = 256,
285 .tested = TEST_UNTESTED,
286 .probe = probe_spi_rdid4,
287 .probe_timing = TIMING_ZERO,
288 .block_erasers =
289 {
290 {
291 .eraseblocks = {
292 {32 * 1024, 1},
293 {16 * 1024, 1},
294 {8 * 1024, 1},
295 {4 * 1024, 2},
296 },
297 .block_erase = spi_block_erase_d8,
298 }, {
299 .eraseblocks = { {64 * 1024, 1} },
300 .block_erase = spi_block_erase_c7,
301 }
302 },
303 .unlock = spi_disable_blockprotect,
304 .write = spi_chip_write_256,
305 .read = spi_chip_read,
306 },
307
308 {
309 .vendor = "AMIC",
310 .name = "A25L05PU",
311 .bustype = CHIP_BUSTYPE_SPI,
312 .manufacture_id = AMIC_ID,
313 .model_id = AMIC_A25L05PU,
314 .total_size = 64,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid4,
318 .probe_timing = TIMING_ZERO,
319 .block_erasers =
320 {
321 {
322 .eraseblocks = {
323 {4 * 1024, 2},
324 {8 * 1024, 1},
325 {16 * 1024, 1},
326 {32 * 1024, 1},
327 },
328 .block_erase = spi_block_erase_d8,
329 }, {
330 .eraseblocks = { {64 * 1024, 1} },
331 .block_erase = spi_block_erase_c7,
332 }
333 },
334 .unlock = spi_disable_blockprotect,
335 .write = spi_chip_write_256,
336 .read = spi_chip_read,
337 },
338
339 {
340 .vendor = "AMIC",
341 .name = "A25L10PT",
342 .bustype = CHIP_BUSTYPE_SPI,
343 .manufacture_id = AMIC_ID,
344 .model_id = AMIC_A25L10PT,
345 .total_size = 128,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid4,
349 .probe_timing = TIMING_ZERO,
350 .block_erasers =
351 {
352 {
353 .eraseblocks = {
354 {64 * 1024, 1},
355 {32 * 1024, 1},
356 {16 * 1024, 1},
357 {8 * 1024, 1},
358 {4 * 1024, 2},
359 },
360 .block_erase = spi_block_erase_d8,
361 }, {
362 .eraseblocks = { {128 * 1024, 1} },
363 .block_erase = spi_block_erase_c7,
364 }
365 },
366 .unlock = spi_disable_blockprotect,
367 .write = spi_chip_write_256,
368 .read = spi_chip_read,
369 },
370
371 {
372 .vendor = "AMIC",
373 .name = "A25L10PU",
374 .bustype = CHIP_BUSTYPE_SPI,
375 .manufacture_id = AMIC_ID,
376 .model_id = AMIC_A25L10PU,
377 .total_size = 128,
378 .page_size = 256,
379 .tested = TEST_UNTESTED,
380 .probe = probe_spi_rdid4,
381 .probe_timing = TIMING_ZERO,
382 .block_erasers =
383 {
384 {
385 .eraseblocks = {
386 {4 * 1024, 2},
387 {8 * 1024, 1},
388 {16 * 1024, 1},
389 {32 * 1024, 1},
390 {64 * 1024, 1},
391 },
392 .block_erase = spi_block_erase_d8,
393 }, {
394 .eraseblocks = { {128 * 1024, 1} },
395 .block_erase = spi_block_erase_c7,
396 }
397 },
398 .unlock = spi_disable_blockprotect,
399 .write = spi_chip_write_256,
400 .read = spi_chip_read,
401 },
402
403 {
404 .vendor = "AMIC",
405 .name = "A25L20PT",
406 .bustype = CHIP_BUSTYPE_SPI,
407 .manufacture_id = AMIC_ID,
408 .model_id = AMIC_A25L20PT,
409 .total_size = 256,
410 .page_size = 256,
411 .tested = TEST_UNTESTED,
412 .probe = probe_spi_rdid4,
413 .probe_timing = TIMING_ZERO,
414 .block_erasers =
415 {
416 {
417 .eraseblocks = {
418 {64 * 1024, 3},
419 {32 * 1024, 1},
420 {16 * 1024, 1},
421 {8 * 1024, 1},
422 {4 * 1024, 2},
423 },
424 .block_erase = spi_block_erase_d8,
425 }, {
426 .eraseblocks = { {256 * 1024, 1} },
427 .block_erase = spi_block_erase_c7,
428 }
429 },
430 .unlock = spi_disable_blockprotect,
431 .write = spi_chip_write_256,
432 .read = spi_chip_read,
433 },
434
435 {
436 .vendor = "AMIC",
437 .name = "A25L20PU",
438 .bustype = CHIP_BUSTYPE_SPI,
439 .manufacture_id = AMIC_ID,
440 .model_id = AMIC_A25L20PU,
441 .total_size = 256,
442 .page_size = 256,
443 .tested = TEST_UNTESTED,
444 .probe = probe_spi_rdid4,
445 .probe_timing = TIMING_ZERO,
446 .block_erasers =
447 {
448 {
449 .eraseblocks = {
450 {4 * 1024, 2},
451 {8 * 1024, 1},
452 {16 * 1024, 1},
453 {32 * 1024, 1},
454 {64 * 1024, 3},
455 },
456 .block_erase = spi_block_erase_d8,
457 }, {
458 .eraseblocks = { {256 * 1024, 1} },
459 .block_erase = spi_block_erase_c7,
460 }
461 },
462 .unlock = spi_disable_blockprotect,
463 .write = spi_chip_write_256,
464 .read = spi_chip_read,
465 },
466
467 /* The A25L40P{T,U} chips are distinguished by their
468 * erase block layouts, but without any distinction in RDID.
469 * This inexplicable quirk was verified by Rudolf Marek
470 * and discussed on the flashrom mailing list on 2010-07-12.
471 */
472 {
473 .vendor = "AMIC",
474 .name = "A25L40PT",
475 .bustype = CHIP_BUSTYPE_SPI,
476 .manufacture_id = AMIC_ID,
477 .model_id = AMIC_A25L40PT,
478 .total_size = 512,
479 .page_size = 256,
480 .tested = TEST_OK_PRW,
481 .probe = probe_spi_rdid4,
482 .probe_timing = TIMING_ZERO,
483 .block_erasers =
484 {
485 {
486 .eraseblocks = {
487 {64 * 1024, 7},
488 {32 * 1024, 1},
489 {16 * 1024, 1},
490 {8 * 1024, 1},
491 {4 * 1024, 2},
492 },
493 .block_erase = spi_block_erase_d8,
494 }, {
495 .eraseblocks = { {512 * 1024, 1} },
496 .block_erase = spi_block_erase_c7,
497 }
498 },
499 .unlock = spi_disable_blockprotect,
500 .write = spi_chip_write_256,
501 .read = spi_chip_read,
502 },
503
504 {
505 .vendor = "AMIC",
506 .name = "A25L40PU",
507 .bustype = CHIP_BUSTYPE_SPI,
508 .manufacture_id = AMIC_ID,
509 .model_id = AMIC_A25L40PU,
510 .total_size = 512,
511 .page_size = 256,
512 .tested = TEST_OK_PRW,
513 .probe = probe_spi_rdid4,
514 .probe_timing = TIMING_ZERO,
515 .block_erasers =
516 {
517 {
518 .eraseblocks = {
519 {4 * 1024, 2},
520 {8 * 1024, 1},
521 {16 * 1024, 1},
522 {32 * 1024, 1},
523 {64 * 1024, 7},
524 },
525 .block_erase = spi_block_erase_d8,
526 }, {
527 .eraseblocks = { {512 * 1024, 1} },
528 .block_erase = spi_block_erase_c7,
529 }
530 },
531 .unlock = spi_disable_blockprotect,
532 .write = spi_chip_write_256,
533 .read = spi_chip_read,
534 },
535
536 {
537 .vendor = "AMIC",
538 .name = "A25L80P",
539 .bustype = CHIP_BUSTYPE_SPI,
540 .manufacture_id = AMIC_ID,
541 .model_id = AMIC_A25L80P,
542 .total_size = 1024,
543 .page_size = 256,
544 .tested = TEST_OK_PREW,
545 .probe = probe_spi_rdid4,
546 .probe_timing = TIMING_ZERO,
547 .block_erasers =
548 {
549 {
550 .eraseblocks = {
551 {4 * 1024, 2},
552 {8 * 1024, 1},
553 {16 * 1024, 1},
554 {32 * 1024, 1},
555 {64 * 1024, 15},
556 },
557 .block_erase = spi_block_erase_d8,
558 }, {
559 .eraseblocks = { {1024 * 1024, 1} },
560 .block_erase = spi_block_erase_c7,
561 }
562 },
563 .unlock = spi_disable_blockprotect,
564 .write = spi_chip_write_256,
565 .read = spi_chip_read,
566 },
567
568 {
569 .vendor = "AMIC",
570 .name = "A25L16PT",
571 .bustype = CHIP_BUSTYPE_SPI,
572 .manufacture_id = AMIC_ID,
573 .model_id = AMIC_A25L16PT,
574 .total_size = 2048,
575 .page_size = 256,
576 .tested = TEST_UNTESTED,
577 .probe = probe_spi_rdid4,
578 .probe_timing = TIMING_ZERO,
579 .block_erasers =
580 {
581 {
582 .eraseblocks = {
583 {64 * 1024, 31},
584 {32 * 1024, 1},
585 {16 * 1024, 1},
586 {8 * 1024, 1},
587 {4 * 1024, 2},
588 },
589 .block_erase = spi_block_erase_d8,
590 }, {
591 .eraseblocks = { {2048 * 1024, 1} },
592 .block_erase = spi_block_erase_60,
593 }, {
594 .eraseblocks = { {2048 * 1024, 1} },
595 .block_erase = spi_block_erase_c7,
596 }
597 },
598 .unlock = spi_disable_blockprotect,
599 .write = spi_chip_write_256,
600 .read = spi_chip_read,
601 },
602
603 {
604 .vendor = "AMIC",
605 .name = "A25L16PU",
606 .bustype = CHIP_BUSTYPE_SPI,
607 .manufacture_id = AMIC_ID,
608 .model_id = AMIC_A25L16PU,
609 .total_size = 2048,
610 .page_size = 256,
611 .tested = TEST_OK_PRW,
612 .probe = probe_spi_rdid4,
613 .probe_timing = TIMING_ZERO,
614 .block_erasers =
615 {
616 {
617 .eraseblocks = {
618 {4 * 1024, 2},
619 {8 * 1024, 1},
620 {16 * 1024, 1},
621 {32 * 1024, 1},
622 {64 * 1024, 31},
623 },
624 .block_erase = spi_block_erase_d8,
625 }, {
626 .eraseblocks = { {2048 * 1024, 1} },
627 .block_erase = spi_block_erase_60,
628 }, {
629 .eraseblocks = { {2048 * 1024, 1} },
630 .block_erase = spi_block_erase_c7,
631 }
632 },
633 .unlock = spi_disable_blockprotect,
634 .write = spi_chip_write_256,
635 .read = spi_chip_read,
636 },
637
638 {
639 .vendor = "AMIC",
640 .name = "A29002B",
641 .bustype = CHIP_BUSTYPE_PARALLEL,
642 .manufacture_id = AMIC_ID_NOPREFIX,
643 .model_id = AMIC_A29002B,
644 .total_size = 256,
645 .page_size = 64 * 1024,
646 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
647 .tested = TEST_UNTESTED,
648 .probe = probe_jedec,
649 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
650 .block_erasers =
651 {
652 {
653 .eraseblocks = {
654 {16 * 1024, 1},
655 {8 * 1024, 2},
656 {32 * 1024, 1},
657 {64 * 1024, 3},
658 },
659 .block_erase = erase_sector_jedec,
660 }, {
661 .eraseblocks = { {256 * 1024, 1} },
662 .block_erase = erase_chip_block_jedec,
663 },
664 },
665 .write = write_jedec_1,
666 .read = read_memmapped,
667 },
668
669 {
670 .vendor = "AMIC",
671 .name = "A29002T",
672 .bustype = CHIP_BUSTYPE_PARALLEL,
673 .manufacture_id = AMIC_ID_NOPREFIX,
674 .model_id = AMIC_A29002T,
675 .total_size = 256,
676 .page_size = 64 * 1024,
677 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
678 .tested = TEST_OK_PRW,
679 .probe = probe_jedec,
680 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
681 .block_erasers =
682 {
683 {
684 .eraseblocks = {
685 {64 * 1024, 3},
686 {32 * 1024, 1},
687 {8 * 1024, 2},
688 {16 * 1024, 1},
689 },
690 .block_erase = erase_sector_jedec,
691 }, {
692 .eraseblocks = { {256 * 1024, 1} },
693 .block_erase = erase_chip_block_jedec,
694 },
695 },
696 .write = write_jedec_1,
697 .read = read_memmapped,
698 },
699
700 {
701 .vendor = "AMIC",
702 .name = "A29040B",
703 .bustype = CHIP_BUSTYPE_PARALLEL,
704 .manufacture_id = AMIC_ID_NOPREFIX,
705 .model_id = AMIC_A29040B,
706 .total_size = 512,
707 .page_size = 64 * 1024,
708 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
709 .tested = TEST_UNTESTED,
710 .probe = probe_jedec,
711 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
712 .block_erasers =
713 {
714 {
715 .eraseblocks = { {64 * 1024, 8} },
716 .block_erase = erase_sector_jedec,
717 }, {
718 .eraseblocks = { {512 * 1024, 1} },
719 .block_erase = erase_chip_block_jedec,
720 },
721 },
722 .write = write_jedec_1,
723 .read = read_memmapped,
724 },
725
726 {
727 .vendor = "AMIC",
728 .name = "A49LF040A",
729 .bustype = CHIP_BUSTYPE_LPC,
730 .manufacture_id = AMIC_ID_NOPREFIX,
731 .model_id = AMIC_A49LF040A,
732 .total_size = 512,
733 .page_size = 64 * 1024,
734 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
735 .tested = TEST_OK_PREW,
736 .probe = probe_jedec,
737 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
738 .block_erasers =
739 {
740 {
741 .eraseblocks = { {64 * 1024, 8} },
742 .block_erase = erase_block_jedec,
743 }, {
744 .eraseblocks = { {512 * 1024, 1} },
745 .block_erase = erase_chip_block_jedec,
746 }
747 },
748 .unlock = unlock_49fl00x,
749 .write = write_jedec_1,
750 .read = read_memmapped,
751 },
752
753 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000754 .vendor = "ASD",
755 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000756 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000757 .manufacture_id = ASD_ID,
758 .model_id = ASD_AE49F2008,
759 .total_size = 256,
760 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000761 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000762 .tested = TEST_UNTESTED,
763 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000764 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000765 .block_erasers =
766 {
767 {
768 .eraseblocks = {
769 {128 * 1024, 1},
770 {96 * 1024, 1},
771 {8 * 1024, 2},
772 {16 * 1024, 1},
773 },
774 .block_erase = erase_sector_jedec,
775 }, {
776 .eraseblocks = { {256 * 1024, 1} },
777 .block_erase = erase_chip_block_jedec,
778 }
779 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000780 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000782 },
783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000784 {
785 .vendor = "Atmel",
786 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000787 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 .manufacture_id = ATMEL_ID,
789 .model_id = AT_25DF021,
790 .total_size = 256,
791 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000792 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000796 .block_erasers =
797 {
798 {
799 .eraseblocks = { {4 * 1024, 64} },
800 .block_erase = spi_block_erase_20,
801 }, {
802 .eraseblocks = { {32 * 1024, 8} },
803 .block_erase = spi_block_erase_52,
804 }, {
805 .eraseblocks = { {64 * 1024, 4} },
806 .block_erase = spi_block_erase_d8,
807 }, {
808 .eraseblocks = { {256 * 1024, 1} },
809 .block_erase = spi_block_erase_60,
810 }, {
811 .eraseblocks = { {256 * 1024, 1} },
812 .block_erase = spi_block_erase_c7,
813 }
814 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000815 .printlock = spi_prettyprint_status_register_at25df,
816 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000817 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000818 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000819 },
820
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000821 {
822 .vendor = "Atmel",
823 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000824 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000825 .manufacture_id = ATMEL_ID,
826 .model_id = AT_25DF041A,
827 .total_size = 512,
828 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000829 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000830 .tested = TEST_UNTESTED,
831 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000832 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000833 .block_erasers =
834 {
835 {
836 .eraseblocks = { {4 * 1024, 128} },
837 .block_erase = spi_block_erase_20,
838 }, {
839 .eraseblocks = { {32 * 1024, 16} },
840 .block_erase = spi_block_erase_52,
841 }, {
842 .eraseblocks = { {64 * 1024, 8} },
843 .block_erase = spi_block_erase_d8,
844 }, {
845 .eraseblocks = { {512 * 1024, 1} },
846 .block_erase = spi_block_erase_60,
847 }, {
848 .eraseblocks = { {512 * 1024, 1} },
849 .block_erase = spi_block_erase_c7,
850 }
851 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000852 .printlock = spi_prettyprint_status_register_at25df,
853 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000854 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000855 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000856 },
857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000858 {
859 .vendor = "Atmel",
860 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000861 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000862 .manufacture_id = ATMEL_ID,
863 .model_id = AT_25DF081,
864 .total_size = 1024,
865 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000866 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000867 .tested = TEST_UNTESTED,
868 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000869 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000870 .block_erasers =
871 {
872 {
873 .eraseblocks = { {4 * 1024, 256} },
874 .block_erase = spi_block_erase_20,
875 }, {
876 .eraseblocks = { {32 * 1024, 32} },
877 .block_erase = spi_block_erase_52,
878 }, {
879 .eraseblocks = { {64 * 1024, 16} },
880 .block_erase = spi_block_erase_d8,
881 }, {
882 .eraseblocks = { {1024 * 1024, 1} },
883 .block_erase = spi_block_erase_60,
884 }, {
885 .eraseblocks = { {1024 * 1024, 1} },
886 .block_erase = spi_block_erase_c7,
887 }
888 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000889 .printlock = spi_prettyprint_status_register_at25df,
890 .unlock = spi_disable_blockprotect_at25df,
891 .write = spi_chip_write_256,
892 .read = spi_chip_read,
893 },
894
895 {
896 .vendor = "Atmel",
897 .name = "AT25DF081A",
898 .bustype = CHIP_BUSTYPE_SPI,
899 .manufacture_id = ATMEL_ID,
900 .model_id = AT_25DF081A,
901 .total_size = 1024,
902 .page_size = 256,
903 .feature_bits = FEATURE_WRSR_WREN,
904 .tested = TEST_UNTESTED,
905 .probe = probe_spi_rdid,
906 .probe_timing = TIMING_ZERO,
907 .block_erasers =
908 {
909 {
910 .eraseblocks = { {4 * 1024, 256} },
911 .block_erase = spi_block_erase_20,
912 }, {
913 .eraseblocks = { {32 * 1024, 32} },
914 .block_erase = spi_block_erase_52,
915 }, {
916 .eraseblocks = { {64 * 1024, 16} },
917 .block_erase = spi_block_erase_d8,
918 }, {
919 .eraseblocks = { {1024 * 1024, 1} },
920 .block_erase = spi_block_erase_60,
921 }, {
922 .eraseblocks = { {1024 * 1024, 1} },
923 .block_erase = spi_block_erase_c7,
924 }
925 },
926 .printlock = spi_prettyprint_status_register_at25df_sec,
927 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000928 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000930 },
931
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000932 {
933 .vendor = "Atmel",
934 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000935 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000936 .manufacture_id = ATMEL_ID,
937 .model_id = AT_25DF161,
938 .total_size = 2048,
939 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000940 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .tested = TEST_UNTESTED,
942 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000943 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000944 .block_erasers =
945 {
946 {
947 .eraseblocks = { {4 * 1024, 512} },
948 .block_erase = spi_block_erase_20,
949 }, {
950 .eraseblocks = { {32 * 1024, 64} },
951 .block_erase = spi_block_erase_52,
952 }, {
953 .eraseblocks = { {64 * 1024, 32} },
954 .block_erase = spi_block_erase_d8,
955 }, {
956 .eraseblocks = { {2 * 1024 * 1024, 1} },
957 .block_erase = spi_block_erase_60,
958 }, {
959 .eraseblocks = { {2 * 1024 * 1024, 1} },
960 .block_erase = spi_block_erase_c7,
961 }
962 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000963 .printlock = spi_prettyprint_status_register_at25df_sec,
964 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000965 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000966 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000967 },
968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000969 {
970 .vendor = "Atmel",
971 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000972 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000973 .manufacture_id = ATMEL_ID,
974 .model_id = AT_25DF321,
975 .total_size = 4096,
976 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +0000977 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson89187292009-12-23 12:02:55 +0000978 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000980 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000981 .block_erasers =
982 {
983 {
984 .eraseblocks = { {4 * 1024, 1024} },
985 .block_erase = spi_block_erase_20,
986 }, {
987 .eraseblocks = { {32 * 1024, 128} },
988 .block_erase = spi_block_erase_52,
989 }, {
990 .eraseblocks = { {64 * 1024, 64} },
991 .block_erase = spi_block_erase_d8,
992 }, {
993 .eraseblocks = { {4 * 1024 * 1024, 1} },
994 .block_erase = spi_block_erase_60,
995 }, {
996 .eraseblocks = { {4 * 1024 * 1024, 1} },
997 .block_erase = spi_block_erase_c7,
998 }
999 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001000 .printlock = spi_prettyprint_status_register_at25df,
1001 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001002 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001003 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001004 },
1005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 {
1007 .vendor = "Atmel",
1008 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001009 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001010 .manufacture_id = ATMEL_ID,
1011 .model_id = AT_25DF321A,
1012 .total_size = 4096,
1013 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001014 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001015 .tested = TEST_UNTESTED,
1016 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001017 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001018 .block_erasers =
1019 {
1020 {
1021 .eraseblocks = { {4 * 1024, 1024} },
1022 .block_erase = spi_block_erase_20,
1023 }, {
1024 .eraseblocks = { {32 * 1024, 128} },
1025 .block_erase = spi_block_erase_52,
1026 }, {
1027 .eraseblocks = { {64 * 1024, 64} },
1028 .block_erase = spi_block_erase_d8,
1029 }, {
1030 .eraseblocks = { {4 * 1024 * 1024, 1} },
1031 .block_erase = spi_block_erase_60,
1032 }, {
1033 .eraseblocks = { {4 * 1024 * 1024, 1} },
1034 .block_erase = spi_block_erase_c7,
1035 }
1036 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001037 .printlock = spi_prettyprint_status_register_at25df_sec,
1038 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001039 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001040 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001041 },
1042
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 {
1044 .vendor = "Atmel",
1045 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001046 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001047 .manufacture_id = ATMEL_ID,
1048 .model_id = AT_25DF641,
1049 .total_size = 8192,
1050 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001051 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001052 .tested = TEST_UNTESTED,
1053 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001054 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001055 .block_erasers =
1056 {
1057 {
1058 .eraseblocks = { {4 * 1024, 2048} },
1059 .block_erase = spi_block_erase_20,
1060 }, {
1061 .eraseblocks = { {32 * 1024, 256} },
1062 .block_erase = spi_block_erase_52,
1063 }, {
1064 .eraseblocks = { {64 * 1024, 128} },
1065 .block_erase = spi_block_erase_d8,
1066 }, {
1067 .eraseblocks = { {8 * 1024 * 1024, 1} },
1068 .block_erase = spi_block_erase_60,
1069 }, {
1070 .eraseblocks = { {8 * 1024 * 1024, 1} },
1071 .block_erase = spi_block_erase_c7,
1072 }
1073 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001074 .printlock = spi_prettyprint_status_register_at25df_sec,
1075 .unlock = spi_disable_blockprotect_at25df_sec,
1076 .write = spi_chip_write_256,
1077 .read = spi_chip_read,
1078 },
1079
1080 {
1081 .vendor = "Atmel",
1082 .name = "AT25DQ161",
1083 .bustype = CHIP_BUSTYPE_SPI,
1084 .manufacture_id = ATMEL_ID,
1085 .model_id = AT_25DQ161,
1086 .total_size = 2048,
1087 .page_size = 256,
1088 .feature_bits = FEATURE_WRSR_WREN,
1089 .tested = TEST_UNTESTED,
1090 .probe = probe_spi_rdid,
1091 .probe_timing = TIMING_ZERO,
1092 .block_erasers =
1093 {
1094 {
1095 .eraseblocks = { {4 * 1024, 512} },
1096 .block_erase = spi_block_erase_20,
1097 }, {
1098 .eraseblocks = { {32 * 1024, 64} },
1099 .block_erase = spi_block_erase_52,
1100 }, {
1101 .eraseblocks = { {64 * 1024, 32} },
1102 .block_erase = spi_block_erase_d8,
1103 }, {
1104 .eraseblocks = { {2 * 1024 * 1024, 1} },
1105 .block_erase = spi_block_erase_60,
1106 }, {
1107 .eraseblocks = { {2 * 1024 * 1024, 1} },
1108 .block_erase = spi_block_erase_c7,
1109 }
1110 },
1111 .printlock = spi_prettyprint_status_register_at25df_sec,
1112 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001113 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001115 },
1116
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001117 {
1118 .vendor = "Atmel",
1119 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001120 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001121 .manufacture_id = ATMEL_ID,
1122 .model_id = AT_25F512B,
1123 .total_size = 64,
1124 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001125 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001126 .tested = TEST_UNTESTED,
1127 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001128 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001129 .block_erasers =
1130 {
1131 {
1132 .eraseblocks = { {4 * 1024, 16} },
1133 .block_erase = spi_block_erase_20,
1134 }, {
1135 .eraseblocks = { {32 * 1024, 2} },
1136 .block_erase = spi_block_erase_52,
1137 }, {
1138 .eraseblocks = { {32 * 1024, 2} },
1139 .block_erase = spi_block_erase_d8,
1140 }, {
1141 .eraseblocks = { {64 * 1024, 1} },
1142 .block_erase = spi_block_erase_60,
1143 }, {
1144 .eraseblocks = { {64 * 1024, 1} },
1145 .block_erase = spi_block_erase_c7,
1146 }
1147 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001148 .printlock = spi_prettyprint_status_register_at25f,
1149 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001150 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001151 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001152 },
1153
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001154 {
1155 .vendor = "Atmel",
1156 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001157 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001158 .manufacture_id = ATMEL_ID,
1159 .model_id = AT_25FS010,
1160 .total_size = 128,
1161 .page_size = 256,
1162 .tested = TEST_UNTESTED,
1163 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001164 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001165 .block_erasers =
1166 {
1167 {
1168 .eraseblocks = { {4 * 1024, 32} },
1169 .block_erase = spi_block_erase_20,
1170 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001171 .eraseblocks = { {4 * 1024, 32} },
1172 .block_erase = spi_block_erase_d7,
1173 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001174 .eraseblocks = { {32 * 1024, 4} },
1175 .block_erase = spi_block_erase_52,
1176 }, {
1177 .eraseblocks = { {32 * 1024, 4} },
1178 .block_erase = spi_block_erase_d8,
1179 }, {
1180 .eraseblocks = { {128 * 1024, 1} },
1181 .block_erase = spi_block_erase_60,
1182 }, {
1183 .eraseblocks = { {128 * 1024, 1} },
1184 .block_erase = spi_block_erase_c7,
1185 }
1186 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001187 .printlock = spi_prettyprint_status_register_at25fs010,
1188 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001189 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001190 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001191 },
1192
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001193 {
1194 .vendor = "Atmel",
1195 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001196 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001197 .manufacture_id = ATMEL_ID,
1198 .model_id = AT_25FS040,
1199 .total_size = 512,
1200 .page_size = 256,
1201 .tested = TEST_UNTESTED,
1202 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001203 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001204 .block_erasers =
1205 {
1206 {
1207 .eraseblocks = { {4 * 1024, 128} },
1208 .block_erase = spi_block_erase_20,
1209 }, {
1210 .eraseblocks = { {64 * 1024, 8} },
1211 .block_erase = spi_block_erase_52,
1212 }, {
1213 .eraseblocks = { {64 * 1024, 8} },
1214 .block_erase = spi_block_erase_d8,
1215 }, {
1216 .eraseblocks = { {512 * 1024, 1} },
1217 .block_erase = spi_block_erase_60,
1218 }, {
1219 .eraseblocks = { {512 * 1024, 1} },
1220 .block_erase = spi_block_erase_c7,
1221 }
1222 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001223 .printlock = spi_prettyprint_status_register_at25fs040,
1224 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001225 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001226 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001227 },
1228
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001229 {
1230 .vendor = "Atmel",
1231 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001232 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001233 .manufacture_id = ATMEL_ID,
1234 .model_id = AT_26DF041,
1235 .total_size = 512,
1236 .page_size = 256,
1237 .tested = TEST_UNTESTED,
1238 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001239 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001240 .block_erasers =
1241 {
1242 {
1243 .eraseblocks = { {4 * 1024, 128} },
1244 .block_erase = spi_block_erase_20,
1245 }
1246 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001247 .write = NULL /* Incompatible Page write */,
1248 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001249 },
1250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001251 {
1252 .vendor = "Atmel",
1253 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001254 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001255 .manufacture_id = ATMEL_ID,
1256 .model_id = AT_26DF081A,
1257 .total_size = 1024,
1258 .page_size = 256,
1259 .tested = TEST_UNTESTED,
1260 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001261 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001262 .block_erasers =
1263 {
1264 {
1265 .eraseblocks = { {4 * 1024, 256} },
1266 .block_erase = spi_block_erase_20,
1267 }, {
1268 .eraseblocks = { {32 * 1024, 32} },
1269 .block_erase = spi_block_erase_52,
1270 }, {
1271 .eraseblocks = { {64 * 1024, 16} },
1272 .block_erase = spi_block_erase_d8,
1273 }, {
1274 .eraseblocks = { {1024 * 1024, 1} },
1275 .block_erase = spi_block_erase_60,
1276 }, {
1277 .eraseblocks = { {1024 * 1024, 1} },
1278 .block_erase = spi_block_erase_c7,
1279 }
1280 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001281 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001282 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001283 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001284 },
1285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001286 {
1287 .vendor = "Atmel",
1288 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001289 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001290 .manufacture_id = ATMEL_ID,
1291 .model_id = AT_26DF161,
1292 .total_size = 2048,
1293 .page_size = 256,
1294 .tested = TEST_UNTESTED,
1295 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001296 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001297 .block_erasers =
1298 {
1299 {
1300 .eraseblocks = { {4 * 1024, 512} },
1301 .block_erase = spi_block_erase_20,
1302 }, {
1303 .eraseblocks = { {32 * 1024, 64} },
1304 .block_erase = spi_block_erase_52,
1305 }, {
1306 .eraseblocks = { {64 * 1024, 32} },
1307 .block_erase = spi_block_erase_d8,
1308 }, {
1309 .eraseblocks = { {2 * 1024 * 1024, 1} },
1310 .block_erase = spi_block_erase_60,
1311 }, {
1312 .eraseblocks = { {2 * 1024 * 1024, 1} },
1313 .block_erase = spi_block_erase_c7,
1314 }
1315 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001316 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001317 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001318 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001319 },
1320
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001321 {
1322 .vendor = "Atmel",
1323 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001324 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001325 .manufacture_id = ATMEL_ID,
1326 .model_id = AT_26DF161A,
1327 .total_size = 2048,
1328 .page_size = 256,
1329 .tested = TEST_UNTESTED,
1330 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001331 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001332 .block_erasers =
1333 {
1334 {
1335 .eraseblocks = { {4 * 1024, 512} },
1336 .block_erase = spi_block_erase_20,
1337 }, {
1338 .eraseblocks = { {32 * 1024, 64} },
1339 .block_erase = spi_block_erase_52,
1340 }, {
1341 .eraseblocks = { {64 * 1024, 32} },
1342 .block_erase = spi_block_erase_d8,
1343 }, {
1344 .eraseblocks = { {2 * 1024 * 1024, 1} },
1345 .block_erase = spi_block_erase_60,
1346 }, {
1347 .eraseblocks = { {2 * 1024 * 1024, 1} },
1348 .block_erase = spi_block_erase_c7,
1349 }
1350 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001351 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001352 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001353 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001354 },
1355
1356 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001357 /*{
1358 .vendor = "Atmel",
1359 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001360 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001361 .manufacture_id = ATMEL_ID,
1362 .model_id = AT_26DF321,
1363 .total_size = 4096,
1364 .page_size = 256,
1365 .tested = TEST_UNTESTED,
1366 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001367 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001368 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001370 .read = spi_chip_read,
1371 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001373 {
1374 .vendor = "Atmel",
1375 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001377 .manufacture_id = ATMEL_ID,
1378 .model_id = AT_26F004,
1379 .total_size = 512,
1380 .page_size = 256,
1381 .tested = TEST_UNTESTED,
1382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001383 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001384 .block_erasers =
1385 {
1386 {
1387 .eraseblocks = { {4 * 1024, 128} },
1388 .block_erase = spi_block_erase_20,
1389 }, {
1390 .eraseblocks = { {32 * 1024, 16} },
1391 .block_erase = spi_block_erase_52,
1392 }, {
1393 .eraseblocks = { {64 * 1024, 8} },
1394 .block_erase = spi_block_erase_d8,
1395 }, {
1396 .eraseblocks = { {512 * 1024, 1} },
1397 .block_erase = spi_block_erase_60,
1398 }, {
1399 .eraseblocks = { {512 * 1024, 1} },
1400 .block_erase = spi_block_erase_c7,
1401 }
1402 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001403 .write = NULL /* Incompatible Page write */,
1404 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001405 },
1406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001407 {
1408 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001409 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001410 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001411 .manufacture_id = ATMEL_ID,
1412 .model_id = AT_29C512,
1413 .total_size = 64,
1414 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001415 .feature_bits = FEATURE_LONG_RESET,
1416 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001417 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001418 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001419 .block_erasers =
1420 {
1421 {
1422 .eraseblocks = { {64 * 1024, 1} },
1423 .block_erase = erase_chip_block_jedec,
1424 }
1425 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001426 .write = write_jedec,
1427 .read = read_memmapped,
1428
1429 },
1430
1431 {
1432 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001433 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001434 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001435 .manufacture_id = ATMEL_ID,
1436 .model_id = AT_29C010A,
1437 .total_size = 128,
1438 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001439 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00001440 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001441 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001442 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001443 .block_erasers =
1444 {
1445 {
1446 .eraseblocks = { {128 * 1024, 1} },
1447 .block_erase = erase_chip_block_jedec,
1448 }
1449 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001450 .write = write_jedec, /* FIXME */
1451 .read = read_memmapped,
1452 },
1453
1454 {
1455 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001456 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001457 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001458 .manufacture_id = ATMEL_ID,
1459 .model_id = AT_29C020,
1460 .total_size = 256,
1461 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001462 .feature_bits = FEATURE_LONG_RESET,
1463 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001464 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001465 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00001466 .block_erasers =
1467 {
1468 {
1469 .eraseblocks = { {256 * 1024, 1} },
1470 .block_erase = erase_chip_block_jedec,
1471 }
1472 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001473 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001474 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001475 },
1476
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001477 {
1478 .vendor = "Atmel",
1479 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001480 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001481 .manufacture_id = ATMEL_ID,
1482 .model_id = AT_29C040A,
1483 .total_size = 512,
1484 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001485 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001486 .tested = TEST_UNTESTED,
1487 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001488 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00001489 .block_erasers =
1490 {
1491 {
1492 .eraseblocks = { {512 * 1024, 1} },
1493 .block_erase = erase_chip_block_jedec,
1494 }
1495 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001496 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001497 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001498 },
1499
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001500 {
1501 .vendor = "Atmel",
1502 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001503 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001504 .manufacture_id = ATMEL_ID,
1505 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001506 .total_size = 16896 /* No power of two sizes */,
1507 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001508 .tested = TEST_BAD_READ,
1509 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001510 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001511 .write = NULL /* Incompatible Page write */,
1512 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001513 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001515 {
1516 .vendor = "Atmel",
1517 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001518 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001519 .manufacture_id = ATMEL_ID,
1520 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001521 .total_size = 128 /* Size can only be determined from status register */,
1522 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001523 .tested = TEST_BAD_READ,
1524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001525 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001526 .write = NULL,
1527 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001528 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001530 {
1531 .vendor = "Atmel",
1532 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001533 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001534 .manufacture_id = ATMEL_ID,
1535 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001536 .total_size = 256 /* Size can only be determined from status register */,
1537 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001538 .tested = TEST_BAD_READ,
1539 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001540 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001541 .write = NULL,
1542 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001543 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001545 {
1546 .vendor = "Atmel",
1547 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001548 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001549 .manufacture_id = ATMEL_ID,
1550 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001551 .total_size = 512 /* Size can only be determined from status register */,
1552 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001553 .tested = TEST_BAD_READ,
1554 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001555 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001556 .write = NULL,
1557 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001558 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001559
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001560 {
1561 .vendor = "Atmel",
1562 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001563 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001564 .manufacture_id = ATMEL_ID,
1565 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001566 .total_size = 1024 /* Size can only be determined from status register */,
1567 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001568 .tested = TEST_BAD_READ,
1569 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001570 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001571 .write = NULL,
1572 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001573 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001574
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001575 {
1576 .vendor = "Atmel",
1577 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001578 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001579 .manufacture_id = ATMEL_ID,
1580 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001581 .total_size = 2048 /* Size can only be determined from status register */,
1582 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001583 .tested = TEST_BAD_READ,
1584 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001585 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001586 .write = NULL,
1587 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001588 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001589
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001590 {
1591 .vendor = "Atmel",
1592 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001593 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001594 .manufacture_id = ATMEL_ID,
1595 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001596 .total_size = 4224 /* No power of two sizes */,
1597 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001598 .tested = TEST_BAD_READ,
1599 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001600 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001601 .write = NULL,
1602 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001603 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001605 {
1606 .vendor = "Atmel",
1607 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001608 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001609 .manufacture_id = ATMEL_ID,
1610 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001611 .total_size = 4096 /* Size can only be determined from status register */,
1612 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001613 .tested = TEST_BAD_READ,
1614 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001615 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001616 .write = NULL,
1617 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001618 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001619
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001620 {
1621 .vendor = "Atmel",
1622 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001623 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001624 .manufacture_id = ATMEL_ID,
1625 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001626 .total_size = 8192 /* Size can only be determined from status register */,
1627 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001628 .tested = TEST_BAD_READ,
1629 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001630 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001631 .write = NULL,
1632 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001633 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001635 {
1636 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001637 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001638 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001639 .manufacture_id = ATMEL_ID,
1640 .model_id = AT_49BV512,
1641 .total_size = 64,
1642 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001643 .feature_bits = FEATURE_EITHER_RESET,
1644 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001645 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001646 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001647 .block_erasers =
1648 {
1649 {
1650 .eraseblocks = { {64 * 1024, 1} },
1651 .block_erase = erase_chip_block_jedec,
1652 }
1653 },
Sean Nelson35727f72010-01-28 23:55:12 +00001654 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001655 .read = read_memmapped,
1656 },
1657
1658 {
1659 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001660 .name = "AT49F020",
1661 .bustype = CHIP_BUSTYPE_PARALLEL,
1662 .manufacture_id = ATMEL_ID,
1663 .model_id = AT_49F020,
1664 .total_size = 256,
1665 .page_size = 256,
1666 .feature_bits = FEATURE_EITHER_RESET,
1667 .tested = TEST_OK_PREW,
1668 .probe = probe_jedec,
1669 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1670 .block_erasers =
1671 {
1672 {
1673 .eraseblocks = { {256 * 1024, 1} },
1674 .block_erase = erase_chip_block_jedec,
1675 }
1676 },
1677 .write = write_jedec_1,
1678 .read = read_memmapped,
1679 },
1680
1681 {
1682 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001683 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001684 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001685 .manufacture_id = ATMEL_ID,
1686 .model_id = AT_49F002N,
1687 .total_size = 256,
1688 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001689 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001690 .tested = TEST_UNTESTED,
1691 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001692 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001693 .block_erasers =
1694 {
1695 {
1696 .eraseblocks = {
1697 {16 * 1024, 1},
1698 {8 * 1024, 2},
1699 {96 * 1024, 1},
1700 {128 * 1024, 1},
1701 },
1702 .block_erase = erase_sector_jedec,
1703 }, {
1704 .eraseblocks = { {256 * 1024, 1} },
1705 .block_erase = erase_chip_block_jedec,
1706 }
1707 },
Sean Nelson35727f72010-01-28 23:55:12 +00001708 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001709 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001710 },
1711
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001712 {
1713 .vendor = "Atmel",
1714 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001715 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001716 .manufacture_id = ATMEL_ID,
1717 .model_id = AT_49F002NT,
1718 .total_size = 256,
1719 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001720 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001721 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001722 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001723 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001724 .block_erasers =
1725 {
1726 {
1727 .eraseblocks = {
1728 {128 * 1024, 1},
1729 {96 * 1024, 1},
1730 {8 * 1024, 2},
1731 {16 * 1024, 1},
1732 },
1733 .block_erase = erase_sector_jedec,
1734 }, {
1735 .eraseblocks = { {256 * 1024, 1} },
1736 .block_erase = erase_chip_block_jedec,
1737 }
1738 },
Sean Nelson35727f72010-01-28 23:55:12 +00001739 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001740 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001741 },
1742
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001743 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001744 .vendor = "EMST",
1745 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001746 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001747 .manufacture_id = EMST_ID,
1748 .model_id = EMST_F49B002UA,
1749 .total_size = 256,
1750 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001751 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .tested = TEST_UNTESTED,
1753 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001754 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001755 .block_erasers =
1756 {
1757 {
1758 .eraseblocks = {
1759 {128 * 1024, 1},
1760 {96 * 1024, 1},
1761 {8 * 1024, 2},
1762 {16 * 1024, 1},
1763 },
1764 .block_erase = erase_sector_jedec,
1765 }, {
1766 .eraseblocks = { {256 * 1024, 1} },
1767 .block_erase = erase_chip_block_jedec,
1768 }
1769 },
Sean Nelson35727f72010-01-28 23:55:12 +00001770 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001771 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001772 },
1773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00001775 .vendor = "EMST",
1776 .name = "F25L008A",
1777 .bustype = CHIP_BUSTYPE_SPI,
1778 .manufacture_id = EMST_ID,
1779 .model_id = EMST_F25L008A,
1780 .total_size = 1024,
1781 .page_size = 256,
1782 .tested = TEST_UNTESTED,
1783 .probe = probe_spi_rdid,
1784 .probe_timing = TIMING_ZERO,
1785 .block_erasers =
1786 {
1787 {
1788 .eraseblocks = { {4 * 1024, 256} },
1789 .block_erase = spi_block_erase_20,
1790 }, {
1791 .eraseblocks = { {64 * 1024, 16} },
1792 .block_erase = spi_block_erase_d8,
1793 }, {
1794 .eraseblocks = { {1024 * 1024, 1} },
1795 .block_erase = spi_block_erase_60,
1796 }, {
1797 .eraseblocks = { {1024 * 1024, 1} },
1798 .block_erase = spi_block_erase_c7,
1799 }
1800 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001801 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00001802 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00001803 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00001804 },
1805
1806 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001807 .vendor = "Eon",
1808 .name = "EN25B05",
1809 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001810 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001811 .model_id = EN_25B05,
1812 .total_size = 64,
1813 .page_size = 256,
1814 .tested = TEST_UNTESTED,
1815 .probe = probe_spi_rdid,
1816 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001817 .block_erasers =
1818 {
1819 {
1820 .eraseblocks = {
1821 {4 * 1024, 2},
1822 {8 * 1024, 1},
1823 {16 * 1024, 1},
1824 {32 * 1024, 1},
1825 },
1826 .block_erase = spi_block_erase_d8,
1827 }, {
1828 .eraseblocks = { {64 * 1024, 1} },
1829 .block_erase = spi_block_erase_c7,
1830 }
1831 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001832 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001833 .write = spi_chip_write_256,
1834 .read = spi_chip_read,
1835 },
1836
1837 {
1838 .vendor = "Eon",
1839 .name = "EN25B05T",
1840 .bustype = CHIP_BUSTYPE_SPI,
1841 .manufacture_id = EON_ID_NOPREFIX,
1842 .model_id = EN_25B05,
1843 .total_size = 64,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
1847 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = {
1852 {32 * 1024, 1},
1853 {16 * 1024, 1},
1854 {8 * 1024, 1},
1855 {4 * 1024, 2},
1856 },
1857 .block_erase = spi_block_erase_d8,
1858 }, {
1859 .eraseblocks = { {64 * 1024, 1} },
1860 .block_erase = spi_block_erase_c7,
1861 }
1862 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001863 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001864 .write = spi_chip_write_256,
1865 .read = spi_chip_read,
1866 },
1867
1868 {
1869 .vendor = "Eon",
1870 .name = "EN25B10",
1871 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001872 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001873 .model_id = EN_25B10,
1874 .total_size = 128,
1875 .page_size = 256,
1876 .tested = TEST_UNTESTED,
1877 .probe = probe_spi_rdid,
1878 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001879 .block_erasers =
1880 {
1881 {
1882 .eraseblocks = {
1883 {4 * 1024, 2},
1884 {8 * 1024, 1},
1885 {16 * 1024, 1},
1886 {32 * 1024, 3},
1887 },
1888 .block_erase = spi_block_erase_d8,
1889 }, {
1890 .eraseblocks = { {128 * 1024, 1} },
1891 .block_erase = spi_block_erase_c7,
1892 }
1893 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001894 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001895 .write = spi_chip_write_256,
1896 .read = spi_chip_read,
1897 },
1898
1899 {
1900 .vendor = "Eon",
1901 .name = "EN25B10T",
1902 .bustype = CHIP_BUSTYPE_SPI,
1903 .manufacture_id = EON_ID_NOPREFIX,
1904 .model_id = EN_25B10,
1905 .total_size = 128,
1906 .page_size = 256,
1907 .tested = TEST_UNTESTED,
1908 .probe = probe_spi_rdid,
1909 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001910 .block_erasers =
1911 {
1912 {
1913 .eraseblocks = {
1914 {32 * 1024, 3},
1915 {16 * 1024, 1},
1916 {8 * 1024, 1},
1917 {4 * 1024, 2},
1918 },
1919 .block_erase = spi_block_erase_d8,
1920 }, {
1921 .eraseblocks = { {128 * 1024, 1} },
1922 .block_erase = spi_block_erase_c7,
1923 }
1924 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001925 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001926 .write = spi_chip_write_256,
1927 .read = spi_chip_read,
1928 },
1929
1930 {
1931 .vendor = "Eon",
1932 .name = "EN25B20",
1933 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001934 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001935 .model_id = EN_25B20,
1936 .total_size = 256,
1937 .page_size = 256,
1938 .tested = TEST_UNTESTED,
1939 .probe = probe_spi_rdid,
1940 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001941 .block_erasers =
1942 {
1943 {
1944 .eraseblocks = {
1945 {4 * 1024, 2},
1946 {8 * 1024, 1},
1947 {16 * 1024, 1},
1948 {32 * 1024, 1},
1949 {64 * 1024, 3}
1950 },
1951 .block_erase = spi_block_erase_d8,
1952 }, {
1953 .eraseblocks = { {256 * 1024, 1} },
1954 .block_erase = spi_block_erase_c7,
1955 }
1956 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001957 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001958 .write = spi_chip_write_256,
1959 .read = spi_chip_read,
1960 },
1961
1962 {
1963 .vendor = "Eon",
1964 .name = "EN25B20T",
1965 .bustype = CHIP_BUSTYPE_SPI,
1966 .manufacture_id = EON_ID_NOPREFIX,
1967 .model_id = EN_25B20,
1968 .total_size = 256,
1969 .page_size = 256,
1970 .tested = TEST_UNTESTED,
1971 .probe = probe_spi_rdid,
1972 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001973 .block_erasers =
1974 {
1975 {
1976 .eraseblocks = {
1977 {64 * 1024, 3},
1978 {32 * 1024, 1},
1979 {16 * 1024, 1},
1980 {8 * 1024, 1},
1981 {4 * 1024, 2},
1982 },
1983 .block_erase = spi_block_erase_d8,
1984 }, {
1985 .eraseblocks = { {256 * 1024, 1} },
1986 .block_erase = spi_block_erase_c7,
1987 }
1988 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001989 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001990 .write = spi_chip_write_256,
1991 .read = spi_chip_read,
1992 },
1993
1994 {
1995 .vendor = "Eon",
1996 .name = "EN25B40",
1997 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001998 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001999 .model_id = EN_25B40,
2000 .total_size = 512,
2001 .page_size = 256,
2002 .tested = TEST_UNTESTED,
2003 .probe = probe_spi_rdid,
2004 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002005 .block_erasers =
2006 {
2007 {
2008 .eraseblocks = {
2009 {4 * 1024, 2},
2010 {8 * 1024, 1},
2011 {16 * 1024, 1},
2012 {32 * 1024, 1},
2013 {64 * 1024, 7}
2014 },
2015 .block_erase = spi_block_erase_d8,
2016 }, {
2017 .eraseblocks = { {512 * 1024, 1} },
2018 .block_erase = spi_block_erase_c7,
2019 }
2020 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002021 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002022 .write = spi_chip_write_256,
2023 .read = spi_chip_read,
2024 },
2025
2026 {
2027 .vendor = "Eon",
2028 .name = "EN25B40T",
2029 .bustype = CHIP_BUSTYPE_SPI,
2030 .manufacture_id = EON_ID_NOPREFIX,
2031 .model_id = EN_25B40,
2032 .total_size = 512,
2033 .page_size = 256,
2034 .tested = TEST_UNTESTED,
2035 .probe = probe_spi_rdid,
2036 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002037 .block_erasers =
2038 {
2039 {
2040 .eraseblocks = {
2041 {64 * 1024, 7},
2042 {32 * 1024, 1},
2043 {16 * 1024, 1},
2044 {8 * 1024, 1},
2045 {4 * 1024, 2},
2046 },
2047 .block_erase = spi_block_erase_d8,
2048 }, {
2049 .eraseblocks = { {512 * 1024, 1} },
2050 .block_erase = spi_block_erase_c7,
2051 }
2052 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002053 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002054 .write = spi_chip_write_256,
2055 .read = spi_chip_read,
2056 },
2057
2058 {
2059 .vendor = "Eon",
2060 .name = "EN25B80",
2061 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002062 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002063 .model_id = EN_25B80,
2064 .total_size = 1024,
2065 .page_size = 256,
2066 .tested = TEST_UNTESTED,
2067 .probe = probe_spi_rdid,
2068 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002069 .block_erasers =
2070 {
2071 {
2072 .eraseblocks = {
2073 {4 * 1024, 2},
2074 {8 * 1024, 1},
2075 {16 * 1024, 1},
2076 {32 * 1024, 1},
2077 {64 * 1024, 15}
2078 },
2079 .block_erase = spi_block_erase_d8,
2080 }, {
2081 .eraseblocks = { {1024 * 1024, 1} },
2082 .block_erase = spi_block_erase_c7,
2083 }
2084 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002085 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002086 .write = spi_chip_write_256,
2087 .read = spi_chip_read,
2088 },
2089
2090 {
2091 .vendor = "Eon",
2092 .name = "EN25B80T",
2093 .bustype = CHIP_BUSTYPE_SPI,
2094 .manufacture_id = EON_ID_NOPREFIX,
2095 .model_id = EN_25B80,
2096 .total_size = 1024,
2097 .page_size = 256,
2098 .tested = TEST_UNTESTED,
2099 .probe = probe_spi_rdid,
2100 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002101 .block_erasers =
2102 {
2103 {
2104 .eraseblocks = {
2105 {64 * 1024, 15},
2106 {32 * 1024, 1},
2107 {16 * 1024, 1},
2108 {8 * 1024, 1},
2109 {4 * 1024, 2},
2110 },
2111 .block_erase = spi_block_erase_d8,
2112 }, {
2113 .eraseblocks = { {1024 * 1024, 1} },
2114 .block_erase = spi_block_erase_c7,
2115 }
2116 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002117 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002118 .write = spi_chip_write_256,
2119 .read = spi_chip_read,
2120 },
2121
2122 {
2123 .vendor = "Eon",
2124 .name = "EN25B16",
2125 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002126 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002127 .model_id = EN_25B16,
2128 .total_size = 2048,
2129 .page_size = 256,
2130 .tested = TEST_UNTESTED,
2131 .probe = probe_spi_rdid,
2132 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002133 .block_erasers =
2134 {
2135 {
2136 .eraseblocks = {
2137 {4 * 1024, 2},
2138 {8 * 1024, 1},
2139 {16 * 1024, 1},
2140 {32 * 1024, 1},
2141 {64 * 1024, 31},
2142 },
2143 .block_erase = spi_block_erase_d8,
2144 }, {
2145 .eraseblocks = { {2 * 1024 * 1024, 1} },
2146 .block_erase = spi_block_erase_c7,
2147 }
2148 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002149 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002150 .write = spi_chip_write_256,
2151 .read = spi_chip_read,
2152 },
2153
2154 {
2155 .vendor = "Eon",
2156 .name = "EN25B16T",
2157 .bustype = CHIP_BUSTYPE_SPI,
2158 .manufacture_id = EON_ID_NOPREFIX,
2159 .model_id = EN_25B16,
2160 .total_size = 2048,
2161 .page_size = 256,
2162 .tested = TEST_UNTESTED,
2163 .probe = probe_spi_rdid,
2164 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002165 .block_erasers =
2166 {
2167 {
2168 .eraseblocks = {
2169 {64 * 1024, 31},
2170 {32 * 1024, 1},
2171 {16 * 1024, 1},
2172 {8 * 1024, 1},
2173 {4 * 1024, 2},
2174 },
2175 .block_erase = spi_block_erase_d8,
2176 }, {
2177 .eraseblocks = { {2 * 1024 * 1024, 1} },
2178 .block_erase = spi_block_erase_c7,
2179 }
2180 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002181 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002182 .write = spi_chip_write_256,
2183 .read = spi_chip_read,
2184 },
2185
2186 {
2187 .vendor = "Eon",
2188 .name = "EN25B32",
2189 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002190 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002191 .model_id = EN_25B32,
2192 .total_size = 4096,
2193 .page_size = 256,
2194 .tested = TEST_UNTESTED,
2195 .probe = probe_spi_rdid,
2196 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002197 .block_erasers =
2198 {
2199 {
2200 .eraseblocks = {
2201 {4 * 1024, 2},
2202 {8 * 1024, 1},
2203 {16 * 1024, 1},
2204 {32 * 1024, 1},
2205 {64 * 1024, 63},
2206 },
2207 .block_erase = spi_block_erase_d8,
2208 }, {
2209 .eraseblocks = { {4 * 1024 * 1024, 1} },
2210 .block_erase = spi_block_erase_c7,
2211 }
2212 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002213 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002214 .write = spi_chip_write_256,
2215 .read = spi_chip_read,
2216 },
2217
2218 {
2219 .vendor = "Eon",
2220 .name = "EN25B32T",
2221 .bustype = CHIP_BUSTYPE_SPI,
2222 .manufacture_id = EON_ID_NOPREFIX,
2223 .model_id = EN_25B32,
2224 .total_size = 4096,
2225 .page_size = 256,
2226 .tested = TEST_UNTESTED,
2227 .probe = probe_spi_rdid,
2228 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002229 .block_erasers =
2230 {
2231 {
2232 .eraseblocks = {
2233 {64 * 1024, 63},
2234 {32 * 1024, 1},
2235 {16 * 1024, 1},
2236 {8 * 1024, 1},
2237 {4 * 1024, 2},
2238 },
2239 .block_erase = spi_block_erase_d8,
2240 }, {
2241 .eraseblocks = { {4 * 1024 * 1024, 1} },
2242 .block_erase = spi_block_erase_c7,
2243 }
2244 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002245 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002246 .write = spi_chip_write_256,
2247 .read = spi_chip_read,
2248 },
2249
2250 {
2251 .vendor = "Eon",
2252 .name = "EN25B64",
2253 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002254 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002255 .model_id = EN_25B64,
2256 .total_size = 8192,
2257 .page_size = 256,
2258 .tested = TEST_UNTESTED,
2259 .probe = probe_spi_rdid,
2260 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {4 * 1024, 2},
2266 {8 * 1024, 1},
2267 {16 * 1024, 1},
2268 {32 * 1024, 1},
2269 {64 * 1024, 127},
2270 },
2271 .block_erase = spi_block_erase_d8,
2272 }, {
2273 .eraseblocks = { {8 * 1024 * 1024, 1} },
2274 .block_erase = spi_block_erase_c7,
2275 }
2276 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002277 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002278 .write = spi_chip_write_256,
2279 .read = spi_chip_read,
2280 },
2281
2282 {
2283 .vendor = "Eon",
2284 .name = "EN25B64T",
2285 .bustype = CHIP_BUSTYPE_SPI,
2286 .manufacture_id = EON_ID_NOPREFIX,
2287 .model_id = EN_25B64,
2288 .total_size = 8192,
2289 .page_size = 256,
2290 .tested = TEST_UNTESTED,
2291 .probe = probe_spi_rdid,
2292 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002293 .block_erasers =
2294 {
2295 {
2296 .eraseblocks = {
2297 {64 * 1024, 127},
2298 {32 * 1024, 1},
2299 {16 * 1024, 1},
2300 {8 * 1024, 1},
2301 {4 * 1024, 2},
2302 },
2303 .block_erase = spi_block_erase_d8,
2304 }, {
2305 .eraseblocks = { {8 * 1024 * 1024, 1} },
2306 .block_erase = spi_block_erase_c7,
2307 }
2308 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002309 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002310 .write = spi_chip_write_256,
2311 .read = spi_chip_read,
2312 },
2313
2314 {
2315 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002316 .name = "EN25D16",
2317 .bustype = CHIP_BUSTYPE_SPI,
2318 .manufacture_id = EON_ID_NOPREFIX,
2319 .model_id = EN_25D16,
2320 .total_size = 2048,
2321 .page_size = 256,
2322 .tested = TEST_UNTESTED,
2323 .probe = probe_spi_rdid,
2324 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002325 .block_erasers =
2326 {
2327 {
2328 .eraseblocks = { {4 * 1024, 512} },
2329 .block_erase = spi_block_erase_20,
2330 }, {
2331 .eraseblocks = { {64 * 1024, 32} },
2332 .block_erase = spi_block_erase_d8,
2333 }, {
2334 .eraseblocks = { {64 * 1024, 32} },
2335 .block_erase = spi_block_erase_52,
2336 }, {
2337 .eraseblocks = { {2 * 1024 * 1024, 1} },
2338 .block_erase = spi_block_erase_60,
2339 }, {
2340 .eraseblocks = { {2 * 1024 * 1024, 1} },
2341 .block_erase = spi_block_erase_c7,
2342 }
2343 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002344 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002345 .write = spi_chip_write_256,
2346 .read = spi_chip_read,
2347 },
2348
2349 {
2350 .vendor = "Eon",
2351 .name = "EN25F05",
2352 .bustype = CHIP_BUSTYPE_SPI,
2353 .manufacture_id = EON_ID_NOPREFIX,
2354 .model_id = EN_25F05,
2355 .total_size = 64,
2356 .page_size = 256,
2357 .tested = TEST_UNTESTED,
2358 .probe = probe_spi_rdid,
2359 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002360 .block_erasers =
2361 {
2362 {
2363 .eraseblocks = { {4 * 1024, 16} },
2364 .block_erase = spi_block_erase_20,
2365 }, {
2366 .eraseblocks = { {32 * 1024, 2} },
2367 .block_erase = spi_block_erase_d8,
2368 }, {
2369 .eraseblocks = { {32 * 1024, 2} },
2370 .block_erase = spi_block_erase_52,
2371 }, {
2372 .eraseblocks = { {64 * 1024, 1} },
2373 .block_erase = spi_block_erase_60,
2374 }, {
2375 .eraseblocks = { {64 * 1024, 1} },
2376 .block_erase = spi_block_erase_c7,
2377 }
2378 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002379 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002380 .write = spi_chip_write_256,
2381 .read = spi_chip_read,
2382 },
2383
2384 {
2385 .vendor = "Eon",
2386 .name = "EN25F10",
2387 .bustype = CHIP_BUSTYPE_SPI,
2388 .manufacture_id = EON_ID_NOPREFIX,
2389 .model_id = EN_25F10,
2390 .total_size = 128,
2391 .page_size = 256,
2392 .tested = TEST_UNTESTED,
2393 .probe = probe_spi_rdid,
2394 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002395 .block_erasers =
2396 {
2397 {
2398 .eraseblocks = { {4 * 1024, 32} },
2399 .block_erase = spi_block_erase_20,
2400 }, {
2401 .eraseblocks = { {32 * 1024, 4} },
2402 .block_erase = spi_block_erase_d8,
2403 }, {
2404 .eraseblocks = { {32 * 1024, 4} },
2405 .block_erase = spi_block_erase_52,
2406 }, {
2407 .eraseblocks = { {128 * 1024, 1} },
2408 .block_erase = spi_block_erase_60,
2409 }, {
2410 .eraseblocks = { {128 * 1024, 1} },
2411 .block_erase = spi_block_erase_c7,
2412 }
2413 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002414 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002415 .write = spi_chip_write_256,
2416 .read = spi_chip_read,
2417 },
2418
2419 {
2420 .vendor = "Eon",
2421 .name = "EN25F20",
2422 .bustype = CHIP_BUSTYPE_SPI,
2423 .manufacture_id = EON_ID_NOPREFIX,
2424 .model_id = EN_25F20,
2425 .total_size = 256,
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 = { {4 * 1024, 64} },
2434 .block_erase = spi_block_erase_20,
2435 }, {
2436 .eraseblocks = { {64 * 1024, 4} },
2437 .block_erase = spi_block_erase_d8,
2438 }, {
2439 .eraseblocks = { {64 * 1024, 4} },
2440 .block_erase = spi_block_erase_52,
2441 }, {
2442 .eraseblocks = { {256 * 1024, 1} },
2443 .block_erase = spi_block_erase_60,
2444 }, {
2445 .eraseblocks = { {256 * 1024, 1} },
2446 .block_erase = spi_block_erase_c7,
2447 }
2448 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002449 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002450 .write = spi_chip_write_256,
2451 .read = spi_chip_read,
2452 },
2453
2454 {
2455 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002456 .name = "EN25F40",
2457 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002458 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002459 .model_id = EN_25F40,
2460 .total_size = 512,
2461 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002462 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002463 .probe = probe_spi_rdid,
2464 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002465 .block_erasers =
2466 {
2467 {
Sean Nelson54596372010-01-09 05:30:14 +00002468 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002469 .block_erase = spi_block_erase_20,
2470 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002471 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002472 .block_erase = spi_block_erase_d8,
2473 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002474 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002475 .block_erase = spi_block_erase_60,
2476 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002477 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002478 .block_erase = spi_block_erase_c7,
2479 },
2480 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002481 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002482 .write = spi_chip_write_256,
2483 .read = spi_chip_read,
2484 },
2485
2486 {
2487 .vendor = "Eon",
2488 .name = "EN25F80",
2489 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002490 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002491 .model_id = EN_25F80,
2492 .total_size = 1024,
2493 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002494 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002495 .probe = probe_spi_rdid,
2496 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002497 .block_erasers =
2498 {
2499 {
2500 .eraseblocks = { {4 * 1024, 256} },
2501 .block_erase = spi_block_erase_20,
2502 }, {
2503 .eraseblocks = { {64 * 1024, 16} },
2504 .block_erase = spi_block_erase_d8,
2505 }, {
2506 .eraseblocks = { {1024 * 1024, 1} },
2507 .block_erase = spi_block_erase_60,
2508 }, {
2509 .eraseblocks = { {1024 * 1024, 1} },
2510 .block_erase = spi_block_erase_c7,
2511 }
2512 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002513 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002514 .write = spi_chip_write_256,
2515 .read = spi_chip_read,
2516 },
2517
2518 {
2519 .vendor = "Eon",
2520 .name = "EN25F16",
2521 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002522 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002523 .model_id = EN_25F16,
2524 .total_size = 2048,
2525 .page_size = 256,
2526 .tested = TEST_UNTESTED,
2527 .probe = probe_spi_rdid,
2528 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002529 .block_erasers =
2530 {
2531 {
2532 .eraseblocks = { {4 * 1024, 512} },
2533 .block_erase = spi_block_erase_20,
2534 }, {
2535 .eraseblocks = { {64 * 1024, 32} },
2536 .block_erase = spi_block_erase_d8,
2537 }, {
2538 .eraseblocks = { {2 * 1024 * 1024, 1} },
2539 .block_erase = spi_block_erase_60,
2540 }, {
2541 .eraseblocks = { {2 * 1024 * 1024, 1} },
2542 .block_erase = spi_block_erase_c7,
2543 }
2544 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002545 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002546 .write = spi_chip_write_256,
2547 .read = spi_chip_read,
2548 },
2549
2550 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002551 .vendor = "Eon",
2552 .name = "EN25F32",
2553 .bustype = CHIP_BUSTYPE_SPI,
2554 .manufacture_id = EON_ID_NOPREFIX,
2555 .model_id = EN_25F32,
2556 .total_size = 4096,
2557 .page_size = 256,
2558 .tested = TEST_UNTESTED,
2559 .probe = probe_spi_rdid,
2560 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002561 .block_erasers =
2562 {
2563 {
2564 .eraseblocks = { {4 * 1024, 1024} },
2565 .block_erase = spi_block_erase_20,
2566 }, {
2567 .eraseblocks = { {64 * 1024, 64} },
2568 .block_erase = spi_block_erase_d8,
2569 }, {
2570 .eraseblocks = { {4 * 1024 * 1024, 1} },
2571 .block_erase = spi_block_erase_60,
2572 }, {
2573 .eraseblocks = { {4 * 1024 * 1024, 1} },
2574 .block_erase = spi_block_erase_c7,
2575 }
2576 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002577 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002578 .write = spi_chip_write_256,
2579 .read = spi_chip_read,
2580 },
2581
2582 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002583 .vendor = "Eon",
2584 .name = "EN29F010",
2585 .bustype = CHIP_BUSTYPE_PARALLEL,
2586 .manufacture_id = EON_ID,
2587 .model_id = EN_29F010,
2588 .total_size = 128,
2589 .page_size = 128,
2590 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2591 .tested = TEST_OK_PREW,
2592 .probe = probe_jedec,
2593 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2594 .block_erasers =
2595 {
2596 {
2597 .eraseblocks = { {16 * 1024, 8} },
2598 .block_erase = erase_sector_jedec,
2599 },
2600 {
2601 .eraseblocks = { {128 * 1024, 1} },
2602 .block_erase = erase_chip_block_jedec,
2603 },
2604 },
2605 .write = write_jedec_1,
2606 .read = read_memmapped,
2607 },
2608
2609 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002610 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002611 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002612 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002613 .manufacture_id = EON_ID,
2614 .model_id = EN_29F002B,
2615 .total_size = 256,
2616 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002617 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002618 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002619 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002620 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002621 .block_erasers =
2622 {
2623 {
2624 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002625 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002626 {8 * 1024, 2},
2627 {32 * 1024, 1},
2628 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002629 },
2630 .block_erase = erase_sector_jedec,
2631 }, {
2632 .eraseblocks = { {256 * 1024, 1} },
2633 .block_erase = erase_chip_block_jedec,
2634 },
2635 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002636 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002637 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002638 },
2639
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002641 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002642 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002643 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002644 .manufacture_id = EON_ID,
2645 .model_id = EN_29F002T,
2646 .total_size = 256,
2647 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002648 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002649 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002650 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002651 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002652 .block_erasers =
2653 {
2654 {
2655 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002656 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002657 {32 * 1024, 1},
2658 {8 * 1024, 2},
2659 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002660 },
2661 .block_erase = erase_sector_jedec,
2662 }, {
2663 .eraseblocks = { {256 * 1024, 1} },
2664 .block_erase = erase_chip_block_jedec,
2665 },
2666 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002667 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002668 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002669 },
2670
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002671 {
2672 .vendor = "Fujitsu",
2673 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002674 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002675 .manufacture_id = FUJITSU_ID,
2676 .model_id = MBM29F004BC,
2677 .total_size = 512,
2678 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002679 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002680 .tested = TEST_UNTESTED,
2681 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002682 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002683 .block_erasers =
2684 {
2685 {
2686 .eraseblocks = {
2687 {16 * 1024, 1},
2688 {8 * 1024, 2},
2689 {32 * 1024, 1},
2690 {64 * 1024, 7},
2691 },
Sean Nelson35727f72010-01-28 23:55:12 +00002692 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002693 }, {
2694 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002695 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002696 },
2697 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002698 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002699 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002700 },
2701
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002702 {
2703 .vendor = "Fujitsu",
2704 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002705 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002706 .manufacture_id = FUJITSU_ID,
2707 .model_id = MBM29F004TC,
2708 .total_size = 512,
2709 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002710 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002711 .tested = TEST_UNTESTED,
2712 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002713 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002714 .block_erasers =
2715 {
2716 {
2717 .eraseblocks = {
2718 {64 * 1024, 7},
2719 {32 * 1024, 1},
2720 {8 * 1024, 2},
2721 {16 * 1024, 1},
2722 },
Sean Nelson35727f72010-01-28 23:55:12 +00002723 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002724 }, {
2725 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002726 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002727 },
2728 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002731 },
2732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002733 {
Sean Nelson35727f72010-01-28 23:55:12 +00002734 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002735 .vendor = "Fujitsu",
2736 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002737 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002738 .manufacture_id = FUJITSU_ID,
2739 .model_id = MBM29F400BC,
2740 .total_size = 512,
2741 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002742 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002743 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002744 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002745 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002746 .block_erasers =
2747 {
2748 {
2749 .eraseblocks = {
2750 {16 * 1024, 1},
2751 {8 * 1024, 2},
2752 {32 * 1024, 1},
2753 {64 * 1024, 7},
2754 },
2755 .block_erase = block_erase_m29f400bt,
2756 }, {
2757 .eraseblocks = { {512 * 1024, 1} },
2758 .block_erase = block_erase_chip_m29f400bt,
2759 },
2760 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002761 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002762 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002763 },
2764
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002765 {
2766 .vendor = "Fujitsu",
2767 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002768 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002769 .manufacture_id = FUJITSU_ID,
2770 .model_id = MBM29F400TC,
2771 .total_size = 512,
2772 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002773 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002774 .tested = TEST_UNTESTED,
2775 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002776 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002777 .block_erasers =
2778 {
2779 {
2780 .eraseblocks = {
2781 {64 * 1024, 7},
2782 {32 * 1024, 1},
2783 {8 * 1024, 2},
2784 {16 * 1024, 1},
2785 },
2786 .block_erase = block_erase_m29f400bt,
2787 }, {
2788 .eraseblocks = { {512 * 1024, 1} },
2789 .block_erase = block_erase_chip_m29f400bt,
2790 },
2791 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002792 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002793 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002794 },
2795
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002796 {
David Borgc96a8bd2010-06-21 16:12:22 +00002797 .vendor = "Hyundai",
2798 .name = "HY29F002T",
2799 .bustype = CHIP_BUSTYPE_PARALLEL,
2800 .manufacture_id = HYUNDAI_ID,
2801 .model_id = HY_29F002T,
2802 .total_size = 256,
2803 .page_size = 256 * 1024,
2804 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2805 .tested = TEST_OK_PREW,
2806 .probe = probe_jedec,
2807 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2808 .block_erasers =
2809 {
2810 {
2811 .eraseblocks = {
2812 {64 * 1024, 3},
2813 {32 * 1024, 1},
2814 {8 * 1024, 2},
2815 {16 * 1024, 1},
2816 },
2817 .block_erase = erase_sector_jedec,
2818 }, {
2819 .eraseblocks = { {256 * 1024, 1} },
2820 .block_erase = erase_chip_block_jedec,
2821 },
2822 },
2823 .write = write_jedec_1,
2824 .read = read_memmapped,
2825 },
2826
2827 {
2828 .vendor = "Hyundai",
2829 .name = "HY29F002B",
2830 .bustype = CHIP_BUSTYPE_PARALLEL,
2831 .manufacture_id = HYUNDAI_ID,
2832 .model_id = HY_29F002B,
2833 .total_size = 256,
2834 .page_size = 256 * 1024,
2835 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2836 .tested = TEST_UNTESTED,
2837 .probe = probe_jedec,
2838 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2839 .block_erasers =
2840 {
2841 {
2842 .eraseblocks = {
2843 {16 * 1024, 1},
2844 {8 * 1024, 2},
2845 {32 * 1024, 1},
2846 {64 * 1024, 3},
2847 },
2848 .block_erase = erase_sector_jedec,
2849 }, {
2850 .eraseblocks = { {256 * 1024, 1} },
2851 .block_erase = erase_chip_block_jedec,
2852 },
2853 },
2854 .write = write_jedec_1,
2855 .read = read_memmapped,
2856 },
2857
2858 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002859 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002860 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002861 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002862 .manufacture_id = INTEL_ID,
2863 .model_id = P28F001BXB,
2864 .total_size = 128,
2865 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002866 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002867 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002868 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002869 .block_erasers =
2870 {
2871 {
2872 .eraseblocks = {
2873 {8 * 1024, 1},
2874 {4 * 1024, 2},
2875 {112 * 1024, 1},
2876 },
Sean Nelson28accc22010-03-19 18:47:06 +00002877 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002878 },
2879 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002880 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002881 .read = read_memmapped,
2882 },
2883
2884 {
2885 .vendor = "Intel",
2886 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002887 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002888 .manufacture_id = INTEL_ID,
2889 .model_id = P28F001BXT,
2890 .total_size = 128,
2891 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002892 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002893 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002894 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002895 .block_erasers =
2896 {
2897 {
2898 .eraseblocks = {
2899 {112 * 1024, 1},
2900 {4 * 1024, 2},
2901 {8 * 1024, 1},
2902 },
Sean Nelson28accc22010-03-19 18:47:06 +00002903 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002904 },
2905 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002906 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002907 .read = read_memmapped,
2908 },
2909
2910 {
2911 .vendor = "Intel",
Joshua Roysd97c0e02010-07-22 15:20:43 +00002912 .name = "28F002BC-T",
2913 .bustype = CHIP_BUSTYPE_PARALLEL,
2914 .manufacture_id = INTEL_ID,
2915 .model_id = P28F002BC,
2916 .total_size = 256,
2917 .page_size = 256 * 1024,
2918 .tested = TEST_UNTESTED,
2919 .probe = probe_82802ab,
2920 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2921 .block_erasers =
2922 {
2923 {
2924 .eraseblocks = {
2925 {128 * 1024, 1},
2926 {96 * 1024, 1},
2927 {8 * 1024, 2},
2928 {16 * 1024, 1},
2929 },
2930 .block_erase = erase_block_82802ab,
2931 },
2932 },
2933 .write = write_82802ab,
2934 .read = read_memmapped,
2935 },
2936
2937 {
2938 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002939 .name = "28F004S5",
2940 .bustype = CHIP_BUSTYPE_PARALLEL,
2941 .manufacture_id = INTEL_ID,
2942 .model_id = E_28F004S5,
2943 .total_size = 512,
2944 .page_size = 256,
2945 .tested = TEST_UNTESTED,
2946 .probe = probe_82802ab,
2947 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002948 .block_erasers =
2949 {
2950 {
2951 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002952 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002953 },
2954 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002955 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002956 .write = write_82802ab,
2957 .read = read_memmapped,
2958 },
2959
2960 {
2961 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002962 .name = "28F004BV/BE-B",
2963 .bustype = CHIP_BUSTYPE_PARALLEL,
2964 .manufacture_id = INTEL_ID,
2965 .model_id = P28F004BB,
2966 .total_size = 512,
2967 .page_size = 128 * 1024, /* maximal block size */
2968 .tested = TEST_UNTESTED,
2969 .probe = probe_82802ab,
2970 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2971 .block_erasers =
2972 {
2973 {
2974 .eraseblocks = {
2975 {16 * 1024, 1},
2976 {8 * 1024, 2},
2977 {96 * 1024, 1},
2978 {128 * 1024, 3},
2979 },
2980 .block_erase = erase_block_82802ab,
2981 },
2982 },
2983 .write = write_82802ab,
2984 .read = read_memmapped,
2985 },
2986
2987 {
2988 .vendor = "Intel",
2989 .name = "28F004BV/BE-T",
2990 .bustype = CHIP_BUSTYPE_PARALLEL,
2991 .manufacture_id = INTEL_ID,
2992 .model_id = P28F004BT,
2993 .total_size = 512,
2994 .page_size = 128 * 1024, /* maximal block size */
2995 .tested = TEST_UNTESTED,
2996 .probe = probe_82802ab,
2997 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2998 .block_erasers =
2999 {
3000 {
3001 .eraseblocks = {
3002 {128 * 1024, 3},
3003 {96 * 1024, 1},
3004 {8 * 1024, 2},
3005 {16 * 1024, 1},
3006 },
3007 .block_erase = erase_block_82802ab,
3008 },
3009 },
3010 .write = write_82802ab,
3011 .read = read_memmapped,
3012 },
3013
3014 {
3015 .vendor = "Intel",
3016 .name = "28F400BV/CV/CE-B",
3017 .bustype = CHIP_BUSTYPE_PARALLEL,
3018 .manufacture_id = INTEL_ID,
3019 .model_id = P28F400BB,
3020 .total_size = 512,
3021 .page_size = 128 * 1024, /* maximal block size */
3022 .feature_bits = FEATURE_ADDR_SHIFTED,
3023 .tested = TEST_UNTESTED,
3024 .probe = probe_82802ab,
3025 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3026 .block_erasers =
3027 {
3028 {
3029 .eraseblocks = {
3030 {16 * 1024, 1},
3031 {8 * 1024, 2},
3032 {96 * 1024, 1},
3033 {128 * 1024, 3},
3034 },
3035 .block_erase = erase_block_82802ab,
3036 },
3037 },
3038 .write = write_82802ab,
3039 .read = read_memmapped,
3040 },
3041
3042 {
3043 .vendor = "Intel",
3044 .name = "28F400BV/CV/CE-T",
3045 .bustype = CHIP_BUSTYPE_PARALLEL,
3046 .manufacture_id = INTEL_ID,
3047 .model_id = P28F400BT,
3048 .total_size = 512,
3049 .page_size = 128 * 1024, /* maximal block size */
3050 .feature_bits = FEATURE_ADDR_SHIFTED,
3051 .tested = TEST_UNTESTED,
3052 .probe = probe_82802ab,
3053 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3054 .block_erasers =
3055 {
3056 {
3057 .eraseblocks = {
3058 {128 * 1024, 3},
3059 {96 * 1024, 1},
3060 {8 * 1024, 2},
3061 {16 * 1024, 1},
3062 },
3063 .block_erase = erase_block_82802ab,
3064 },
3065 },
3066 .write = write_82802ab,
3067 .read = read_memmapped,
3068 },
3069
3070 {
3071 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003072 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003073 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003074 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003075 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003076 .total_size = 512,
3077 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003078 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003079 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003080 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003081 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003082 .block_erasers =
3083 {
3084 {
3085 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003086 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003087 },
3088 },
Sean Nelson28accc22010-03-19 18:47:06 +00003089 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003090 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003091 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003092 },
3093
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003094 {
3095 .vendor = "Intel",
3096 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003097 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003098 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003099 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .total_size = 1024,
3101 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003102 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003103 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003104 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003105 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003106 .block_erasers =
3107 {
3108 {
3109 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003110 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003111 },
3112 },
Sean Nelson28accc22010-03-19 18:47:06 +00003113 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003115 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003116 },
3117
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003118 {
3119 .vendor = "Macronix",
3120 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003121 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003122 .manufacture_id = MX_ID,
3123 .model_id = MX_25L512,
3124 .total_size = 64,
3125 .page_size = 256,
3126 .tested = TEST_UNTESTED,
3127 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003128 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003129 .block_erasers =
3130 {
3131 {
3132 .eraseblocks = { {4 * 1024, 16} },
3133 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003134 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003135 .eraseblocks = { {64 * 1024, 1} },
3136 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003137 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003138 .eraseblocks = { {64 * 1024, 1} },
3139 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003140 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003141 .eraseblocks = { {64 * 1024, 1} },
3142 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003143 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003144 .eraseblocks = { {64 * 1024, 1} },
3145 .block_erase = spi_block_erase_c7,
3146 },
3147 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003148 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003149 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003150 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003151 },
3152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003153 {
3154 .vendor = "Macronix",
3155 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003156 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003157 .manufacture_id = MX_ID,
3158 .model_id = MX_25L1005,
3159 .total_size = 128,
3160 .page_size = 256,
3161 .tested = TEST_UNTESTED,
3162 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003163 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003164 .block_erasers =
3165 {
3166 {
3167 .eraseblocks = { {4 * 1024, 32} },
3168 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003169 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003170 .eraseblocks = { {64 * 1024, 2} },
3171 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003172 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003173 .eraseblocks = { {128 * 1024, 1} },
3174 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003175 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003176 .eraseblocks = { {128 * 1024, 1} },
3177 .block_erase = spi_block_erase_c7,
3178 },
3179 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003180 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003181 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003182 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003183 },
3184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003185 {
3186 .vendor = "Macronix",
3187 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003188 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003189 .manufacture_id = MX_ID,
3190 .model_id = MX_25L2005,
3191 .total_size = 256,
3192 .page_size = 256,
3193 .tested = TEST_UNTESTED,
3194 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003195 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003196 .block_erasers =
3197 {
3198 {
3199 .eraseblocks = { {4 * 1024, 64} },
3200 .block_erase = spi_block_erase_20,
3201 }, {
3202 .eraseblocks = { {64 * 1024, 4} },
3203 .block_erase = spi_block_erase_52,
3204 }, {
3205 .eraseblocks = { {64 * 1024, 4} },
3206 .block_erase = spi_block_erase_d8,
3207 }, {
3208 .eraseblocks = { {256 * 1024, 1} },
3209 .block_erase = spi_block_erase_60,
3210 }, {
3211 .eraseblocks = { {256 * 1024, 1} },
3212 .block_erase = spi_block_erase_c7,
3213 },
3214 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003215 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003216 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003217 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003218 },
3219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003220 {
3221 .vendor = "Macronix",
3222 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003223 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .manufacture_id = MX_ID,
3225 .model_id = MX_25L4005,
3226 .total_size = 512,
3227 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003228 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003229 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003230 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003231 .block_erasers =
3232 {
3233 {
3234 .eraseblocks = { {4 * 1024, 128} },
3235 .block_erase = spi_block_erase_20,
3236 }, {
3237 .eraseblocks = { {64 * 1024, 8} },
3238 .block_erase = spi_block_erase_52,
3239 }, {
3240 .eraseblocks = { {64 * 1024, 8} },
3241 .block_erase = spi_block_erase_d8,
3242 }, {
3243 .eraseblocks = { {512 * 1024, 1} },
3244 .block_erase = spi_block_erase_60,
3245 }, {
3246 .eraseblocks = { {512 * 1024, 1} },
3247 .block_erase = spi_block_erase_c7,
3248 },
3249 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003250 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003251 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003252 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003253 },
3254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003255 {
3256 .vendor = "Macronix",
3257 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003258 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003259 .manufacture_id = MX_ID,
3260 .model_id = MX_25L8005,
3261 .total_size = 1024,
3262 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003263 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003264 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003265 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003266 .block_erasers =
3267 {
3268 {
3269 .eraseblocks = { {4 * 1024, 256} },
3270 .block_erase = spi_block_erase_20,
3271 }, {
3272 .eraseblocks = { {64 * 1024, 16} },
3273 .block_erase = spi_block_erase_52,
3274 }, {
3275 .eraseblocks = { {64 * 1024, 16} },
3276 .block_erase = spi_block_erase_d8,
3277 }, {
3278 .eraseblocks = { {1024 * 1024, 1} },
3279 .block_erase = spi_block_erase_60,
3280 }, {
3281 .eraseblocks = { {1024 * 1024, 1} },
3282 .block_erase = spi_block_erase_c7,
3283 },
3284 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003285 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003286 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003287 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003288 },
3289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 {
3291 .vendor = "Macronix",
3292 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003293 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003294 .manufacture_id = MX_ID,
3295 .model_id = MX_25L1605,
3296 .total_size = 2048,
3297 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003298 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003299 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003300 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003301 .block_erasers =
3302 {
3303 {
3304 .eraseblocks = { {4 * 1024, 512} },
3305 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3306 }, {
3307 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3308 .block_erase = spi_block_erase_52,
3309 }, {
3310 .eraseblocks = { {64 * 1024, 32} },
3311 .block_erase = spi_block_erase_d8,
3312 }, {
3313 .eraseblocks = { {2 * 1024 * 1024, 1} },
3314 .block_erase = spi_block_erase_60,
3315 }, {
3316 .eraseblocks = { {2 * 1024 * 1024, 1} },
3317 .block_erase = spi_block_erase_c7,
3318 },
3319 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003320 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003321 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003322 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003323 },
3324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 {
3326 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003327 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003329 .manufacture_id = MX_ID,
3330 .model_id = MX_25L1635D,
3331 .total_size = 2048,
3332 .page_size = 256,
3333 .tested = TEST_UNTESTED,
3334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003335 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003336 .block_erasers =
3337 {
3338 {
3339 .eraseblocks = { {4 * 1024, 512} },
3340 .block_erase = spi_block_erase_20,
3341 }, {
3342 .eraseblocks = { {64 * 1024, 32} },
3343 .block_erase = spi_block_erase_d8,
3344 }, {
3345 .eraseblocks = { {2 * 1024 * 1024, 1} },
3346 .block_erase = spi_block_erase_60,
3347 }, {
3348 .eraseblocks = { {2 * 1024 * 1024, 1} },
3349 .block_erase = spi_block_erase_c7,
3350 }
3351 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003352 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003353 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003354 .read = spi_chip_read,
3355 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003356
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003357 {
3358 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003359 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003360 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .manufacture_id = MX_ID,
3362 .model_id = MX_25L3205,
3363 .total_size = 4096,
3364 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003365 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003366 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003367 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003368 .block_erasers =
3369 {
3370 {
3371 .eraseblocks = { {4 * 1024, 1024} },
3372 .block_erase = spi_block_erase_20,
3373 }, {
3374 .eraseblocks = { {4 * 1024, 1024} },
3375 .block_erase = spi_block_erase_d8,
3376 }, {
3377 .eraseblocks = { {4 * 1024 * 1024, 1} },
3378 .block_erase = spi_block_erase_60,
3379 }, {
3380 .eraseblocks = { {4 * 1024 * 1024, 1} },
3381 .block_erase = spi_block_erase_c7,
3382 },
3383 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003384 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003385 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003386 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003387 },
3388
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003389 {
3390 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003391 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003392 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003393 .manufacture_id = MX_ID,
3394 .model_id = MX_25L3235D,
3395 .total_size = 4096,
3396 .page_size = 256,
3397 .tested = TEST_UNTESTED,
3398 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003399 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003400 .block_erasers =
3401 {
3402 {
3403 .eraseblocks = { {4 * 1024, 1024} },
3404 .block_erase = spi_block_erase_20,
3405 }, {
3406 .eraseblocks = { {64 * 1024, 64} },
3407 .block_erase = spi_block_erase_d8,
3408 }, {
3409 .eraseblocks = { {4 * 1024 * 1024, 1} },
3410 .block_erase = spi_block_erase_60,
3411 }, {
3412 .eraseblocks = { {4 * 1024 * 1024, 1} },
3413 .block_erase = spi_block_erase_c7,
3414 }
3415 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003416 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003417 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003418 .read = spi_chip_read,
3419 },
3420
3421 {
3422 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003423 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003424 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003425 .manufacture_id = MX_ID,
3426 .model_id = MX_25L6405,
3427 .total_size = 8192,
3428 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003429 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003430 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003431 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003432 .block_erasers =
3433 {
3434 {
3435 .eraseblocks = { {64 * 1024, 128} },
3436 .block_erase = spi_block_erase_20,
3437 }, {
3438 .eraseblocks = { {64 * 1024, 128} },
3439 .block_erase = spi_block_erase_d8,
3440 }, {
3441 .eraseblocks = { {8 * 1024 * 1024, 1} },
3442 .block_erase = spi_block_erase_60,
3443 }, {
3444 .eraseblocks = { {8 * 1024 * 1024, 1} },
3445 .block_erase = spi_block_erase_c7,
3446 }
3447 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003448 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003449 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003450 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003451 },
3452
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003453 {
3454 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003455 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003456 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003457 .manufacture_id = MX_ID,
3458 .model_id = MX_25L12805,
3459 .total_size = 16384,
3460 .page_size = 256,
3461 .tested = TEST_UNTESTED,
3462 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003463 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003464 .block_erasers =
3465 {
3466 {
3467 .eraseblocks = { {4 * 1024, 4096} },
3468 .block_erase = spi_block_erase_20,
3469 }, {
3470 .eraseblocks = { {64 * 1024, 256} },
3471 .block_erase = spi_block_erase_d8,
3472 }, {
3473 .eraseblocks = { {16 * 1024 * 1024, 1} },
3474 .block_erase = spi_block_erase_60,
3475 }, {
3476 .eraseblocks = { {16 * 1024 * 1024, 1} },
3477 .block_erase = spi_block_erase_c7,
3478 }
3479 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003480 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003481 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003482 .read = spi_chip_read,
3483 },
3484
3485 {
3486 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003487 .name = "MX29F001B",
3488 .bustype = CHIP_BUSTYPE_PARALLEL,
3489 .manufacture_id = MX_ID,
3490 .model_id = MX_29F001B,
3491 .total_size = 128,
3492 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003493 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3494 .tested = TEST_UNTESTED,
3495 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003496 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003497 .block_erasers =
3498 {
3499 {
3500 .eraseblocks = {
3501 {8 * 1024, 1},
3502 {4 * 1024, 2},
3503 {8 * 1024, 2},
3504 {32 * 1024, 1},
3505 {64 * 1024, 1},
3506 },
Sean Nelson35727f72010-01-28 23:55:12 +00003507 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003508 }, {
3509 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003510 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003511 }
3512 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003513 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003514 .read = read_memmapped,
3515 },
3516
3517 {
3518 .vendor = "Macronix",
3519 .name = "MX29F001T",
3520 .bustype = CHIP_BUSTYPE_PARALLEL,
3521 .manufacture_id = MX_ID,
3522 .model_id = MX_29F001T,
3523 .total_size = 128,
3524 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003525 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3526 .tested = TEST_UNTESTED,
3527 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003528 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003529 .block_erasers =
3530 {
3531 {
3532 .eraseblocks = {
3533 {64 * 1024, 1},
3534 {32 * 1024, 1},
3535 {8 * 1024, 2},
3536 {4 * 1024, 2},
3537 {8 * 1024, 1},
3538 },
Sean Nelson35727f72010-01-28 23:55:12 +00003539 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003540 }, {
3541 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003542 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003543 }
3544 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003545 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003546 .read = read_memmapped,
3547 },
3548
3549 {
3550 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003552 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003553 .manufacture_id = MX_ID,
3554 .model_id = MX_29F002B,
3555 .total_size = 256,
3556 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003557 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003559 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003560 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003561 .block_erasers =
3562 {
3563 {
3564 .eraseblocks = {
3565 {16 * 1024, 1},
3566 {8 * 1024, 2},
3567 {32 * 1024, 1},
3568 {64 * 1024, 3},
3569 },
Sean Nelson35727f72010-01-28 23:55:12 +00003570 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003571 }, {
3572 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003573 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003574 },
3575 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003576 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003577 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003578 },
3579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 {
3581 .vendor = "Macronix",
3582 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003583 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003584 .manufacture_id = MX_ID,
3585 .model_id = MX_29F002T,
3586 .total_size = 256,
3587 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003588 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003589 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003590 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003591 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003592 .block_erasers =
3593 {
3594 {
3595 .eraseblocks = {
3596 {64 * 1024, 3},
3597 {32 * 1024, 1},
3598 {8 * 1024, 2},
3599 {16 * 1024, 1},
3600 },
Sean Nelson35727f72010-01-28 23:55:12 +00003601 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003602 }, {
3603 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003604 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003605 },
3606 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003607 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003608 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003609 },
3610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003611 {
3612 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003613 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003614 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003615 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003616 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003617 .total_size = 512,
3618 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003619 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3620 .tested = TEST_UNTESTED,
3621 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003622 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003623 .block_erasers =
3624 {
3625 {
3626 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003627 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003628 }, {
3629 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003630 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003631 },
3632 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003633 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003634 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003635 },
3636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003637 {
3638 .vendor = "Numonyx",
3639 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003640 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003641 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003642 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003643 .total_size = 128,
3644 .page_size = 256,
3645 .tested = TEST_UNTESTED,
3646 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003647 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003648 .block_erasers =
3649 {
3650 {
3651 .eraseblocks = { {4 * 1024, 32} },
3652 .block_erase = spi_block_erase_20,
3653 }, {
3654 .eraseblocks = { {64 * 1024, 2} },
3655 .block_erase = spi_block_erase_d8,
3656 }, {
3657 .eraseblocks = { {128 * 1024, 1} },
3658 .block_erase = spi_block_erase_c7,
3659 }
3660 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003661 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003662 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003663 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003664 },
3665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003666 {
3667 .vendor = "Numonyx",
3668 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003670 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003671 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003672 .total_size = 256,
3673 .page_size = 256,
3674 .tested = TEST_UNTESTED,
3675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003676 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003677 .block_erasers =
3678 {
3679 {
3680 .eraseblocks = { {4 * 1024, 64} },
3681 .block_erase = spi_block_erase_20,
3682 }, {
3683 .eraseblocks = { {64 * 1024, 4} },
3684 .block_erase = spi_block_erase_d8,
3685 }, {
3686 .eraseblocks = { {256 * 1024, 1} },
3687 .block_erase = spi_block_erase_c7,
3688 }
3689 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003690 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003691 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003693 },
3694
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003695 {
3696 .vendor = "Numonyx",
3697 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003698 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003699 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003700 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003701 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003702 .page_size = 256,
3703 .tested = TEST_UNTESTED,
3704 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003705 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003706 .block_erasers =
3707 {
3708 {
3709 .eraseblocks = { {4 * 1024, 128} },
3710 .block_erase = spi_block_erase_20,
3711 }, {
3712 .eraseblocks = { {64 * 1024, 8} },
3713 .block_erase = spi_block_erase_d8,
3714 }, {
3715 .eraseblocks = { {512 * 1024, 1} },
3716 .block_erase = spi_block_erase_c7,
3717 }
3718 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003719 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003720 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003722 },
3723
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003724 {
3725 .vendor = "Numonyx",
3726 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003727 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003728 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003729 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003730 .total_size = 1024,
3731 .page_size = 256,
3732 .tested = TEST_OK_PREW,
3733 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003734 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003735 .block_erasers =
3736 {
3737 {
3738 .eraseblocks = { {4 * 1024, 256} },
3739 .block_erase = spi_block_erase_20,
3740 }, {
3741 .eraseblocks = { {64 * 1024, 16} },
3742 .block_erase = spi_block_erase_d8,
3743 }, {
3744 .eraseblocks = { {1024 * 1024, 1} },
3745 .block_erase = spi_block_erase_c7,
3746 }
3747 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003748 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003749 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003751 },
3752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 {
3754 .vendor = "Numonyx",
3755 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003756 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003758 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003759 .total_size = 2048,
3760 .page_size = 256,
3761 .tested = TEST_UNTESTED,
3762 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003763 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003764 .block_erasers =
3765 {
3766 {
3767 .eraseblocks = { {4 * 1024, 512} },
3768 .block_erase = spi_block_erase_20,
3769 }, {
3770 .eraseblocks = { {64 * 1024, 32} },
3771 .block_erase = spi_block_erase_d8,
3772 }, {
3773 .eraseblocks = { {2 * 1024 * 1024, 1} },
3774 .block_erase = spi_block_erase_c7,
3775 }
3776 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003777 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003778 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003780 },
3781
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003782 {
3783 .vendor = "PMC",
3784 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003785 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003786 .manufacture_id = PMC_ID,
3787 .model_id = PMC_25LV010,
3788 .total_size = 128,
3789 .page_size = 256,
3790 .tested = TEST_UNTESTED,
3791 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003792 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003793 .block_erasers =
3794 {
3795 {
3796 .eraseblocks = { {4 * 1024, 32} },
3797 .block_erase = spi_block_erase_d7,
3798 }, {
3799 .eraseblocks = { {32 * 1024, 4} },
3800 .block_erase = spi_block_erase_d8,
3801 }, {
3802 .eraseblocks = { {128 * 1024, 1} },
3803 .block_erase = spi_block_erase_c7,
3804 }
3805 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003806 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003807 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003808 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003809 },
3810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003811 {
3812 .vendor = "PMC",
3813 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003814 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003815 .manufacture_id = PMC_ID,
3816 .model_id = PMC_25LV016B,
3817 .total_size = 2048,
3818 .page_size = 256,
3819 .tested = TEST_UNTESTED,
3820 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003821 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003822 .block_erasers =
3823 {
3824 {
3825 .eraseblocks = { {4 * 1024, 512} },
3826 .block_erase = spi_block_erase_d7,
3827 }, {
3828 .eraseblocks = { {4 * 1024, 512} },
3829 .block_erase = spi_block_erase_20,
3830 }, {
3831 .eraseblocks = { {64 * 1024, 32} },
3832 .block_erase = spi_block_erase_d8,
3833 }, {
3834 .eraseblocks = { {2 * 1024 * 1024, 1} },
3835 .block_erase = spi_block_erase_60,
3836 }, {
3837 .eraseblocks = { {2 * 1024 * 1024, 1} },
3838 .block_erase = spi_block_erase_c7,
3839 }
3840 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003842 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003844 },
3845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 {
3847 .vendor = "PMC",
3848 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003849 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003850 .manufacture_id = PMC_ID,
3851 .model_id = PMC_25LV020,
3852 .total_size = 256,
3853 .page_size = 256,
3854 .tested = TEST_UNTESTED,
3855 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003856 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003857 .block_erasers =
3858 {
3859 {
3860 .eraseblocks = { {4 * 1024, 64} },
3861 .block_erase = spi_block_erase_d7,
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_c7,
3868 }
3869 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003870 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003871 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003872 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003873 },
3874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003875 {
3876 .vendor = "PMC",
3877 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003878 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003879 .manufacture_id = PMC_ID,
3880 .model_id = PMC_25LV040,
3881 .total_size = 512,
3882 .page_size = 256,
3883 .tested = TEST_UNTESTED,
3884 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003885 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003886 .block_erasers =
3887 {
3888 {
3889 .eraseblocks = { {4 * 1024, 128} },
3890 .block_erase = spi_block_erase_d7,
3891 }, {
3892 .eraseblocks = { {64 * 1024, 8} },
3893 .block_erase = spi_block_erase_d8,
3894 }, {
3895 .eraseblocks = { {512 * 1024, 1} },
3896 .block_erase = spi_block_erase_c7,
3897 }
3898 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003899 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003900 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003901 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003902 },
3903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003904 {
3905 .vendor = "PMC",
3906 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003907 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003908 .manufacture_id = PMC_ID,
3909 .model_id = PMC_25LV080B,
3910 .total_size = 1024,
3911 .page_size = 256,
3912 .tested = TEST_UNTESTED,
3913 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003914 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003915 .block_erasers =
3916 {
3917 {
3918 .eraseblocks = { {4 * 1024, 256} },
3919 .block_erase = spi_block_erase_d7,
3920 }, {
3921 .eraseblocks = { {4 * 1024, 256} },
3922 .block_erase = spi_block_erase_20,
3923 }, {
3924 .eraseblocks = { {64 * 1024, 16} },
3925 .block_erase = spi_block_erase_d8,
3926 }, {
3927 .eraseblocks = { {1024 * 1024, 1} },
3928 .block_erase = spi_block_erase_60,
3929 }, {
3930 .eraseblocks = { {1024 * 1024, 1} },
3931 .block_erase = spi_block_erase_c7,
3932 }
3933 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003934 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003935 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003936 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003937 },
3938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003939 {
3940 .vendor = "PMC",
3941 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003942 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003943 .manufacture_id = PMC_ID,
3944 .model_id = PMC_25LV512,
3945 .total_size = 64,
3946 .page_size = 256,
3947 .tested = TEST_UNTESTED,
3948 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003949 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003950 .block_erasers =
3951 {
3952 {
3953 .eraseblocks = { {4 * 1024, 16} },
3954 .block_erase = spi_block_erase_d7,
3955 }, {
3956 .eraseblocks = { {32 * 1024, 2} },
3957 .block_erase = spi_block_erase_d8,
3958 }, {
3959 .eraseblocks = { {64 * 1024, 1} },
3960 .block_erase = spi_block_erase_c7,
3961 }
3962 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003963 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003964 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003965 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003966 },
3967
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 {
3969 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003970 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003971 .bustype = CHIP_BUSTYPE_PARALLEL,
3972 .manufacture_id = PMC_ID_NOPREFIX,
3973 .model_id = PMC_29F002T,
3974 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003975 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003976 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3977 .tested = TEST_UNTESTED,
3978 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003979 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003980 .block_erasers =
3981 {
3982 {
3983 .eraseblocks = {
3984 {128 * 1024, 1},
3985 {96 * 1024, 1},
3986 {8 * 1024, 2},
3987 {16 * 1024, 1},
3988 },
Sean Nelson35727f72010-01-28 23:55:12 +00003989 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003990 }, {
3991 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003992 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003993 },
3994 },
Sean Nelson35727f72010-01-28 23:55:12 +00003995 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003996 .read = read_memmapped,
3997 },
3998
3999 {
4000 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004001 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004002 .bustype = CHIP_BUSTYPE_PARALLEL,
4003 .manufacture_id = PMC_ID_NOPREFIX,
4004 .model_id = PMC_29F002B,
4005 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004006 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004007 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004008 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004009 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004010 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004011 .block_erasers =
4012 {
4013 {
4014 .eraseblocks = {
4015 {16 * 1024, 1},
4016 {8 * 1024, 2},
4017 {96 * 1024, 1},
4018 {128 * 1024, 1},
4019 },
Sean Nelson35727f72010-01-28 23:55:12 +00004020 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004021 }, {
4022 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004023 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004024 },
4025 },
Sean Nelson35727f72010-01-28 23:55:12 +00004026 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004027 .read = read_memmapped,
4028 },
4029
4030 {
4031 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004032 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004033 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004034 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004035 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004036 .total_size = 128,
4037 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004038 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004039 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004040 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004041 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004042 .block_erasers =
4043 {
4044 {
4045 .eraseblocks = { {4 * 1024, 32} },
4046 .block_erase = erase_sector_jedec,
4047 }, {
4048 .eraseblocks = { {64 * 1024, 2} },
4049 .block_erase = erase_block_jedec,
4050 }, {
4051 .eraseblocks = { {128 * 1024, 1} },
4052 .block_erase = erase_chip_block_jedec,
4053 }
4054 },
Sean Nelson35727f72010-01-28 23:55:12 +00004055 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004056 .read = read_memmapped,
4057 },
4058
4059 {
4060 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004061 .name = "Pm39LV020",
4062 .bustype = CHIP_BUSTYPE_PARALLEL,
4063 .manufacture_id = PMC_ID_NOPREFIX,
4064 .model_id = PMC_39LV020,
4065 .total_size = 256,
4066 .page_size = 4096,
4067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4068 .tested = TEST_UNTESTED,
4069 .probe = probe_jedec,
4070 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4071 .block_erasers =
4072 {
4073 {
4074 .eraseblocks = { {4 * 1024, 64} },
4075 .block_erase = erase_sector_jedec,
4076 }, {
4077 .eraseblocks = { {64 * 1024, 4} },
4078 .block_erase = erase_block_jedec,
4079 }, {
4080 .eraseblocks = { {256 * 1024, 1} },
4081 .block_erase = erase_chip_block_jedec,
4082 }
4083 },
4084 .write = write_jedec_1,
4085 .read = read_memmapped,
4086 },
4087
4088 {
4089 .vendor = "PMC",
4090 .name = "Pm39LV040",
4091 .bustype = CHIP_BUSTYPE_PARALLEL,
4092 .manufacture_id = PMC_ID_NOPREFIX,
4093 .model_id = PMC_39LV040,
4094 .total_size = 512,
4095 .page_size = 4096,
4096 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4097 .tested = TEST_UNTESTED,
4098 .probe = probe_jedec,
4099 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4100 .block_erasers =
4101 {
4102 {
4103 .eraseblocks = { {4 * 1024, 128} },
4104 .block_erase = erase_sector_jedec,
4105 }, {
4106 .eraseblocks = { {64 * 1024, 8} },
4107 .block_erase = erase_block_jedec,
4108 }, {
4109 .eraseblocks = { {512 * 1024, 1} },
4110 .block_erase = erase_chip_block_jedec,
4111 }
4112 },
4113 .write = write_jedec_1,
4114 .read = read_memmapped,
4115 },
4116
4117 {
4118 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004119 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00004120 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004121 .manufacture_id = PMC_ID_NOPREFIX,
4122 .model_id = PMC_49FL002,
4123 .total_size = 256,
4124 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004125 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004126 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004127 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004128 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004129 .block_erasers =
4130 {
4131 {
4132 .eraseblocks = { {4 * 1024, 64} },
4133 .block_erase = erase_sector_jedec,
4134 }, {
4135 .eraseblocks = { {16 * 1024, 16} },
4136 .block_erase = erase_block_jedec,
4137 }, {
4138 .eraseblocks = { {256 * 1024, 1} },
4139 .block_erase = erase_chip_block_jedec,
4140 }
4141 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004142 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004145 },
4146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004147 {
4148 .vendor = "PMC",
4149 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00004150 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004151 .manufacture_id = PMC_ID_NOPREFIX,
4152 .model_id = PMC_49FL004,
4153 .total_size = 512,
4154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004155 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004156 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004157 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004158 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004159 .block_erasers =
4160 {
4161 {
4162 .eraseblocks = { {4 * 1024, 128} },
4163 .block_erase = erase_sector_jedec,
4164 }, {
4165 .eraseblocks = { {64 * 1024, 8} },
4166 .block_erase = erase_block_jedec,
4167 }, {
4168 .eraseblocks = { {512 * 1024, 1} },
4169 .block_erase = erase_chip_block_jedec,
4170 }
4171 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004172 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004173 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004174 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004175 },
4176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004177 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004178 .vendor = "Sanyo",
4179 .name = "LF25FW203A",
4180 .bustype = CHIP_BUSTYPE_SPI,
4181 .manufacture_id = SANYO_ID,
4182 .model_id = SANYO_LE25FW203A,
4183 .total_size = 2048,
4184 .page_size = 256,
4185 .tested = TEST_UNTESTED,
4186 .probe = probe_spi_rdid,
4187 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004188 .block_erasers =
4189 {
4190 {
4191 .eraseblocks = { {64 * 1024, 32} },
4192 .block_erase = spi_block_erase_d8,
4193 }, {
4194 .eraseblocks = { {2 * 1024 * 1024, 1} },
4195 .block_erase = spi_block_erase_c7,
4196 }
4197 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004198 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004199 .write = spi_chip_write_256,
4200 .read = spi_chip_read,
4201 },
4202
4203 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004204 .vendor = "Sharp",
4205 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004206 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004207 .manufacture_id = SHARP_ID,
4208 .model_id = SHARP_LHF00L04,
4209 .total_size = 1024,
4210 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004211 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004212 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004213 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004214 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004215 .block_erasers =
4216 {
4217 {
4218 .eraseblocks = {
4219 {64 * 1024, 15},
4220 {8 * 1024, 8}
4221 },
Sean Nelson28accc22010-03-19 18:47:06 +00004222 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004223 }, {
4224 .eraseblocks = {
4225 {1024 * 1024, 1}
4226 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004227 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004228 },
4229 },
Sean Nelson28accc22010-03-19 18:47:06 +00004230 .unlock = unlock_82802ab,
4231 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004232 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004233 },
4234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004235 {
4236 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004237 .name = "S25FL008A",
4238 .bustype = CHIP_BUSTYPE_SPI,
4239 .manufacture_id = SPANSION_ID,
4240 .model_id = SPANSION_S25FL008A,
4241 .total_size = 1024,
4242 .page_size = 256,
4243 .tested = TEST_OK_PREW,
4244 .probe = probe_spi_rdid,
4245 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004246 .block_erasers =
4247 {
4248 {
4249 .eraseblocks = { {64 * 1024, 16} },
4250 .block_erase = spi_block_erase_d8,
4251 }, {
4252 .eraseblocks = { {1024 * 1024, 1} },
4253 .block_erase = spi_block_erase_c7,
4254 }
4255 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004256 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004257 .write = spi_chip_write_256,
4258 .read = spi_chip_read,
4259 },
4260
4261 {
4262 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004264 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004265 .manufacture_id = SPANSION_ID,
4266 .model_id = SPANSION_S25FL016A,
4267 .total_size = 2048,
4268 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004269 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004270 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004271 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004272 .block_erasers =
4273 {
4274 {
4275 .eraseblocks = { {64 * 1024, 32} },
4276 .block_erase = spi_block_erase_d8,
4277 }, {
4278 .eraseblocks = { {2 * 1024 * 1024, 1} },
4279 .block_erase = spi_block_erase_c7,
4280 }
4281 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004282 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004283 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004284 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004285 },
4286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004287 {
4288 .vendor = "SST",
4289 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004290 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004291 .manufacture_id = SST_ID,
4292 .model_id = SST_25VF016B,
4293 .total_size = 2048,
4294 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004295 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004296 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004297 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004298 .block_erasers =
4299 {
4300 {
4301 .eraseblocks = { {4 * 1024, 512} },
4302 .block_erase = spi_block_erase_20,
4303 }, {
4304 .eraseblocks = { {32 * 1024, 64} },
4305 .block_erase = spi_block_erase_52,
4306 }, {
4307 .eraseblocks = { {64 * 1024, 32} },
4308 .block_erase = spi_block_erase_d8,
4309 }, {
4310 .eraseblocks = { {2 * 1024 * 1024, 1} },
4311 .block_erase = spi_block_erase_60,
4312 }, {
4313 .eraseblocks = { {2 * 1024 * 1024, 1} },
4314 .block_erase = spi_block_erase_c7,
4315 },
4316 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004317 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004318 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004319 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004320 },
4321
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004322 {
4323 .vendor = "SST",
4324 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004325 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004326 .manufacture_id = SST_ID,
4327 .model_id = SST_25VF032B,
4328 .total_size = 4096,
4329 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004330 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004331 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004332 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004333 .block_erasers =
4334 {
4335 {
4336 .eraseblocks = { {4 * 1024, 1024} },
4337 .block_erase = spi_block_erase_20,
4338 }, {
4339 .eraseblocks = { {32 * 1024, 128} },
4340 .block_erase = spi_block_erase_52,
4341 }, {
4342 .eraseblocks = { {64 * 1024, 64} },
4343 .block_erase = spi_block_erase_d8,
4344 }, {
4345 .eraseblocks = { {4 * 1024 * 1024, 1} },
4346 .block_erase = spi_block_erase_60,
4347 }, {
4348 .eraseblocks = { {4 * 1024 * 1024, 1} },
4349 .block_erase = spi_block_erase_c7,
4350 },
4351 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004352 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004353 .write = spi_chip_write_1,
4354 .read = spi_chip_read,
4355 },
4356
4357 {
4358 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004359 .name = "SST25VF064C",
4360 .bustype = CHIP_BUSTYPE_SPI,
4361 .manufacture_id = SST_ID,
4362 .model_id = SST_25VF064C,
4363 .total_size = 8192,
4364 .page_size = 256,
4365 .tested = TEST_OK_PREW,
4366 .probe = probe_spi_rdid,
4367 .probe_timing = TIMING_ZERO,
4368 .block_erasers =
4369 {
4370 {
4371 .eraseblocks = { {4 * 1024, 2048} },
4372 .block_erase = spi_block_erase_20,
4373 }, {
4374 .eraseblocks = { {32 * 1024, 256} },
4375 .block_erase = spi_block_erase_52,
4376 }, {
4377 .eraseblocks = { {64 * 1024, 128} },
4378 .block_erase = spi_block_erase_d8,
4379 }, {
4380 .eraseblocks = { {8 * 1024 * 1024, 1} },
4381 .block_erase = spi_block_erase_60,
4382 }, {
4383 .eraseblocks = { {8 * 1024 * 1024, 1} },
4384 .block_erase = spi_block_erase_c7,
4385 },
4386 },
4387 .unlock = spi_disable_blockprotect,
4388 .write = spi_chip_write_1,
4389 .read = spi_chip_read,
4390 },
4391
4392 {
4393 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004394 .name = "SST25VF040.REMS",
4395 .bustype = CHIP_BUSTYPE_SPI,
4396 .manufacture_id = SST_ID,
4397 .model_id = SST_25VF040_REMS,
4398 .total_size = 512,
4399 .page_size = 256,
4400 .tested = TEST_OK_PR,
4401 .probe = probe_spi_rems,
4402 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004403 .block_erasers =
4404 {
4405 {
4406 .eraseblocks = { {4 * 1024, 128} },
4407 .block_erase = spi_block_erase_20,
4408 }, {
4409 .eraseblocks = { {32 * 1024, 16} },
4410 .block_erase = spi_block_erase_52,
4411 }, {
4412 .eraseblocks = { {512 * 1024, 1} },
4413 .block_erase = spi_block_erase_60,
4414 },
4415 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004416 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004417 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004418 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004419 },
4420
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004421 {
4422 .vendor = "SST",
4423 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004424 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004425 .manufacture_id = SST_ID,
4426 .model_id = SST_25VF040B,
4427 .total_size = 512,
4428 .page_size = 256,
4429 .tested = TEST_UNTESTED,
4430 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004431 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004432 .block_erasers =
4433 {
4434 {
4435 .eraseblocks = { {4 * 1024, 128} },
4436 .block_erase = spi_block_erase_20,
4437 }, {
4438 .eraseblocks = { {32 * 1024, 16} },
4439 .block_erase = spi_block_erase_52,
4440 }, {
4441 .eraseblocks = { {64 * 1024, 8} },
4442 .block_erase = spi_block_erase_d8,
4443 }, {
4444 .eraseblocks = { {512 * 1024, 1} },
4445 .block_erase = spi_block_erase_60,
4446 }, {
4447 .eraseblocks = { {512 * 1024, 1} },
4448 .block_erase = spi_block_erase_c7,
4449 },
4450 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004451 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004452 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004453 .read = spi_chip_read,
4454 },
4455
4456 {
4457 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004458 .name = "SST25LF040A.RES",
4459 .bustype = CHIP_BUSTYPE_SPI,
4460 .manufacture_id = SST_ID,
4461 .model_id = SST_25VF040_REMS,
4462 .total_size = 512,
4463 .page_size = 256,
4464 .tested = TEST_OK_PROBE,
4465 .probe = probe_spi_res2,
4466 .probe_timing = TIMING_ZERO,
4467 .block_erasers =
4468 {
4469 {
4470 .eraseblocks = { {4 * 1024, 128} },
4471 .block_erase = spi_block_erase_20,
4472 }, {
4473 .eraseblocks = { {32 * 1024, 16} },
4474 .block_erase = spi_block_erase_52,
4475 }, {
4476 .eraseblocks = { {512 * 1024, 1} },
4477 .block_erase = spi_block_erase_60,
4478 },
4479 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004480 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004481 .write = spi_chip_write_1,
4482 .read = spi_chip_read,
4483 },
4484
4485 {
4486 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004487 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004488 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004489 .manufacture_id = SST_ID,
4490 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004491 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004492 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004493 .tested = TEST_OK_PR,
4494 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004495 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004496 .block_erasers =
4497 {
4498 {
4499 .eraseblocks = { {4 * 1024, 128} },
4500 .block_erase = spi_block_erase_20,
4501 }, {
4502 .eraseblocks = { {32 * 1024, 16} },
4503 .block_erase = spi_block_erase_52,
4504 }, {
4505 .eraseblocks = { {64 * 1024, 8} },
4506 .block_erase = spi_block_erase_d8,
4507 }, {
4508 .eraseblocks = { {512 * 1024, 1} },
4509 .block_erase = spi_block_erase_60,
4510 }, {
4511 .eraseblocks = { {512 * 1024, 1} },
4512 .block_erase = spi_block_erase_c7,
4513 },
4514 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004515 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004516 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004517 .read = spi_chip_read,
4518 },
4519
4520 {
4521 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004522 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004523 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004524 .manufacture_id = SST_ID,
4525 .model_id = SST_25VF080B,
4526 .total_size = 1024,
4527 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004528 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004529 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004530 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004531 .block_erasers =
4532 {
4533 {
4534 .eraseblocks = { {4 * 1024, 256} },
4535 .block_erase = spi_block_erase_20,
4536 }, {
4537 .eraseblocks = { {32 * 1024, 32} },
4538 .block_erase = spi_block_erase_52,
4539 }, {
4540 .eraseblocks = { {64 * 1024, 16} },
4541 .block_erase = spi_block_erase_d8,
4542 }, {
4543 .eraseblocks = { {1024 * 1024, 1} },
4544 .block_erase = spi_block_erase_60,
4545 }, {
4546 .eraseblocks = { {1024 * 1024, 1} },
4547 .block_erase = spi_block_erase_c7,
4548 },
4549 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004550 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004551 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004552 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004553 },
4554
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 {
4556 .vendor = "SST",
4557 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004558 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004559 .manufacture_id = SST_ID,
4560 .model_id = SST_28SF040,
4561 .total_size = 512,
4562 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004563 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004564 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004565 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004566 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004567 .block_erasers =
4568 {
4569 {
4570 .eraseblocks = { {128, 4096} },
4571 .block_erase = erase_sector_28sf040,
4572 }, {
4573 .eraseblocks = { {512 * 1024, 1} },
4574 .block_erase = erase_chip_28sf040,
4575 }
4576 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004577 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004578 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004579 },
4580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004581 {
4582 .vendor = "SST",
4583 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004584 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .manufacture_id = SST_ID,
4586 .model_id = SST_29EE010,
4587 .total_size = 128,
4588 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004589 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004590 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004592 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004593 .block_erasers =
4594 {
4595 {
4596 .eraseblocks = { {128 * 1024, 1} },
4597 .block_erase = erase_chip_block_jedec,
4598 }
4599 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004600 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004601 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004602 },
4603
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004604 {
4605 .vendor = "SST",
4606 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004607 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004608 .manufacture_id = SST_ID,
4609 .model_id = SST_29LE010,
4610 .total_size = 128,
4611 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004612 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .tested = TEST_UNTESTED,
4614 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004615 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004616 .block_erasers =
4617 {
4618 {
4619 .eraseblocks = { {128 * 1024, 1} },
4620 .block_erase = erase_chip_block_jedec,
4621 }
4622 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004623 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004624 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004625 },
4626
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004627 {
4628 .vendor = "SST",
4629 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004630 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004631 .manufacture_id = SST_ID,
4632 .model_id = SST_29EE020A,
4633 .total_size = 256,
4634 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004635 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004636 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004638 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004639 .block_erasers =
4640 {
4641 {
4642 .eraseblocks = { {256 * 1024, 1} },
4643 .block_erase = erase_chip_block_jedec,
4644 }
4645 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004646 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004647 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004648 },
4649
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004650 {
4651 .vendor = "SST",
4652 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004653 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004654 .manufacture_id = SST_ID,
4655 .model_id = SST_29LE020,
4656 .total_size = 256,
4657 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004658 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004659 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004661 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004662 .block_erasers =
4663 {
4664 {
4665 .eraseblocks = { {256 * 1024, 1} },
4666 .block_erase = erase_chip_block_jedec,
4667 }
4668 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004669 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004670 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004671 },
4672
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004673 {
4674 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004675 .name = "SST39SF512",
4676 .bustype = CHIP_BUSTYPE_PARALLEL,
4677 .manufacture_id = SST_ID,
4678 .model_id = SST_39SF512,
4679 .total_size = 64,
4680 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004681 .feature_bits = FEATURE_EITHER_RESET,
4682 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004683 .probe = probe_jedec,
4684 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004685 .block_erasers =
4686 {
4687 {
4688 .eraseblocks = { {4 * 1024, 16} },
4689 .block_erase = erase_sector_jedec,
4690 }, {
4691 .eraseblocks = { {64 * 1024, 1} },
4692 .block_erase = erase_chip_block_jedec,
4693 }
4694 },
Sean Nelson35727f72010-01-28 23:55:12 +00004695 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004696 .read = read_memmapped,
4697 },
4698
4699 {
4700 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004701 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004702 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004703 .manufacture_id = SST_ID,
4704 .model_id = SST_39SF010,
4705 .total_size = 128,
4706 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004707 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004708 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004709 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004710 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004711 .block_erasers =
4712 {
4713 {
4714 .eraseblocks = { {4 * 1024, 32} },
4715 .block_erase = erase_sector_jedec,
4716 }, {
4717 .eraseblocks = { {128 * 1024, 1} },
4718 .block_erase = erase_chip_block_jedec,
4719 }
4720 },
Sean Nelson35727f72010-01-28 23:55:12 +00004721 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004722 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004723 },
4724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004725 {
4726 .vendor = "SST",
4727 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004728 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004729 .manufacture_id = SST_ID,
4730 .model_id = SST_39SF020,
4731 .total_size = 256,
4732 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004733 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004734 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004735 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004736 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004737 .block_erasers =
4738 {
4739 {
4740 .eraseblocks = { {4 * 1024, 64} },
4741 .block_erase = erase_sector_jedec,
4742 }, {
4743 .eraseblocks = { {256 * 1024, 1} },
4744 .block_erase = erase_chip_block_jedec,
4745 }
4746 },
Sean Nelson35727f72010-01-28 23:55:12 +00004747 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004748 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004749 },
4750
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004751 {
4752 .vendor = "SST",
4753 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004754 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004755 .manufacture_id = SST_ID,
4756 .model_id = SST_39SF040,
4757 .total_size = 512,
4758 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004759 .feature_bits = FEATURE_EITHER_RESET,
4760 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004761 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004762 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004763 .block_erasers =
4764 {
4765 {
4766 .eraseblocks = { {4 * 1024, 128} },
4767 .block_erase = erase_sector_jedec,
4768 }, {
4769 .eraseblocks = { {512 * 1024, 1} },
4770 .block_erase = erase_chip_block_jedec,
4771 }
4772 },
Sean Nelson35727f72010-01-28 23:55:12 +00004773 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004774 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004775 },
4776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004777 {
4778 .vendor = "SST",
4779 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004780 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .manufacture_id = SST_ID,
4782 .model_id = SST_39VF512,
4783 .total_size = 64,
4784 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004785 .feature_bits = FEATURE_EITHER_RESET,
4786 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004787 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004788 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004789 .block_erasers =
4790 {
4791 {
4792 .eraseblocks = { {4 * 1024, 16} },
4793 .block_erase = erase_sector_jedec,
4794 }, {
4795 .eraseblocks = { {64 * 1024, 1} },
4796 .block_erase = erase_chip_block_jedec,
4797 }
4798 },
Sean Nelson35727f72010-01-28 23:55:12 +00004799 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004800 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004801 },
4802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004803 {
4804 .vendor = "SST",
4805 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004806 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004807 .manufacture_id = SST_ID,
4808 .model_id = SST_39VF010,
4809 .total_size = 128,
4810 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004811 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004812 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004813 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004814 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004815 .block_erasers =
4816 {
4817 {
4818 .eraseblocks = { {4 * 1024, 32} },
4819 .block_erase = erase_sector_jedec,
4820 }, {
4821 .eraseblocks = { {128 * 1024, 1} },
4822 .block_erase = erase_chip_block_jedec,
4823 }
4824 },
Sean Nelson35727f72010-01-28 23:55:12 +00004825 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004826 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004827 },
4828
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 {
4830 .vendor = "SST",
4831 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004832 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004833 .manufacture_id = SST_ID,
4834 .model_id = SST_39VF020,
4835 .total_size = 256,
4836 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004837 .feature_bits = FEATURE_EITHER_RESET,
4838 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004839 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004840 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004841 .block_erasers =
4842 {
4843 {
4844 .eraseblocks = { {4 * 1024, 64} },
4845 .block_erase = erase_sector_jedec,
4846 }, {
4847 .eraseblocks = { {256 * 1024, 1} },
4848 .block_erase = erase_chip_block_jedec,
4849 }
4850 },
Sean Nelson35727f72010-01-28 23:55:12 +00004851 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004853 },
4854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004855 {
4856 .vendor = "SST",
4857 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 .manufacture_id = SST_ID,
4860 .model_id = SST_39VF040,
4861 .total_size = 512,
4862 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004863 .feature_bits = FEATURE_EITHER_RESET,
4864 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004865 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004866 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004867 .block_erasers =
4868 {
4869 {
4870 .eraseblocks = { {4 * 1024, 128} },
4871 .block_erase = erase_sector_jedec,
4872 }, {
4873 .eraseblocks = { {512 * 1024, 1} },
4874 .block_erase = erase_chip_block_jedec,
4875 }
4876 },
Sean Nelson35727f72010-01-28 23:55:12 +00004877 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004878 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004879 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004881 {
4882 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004883 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004884 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004885 .manufacture_id = SST_ID,
4886 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004887 .total_size = 1024,
4888 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004889 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004890 .tested = TEST_UNTESTED,
4891 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004892 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004893 .block_erasers =
4894 {
4895 {
4896 .eraseblocks = { {4 * 1024, 256} },
4897 .block_erase = erase_sector_jedec,
4898 }, {
4899 .eraseblocks = { {64 * 1024, 16} },
4900 .block_erase = erase_block_jedec,
4901 }, {
4902 .eraseblocks = { {1024 * 1024, 1} },
4903 .block_erase = erase_chip_block_jedec,
4904 }
4905 },
Sean Nelson35727f72010-01-28 23:55:12 +00004906 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004907 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004908 },
4909
4910 {
4911 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004912 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004913 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004914 .manufacture_id = SST_ID,
4915 .model_id = SST_49LF002A,
4916 .total_size = 256,
4917 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004918 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004919 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004920 .probe = probe_jedec,
4921 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004922 .block_erasers =
4923 {
4924 {
4925 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004926 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004927 }, {
4928 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004929 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004930 }, {
4931 .eraseblocks = { {256 * 1024, 1} },
4932 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4933 }
4934 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004935 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004936 .unlock = unlock_sst_fwhub,
4937 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004938 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004939 },
4940
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004941 {
4942 .vendor = "SST",
4943 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004944 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004945 .manufacture_id = SST_ID,
4946 .model_id = SST_49LF003A,
4947 .total_size = 384,
4948 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004949 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004950 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004951 .probe = probe_jedec,
4952 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004953 .block_erasers =
4954 {
4955 {
4956 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004957 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004958 }, {
4959 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004960 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004961 }, {
4962 .eraseblocks = { {384 * 1024, 1} },
4963 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4964 }
4965 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004966 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004967 .unlock = unlock_sst_fwhub,
4968 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004969 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004970 },
4971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004972 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004973 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4974 * and is only honored for 64k block erase, but not 4k sector erase.
4975 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004976 .vendor = "SST",
4977 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004978 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004979 .manufacture_id = SST_ID,
4980 .model_id = SST_49LF004A,
4981 .total_size = 512,
4982 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004983 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004984 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004985 .probe = probe_jedec,
4986 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004987 .block_erasers =
4988 {
4989 {
4990 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004991 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004992 }, {
4993 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004994 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004995 }, {
4996 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004997 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004998 },
4999 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005000 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005001 .unlock = unlock_sst_fwhub,
5002 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005003 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005004 },
5005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005006 {
5007 .vendor = "SST",
5008 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005009 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005010 .manufacture_id = SST_ID,
5011 .model_id = SST_49LF004C,
5012 .total_size = 512,
5013 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005014 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005015 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005016 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005017 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005018 .block_erasers =
5019 {
5020 {
5021 .eraseblocks = { {4 * 1024, 128} },
5022 .block_erase = erase_sector_49lfxxxc,
5023 }, {
5024 .eraseblocks = {
5025 {64 * 1024, 7},
5026 {32 * 1024, 1},
5027 {8 * 1024, 2},
5028 {16 * 1024, 1},
5029 },
Sean Nelson69e58112010-03-23 17:10:28 +00005030 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005031 }
5032 },
Sean Nelson69e58112010-03-23 17:10:28 +00005033 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005034 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005036 },
5037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005038 {
5039 .vendor = "SST",
5040 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005041 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005042 .manufacture_id = SST_ID,
5043 .model_id = SST_49LF008A,
5044 .total_size = 1024,
5045 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005046 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005047 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005048 .probe = probe_jedec,
5049 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005050 .block_erasers =
5051 {
5052 {
5053 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005054 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005055 }, {
5056 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005057 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005058 }, {
5059 .eraseblocks = { {1024 * 1024, 1} },
5060 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5061 }
5062 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005063 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005064 .unlock = unlock_sst_fwhub,
5065 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005066 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005067 },
5068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005069 {
5070 .vendor = "SST",
5071 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005072 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005073 .manufacture_id = SST_ID,
5074 .model_id = SST_49LF008C,
5075 .total_size = 1024,
5076 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005077 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005078 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005079 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005080 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005081 .block_erasers =
5082 {
5083 {
5084 .eraseblocks = { {4 * 1024, 256} },
5085 .block_erase = erase_sector_49lfxxxc,
5086 }, {
5087 .eraseblocks = {
5088 {64 * 1024, 15},
5089 {32 * 1024, 1},
5090 {8 * 1024, 2},
5091 {16 * 1024, 1},
5092 },
Sean Nelson69e58112010-03-23 17:10:28 +00005093 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005094 }
5095 },
Sean Nelson69e58112010-03-23 17:10:28 +00005096 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005099 },
5100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 {
5102 .vendor = "SST",
5103 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005104 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005105 .manufacture_id = SST_ID,
5106 .model_id = SST_49LF016C,
5107 .total_size = 2048,
5108 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005109 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005110 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005111 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005112 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005113 .block_erasers =
5114 {
5115 {
5116 .eraseblocks = { {4 * 1024, 512} },
5117 .block_erase = erase_sector_49lfxxxc,
5118 }, {
5119 .eraseblocks = {
5120 {64 * 1024, 31},
5121 {32 * 1024, 1},
5122 {8 * 1024, 2},
5123 {16 * 1024, 1},
5124 },
Sean Nelson69e58112010-03-23 17:10:28 +00005125 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005126 }
5127 },
Sean Nelson69e58112010-03-23 17:10:28 +00005128 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005129 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005130 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005131 },
5132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005133 {
5134 .vendor = "SST",
5135 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005136 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .manufacture_id = SST_ID,
5138 .model_id = SST_49LF020,
5139 .total_size = 256,
5140 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005141 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005142 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005143 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005144 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005145 .block_erasers =
5146 {
5147 {
5148 .eraseblocks = { {4 * 1024, 64} },
5149 .block_erase = erase_sector_jedec,
5150 }, {
5151 .eraseblocks = { {16 * 1024, 16} },
5152 .block_erase = erase_block_jedec,
5153 }, {
5154 .eraseblocks = { {256 * 1024, 1} },
5155 .block_erase = NULL,
5156 }
5157 },
Sean Nelson35727f72010-01-28 23:55:12 +00005158 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005159 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005160 },
5161
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 {
5163 .vendor = "SST",
5164 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005165 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005166 .manufacture_id = SST_ID,
5167 .model_id = SST_49LF020A,
5168 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005169 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005170 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005171 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005172 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005173 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005174 .block_erasers =
5175 {
5176 {
5177 .eraseblocks = { {4 * 1024, 64} },
5178 .block_erase = erase_sector_jedec,
5179 }, {
5180 .eraseblocks = { {16 * 1024, 16} },
5181 .block_erase = erase_block_jedec,
5182 }, {
5183 .eraseblocks = { {256 * 1024, 1} },
5184 .block_erase = NULL,
5185 }
5186 },
Sean Nelson35727f72010-01-28 23:55:12 +00005187 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005188 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005189 },
5190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005191 {
5192 .vendor = "SST",
5193 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005194 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005195 .manufacture_id = SST_ID,
5196 .model_id = SST_49LF040,
5197 .total_size = 512,
5198 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005199 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005200 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005201 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005202 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005203 .block_erasers =
5204 {
5205 {
5206 .eraseblocks = { {4 * 1024, 128} },
5207 .block_erase = erase_sector_jedec,
5208 }, {
5209 .eraseblocks = { {64 * 1024, 8} },
5210 .block_erase = erase_block_jedec,
5211 }, {
5212 .eraseblocks = { {512 * 1024, 1} },
5213 .block_erase = NULL,
5214 }
5215 },
Sean Nelson35727f72010-01-28 23:55:12 +00005216 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005217 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005218 },
5219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005220 {
5221 .vendor = "SST",
5222 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005223 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005224 .manufacture_id = SST_ID,
5225 .model_id = SST_49LF040B,
5226 .total_size = 512,
5227 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005228 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005229 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005230 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005231 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005232 .block_erasers =
5233 {
5234 {
5235 .eraseblocks = { {4 * 1024, 128} },
5236 .block_erase = erase_sector_jedec,
5237 }, {
5238 .eraseblocks = { {64 * 1024, 8} },
5239 .block_erase = erase_block_jedec,
5240 }, {
5241 .eraseblocks = { {512 * 1024, 1} },
5242 .block_erase = NULL,
5243 }
5244 },
Sean Nelson35727f72010-01-28 23:55:12 +00005245 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005246 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005247 },
5248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005249 {
5250 .vendor = "SST",
5251 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005252 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005253 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005254 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005255 .total_size = 1024,
5256 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005257 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005258 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005260 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005261 .block_erasers =
5262 {
5263 {
5264 .eraseblocks = { {4 * 1024, 256} },
5265 .block_erase = erase_sector_jedec,
5266 }, {
5267 .eraseblocks = { {64 * 1024, 16} },
5268 .block_erase = erase_block_jedec,
5269 }, {
5270 .eraseblocks = { {1024 * 1024, 1} },
5271 .block_erase = NULL,
5272 }
5273 },
Sean Nelson35727f72010-01-28 23:55:12 +00005274 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005275 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005276 },
5277
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005278 {
5279 .vendor = "SST",
5280 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005281 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005282 .manufacture_id = SST_ID,
5283 .model_id = SST_49LF160C,
5284 .total_size = 2048,
5285 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005286 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005287 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005288 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005289 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005290 .block_erasers =
5291 {
5292 {
5293 .eraseblocks = { {4 * 1024, 512} },
5294 .block_erase = erase_sector_49lfxxxc,
5295 }, {
5296 .eraseblocks = {
5297 {64 * 1024, 31},
5298 {32 * 1024, 1},
5299 {8 * 1024, 2},
5300 {16 * 1024, 1},
5301 },
Sean Nelson69e58112010-03-23 17:10:28 +00005302 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005303 }
5304 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005305 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005306 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005308 },
5309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005310 {
5311 .vendor = "ST",
5312 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005313 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 .manufacture_id = ST_ID,
5315 .model_id = ST_M25P05A,
5316 .total_size = 64,
5317 .page_size = 256,
5318 .tested = TEST_UNTESTED,
5319 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005320 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005321 .block_erasers =
5322 {
5323 {
5324 .eraseblocks = { {32 * 1024, 2} },
5325 .block_erase = spi_block_erase_d8,
5326 }, {
5327 .eraseblocks = { {64 * 1024, 1} },
5328 .block_erase = spi_block_erase_c7,
5329 }
5330 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005331 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005332 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005333 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005334 },
5335
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005336 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5337 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005338 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005339 * only is successful if RDID does not work.
5340 */
5341 {
5342 .vendor = "ST",
5343 .name = "M25P05.RES",
5344 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005345 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005346 .model_id = ST_M25P05_RES,
5347 .total_size = 64,
5348 .page_size = 256,
5349 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005350 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005351 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005352 .block_erasers =
5353 {
5354 {
5355 .eraseblocks = { {32 * 1024, 2} },
5356 .block_erase = spi_block_erase_d8,
5357 }, {
5358 .eraseblocks = { {64 * 1024, 1} },
5359 .block_erase = spi_block_erase_c7,
5360 }
5361 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005362 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005363 .write = spi_chip_write_1, /* 128 */
5364 .read = spi_chip_read,
5365 },
5366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005367 {
5368 .vendor = "ST",
5369 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005370 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005371 .manufacture_id = ST_ID,
5372 .model_id = ST_M25P10A,
5373 .total_size = 128,
5374 .page_size = 256,
5375 .tested = TEST_UNTESTED,
5376 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005377 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005378 .block_erasers =
5379 {
5380 {
5381 .eraseblocks = { {32 * 1024, 4} },
5382 .block_erase = spi_block_erase_d8,
5383 }, {
5384 .eraseblocks = { {128 * 1024, 1} },
5385 .block_erase = spi_block_erase_c7,
5386 }
5387 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005388 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005389 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005390 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005391 },
5392
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005393 /* The ST M25P10 has the same problem as the M25P05. */
5394 {
5395 .vendor = "ST",
5396 .name = "M25P10.RES",
5397 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005398 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005399 .model_id = ST_M25P10_RES,
5400 .total_size = 128,
5401 .page_size = 256,
5402 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005403 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005404 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005405 .block_erasers =
5406 {
5407 {
5408 .eraseblocks = { {32 * 1024, 4} },
5409 .block_erase = spi_block_erase_d8,
5410 }, {
5411 .eraseblocks = { {128 * 1024, 1} },
5412 .block_erase = spi_block_erase_c7,
5413 }
5414 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005415 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005416 .write = spi_chip_write_1, /* 128 */
5417 .read = spi_chip_read,
5418 },
5419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005420 {
5421 .vendor = "ST",
5422 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005423 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 .manufacture_id = ST_ID,
5425 .model_id = ST_M25P20,
5426 .total_size = 256,
5427 .page_size = 256,
5428 .tested = TEST_UNTESTED,
5429 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005430 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005431 .block_erasers =
5432 {
5433 {
5434 .eraseblocks = { {64 * 1024, 4} },
5435 .block_erase = spi_block_erase_d8,
5436 }, {
5437 .eraseblocks = { {256 * 1024, 1} },
5438 .block_erase = spi_block_erase_c7,
5439 }
5440 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005441 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005442 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005443 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005444 },
5445
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005446 {
5447 .vendor = "ST",
5448 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005449 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 .manufacture_id = ST_ID,
5451 .model_id = ST_M25P40,
5452 .total_size = 512,
5453 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005454 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005455 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005456 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005457 .block_erasers =
5458 {
5459 {
5460 .eraseblocks = { {64 * 1024, 8} },
5461 .block_erase = spi_block_erase_d8,
5462 }, {
5463 .eraseblocks = { {512 * 1024, 1} },
5464 .block_erase = spi_block_erase_c7,
5465 }
5466 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005467 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005468 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005469 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005470 },
5471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005472 {
5473 .vendor = "ST",
5474 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005475 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005476 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005477 .model_id = ST_M25P40_RES,
5478 .total_size = 512,
5479 .page_size = 256,
5480 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005481 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005482 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005483 .block_erasers =
5484 {
5485 {
5486 .eraseblocks = { {64 * 1024, 8} },
5487 .block_erase = spi_block_erase_d8,
5488 }, {
5489 .eraseblocks = { {512 * 1024, 1} },
5490 .block_erase = spi_block_erase_c7,
5491 }
5492 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005493 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005496 },
5497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005498 {
5499 .vendor = "ST",
5500 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005502 .manufacture_id = ST_ID,
5503 .model_id = ST_M25P80,
5504 .total_size = 1024,
5505 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005506 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005508 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005509 .block_erasers =
5510 {
5511 {
5512 .eraseblocks = { {64 * 1024, 16} },
5513 .block_erase = spi_block_erase_d8,
5514 }, {
5515 .eraseblocks = { {1024 * 1024, 1} },
5516 .block_erase = spi_block_erase_c7,
5517 }
5518 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005519 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005520 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005521 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005522 },
5523
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005524 {
5525 .vendor = "ST",
5526 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005527 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005528 .manufacture_id = ST_ID,
5529 .model_id = ST_M25P16,
5530 .total_size = 2048,
5531 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005532 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005533 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005534 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005535 .block_erasers =
5536 {
5537 {
5538 .eraseblocks = { {64 * 1024, 32} },
5539 .block_erase = spi_block_erase_d8,
5540 }, {
5541 .eraseblocks = { {2 * 1024 * 1024, 1} },
5542 .block_erase = spi_block_erase_c7,
5543 }
5544 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005545 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005546 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005547 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005548 },
5549
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005550 {
5551 .vendor = "ST",
5552 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005553 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005554 .manufacture_id = ST_ID,
5555 .model_id = ST_M25P32,
5556 .total_size = 4096,
5557 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005558 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005559 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005560 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005561 .block_erasers =
5562 {
5563 {
5564 .eraseblocks = { {64 * 1024, 64} },
5565 .block_erase = spi_block_erase_d8,
5566 }, {
5567 .eraseblocks = { {4 * 1024 * 1024, 1} },
5568 .block_erase = spi_block_erase_c7,
5569 }
5570 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005571 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005572 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005573 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005574 },
5575
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005576 {
5577 .vendor = "ST",
5578 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005579 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005580 .manufacture_id = ST_ID,
5581 .model_id = ST_M25P64,
5582 .total_size = 8192,
5583 .page_size = 256,
5584 .tested = TEST_UNTESTED,
5585 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005586 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005587 .block_erasers =
5588 {
5589 {
5590 .eraseblocks = { {64 * 1024, 128} },
5591 .block_erase = spi_block_erase_d8,
5592 }, {
5593 .eraseblocks = { {8 * 1024 * 1024, 1} },
5594 .block_erase = spi_block_erase_c7,
5595 }
5596 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005597 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005598 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005599 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005600 },
5601
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005602 {
5603 .vendor = "ST",
5604 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005605 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005606 .manufacture_id = ST_ID,
5607 .model_id = ST_M25P128,
5608 .total_size = 16384,
5609 .page_size = 256,
5610 .tested = TEST_UNTESTED,
5611 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005612 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005613 .block_erasers =
5614 {
5615 {
5616 .eraseblocks = { {256 * 1024, 64} },
5617 .block_erase = spi_block_erase_d8,
5618 }, {
5619 .eraseblocks = { {16 * 1024 * 1024, 1} },
5620 .block_erase = spi_block_erase_c7,
5621 }
5622 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005623 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005624 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005625 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005626 },
5627
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005628 {
5629 .vendor = "ST",
5630 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005631 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005632 .manufacture_id = ST_ID,
5633 .model_id = ST_M29F002B,
5634 .total_size = 256,
5635 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005636 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005637 .tested = TEST_UNTESTED,
5638 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005639 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005640 .block_erasers =
5641 {
5642 {
5643 .eraseblocks = {
5644 {16 * 1024, 1},
5645 {8 * 1024, 2},
5646 {32 * 1024, 1},
5647 {64 * 1024, 3},
5648 },
5649 .block_erase = erase_sector_jedec,
5650 }, {
5651 .eraseblocks = { {256 * 1024, 1} },
5652 .block_erase = erase_chip_block_jedec,
5653 }
5654 },
Sean Nelson35727f72010-01-28 23:55:12 +00005655 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005656 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005657 },
5658
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005659 {
5660 .vendor = "ST",
5661 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005662 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005663 .manufacture_id = ST_ID,
5664 .model_id = ST_M29F002T,
5665 .total_size = 256,
5666 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005667 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5668 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005669 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005670 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005671 .block_erasers =
5672 {
5673 {
5674 .eraseblocks = {
5675 {64 * 1024, 3},
5676 {32 * 1024, 1},
5677 {8 * 1024, 2},
5678 {16 * 1024, 1},
5679 },
5680 .block_erase = erase_sector_jedec,
5681 }, {
5682 .eraseblocks = { {256 * 1024, 1} },
5683 .block_erase = erase_chip_block_jedec,
5684 }
5685 },
Sean Nelson35727f72010-01-28 23:55:12 +00005686 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005687 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005688 },
5689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005690 {
5691 .vendor = "ST",
5692 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005693 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005694 .manufacture_id = ST_ID,
5695 .model_id = ST_M29F040B,
5696 .total_size = 512,
5697 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005698 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5699 .tested = TEST_UNTESTED,
5700 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005701 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005702 .block_erasers =
5703 {
5704 {
5705 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005706 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005707 }, {
5708 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005709 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005710 }
5711 },
Sean Nelson35727f72010-01-28 23:55:12 +00005712 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005713 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005714 },
5715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005716 {
Sean Nelson35727f72010-01-28 23:55:12 +00005717 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005718 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005719 .name = "M29F400BB",
5720 .bustype = CHIP_BUSTYPE_PARALLEL,
5721 .manufacture_id = ST_ID,
5722 .model_id = ST_M29F400BB,
5723 .total_size = 512,
5724 .page_size = 64 * 1024,
5725 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
5726 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
5727 .probe = probe_m29f400bt,
5728 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
5729 .block_erasers =
5730 {
5731 {
5732 .eraseblocks = {
5733 {16 * 1024, 1},
5734 {8 * 1024, 2},
5735 {32 * 1024, 1},
5736 {64 * 1024, 7},
5737 },
5738 .block_erase = block_erase_m29f400bt,
5739 }, {
5740 .eraseblocks = { {512 * 1024, 1} },
5741 .block_erase = block_erase_chip_m29f400bt,
5742 }
5743 },
5744 .write = NULL,
5745 .read = read_memmapped,
5746 },
5747 {
5748 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
5749 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005750 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005751 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005752 .manufacture_id = ST_ID,
5753 .model_id = ST_M29F400BT,
5754 .total_size = 512,
5755 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005756 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005757 .tested = TEST_UNTESTED,
5758 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005759 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005760 .block_erasers =
5761 {
5762 {
5763 .eraseblocks = {
5764 {64 * 1024, 7},
5765 {32 * 1024, 1},
5766 {8 * 1024, 2},
5767 {16 * 1024, 1},
5768 },
5769 .block_erase = block_erase_m29f400bt,
5770 }, {
5771 .eraseblocks = { {512 * 1024, 1} },
5772 .block_erase = block_erase_chip_m29f400bt,
5773 }
5774 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005775 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005776 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005777 },
5778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005779 {
5780 .vendor = "ST",
5781 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005782 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005783 .manufacture_id = ST_ID,
5784 .model_id = ST_M29W010B,
5785 .total_size = 128,
5786 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005787 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005788 .tested = TEST_UNTESTED,
5789 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005790 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005791 .block_erasers =
5792 {
5793 {
5794 .eraseblocks = { {16 * 1024, 8}, },
5795 .block_erase = erase_sector_jedec,
5796 }, {
5797 .eraseblocks = { {128 * 1024, 1} },
5798 .block_erase = erase_chip_block_jedec,
5799 }
5800 },
Sean Nelson35727f72010-01-28 23:55:12 +00005801 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005802 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005803 },
5804
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005805 {
5806 .vendor = "ST",
5807 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005808 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005809 .manufacture_id = ST_ID,
5810 .model_id = ST_M29W040B,
5811 .total_size = 512,
5812 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005813 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005814 .tested = TEST_UNTESTED,
5815 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005816 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005817 .block_erasers =
5818 {
5819 {
5820 .eraseblocks = { {64 * 1024, 8}, },
5821 .block_erase = erase_sector_jedec,
5822 }, {
5823 .eraseblocks = { {512 * 1024, 1} },
5824 .block_erase = erase_chip_block_jedec,
5825 }
5826 },
Sean Nelson35727f72010-01-28 23:55:12 +00005827 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005828 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005829 },
5830
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005831 {
5832 .vendor = "ST",
5833 .name = "M29W512B",
5834 .bustype = CHIP_BUSTYPE_PARALLEL,
5835 .manufacture_id = ST_ID,
5836 .model_id = ST_M29W512B,
5837 .total_size = 64,
5838 .page_size = 64 * 1024,
5839 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5840 .tested = TEST_OK_PREW,
5841 .probe = probe_jedec,
5842 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005843 .block_erasers =
5844 {
5845 {
5846 .eraseblocks = { {64 * 1024, 1} },
5847 .block_erase = erase_chip_block_jedec,
5848 }
5849 },
5850 .write = write_jedec_1,
5851 .read = read_memmapped,
5852 },
5853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005854 {
5855 .vendor = "ST",
5856 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005857 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005858 .manufacture_id = ST_ID,
5859 .model_id = ST_M50FLW040A,
5860 .total_size = 512,
5861 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005862 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005863 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005864 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005865 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005866 .block_erasers =
5867 {
5868 {
Sean Nelson329bde72010-01-19 16:39:19 +00005869 .eraseblocks = {
5870 {4 * 1024, 16}, /* sector */
5871 {64 * 1024, 5}, /* block */
5872 {4 * 1024, 16}, /* sector */
5873 {4 * 1024, 16}, /* sector */
5874 },
5875 .block_erase = NULL,
5876 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005877 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005878 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005879 }, {
5880 .eraseblocks = { {512 * 1024, 1} },
5881 .block_erase = erase_chip_stm50flw0x0x,
5882 }
5883 },
Sean Nelson28accc22010-03-19 18:47:06 +00005884 .unlock = unlock_stm50flw0x0x,
5885 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005887 },
5888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005889 {
5890 .vendor = "ST",
5891 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005892 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005893 .manufacture_id = ST_ID,
5894 .model_id = ST_M50FLW040B,
5895 .total_size = 512,
5896 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005897 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005898 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005899 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005900 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005901 .block_erasers =
5902 {
5903 {
Sean Nelson329bde72010-01-19 16:39:19 +00005904 .eraseblocks = {
5905 {4 * 1024, 16}, /* sector */
5906 {4 * 1024, 16}, /* sector */
5907 {64 * 1024, 5}, /* block */
5908 {4 * 1024, 16}, /* sector */
5909 },
5910 .block_erase = NULL,
5911 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005912 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005913 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005914 }, {
5915 .eraseblocks = { {512 * 1024, 1} },
5916 .block_erase = erase_chip_stm50flw0x0x,
5917 }
5918 },
Sean Nelson28accc22010-03-19 18:47:06 +00005919 .unlock = unlock_stm50flw0x0x,
5920 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005921 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005922 },
5923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 {
5925 .vendor = "ST",
5926 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005927 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005928 .manufacture_id = ST_ID,
5929 .model_id = ST_M50FLW080A,
5930 .total_size = 1024,
5931 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005932 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005933 .tested = TEST_UNTESTED,
5934 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005935 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005936 .block_erasers =
5937 {
5938 {
Sean Nelson329bde72010-01-19 16:39:19 +00005939 .eraseblocks = {
5940 {4 * 1024, 16}, /* sector */
5941 {64 * 1024, 13}, /* block */
5942 {4 * 1024, 16}, /* sector */
5943 {4 * 1024, 16}, /* sector */
5944 },
5945 .block_erase = NULL,
5946 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005947 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005948 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005949 }, {
5950 .eraseblocks = { {1024 * 1024, 1} },
5951 .block_erase = erase_chip_stm50flw0x0x,
5952 }
5953 },
Sean Nelson28accc22010-03-19 18:47:06 +00005954 .unlock = unlock_stm50flw0x0x,
5955 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005956 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005957 },
5958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005959 {
5960 .vendor = "ST",
5961 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005962 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005963 .manufacture_id = ST_ID,
5964 .model_id = ST_M50FLW080B,
5965 .total_size = 1024,
5966 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005967 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005969 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005970 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005971 .block_erasers =
5972 {
5973 {
Sean Nelson329bde72010-01-19 16:39:19 +00005974 .eraseblocks = {
5975 {4 * 1024, 16}, /* sector */
5976 {4 * 1024, 16}, /* sector */
5977 {64 * 1024, 13}, /* block */
5978 {4 * 1024, 16}, /* sector */
5979 },
5980 .block_erase = NULL,
5981 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005982 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005983 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005984 }, {
5985 .eraseblocks = { {1024 * 1024, 1} },
5986 .block_erase = erase_chip_stm50flw0x0x,
5987 }
5988 },
Sean Nelson28accc22010-03-19 18:47:06 +00005989 .unlock = unlock_stm50flw0x0x,
5990 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005991 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005992 },
5993
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 {
5995 .vendor = "ST",
5996 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005997 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005998 .manufacture_id = ST_ID,
5999 .model_id = ST_M50FW002,
6000 .total_size = 256,
6001 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006002 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006004 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006005 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006006 .block_erasers =
6007 {
6008 {
6009 .eraseblocks = {
6010 {64 * 1024, 3},
6011 {32 * 1024, 1},
6012 {8 * 1024, 2},
6013 {16 * 1024, 1},
6014 },
Sean Nelson28accc22010-03-19 18:47:06 +00006015 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006016 }, {
6017 .eraseblocks = { {256 * 1024, 1} },
6018 .block_erase = erase_chip_stm50flw0x0x,
6019 }
6020 },
Sean Nelson28accc22010-03-19 18:47:06 +00006021 .unlock = unlock_stm50flw0x0x,
6022 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006023 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006024 },
6025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006026 {
6027 .vendor = "ST",
6028 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006029 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006030 .manufacture_id = ST_ID,
6031 .model_id = ST_M50FW016,
6032 .total_size = 2048,
6033 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006034 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006035 .tested = TEST_UNTESTED,
6036 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006037 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006038 .block_erasers =
6039 {
6040 {
6041 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006042 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006043 }, {
6044 .eraseblocks = { {2 * 1024 * 1024, 1} },
6045 .block_erase = erase_chip_stm50flw0x0x,
6046 }
6047 },
Sean Nelson28accc22010-03-19 18:47:06 +00006048 .unlock = unlock_stm50flw0x0x,
6049 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006050 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006051 },
6052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006053 {
6054 .vendor = "ST",
6055 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006056 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006057 .manufacture_id = ST_ID,
6058 .model_id = ST_M50FW040,
6059 .total_size = 512,
6060 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006061 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006062 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006064 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006065 .block_erasers =
6066 {
6067 {
6068 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006069 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006070 }, {
6071 .eraseblocks = { {512 * 1024, 1} },
6072 .block_erase = erase_chip_stm50flw0x0x,
6073 }
6074 },
Sean Nelson28accc22010-03-19 18:47:06 +00006075 .unlock = unlock_stm50flw0x0x,
6076 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006077 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006078 },
6079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006080 {
6081 .vendor = "ST",
6082 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006083 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006084 .manufacture_id = ST_ID,
6085 .model_id = ST_M50FW080,
6086 .total_size = 1024,
6087 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006088 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006089 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006091 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006092 .block_erasers =
6093 {
6094 {
6095 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006096 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006097 }, {
6098 .eraseblocks = { {1024 * 1024, 1} },
6099 .block_erase = erase_chip_stm50flw0x0x,
6100 }
6101 },
Sean Nelson28accc22010-03-19 18:47:06 +00006102 .unlock = unlock_stm50flw0x0x,
6103 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006104 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006105 },
6106
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006107 {
6108 .vendor = "ST",
6109 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006110 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006111 .manufacture_id = ST_ID,
6112 .model_id = ST_M50LPW116,
6113 .total_size = 2048,
6114 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006115 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006117 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006118 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006119 .block_erasers =
6120 {
6121 {
6122 .eraseblocks = {
6123 {4 * 1024, 16},
6124 {64 * 1024, 30},
6125 {32 * 1024, 1},
6126 {8 * 1024, 2},
6127 {16 * 1024, 1},
6128 },
Sean Nelson28accc22010-03-19 18:47:06 +00006129 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006130 }, {
6131 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006132 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006133 }
6134 },
Sean Nelson28accc22010-03-19 18:47:06 +00006135 .unlock = unlock_stm50flw0x0x,
6136 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006137 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006138 },
6139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 {
6141 .vendor = "SyncMOS",
6142 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006143 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006144 .manufacture_id = SYNCMOS_ID,
6145 .model_id = S29C31004T,
6146 .total_size = 512,
6147 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006148 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006149 .tested = TEST_UNTESTED,
6150 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006151 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006152 .block_erasers =
6153 {
6154 {
6155 .eraseblocks = { {1 * 1024, 512} },
6156 .block_erase = erase_sector_jedec,
6157 }, {
6158 .eraseblocks = { {512 * 1024, 1} },
6159 .block_erase = erase_chip_block_jedec,
6160 },
6161 },
Sean Nelson35727f72010-01-28 23:55:12 +00006162 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006163 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006164 },
6165
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006166 {
6167 .vendor = "SyncMOS",
6168 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006169 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006170 .manufacture_id = SYNCMOS_ID,
6171 .model_id = S29C51001T,
6172 .total_size = 128,
6173 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006174 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006175 .tested = TEST_UNTESTED,
6176 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006177 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006178 .block_erasers =
6179 {
6180 {
6181 .eraseblocks = { {512, 256} },
6182 .block_erase = erase_sector_jedec,
6183 }, {
6184 .eraseblocks = { {128 * 1024, 1} },
6185 .block_erase = erase_chip_block_jedec,
6186 },
6187 },
Sean Nelson35727f72010-01-28 23:55:12 +00006188 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006189 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006190 },
6191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 {
6193 .vendor = "SyncMOS",
6194 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006195 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006196 .manufacture_id = SYNCMOS_ID,
6197 .model_id = S29C51002T,
6198 .total_size = 256,
6199 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006200 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006201 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006202 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006203 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006204 .block_erasers =
6205 {
6206 {
6207 .eraseblocks = { {512, 512} },
6208 .block_erase = erase_sector_jedec,
6209 }, {
6210 .eraseblocks = { {256 * 1024, 1} },
6211 .block_erase = erase_chip_block_jedec,
6212 },
6213 },
Sean Nelson35727f72010-01-28 23:55:12 +00006214 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006215 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006216 },
6217
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006218 {
6219 .vendor = "SyncMOS",
6220 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006221 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006222 .manufacture_id = SYNCMOS_ID,
6223 .model_id = S29C51004T,
6224 .total_size = 512,
6225 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006226 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006227 .tested = TEST_UNTESTED,
6228 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006229 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006230 .block_erasers =
6231 {
6232 {
Sean Nelson012a31e2010-01-19 20:23:26 +00006233 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006234 .block_erase = erase_sector_jedec,
6235 }, {
6236 .eraseblocks = { {512 * 1024, 1} },
6237 .block_erase = erase_chip_block_jedec,
6238 },
6239 },
Sean Nelson35727f72010-01-28 23:55:12 +00006240 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006241 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006242 },
6243
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006244 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006245 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006246 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006247 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006248 .manufacture_id = TI_OLD_ID,
6249 .model_id = TI_TMS29F002RB,
6250 .total_size = 256,
6251 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006252 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006253 .tested = TEST_UNTESTED,
6254 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006255 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006256 .block_erasers =
6257 {
6258 {
6259 .eraseblocks = {
6260 {16 * 1024, 1},
6261 {8 * 1024, 2},
6262 {32 * 1024, 1},
6263 {64 * 1024, 3},
6264 },
6265 .block_erase = erase_sector_jedec,
6266 }, {
6267 .eraseblocks = { {256 * 1024, 1} },
6268 .block_erase = erase_chip_block_jedec,
6269 },
6270 },
Sean Nelson35727f72010-01-28 23:55:12 +00006271 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006272 .read = read_memmapped,
6273 },
6274
6275 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006276 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006277 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006278 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006279 .manufacture_id = TI_OLD_ID,
6280 .model_id = TI_TMS29F002RT,
6281 .total_size = 256,
6282 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006283 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006284 .tested = TEST_UNTESTED,
6285 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006286 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006287 .block_erasers =
6288 {
6289 {
6290 .eraseblocks = {
6291 {64 * 1024, 3},
6292 {32 * 1024, 1},
6293 {8 * 1024, 2},
6294 {16 * 1024, 1},
6295 },
6296 .block_erase = erase_sector_jedec,
6297 }, {
6298 .eraseblocks = { {256 * 1024, 1} },
6299 .block_erase = erase_chip_block_jedec,
6300 },
6301 },
Sean Nelson35727f72010-01-28 23:55:12 +00006302 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006303 .read = read_memmapped,
6304 },
6305
6306 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006307 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006308 .name = "W25Q80",
6309 .bustype = CHIP_BUSTYPE_SPI,
6310 .manufacture_id = WINBOND_NEX_ID,
6311 .model_id = W_25Q80,
6312 .total_size = 1024,
6313 .page_size = 256,
6314 .tested = TEST_UNTESTED,
6315 .probe = probe_spi_rdid,
6316 .probe_timing = TIMING_ZERO,
6317 .block_erasers =
6318 {
6319 {
6320 .eraseblocks = { {4 * 1024, 256} },
6321 .block_erase = spi_block_erase_20,
6322 }, {
6323 .eraseblocks = { {32 * 1024, 32} },
6324 .block_erase = spi_block_erase_52,
6325 }, {
6326 .eraseblocks = { {64 * 1024, 16} },
6327 .block_erase = spi_block_erase_d8,
6328 }, {
6329 .eraseblocks = { {1024 * 1024, 1} },
6330 .block_erase = spi_block_erase_60,
6331 }, {
6332 .eraseblocks = { {1024 * 1024, 1} },
6333 .block_erase = spi_block_erase_c7,
6334 }
6335 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006336 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006337 .write = spi_chip_write_256,
6338 .read = spi_chip_read,
6339 },
6340
6341 {
6342 .vendor = "Winbond",
6343 .name = "W25Q16",
6344 .bustype = CHIP_BUSTYPE_SPI,
6345 .manufacture_id = WINBOND_NEX_ID,
6346 .model_id = W_25Q16,
6347 .total_size = 2048,
6348 .page_size = 256,
6349 .tested = TEST_UNTESTED,
6350 .probe = probe_spi_rdid,
6351 .probe_timing = TIMING_ZERO,
6352 .block_erasers =
6353 {
6354 {
6355 .eraseblocks = { {4 * 1024, 512} },
6356 .block_erase = spi_block_erase_20,
6357 }, {
6358 .eraseblocks = { {32 * 1024, 64} },
6359 .block_erase = spi_block_erase_52,
6360 }, {
6361 .eraseblocks = { {64 * 1024, 32} },
6362 .block_erase = spi_block_erase_d8,
6363 }, {
6364 .eraseblocks = { {2 * 1024 * 1024, 1} },
6365 .block_erase = spi_block_erase_60,
6366 }, {
6367 .eraseblocks = { {2 * 1024 * 1024, 1} },
6368 .block_erase = spi_block_erase_c7,
6369 }
6370 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006371 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006372 .write = spi_chip_write_256,
6373 .read = spi_chip_read,
6374 },
6375
6376 {
6377 .vendor = "Winbond",
6378 .name = "W25Q32",
6379 .bustype = CHIP_BUSTYPE_SPI,
6380 .manufacture_id = WINBOND_NEX_ID,
6381 .model_id = W_25Q32,
6382 .total_size = 4096,
6383 .page_size = 256,
6384 .tested = TEST_UNTESTED,
6385 .probe = probe_spi_rdid,
6386 .probe_timing = TIMING_ZERO,
6387 .block_erasers =
6388 {
6389 {
6390 .eraseblocks = { {4 * 1024, 1024} },
6391 .block_erase = spi_block_erase_20,
6392 }, {
6393 .eraseblocks = { {32 * 1024, 128} },
6394 .block_erase = spi_block_erase_52,
6395 }, {
6396 .eraseblocks = { {64 * 1024, 64} },
6397 .block_erase = spi_block_erase_d8,
6398 }, {
6399 .eraseblocks = { {4 * 1024 * 1024, 1} },
6400 .block_erase = spi_block_erase_60,
6401 }, {
6402 .eraseblocks = { {4 * 1024 * 1024, 1} },
6403 .block_erase = spi_block_erase_c7,
6404 }
6405 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006406 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006407 .write = spi_chip_write_256,
6408 .read = spi_chip_read,
6409 },
6410
6411 {
6412 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006413 .name = "W25Q64",
6414 .bustype = CHIP_BUSTYPE_SPI,
6415 .manufacture_id = WINBOND_NEX_ID,
6416 .model_id = W_25Q64,
6417 .total_size = 8192,
6418 .page_size = 256,
6419 .tested = TEST_OK_PRW,
6420 .probe = probe_spi_rdid,
6421 .probe_timing = TIMING_ZERO,
6422 .block_erasers =
6423 {
6424 {
6425 .eraseblocks = { {4 * 1024, 2048} },
6426 .block_erase = spi_block_erase_20,
6427 }, {
6428 .eraseblocks = { {32 * 1024, 256} },
6429 .block_erase = spi_block_erase_52,
6430 }, {
6431 .eraseblocks = { {64 * 1024, 128} },
6432 .block_erase = spi_block_erase_d8,
6433 }, {
6434 .eraseblocks = { {8 * 1024 * 1024, 1} },
6435 .block_erase = spi_block_erase_60,
6436 }, {
6437 .eraseblocks = { {8 * 1024 * 1024, 1} },
6438 .block_erase = spi_block_erase_c7,
6439 }
6440 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006441 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006442 .write = spi_chip_write_256,
6443 .read = spi_chip_read,
6444 },
6445
6446 {
6447 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006448 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006449 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006450 .manufacture_id = WINBOND_NEX_ID,
6451 .model_id = W_25X10,
6452 .total_size = 128,
6453 .page_size = 256,
6454 .tested = TEST_UNTESTED,
6455 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006456 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006457 .block_erasers =
6458 {
6459 {
6460 .eraseblocks = { {4 * 1024, 32} },
6461 .block_erase = spi_block_erase_20,
6462 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006463 .eraseblocks = { {64 * 1024, 2} },
6464 .block_erase = spi_block_erase_d8,
6465 }, {
6466 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006467 .block_erase = spi_block_erase_c7,
6468 }
6469 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006470 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006471 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006472 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006473 },
6474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006475 {
6476 .vendor = "Winbond",
6477 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006478 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006479 .manufacture_id = WINBOND_NEX_ID,
6480 .model_id = W_25X20,
6481 .total_size = 256,
6482 .page_size = 256,
6483 .tested = TEST_UNTESTED,
6484 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006485 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006486 .block_erasers =
6487 {
6488 {
6489 .eraseblocks = { {4 * 1024, 64} },
6490 .block_erase = spi_block_erase_20,
6491 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006492 .eraseblocks = { {64 * 1024, 4} },
6493 .block_erase = spi_block_erase_d8,
6494 }, {
6495 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006496 .block_erase = spi_block_erase_c7,
6497 }
6498 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006499 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006500 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006501 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006502 },
6503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006504 {
6505 .vendor = "Winbond",
6506 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006507 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006508 .manufacture_id = WINBOND_NEX_ID,
6509 .model_id = W_25X40,
6510 .total_size = 512,
6511 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006512 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006513 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006514 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006515 .block_erasers =
6516 {
6517 {
6518 .eraseblocks = { {4 * 1024, 128} },
6519 .block_erase = spi_block_erase_20,
6520 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006521 .eraseblocks = { {64 * 1024, 8} },
6522 .block_erase = spi_block_erase_d8,
6523 }, {
6524 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006525 .block_erase = spi_block_erase_c7,
6526 }
6527 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006528 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006529 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006530 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006531 },
6532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006533 {
6534 .vendor = "Winbond",
6535 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006536 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006537 .manufacture_id = WINBOND_NEX_ID,
6538 .model_id = W_25X80,
6539 .total_size = 1024,
6540 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006541 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006542 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006543 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006544 .block_erasers =
6545 {
6546 {
6547 .eraseblocks = { {4 * 1024, 256} },
6548 .block_erase = spi_block_erase_20,
6549 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006550 .eraseblocks = { {64 * 1024, 16} },
6551 .block_erase = spi_block_erase_d8,
6552 }, {
6553 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006554 .block_erase = spi_block_erase_c7,
6555 }
6556 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006557 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006558 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006559 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006560 },
6561
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006562 {
6563 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006564 .name = "W25x16",
6565 .bustype = CHIP_BUSTYPE_SPI,
6566 .manufacture_id = WINBOND_NEX_ID,
6567 .model_id = W_25X16,
6568 .total_size = 2048,
6569 .page_size = 256,
6570 .tested = TEST_OK_PR,
6571 .probe = probe_spi_rdid,
6572 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006573 .block_erasers =
6574 {
6575 {
6576 .eraseblocks = { {4 * 1024, 512} },
6577 .block_erase = spi_block_erase_20,
6578 }, {
6579 .eraseblocks = { {32 * 1024, 64} },
6580 .block_erase = spi_block_erase_52,
6581 }, {
6582 .eraseblocks = { {64 * 1024, 32} },
6583 .block_erase = spi_block_erase_d8,
6584 }, {
6585 .eraseblocks = { {2 * 1024 * 1024, 1} },
6586 .block_erase = spi_block_erase_60,
6587 }, {
6588 .eraseblocks = { {2 * 1024 * 1024, 1} },
6589 .block_erase = spi_block_erase_c7,
6590 }
6591 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006592 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00006593 .write = spi_chip_write_256,
6594 .read = spi_chip_read,
6595 },
6596
6597 {
6598 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006599 .name = "W25x32",
6600 .bustype = CHIP_BUSTYPE_SPI,
6601 .manufacture_id = WINBOND_NEX_ID,
6602 .model_id = W_25X32,
6603 .total_size = 4096,
6604 .page_size = 256,
6605 .tested = TEST_OK_PROBE,
6606 .probe = probe_spi_rdid,
6607 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006608 .block_erasers =
6609 {
6610 {
6611 .eraseblocks = { {4 * 1024, 1024} },
6612 .block_erase = spi_block_erase_20,
6613 }, {
6614 .eraseblocks = { {32 * 1024, 128} },
6615 .block_erase = spi_block_erase_52,
6616 }, {
6617 .eraseblocks = { {64 * 1024, 64} },
6618 .block_erase = spi_block_erase_d8,
6619 }, {
6620 .eraseblocks = { {4 * 1024 * 1024, 1} },
6621 .block_erase = spi_block_erase_60,
6622 }, {
6623 .eraseblocks = { {4 * 1024 * 1024, 1} },
6624 .block_erase = spi_block_erase_c7,
6625 }
6626 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006627 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006628 .write = spi_chip_write_256,
6629 .read = spi_chip_read,
6630 },
6631
6632 {
6633 .vendor = "Winbond",
6634 .name = "W25x64",
6635 .bustype = CHIP_BUSTYPE_SPI,
6636 .manufacture_id = WINBOND_NEX_ID,
6637 .model_id = W_25X64,
6638 .total_size = 8192,
6639 .page_size = 256,
6640 .tested = TEST_UNTESTED,
6641 .probe = probe_spi_rdid,
6642 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006643 .block_erasers =
6644 {
6645 {
6646 .eraseblocks = { {4 * 1024, 2048} },
6647 .block_erase = spi_block_erase_20,
6648 }, {
6649 .eraseblocks = { {32 * 1024, 256} },
6650 .block_erase = spi_block_erase_52,
6651 }, {
6652 .eraseblocks = { {64 * 1024, 128} },
6653 .block_erase = spi_block_erase_d8,
6654 }, {
6655 .eraseblocks = { {8 * 1024 * 1024, 1} },
6656 .block_erase = spi_block_erase_60,
6657 }, {
6658 .eraseblocks = { {8 * 1024 * 1024, 1} },
6659 .block_erase = spi_block_erase_c7,
6660 }
6661 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006662 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006663 .write = spi_chip_write_256,
6664 .read = spi_chip_read,
6665 },
6666
6667 {
6668 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006669 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006670 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006671 .manufacture_id = WINBOND_ID,
6672 .model_id = W_29C011,
6673 .total_size = 128,
6674 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006675 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006676 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006677 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006678 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006679 .block_erasers =
6680 {
6681 {
6682 .eraseblocks = { {128 * 1024, 1} },
6683 .block_erase = erase_chip_block_jedec,
6684 }
6685 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006686 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006687 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006688 },
6689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006690 {
6691 .vendor = "Winbond",
6692 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006693 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006694 .manufacture_id = WINBOND_ID,
6695 .model_id = W_29C020C,
6696 .total_size = 256,
6697 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006698 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006699 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006700 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006701 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006702 .block_erasers =
6703 {
6704 {
6705 .eraseblocks = { {256 * 1024, 1} },
6706 .block_erase = erase_chip_block_jedec,
6707 }
6708 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006709 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006711 },
6712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006713 {
6714 .vendor = "Winbond",
6715 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006716 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006717 .manufacture_id = WINBOND_ID,
6718 .model_id = W_29C040P,
6719 .total_size = 512,
6720 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006721 .feature_bits = FEATURE_LONG_RESET,
6722 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006723 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006724 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006725 .block_erasers =
6726 {
6727 {
6728 .eraseblocks = { {512 * 1024, 1} },
6729 .block_erase = erase_chip_block_jedec,
6730 }
6731 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006732 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006734 },
6735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006736 {
6737 .vendor = "Winbond",
6738 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006739 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006740 .manufacture_id = WINBOND_ID,
6741 .model_id = W_29C011,
6742 .total_size = 128,
6743 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006744 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006745 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006746 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006747 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006748 .block_erasers =
6749 {
6750 {
6751 .eraseblocks = { {128 * 1024, 1} },
6752 .block_erase = erase_chip_block_jedec,
6753 }
6754 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006755 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006756 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006757 },
6758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006759 {
6760 .vendor = "Winbond",
6761 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006762 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006763 .manufacture_id = WINBOND_ID,
6764 .model_id = W_39V040A,
6765 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006766 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006767 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006768 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006769 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006770 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006771 .block_erasers =
6772 {
6773 {
6774 .eraseblocks = { {64 * 1024, 8} },
6775 .block_erase = erase_sector_jedec,
6776 }, {
6777 .eraseblocks = { {512 * 1024, 1} },
6778 .block_erase = erase_chip_block_jedec,
6779 }
6780 },
Sean Nelson35727f72010-01-28 23:55:12 +00006781 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006782 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006783 },
6784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006785 {
6786 .vendor = "Winbond",
6787 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006788 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006789 .manufacture_id = WINBOND_ID,
6790 .model_id = W_39V040B,
6791 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006792 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006793 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006794 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006795 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006796 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006797 .block_erasers =
6798 {
6799 {
6800 .eraseblocks = { {64 * 1024, 8} },
6801 .block_erase = erase_sector_jedec,
6802 }, {
6803 .eraseblocks = { {512 * 1024, 1} },
6804 .block_erase = erase_chip_block_jedec,
6805 }
6806 },
Sean Nelson35727f72010-01-28 23:55:12 +00006807 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006808 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006809 },
6810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006811 {
6812 .vendor = "Winbond",
6813 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006814 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006815 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006816 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006817 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006818 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006819 .feature_bits = FEATURE_EITHER_RESET,
6820 .tested = TEST_UNTESTED,
6821 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006822 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006823 .block_erasers =
6824 {
6825 {
6826 .eraseblocks = { {64 * 1024, 8} },
6827 .block_erase = erase_sector_jedec,
6828 }, {
6829 .eraseblocks = { {512 * 1024, 1} },
6830 .block_erase = erase_chip_block_jedec,
6831 }
6832 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006833 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006834 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006835 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006836 },
6837
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006838 {
6839 .vendor = "Winbond",
6840 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006841 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006842 .manufacture_id = WINBOND_ID,
6843 .model_id = W_39V040FA,
6844 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006845 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006846 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006847 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006848 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006849 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006850 .block_erasers =
6851 {
6852 {
6853 .eraseblocks = { {4 * 1024, 128} },
6854 .block_erase = erase_block_jedec,
6855 }, {
6856 .eraseblocks = { {64 * 1024, 8} },
6857 .block_erase = erase_sector_jedec,
6858 }, {
6859 .eraseblocks = { {512 * 1024, 1} },
6860 .block_erase = erase_chip_block_jedec,
6861 }
6862 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006863 .printlock = printlock_sst_fwhub,
6864 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006865 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006866 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006867 },
6868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006869 {
6870 .vendor = "Winbond",
6871 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006872 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006873 .manufacture_id = WINBOND_ID,
6874 .model_id = W_39V080A,
6875 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006876 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006877 .feature_bits = FEATURE_EITHER_RESET,
6878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006880 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006881 .block_erasers =
6882 {
6883 {
6884 .eraseblocks = { {64 * 1024, 16} },
6885 .block_erase = erase_sector_jedec,
6886 }, {
6887 .eraseblocks = { {1024 * 1024, 1} },
6888 .block_erase = erase_chip_block_jedec,
6889 }
6890 },
Sean Nelson35727f72010-01-28 23:55:12 +00006891 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006892 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006893 },
6894
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006895 {
6896 .vendor = "Winbond",
6897 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006898 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006899 .manufacture_id = WINBOND_ID,
6900 .model_id = W_49F002U,
6901 .total_size = 256,
6902 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006903 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006904 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006905 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006906 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006907 .block_erasers =
6908 {
6909 {
6910 .eraseblocks = {
6911 {128 * 1024, 1},
6912 {96 * 1024, 1},
6913 {8 * 1024, 2},
6914 {16 * 1024, 1},
6915 },
6916 .block_erase = erase_sector_jedec,
6917 }, {
6918 .eraseblocks = { {256 * 1024, 1} },
6919 .block_erase = erase_chip_block_jedec,
6920 }
6921 },
Sean Nelson35727f72010-01-28 23:55:12 +00006922 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006923 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006924 },
6925
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006926 {
6927 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00006928 .name = "W49F020",
6929 .bustype = CHIP_BUSTYPE_PARALLEL,
6930 .manufacture_id = WINBOND_ID,
6931 .model_id = W_49F020,
6932 .total_size = 256,
6933 .page_size = 128,
6934 .feature_bits = FEATURE_EITHER_RESET,
6935 .tested = TEST_OK_PROBE,
6936 .probe = probe_jedec,
6937 .probe_timing = 10,
6938 .block_erasers =
6939 {
6940 {
6941 .eraseblocks = { {256 * 1024, 1} },
6942 .block_erase = erase_chip_block_jedec,
6943 }
6944 },
6945 .write = write_jedec_1,
6946 .read = read_memmapped,
6947 },
6948
6949 {
6950 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006951 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006952 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006953 .manufacture_id = WINBOND_ID,
6954 .model_id = W_49V002A,
6955 .total_size = 256,
6956 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006957 .feature_bits = FEATURE_EITHER_RESET,
6958 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006959 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006960 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006961 .block_erasers =
6962 {
6963 {
6964 .eraseblocks = {
6965 {64 * 1024, 3},
6966 {32 * 1024, 1},
6967 {8 * 1024, 2},
6968 {16 * 1024, 1},
6969 },
6970 .block_erase = erase_sector_jedec,
6971 }, {
6972 .eraseblocks = { {256 * 1024, 1} },
6973 .block_erase = erase_chip_block_jedec,
6974 }
6975 },
Sean Nelson35727f72010-01-28 23:55:12 +00006976 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006977 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006978 },
6979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006980 {
6981 .vendor = "Winbond",
6982 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006983 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006984 .manufacture_id = WINBOND_ID,
6985 .model_id = W_49V002FA,
6986 .total_size = 256,
6987 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006988 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006989 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006990 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006991 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006992 .block_erasers =
6993 {
6994 {
6995 .eraseblocks = {
6996 {64 * 1024, 3},
6997 {32 * 1024, 1},
6998 {8 * 1024, 2},
6999 {16 * 1024, 1},
7000 },
7001 .block_erase = erase_sector_jedec,
7002 }, {
7003 .eraseblocks = { {256 * 1024, 1} },
7004 .block_erase = erase_chip_block_jedec,
7005 }
7006 },
Sean Nelson35727f72010-01-28 23:55:12 +00007007 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007008 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007009 },
7010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007011 {
7012 .vendor = "Winbond",
7013 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007014 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007015 .manufacture_id = WINBOND_ID,
7016 .model_id = W_39V080FA,
7017 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007018 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007019 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007020 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007021 .probe = probe_jedec,
7022 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007023 .block_erasers =
7024 {
7025 {
7026 .eraseblocks = { {64 * 1024, 16}, },
7027 .block_erase = erase_sector_jedec,
7028 }, {
7029 .eraseblocks = { {1024 * 1024, 1} },
7030 .block_erase = erase_chip_block_jedec,
7031 }
7032 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007033 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007034 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007036 },
7037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007038 {
7039 .vendor = "Winbond",
7040 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007041 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007042 .manufacture_id = WINBOND_ID,
7043 .model_id = W_39V080FA_DM,
7044 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007045 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007046 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007047 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007048 .probe = probe_jedec,
7049 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007050 .block_erasers =
7051 {
7052 {
7053 .eraseblocks = { {64 * 1024, 8}, },
7054 .block_erase = erase_sector_jedec,
7055 }, {
7056 .eraseblocks = { {512 * 1024, 1} },
7057 .block_erase = erase_chip_block_jedec,
7058 }
7059 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007060 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007061 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007062 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007063 },
7064
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007065 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007066 .vendor = "AMIC",
7067 .name = "unknown AMIC SPI chip",
7068 .bustype = CHIP_BUSTYPE_SPI,
7069 .manufacture_id = AMIC_ID,
7070 .model_id = GENERIC_DEVICE_ID,
7071 .total_size = 0,
7072 .page_size = 256,
7073 .tested = TEST_BAD_PREW,
7074 .probe = probe_spi_rdid4,
7075 .probe_timing = TIMING_ZERO,
7076 .write = NULL,
7077 .read = NULL,
7078 },
7079
7080 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007081 .vendor = "Atmel",
7082 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007083 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007084 .manufacture_id = ATMEL_ID,
7085 .model_id = GENERIC_DEVICE_ID,
7086 .total_size = 0,
7087 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007088 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007089 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007090 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007091 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007092 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007093 },
7094
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007095 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007096 .vendor = "Eon",
7097 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007098 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007099 .manufacture_id = EON_ID_NOPREFIX,
7100 .model_id = GENERIC_DEVICE_ID,
7101 .total_size = 0,
7102 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007103 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007104 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007105 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007106 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007107 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007108 },
7109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007110 {
7111 .vendor = "Macronix",
7112 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007113 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007114 .manufacture_id = MX_ID,
7115 .model_id = GENERIC_DEVICE_ID,
7116 .total_size = 0,
7117 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007118 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007119 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007120 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007121 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007122 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007123 },
7124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007125 {
7126 .vendor = "PMC",
7127 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007128 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007129 .manufacture_id = PMC_ID,
7130 .model_id = GENERIC_DEVICE_ID,
7131 .total_size = 0,
7132 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007133 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007134 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007135 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007136 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007137 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007138 },
7139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007140 {
7141 .vendor = "SST",
7142 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007143 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007144 .manufacture_id = SST_ID,
7145 .model_id = GENERIC_DEVICE_ID,
7146 .total_size = 0,
7147 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007148 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007149 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007150 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007151 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007152 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007153 },
7154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007155 {
7156 .vendor = "ST",
7157 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007158 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007159 .manufacture_id = ST_ID,
7160 .model_id = GENERIC_DEVICE_ID,
7161 .total_size = 0,
7162 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007163 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007164 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007165 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007166 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007167 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007168 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007169
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007170 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007171 .vendor = "Sanyo",
7172 .name = "unknown Sanyo SPI chip",
7173 .bustype = CHIP_BUSTYPE_SPI,
7174 .manufacture_id = SANYO_ID,
7175 .model_id = GENERIC_DEVICE_ID,
7176 .total_size = 0,
7177 .page_size = 256,
7178 .tested = TEST_BAD_PREW,
7179 .probe = probe_spi_rdid,
7180 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007181 .write = NULL,
7182 .read = NULL,
7183 },
7184
7185 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007186 .vendor = "Generic",
7187 .name = "unknown SPI chip (RDID)",
7188 .bustype = CHIP_BUSTYPE_SPI,
7189 .manufacture_id = GENERIC_MANUF_ID,
7190 .model_id = GENERIC_DEVICE_ID,
7191 .total_size = 0,
7192 .page_size = 256,
7193 .tested = TEST_BAD_PREW,
7194 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007195 .write = NULL,
7196 },
7197 {
7198 .vendor = "Generic",
7199 .name = "unknown SPI chip (REMS)",
7200 .bustype = CHIP_BUSTYPE_SPI,
7201 .manufacture_id = GENERIC_MANUF_ID,
7202 .model_id = GENERIC_DEVICE_ID,
7203 .total_size = 0,
7204 .page_size = 256,
7205 .tested = TEST_BAD_PREW,
7206 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007207 .write = NULL,
7208 },
7209
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007210 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007211};