blob: 0379f10a97a990f339076a4032a0145294cd84ba [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,
Uwe Hermann51afebb2010-08-01 00:13:49 +000068 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +000069 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
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",
Dan Lenski11617122010-07-29 15:00:40 +0000640 .name = "A25L512",
641 .bustype = CHIP_BUSTYPE_SPI,
642 .manufacture_id = AMIC_ID_NOPREFIX,
643 .model_id = AMIC_A25L512,
644 .total_size = 64,
645 .page_size = 256,
646 .tested = TEST_UNTESTED,
647 .probe = probe_spi_rdid,
648 .probe_timing = TIMING_ZERO,
649 .block_erasers =
650 {
651 {
652 .eraseblocks = { { 4 * 1024, 16 } },
653 .block_erase = spi_block_erase_20,
654 }, {
655 .eraseblocks = { { 64 * 1024, 1 } },
656 .block_erase = spi_block_erase_d8,
657 }, {
658 .eraseblocks = { { 64 * 1024, 1 } },
659 .block_erase = spi_block_erase_c7,
660 }
661 },
662 .unlock = spi_disable_blockprotect,
663 .write = spi_chip_write_256,
664 .read = spi_chip_read,
665 },
666
667 {
668 .vendor = "AMIC",
669 .name = "A25L010",
670 .bustype = CHIP_BUSTYPE_SPI,
671 .manufacture_id = AMIC_ID_NOPREFIX,
672 .model_id = AMIC_A25L010,
673 .total_size = 128,
674 .page_size = 256,
675 .tested = TEST_UNTESTED,
676 .probe = probe_spi_rdid,
677 .probe_timing = TIMING_ZERO,
678 .block_erasers =
679 {
680 {
681 .eraseblocks = { { 4 * 1024, 32 } },
682 .block_erase = spi_block_erase_20,
683 }, {
684 .eraseblocks = { { 64 * 1024, 2 } },
685 .block_erase = spi_block_erase_d8,
686 }, {
687 .eraseblocks = { { 128 * 1024, 1 } },
688 .block_erase = spi_block_erase_c7,
689 }
690 },
691 .unlock = spi_disable_blockprotect,
692 .write = spi_chip_write_256,
693 .read = spi_chip_read,
694 },
695
696 {
697 .vendor = "AMIC",
698 .name = "A25L020",
699 .bustype = CHIP_BUSTYPE_SPI,
700 .manufacture_id = AMIC_ID_NOPREFIX,
701 .model_id = AMIC_A25L020,
702 .total_size = 256,
703 .page_size = 256,
704 .tested = TEST_UNTESTED,
705 .probe = probe_spi_rdid,
706 .probe_timing = TIMING_ZERO,
707 .block_erasers =
708 {
709 {
710 .eraseblocks = { { 4 * 1024, 64 } },
711 .block_erase = spi_block_erase_20,
712 }, {
713 .eraseblocks = { { 64 * 1024, 4 } },
714 .block_erase = spi_block_erase_d8,
715 }, {
716 .eraseblocks = { { 256 * 1024, 1 } },
717 .block_erase = spi_block_erase_c7,
718 }
719 },
720 .unlock = spi_disable_blockprotect,
721 .write = spi_chip_write_256,
722 .read = spi_chip_read,
723 },
724
725 {
726 .vendor = "AMIC",
727 .name = "A25L040",
728 .bustype = CHIP_BUSTYPE_SPI,
729 .manufacture_id = AMIC_ID_NOPREFIX,
730 .model_id = AMIC_A25L040,
731 .total_size = 512,
732 .page_size = 256,
733 .tested = TEST_UNTESTED,
734 .probe = probe_spi_rdid,
735 .probe_timing = TIMING_ZERO,
736 .block_erasers =
737 {
738 {
739 .eraseblocks = { { 4 * 1024, 128 } },
740 .block_erase = spi_block_erase_20,
741 }, {
742 .eraseblocks = { { 64 * 1024, 8 } },
743 .block_erase = spi_block_erase_d8,
744 }, {
745 .eraseblocks = { { 512 * 1024, 1 } },
746 .block_erase = spi_block_erase_c7,
747 }
748 },
749 .unlock = spi_disable_blockprotect,
750 .write = spi_chip_write_256,
751 .read = spi_chip_read,
752 },
753
754 {
755 .vendor = "AMIC",
756 .name = "A25L080",
757 .bustype = CHIP_BUSTYPE_SPI,
758 .manufacture_id = AMIC_ID_NOPREFIX,
759 .model_id = AMIC_A25L080,
760 .total_size = 1024,
761 .page_size = 256,
762 .tested = TEST_UNTESTED,
763 .probe = probe_spi_rdid,
764 .probe_timing = TIMING_ZERO,
765 .block_erasers =
766 {
767 {
768 .eraseblocks = { { 4 * 1024, 256 } },
769 .block_erase = spi_block_erase_20,
770 }, {
771 .eraseblocks = { { 64 * 1024, 16 } },
772 .block_erase = spi_block_erase_d8,
773 }, {
774 .eraseblocks = { { 1024 * 1024, 1 } },
775 .block_erase = spi_block_erase_c7,
776 }
777 },
778 .unlock = spi_disable_blockprotect,
779 .write = spi_chip_write_256,
780 .read = spi_chip_read,
781 },
782
783 {
784 .vendor = "AMIC",
785 .name = "A25L016",
786 .bustype = CHIP_BUSTYPE_SPI,
787 .manufacture_id = AMIC_ID_NOPREFIX,
788 .model_id = AMIC_A25L016,
789 .total_size = 2048,
790 .page_size = 256,
791 .tested = TEST_UNTESTED,
792 .probe = probe_spi_rdid,
793 .probe_timing = TIMING_ZERO,
794 .block_erasers =
795 {
796 {
797 .eraseblocks = { { 4 * 1024, 512 } },
798 .block_erase = spi_block_erase_20,
799 }, {
800 .eraseblocks = { { 64 * 1024, 32 } },
801 .block_erase = spi_block_erase_d8,
802 }, {
803 .eraseblocks = { { 2048 * 1024, 1 } },
804 .block_erase = spi_block_erase_c7,
805 }
806 },
807 .unlock = spi_disable_blockprotect,
808 .write = spi_chip_write_256,
809 .read = spi_chip_read,
810 },
811
812 {
813 .vendor = "AMIC",
814 .name = "A25L032",
815 .bustype = CHIP_BUSTYPE_SPI,
816 .manufacture_id = AMIC_ID_NOPREFIX,
817 .model_id = AMIC_A25L032,
818 .total_size = 4096,
819 .page_size = 256,
820 .tested = TEST_UNTESTED,
821 .probe = probe_spi_rdid,
822 .probe_timing = TIMING_ZERO,
823 .block_erasers =
824 {
825 {
826 .eraseblocks = { { 4 * 1024, 1024 } },
827 .block_erase = spi_block_erase_20,
828 }, {
829 .eraseblocks = { { 64 * 1024, 64 } },
830 .block_erase = spi_block_erase_52,
831 }, {
832 .eraseblocks = { { 64 * 1024, 64 } },
833 .block_erase = spi_block_erase_d8,
834 }, {
835 .eraseblocks = { { 4096 * 1024, 1 } },
836 .block_erase = spi_block_erase_60,
837 }, {
838 .eraseblocks = { { 4096 * 1024, 1 } },
839 .block_erase = spi_block_erase_c7,
840 }
841 },
842 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
843 .write = spi_chip_write_256,
844 .read = spi_chip_read,
845 },
846
847 {
848 .vendor = "AMIC",
849 .name = "A25LQ032",
850 .bustype = CHIP_BUSTYPE_SPI,
851 .manufacture_id = AMIC_ID_NOPREFIX,
852 .model_id = AMIC_A25LQ032,
853 .total_size = 4096,
854 .page_size = 256,
855 .tested = TEST_UNTESTED,
856 .probe = probe_spi_rdid,
857 .probe_timing = TIMING_ZERO,
858 .block_erasers =
859 {
860 {
861 .eraseblocks = { { 4 * 1024, 1024 } },
862 .block_erase = spi_block_erase_20,
863 }, {
864 .eraseblocks = { { 64 * 1024, 64 } },
865 .block_erase = spi_block_erase_52,
866 }, {
867 .eraseblocks = { { 64 * 1024, 64 } },
868 .block_erase = spi_block_erase_d8,
869 }, {
870 .eraseblocks = { { 4096 * 1024, 1 } },
871 .block_erase = spi_block_erase_60,
872 }, {
873 .eraseblocks = { { 4096 * 1024, 1 } },
874 .block_erase = spi_block_erase_c7,
875 }
876 },
877 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
878 .write = spi_chip_write_256,
879 .read = spi_chip_read,
880 },
881
882 {
883 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000884 .name = "A29002B",
885 .bustype = CHIP_BUSTYPE_PARALLEL,
886 .manufacture_id = AMIC_ID_NOPREFIX,
887 .model_id = AMIC_A29002B,
888 .total_size = 256,
889 .page_size = 64 * 1024,
890 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
891 .tested = TEST_UNTESTED,
892 .probe = probe_jedec,
893 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
894 .block_erasers =
895 {
896 {
897 .eraseblocks = {
898 {16 * 1024, 1},
899 {8 * 1024, 2},
900 {32 * 1024, 1},
901 {64 * 1024, 3},
902 },
903 .block_erase = erase_sector_jedec,
904 }, {
905 .eraseblocks = { {256 * 1024, 1} },
906 .block_erase = erase_chip_block_jedec,
907 },
908 },
909 .write = write_jedec_1,
910 .read = read_memmapped,
911 },
912
913 {
914 .vendor = "AMIC",
915 .name = "A29002T",
916 .bustype = CHIP_BUSTYPE_PARALLEL,
917 .manufacture_id = AMIC_ID_NOPREFIX,
918 .model_id = AMIC_A29002T,
919 .total_size = 256,
920 .page_size = 64 * 1024,
921 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
922 .tested = TEST_OK_PRW,
923 .probe = probe_jedec,
924 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
925 .block_erasers =
926 {
927 {
928 .eraseblocks = {
929 {64 * 1024, 3},
930 {32 * 1024, 1},
931 {8 * 1024, 2},
932 {16 * 1024, 1},
933 },
934 .block_erase = erase_sector_jedec,
935 }, {
936 .eraseblocks = { {256 * 1024, 1} },
937 .block_erase = erase_chip_block_jedec,
938 },
939 },
940 .write = write_jedec_1,
941 .read = read_memmapped,
942 },
943
944 {
945 .vendor = "AMIC",
946 .name = "A29040B",
947 .bustype = CHIP_BUSTYPE_PARALLEL,
948 .manufacture_id = AMIC_ID_NOPREFIX,
949 .model_id = AMIC_A29040B,
950 .total_size = 512,
951 .page_size = 64 * 1024,
952 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
953 .tested = TEST_UNTESTED,
954 .probe = probe_jedec,
955 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
956 .block_erasers =
957 {
958 {
959 .eraseblocks = { {64 * 1024, 8} },
960 .block_erase = erase_sector_jedec,
961 }, {
962 .eraseblocks = { {512 * 1024, 1} },
963 .block_erase = erase_chip_block_jedec,
964 },
965 },
966 .write = write_jedec_1,
967 .read = read_memmapped,
968 },
969
970 {
971 .vendor = "AMIC",
972 .name = "A49LF040A",
973 .bustype = CHIP_BUSTYPE_LPC,
974 .manufacture_id = AMIC_ID_NOPREFIX,
975 .model_id = AMIC_A49LF040A,
976 .total_size = 512,
977 .page_size = 64 * 1024,
978 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
979 .tested = TEST_OK_PREW,
980 .probe = probe_jedec,
981 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
982 .block_erasers =
983 {
984 {
985 .eraseblocks = { {64 * 1024, 8} },
986 .block_erase = erase_block_jedec,
987 }, {
988 .eraseblocks = { {512 * 1024, 1} },
989 .block_erase = erase_chip_block_jedec,
990 }
991 },
992 .unlock = unlock_49fl00x,
993 .write = write_jedec_1,
994 .read = read_memmapped,
995 },
996
997 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .vendor = "ASD",
999 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +00001000 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .manufacture_id = ASD_ID,
1002 .model_id = ASD_AE49F2008,
1003 .total_size = 256,
1004 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001005 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 .tested = TEST_UNTESTED,
1007 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001008 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +00001009 .block_erasers =
1010 {
1011 {
1012 .eraseblocks = {
1013 {128 * 1024, 1},
1014 {96 * 1024, 1},
1015 {8 * 1024, 2},
1016 {16 * 1024, 1},
1017 },
1018 .block_erase = erase_sector_jedec,
1019 }, {
1020 .eraseblocks = { {256 * 1024, 1} },
1021 .block_erase = erase_chip_block_jedec,
1022 }
1023 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001025 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001026 },
1027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 {
1029 .vendor = "Atmel",
1030 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001031 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001032 .manufacture_id = ATMEL_ID,
1033 .model_id = AT_25DF021,
1034 .total_size = 256,
1035 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001036 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001037 .tested = TEST_UNTESTED,
1038 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001039 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001040 .block_erasers =
1041 {
1042 {
1043 .eraseblocks = { {4 * 1024, 64} },
1044 .block_erase = spi_block_erase_20,
1045 }, {
1046 .eraseblocks = { {32 * 1024, 8} },
1047 .block_erase = spi_block_erase_52,
1048 }, {
1049 .eraseblocks = { {64 * 1024, 4} },
1050 .block_erase = spi_block_erase_d8,
1051 }, {
1052 .eraseblocks = { {256 * 1024, 1} },
1053 .block_erase = spi_block_erase_60,
1054 }, {
1055 .eraseblocks = { {256 * 1024, 1} },
1056 .block_erase = spi_block_erase_c7,
1057 }
1058 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001059 .printlock = spi_prettyprint_status_register_at25df,
1060 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001061 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001062 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001063 },
1064
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001065 {
1066 .vendor = "Atmel",
1067 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001068 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001069 .manufacture_id = ATMEL_ID,
1070 .model_id = AT_25DF041A,
1071 .total_size = 512,
1072 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001073 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .tested = TEST_UNTESTED,
1075 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001076 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001077 .block_erasers =
1078 {
1079 {
1080 .eraseblocks = { {4 * 1024, 128} },
1081 .block_erase = spi_block_erase_20,
1082 }, {
1083 .eraseblocks = { {32 * 1024, 16} },
1084 .block_erase = spi_block_erase_52,
1085 }, {
1086 .eraseblocks = { {64 * 1024, 8} },
1087 .block_erase = spi_block_erase_d8,
1088 }, {
1089 .eraseblocks = { {512 * 1024, 1} },
1090 .block_erase = spi_block_erase_60,
1091 }, {
1092 .eraseblocks = { {512 * 1024, 1} },
1093 .block_erase = spi_block_erase_c7,
1094 }
1095 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001096 .printlock = spi_prettyprint_status_register_at25df,
1097 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001098 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001099 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001100 },
1101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001102 {
1103 .vendor = "Atmel",
1104 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001105 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001106 .manufacture_id = ATMEL_ID,
1107 .model_id = AT_25DF081,
1108 .total_size = 1024,
1109 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001110 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 .tested = TEST_UNTESTED,
1112 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001113 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001114 .block_erasers =
1115 {
1116 {
1117 .eraseblocks = { {4 * 1024, 256} },
1118 .block_erase = spi_block_erase_20,
1119 }, {
1120 .eraseblocks = { {32 * 1024, 32} },
1121 .block_erase = spi_block_erase_52,
1122 }, {
1123 .eraseblocks = { {64 * 1024, 16} },
1124 .block_erase = spi_block_erase_d8,
1125 }, {
1126 .eraseblocks = { {1024 * 1024, 1} },
1127 .block_erase = spi_block_erase_60,
1128 }, {
1129 .eraseblocks = { {1024 * 1024, 1} },
1130 .block_erase = spi_block_erase_c7,
1131 }
1132 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001133 .printlock = spi_prettyprint_status_register_at25df,
1134 .unlock = spi_disable_blockprotect_at25df,
1135 .write = spi_chip_write_256,
1136 .read = spi_chip_read,
1137 },
1138
1139 {
1140 .vendor = "Atmel",
1141 .name = "AT25DF081A",
1142 .bustype = CHIP_BUSTYPE_SPI,
1143 .manufacture_id = ATMEL_ID,
1144 .model_id = AT_25DF081A,
1145 .total_size = 1024,
1146 .page_size = 256,
1147 .feature_bits = FEATURE_WRSR_WREN,
1148 .tested = TEST_UNTESTED,
1149 .probe = probe_spi_rdid,
1150 .probe_timing = TIMING_ZERO,
1151 .block_erasers =
1152 {
1153 {
1154 .eraseblocks = { {4 * 1024, 256} },
1155 .block_erase = spi_block_erase_20,
1156 }, {
1157 .eraseblocks = { {32 * 1024, 32} },
1158 .block_erase = spi_block_erase_52,
1159 }, {
1160 .eraseblocks = { {64 * 1024, 16} },
1161 .block_erase = spi_block_erase_d8,
1162 }, {
1163 .eraseblocks = { {1024 * 1024, 1} },
1164 .block_erase = spi_block_erase_60,
1165 }, {
1166 .eraseblocks = { {1024 * 1024, 1} },
1167 .block_erase = spi_block_erase_c7,
1168 }
1169 },
1170 .printlock = spi_prettyprint_status_register_at25df_sec,
1171 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001172 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001173 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001174 },
1175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001176 {
1177 .vendor = "Atmel",
1178 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001179 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001180 .manufacture_id = ATMEL_ID,
1181 .model_id = AT_25DF161,
1182 .total_size = 2048,
1183 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001184 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001185 .tested = TEST_UNTESTED,
1186 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001187 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001188 .block_erasers =
1189 {
1190 {
1191 .eraseblocks = { {4 * 1024, 512} },
1192 .block_erase = spi_block_erase_20,
1193 }, {
1194 .eraseblocks = { {32 * 1024, 64} },
1195 .block_erase = spi_block_erase_52,
1196 }, {
1197 .eraseblocks = { {64 * 1024, 32} },
1198 .block_erase = spi_block_erase_d8,
1199 }, {
1200 .eraseblocks = { {2 * 1024 * 1024, 1} },
1201 .block_erase = spi_block_erase_60,
1202 }, {
1203 .eraseblocks = { {2 * 1024 * 1024, 1} },
1204 .block_erase = spi_block_erase_c7,
1205 }
1206 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001207 .printlock = spi_prettyprint_status_register_at25df_sec,
1208 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001209 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001210 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001211 },
1212
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001213 {
1214 .vendor = "Atmel",
1215 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001216 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001217 .manufacture_id = ATMEL_ID,
1218 .model_id = AT_25DF321,
1219 .total_size = 4096,
1220 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001221 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00001222 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001223 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001224 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001225 .block_erasers =
1226 {
1227 {
1228 .eraseblocks = { {4 * 1024, 1024} },
1229 .block_erase = spi_block_erase_20,
1230 }, {
1231 .eraseblocks = { {32 * 1024, 128} },
1232 .block_erase = spi_block_erase_52,
1233 }, {
1234 .eraseblocks = { {64 * 1024, 64} },
1235 .block_erase = spi_block_erase_d8,
1236 }, {
1237 .eraseblocks = { {4 * 1024 * 1024, 1} },
1238 .block_erase = spi_block_erase_60,
1239 }, {
1240 .eraseblocks = { {4 * 1024 * 1024, 1} },
1241 .block_erase = spi_block_erase_c7,
1242 }
1243 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001244 .printlock = spi_prettyprint_status_register_at25df,
1245 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001246 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001247 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001248 },
1249
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001250 {
1251 .vendor = "Atmel",
1252 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001253 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001254 .manufacture_id = ATMEL_ID,
1255 .model_id = AT_25DF321A,
1256 .total_size = 4096,
1257 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001258 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001259 .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, 1024} },
1266 .block_erase = spi_block_erase_20,
1267 }, {
1268 .eraseblocks = { {32 * 1024, 128} },
1269 .block_erase = spi_block_erase_52,
1270 }, {
1271 .eraseblocks = { {64 * 1024, 64} },
1272 .block_erase = spi_block_erase_d8,
1273 }, {
1274 .eraseblocks = { {4 * 1024 * 1024, 1} },
1275 .block_erase = spi_block_erase_60,
1276 }, {
1277 .eraseblocks = { {4 * 1024 * 1024, 1} },
1278 .block_erase = spi_block_erase_c7,
1279 }
1280 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001281 .printlock = spi_prettyprint_status_register_at25df_sec,
1282 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001283 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "Atmel",
1289 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001290 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = ATMEL_ID,
1292 .model_id = AT_25DF641,
1293 .total_size = 8192,
1294 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001295 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001296 .tested = TEST_UNTESTED,
1297 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001298 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001299 .block_erasers =
1300 {
1301 {
1302 .eraseblocks = { {4 * 1024, 2048} },
1303 .block_erase = spi_block_erase_20,
1304 }, {
1305 .eraseblocks = { {32 * 1024, 256} },
1306 .block_erase = spi_block_erase_52,
1307 }, {
1308 .eraseblocks = { {64 * 1024, 128} },
1309 .block_erase = spi_block_erase_d8,
1310 }, {
1311 .eraseblocks = { {8 * 1024 * 1024, 1} },
1312 .block_erase = spi_block_erase_60,
1313 }, {
1314 .eraseblocks = { {8 * 1024 * 1024, 1} },
1315 .block_erase = spi_block_erase_c7,
1316 }
1317 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001318 .printlock = spi_prettyprint_status_register_at25df_sec,
1319 .unlock = spi_disable_blockprotect_at25df_sec,
1320 .write = spi_chip_write_256,
1321 .read = spi_chip_read,
1322 },
1323
1324 {
1325 .vendor = "Atmel",
1326 .name = "AT25DQ161",
1327 .bustype = CHIP_BUSTYPE_SPI,
1328 .manufacture_id = ATMEL_ID,
1329 .model_id = AT_25DQ161,
1330 .total_size = 2048,
1331 .page_size = 256,
1332 .feature_bits = FEATURE_WRSR_WREN,
1333 .tested = TEST_UNTESTED,
1334 .probe = probe_spi_rdid,
1335 .probe_timing = TIMING_ZERO,
1336 .block_erasers =
1337 {
1338 {
1339 .eraseblocks = { {4 * 1024, 512} },
1340 .block_erase = spi_block_erase_20,
1341 }, {
1342 .eraseblocks = { {32 * 1024, 64} },
1343 .block_erase = spi_block_erase_52,
1344 }, {
1345 .eraseblocks = { {64 * 1024, 32} },
1346 .block_erase = spi_block_erase_d8,
1347 }, {
1348 .eraseblocks = { {2 * 1024 * 1024, 1} },
1349 .block_erase = spi_block_erase_60,
1350 }, {
1351 .eraseblocks = { {2 * 1024 * 1024, 1} },
1352 .block_erase = spi_block_erase_c7,
1353 }
1354 },
1355 .printlock = spi_prettyprint_status_register_at25df_sec,
1356 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001357 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001359 },
1360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001361 {
1362 .vendor = "Atmel",
1363 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001364 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001365 .manufacture_id = ATMEL_ID,
1366 .model_id = AT_25F512B,
1367 .total_size = 64,
1368 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001369 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001370 .tested = TEST_UNTESTED,
1371 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001372 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001373 .block_erasers =
1374 {
1375 {
1376 .eraseblocks = { {4 * 1024, 16} },
1377 .block_erase = spi_block_erase_20,
1378 }, {
1379 .eraseblocks = { {32 * 1024, 2} },
1380 .block_erase = spi_block_erase_52,
1381 }, {
1382 .eraseblocks = { {32 * 1024, 2} },
1383 .block_erase = spi_block_erase_d8,
1384 }, {
1385 .eraseblocks = { {64 * 1024, 1} },
1386 .block_erase = spi_block_erase_60,
1387 }, {
1388 .eraseblocks = { {64 * 1024, 1} },
1389 .block_erase = spi_block_erase_c7,
1390 }
1391 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001392 .printlock = spi_prettyprint_status_register_at25f,
1393 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001394 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001395 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001396 },
1397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001398 {
1399 .vendor = "Atmel",
1400 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001401 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001402 .manufacture_id = ATMEL_ID,
1403 .model_id = AT_25FS010,
1404 .total_size = 128,
1405 .page_size = 256,
1406 .tested = TEST_UNTESTED,
1407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001408 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001409 .block_erasers =
1410 {
1411 {
1412 .eraseblocks = { {4 * 1024, 32} },
1413 .block_erase = spi_block_erase_20,
1414 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001415 .eraseblocks = { {4 * 1024, 32} },
1416 .block_erase = spi_block_erase_d7,
1417 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001418 .eraseblocks = { {32 * 1024, 4} },
1419 .block_erase = spi_block_erase_52,
1420 }, {
1421 .eraseblocks = { {32 * 1024, 4} },
1422 .block_erase = spi_block_erase_d8,
1423 }, {
1424 .eraseblocks = { {128 * 1024, 1} },
1425 .block_erase = spi_block_erase_60,
1426 }, {
1427 .eraseblocks = { {128 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001431 .printlock = spi_prettyprint_status_register_at25fs010,
1432 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001433 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001434 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001435 },
1436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001437 {
1438 .vendor = "Atmel",
1439 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001440 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001441 .manufacture_id = ATMEL_ID,
1442 .model_id = AT_25FS040,
1443 .total_size = 512,
1444 .page_size = 256,
1445 .tested = TEST_UNTESTED,
1446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001447 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001448 .block_erasers =
1449 {
1450 {
1451 .eraseblocks = { {4 * 1024, 128} },
1452 .block_erase = spi_block_erase_20,
1453 }, {
1454 .eraseblocks = { {64 * 1024, 8} },
1455 .block_erase = spi_block_erase_52,
1456 }, {
1457 .eraseblocks = { {64 * 1024, 8} },
1458 .block_erase = spi_block_erase_d8,
1459 }, {
1460 .eraseblocks = { {512 * 1024, 1} },
1461 .block_erase = spi_block_erase_60,
1462 }, {
1463 .eraseblocks = { {512 * 1024, 1} },
1464 .block_erase = spi_block_erase_c7,
1465 }
1466 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001467 .printlock = spi_prettyprint_status_register_at25fs040,
1468 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001469 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001470 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001471 },
1472
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001473 {
1474 .vendor = "Atmel",
1475 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001476 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001477 .manufacture_id = ATMEL_ID,
1478 .model_id = AT_26DF041,
1479 .total_size = 512,
1480 .page_size = 256,
1481 .tested = TEST_UNTESTED,
1482 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001483 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001484 .block_erasers =
1485 {
1486 {
1487 .eraseblocks = { {4 * 1024, 128} },
1488 .block_erase = spi_block_erase_20,
1489 }
1490 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001491 .write = NULL /* Incompatible Page write */,
1492 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001493 },
1494
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 {
1496 .vendor = "Atmel",
1497 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001498 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001499 .manufacture_id = ATMEL_ID,
1500 .model_id = AT_26DF081A,
1501 .total_size = 1024,
1502 .page_size = 256,
1503 .tested = TEST_UNTESTED,
1504 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001505 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001506 .block_erasers =
1507 {
1508 {
1509 .eraseblocks = { {4 * 1024, 256} },
1510 .block_erase = spi_block_erase_20,
1511 }, {
1512 .eraseblocks = { {32 * 1024, 32} },
1513 .block_erase = spi_block_erase_52,
1514 }, {
1515 .eraseblocks = { {64 * 1024, 16} },
1516 .block_erase = spi_block_erase_d8,
1517 }, {
1518 .eraseblocks = { {1024 * 1024, 1} },
1519 .block_erase = spi_block_erase_60,
1520 }, {
1521 .eraseblocks = { {1024 * 1024, 1} },
1522 .block_erase = spi_block_erase_c7,
1523 }
1524 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001525 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001526 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001527 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001528 },
1529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001530 {
1531 .vendor = "Atmel",
1532 .name = "AT26DF161",
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_26DF161,
1536 .total_size = 2048,
1537 .page_size = 256,
1538 .tested = TEST_UNTESTED,
1539 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001540 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001541 .block_erasers =
1542 {
1543 {
1544 .eraseblocks = { {4 * 1024, 512} },
1545 .block_erase = spi_block_erase_20,
1546 }, {
1547 .eraseblocks = { {32 * 1024, 64} },
1548 .block_erase = spi_block_erase_52,
1549 }, {
1550 .eraseblocks = { {64 * 1024, 32} },
1551 .block_erase = spi_block_erase_d8,
1552 }, {
1553 .eraseblocks = { {2 * 1024 * 1024, 1} },
1554 .block_erase = spi_block_erase_60,
1555 }, {
1556 .eraseblocks = { {2 * 1024 * 1024, 1} },
1557 .block_erase = spi_block_erase_c7,
1558 }
1559 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001560 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001561 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001562 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "Atmel",
1567 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001569 .manufacture_id = ATMEL_ID,
1570 .model_id = AT_26DF161A,
1571 .total_size = 2048,
1572 .page_size = 256,
1573 .tested = TEST_UNTESTED,
1574 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001575 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001576 .block_erasers =
1577 {
1578 {
1579 .eraseblocks = { {4 * 1024, 512} },
1580 .block_erase = spi_block_erase_20,
1581 }, {
1582 .eraseblocks = { {32 * 1024, 64} },
1583 .block_erase = spi_block_erase_52,
1584 }, {
1585 .eraseblocks = { {64 * 1024, 32} },
1586 .block_erase = spi_block_erase_d8,
1587 }, {
1588 .eraseblocks = { {2 * 1024 * 1024, 1} },
1589 .block_erase = spi_block_erase_60,
1590 }, {
1591 .eraseblocks = { {2 * 1024 * 1024, 1} },
1592 .block_erase = spi_block_erase_c7,
1593 }
1594 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001595 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001596 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001597 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001598 },
1599
1600 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001601 /*{
1602 .vendor = "Atmel",
1603 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001605 .manufacture_id = ATMEL_ID,
1606 .model_id = AT_26DF321,
1607 .total_size = 4096,
1608 .page_size = 256,
1609 .tested = TEST_UNTESTED,
1610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001611 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001612 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001613 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001614 .read = spi_chip_read,
1615 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001617 {
1618 .vendor = "Atmel",
1619 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001620 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 .manufacture_id = ATMEL_ID,
1622 .model_id = AT_26F004,
1623 .total_size = 512,
1624 .page_size = 256,
1625 .tested = TEST_UNTESTED,
1626 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001627 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001628 .block_erasers =
1629 {
1630 {
1631 .eraseblocks = { {4 * 1024, 128} },
1632 .block_erase = spi_block_erase_20,
1633 }, {
1634 .eraseblocks = { {32 * 1024, 16} },
1635 .block_erase = spi_block_erase_52,
1636 }, {
1637 .eraseblocks = { {64 * 1024, 8} },
1638 .block_erase = spi_block_erase_d8,
1639 }, {
1640 .eraseblocks = { {512 * 1024, 1} },
1641 .block_erase = spi_block_erase_60,
1642 }, {
1643 .eraseblocks = { {512 * 1024, 1} },
1644 .block_erase = spi_block_erase_c7,
1645 }
1646 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 .write = NULL /* Incompatible Page write */,
1648 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001649 },
1650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001651 {
1652 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001653 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001654 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001655 .manufacture_id = ATMEL_ID,
1656 .model_id = AT_29C512,
1657 .total_size = 64,
1658 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001659 .feature_bits = FEATURE_LONG_RESET,
1660 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001661 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001662 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001663 .block_erasers =
1664 {
1665 {
1666 .eraseblocks = { {64 * 1024, 1} },
1667 .block_erase = erase_chip_block_jedec,
1668 }
1669 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001670 .write = write_jedec,
1671 .read = read_memmapped,
1672
1673 },
1674
1675 {
1676 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001677 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001678 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001679 .manufacture_id = ATMEL_ID,
1680 .model_id = AT_29C010A,
1681 .total_size = 128,
1682 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001683 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00001684 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001685 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001686 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001687 .block_erasers =
1688 {
1689 {
1690 .eraseblocks = { {128 * 1024, 1} },
1691 .block_erase = erase_chip_block_jedec,
1692 }
1693 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001694 .write = write_jedec, /* FIXME */
1695 .read = read_memmapped,
1696 },
1697
1698 {
1699 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001700 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001701 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001702 .manufacture_id = ATMEL_ID,
1703 .model_id = AT_29C020,
1704 .total_size = 256,
1705 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001706 .feature_bits = FEATURE_LONG_RESET,
1707 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001708 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001709 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00001710 .block_erasers =
1711 {
1712 {
1713 .eraseblocks = { {256 * 1024, 1} },
1714 .block_erase = erase_chip_block_jedec,
1715 }
1716 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001717 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001718 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001719 },
1720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001721 {
1722 .vendor = "Atmel",
1723 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001724 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 .manufacture_id = ATMEL_ID,
1726 .model_id = AT_29C040A,
1727 .total_size = 512,
1728 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001729 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001730 .tested = TEST_UNTESTED,
1731 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001732 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00001733 .block_erasers =
1734 {
1735 {
1736 .eraseblocks = { {512 * 1024, 1} },
1737 .block_erase = erase_chip_block_jedec,
1738 }
1739 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001740 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001741 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001742 },
1743
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001744 {
1745 .vendor = "Atmel",
1746 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001747 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001748 .manufacture_id = ATMEL_ID,
1749 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001750 .total_size = 16896 /* No power of two sizes */,
1751 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .tested = TEST_BAD_READ,
1753 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001754 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001755 .write = NULL /* Incompatible Page write */,
1756 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001757 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001759 {
1760 .vendor = "Atmel",
1761 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001762 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001763 .manufacture_id = ATMEL_ID,
1764 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001765 .total_size = 128 /* Size can only be determined from status register */,
1766 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001767 .tested = TEST_BAD_READ,
1768 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001769 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .write = NULL,
1771 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001772 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 {
1775 .vendor = "Atmel",
1776 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001777 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001778 .manufacture_id = ATMEL_ID,
1779 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001780 .total_size = 256 /* Size can only be determined from status register */,
1781 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001782 .tested = TEST_BAD_READ,
1783 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001784 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001785 .write = NULL,
1786 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001787 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 {
1790 .vendor = "Atmel",
1791 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001792 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001793 .manufacture_id = ATMEL_ID,
1794 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001795 .total_size = 512 /* Size can only be determined from status register */,
1796 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001797 .tested = TEST_BAD_READ,
1798 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001799 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 .write = NULL,
1801 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001802 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001804 {
1805 .vendor = "Atmel",
1806 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001807 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001808 .manufacture_id = ATMEL_ID,
1809 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001810 .total_size = 1024 /* Size can only be determined from status register */,
1811 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001812 .tested = TEST_BAD_READ,
1813 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001814 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001815 .write = NULL,
1816 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001817 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001819 {
1820 .vendor = "Atmel",
1821 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001822 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001823 .manufacture_id = ATMEL_ID,
1824 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001825 .total_size = 2048 /* Size can only be determined from status register */,
1826 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001827 .tested = TEST_BAD_READ,
1828 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001829 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001830 .write = NULL,
1831 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001832 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 {
1835 .vendor = "Atmel",
1836 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001837 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001838 .manufacture_id = ATMEL_ID,
1839 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001840 .total_size = 4224 /* No power of two sizes */,
1841 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001842 .tested = TEST_BAD_READ,
1843 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001844 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001845 .write = NULL,
1846 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001847 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001848
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001849 {
1850 .vendor = "Atmel",
1851 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001852 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001853 .manufacture_id = ATMEL_ID,
1854 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001855 .total_size = 4096 /* Size can only be determined from status register */,
1856 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001857 .tested = TEST_BAD_READ,
1858 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001859 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001860 .write = NULL,
1861 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001862 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001864 {
1865 .vendor = "Atmel",
1866 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001867 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 .manufacture_id = ATMEL_ID,
1869 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001870 .total_size = 8192 /* Size can only be determined from status register */,
1871 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001872 .tested = TEST_BAD_READ,
1873 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001874 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001875 .write = NULL,
1876 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001877 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001879 {
1880 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001881 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001882 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001883 .manufacture_id = ATMEL_ID,
1884 .model_id = AT_49BV512,
1885 .total_size = 64,
1886 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001887 .feature_bits = FEATURE_EITHER_RESET,
1888 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001889 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001890 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001891 .block_erasers =
1892 {
1893 {
1894 .eraseblocks = { {64 * 1024, 1} },
1895 .block_erase = erase_chip_block_jedec,
1896 }
1897 },
Sean Nelson35727f72010-01-28 23:55:12 +00001898 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001899 .read = read_memmapped,
1900 },
1901
1902 {
1903 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001904 .name = "AT49F020",
1905 .bustype = CHIP_BUSTYPE_PARALLEL,
1906 .manufacture_id = ATMEL_ID,
1907 .model_id = AT_49F020,
1908 .total_size = 256,
1909 .page_size = 256,
1910 .feature_bits = FEATURE_EITHER_RESET,
1911 .tested = TEST_OK_PREW,
1912 .probe = probe_jedec,
1913 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1914 .block_erasers =
1915 {
1916 {
1917 .eraseblocks = { {256 * 1024, 1} },
1918 .block_erase = erase_chip_block_jedec,
1919 }
1920 },
1921 .write = write_jedec_1,
1922 .read = read_memmapped,
1923 },
1924
1925 {
1926 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001927 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001928 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001929 .manufacture_id = ATMEL_ID,
1930 .model_id = AT_49F002N,
1931 .total_size = 256,
1932 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001933 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001934 .tested = TEST_UNTESTED,
1935 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001936 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001937 .block_erasers =
1938 {
1939 {
1940 .eraseblocks = {
1941 {16 * 1024, 1},
1942 {8 * 1024, 2},
1943 {96 * 1024, 1},
1944 {128 * 1024, 1},
1945 },
1946 .block_erase = erase_sector_jedec,
1947 }, {
1948 .eraseblocks = { {256 * 1024, 1} },
1949 .block_erase = erase_chip_block_jedec,
1950 }
1951 },
Sean Nelson35727f72010-01-28 23:55:12 +00001952 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001953 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001954 },
1955
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001956 {
1957 .vendor = "Atmel",
1958 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001959 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001960 .manufacture_id = ATMEL_ID,
1961 .model_id = AT_49F002NT,
1962 .total_size = 256,
1963 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001964 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001965 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001966 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001967 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001968 .block_erasers =
1969 {
1970 {
1971 .eraseblocks = {
1972 {128 * 1024, 1},
1973 {96 * 1024, 1},
1974 {8 * 1024, 2},
1975 {16 * 1024, 1},
1976 },
1977 .block_erase = erase_sector_jedec,
1978 }, {
1979 .eraseblocks = { {256 * 1024, 1} },
1980 .block_erase = erase_chip_block_jedec,
1981 }
1982 },
Sean Nelson35727f72010-01-28 23:55:12 +00001983 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001984 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001985 },
1986
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001987 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001988 .vendor = "EMST",
1989 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001990 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001991 .manufacture_id = EMST_ID,
1992 .model_id = EMST_F49B002UA,
1993 .total_size = 256,
1994 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001995 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001996 .tested = TEST_UNTESTED,
1997 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001998 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001999 .block_erasers =
2000 {
2001 {
2002 .eraseblocks = {
2003 {128 * 1024, 1},
2004 {96 * 1024, 1},
2005 {8 * 1024, 2},
2006 {16 * 1024, 1},
2007 },
2008 .block_erase = erase_sector_jedec,
2009 }, {
2010 .eraseblocks = { {256 * 1024, 1} },
2011 .block_erase = erase_chip_block_jedec,
2012 }
2013 },
Sean Nelson35727f72010-01-28 23:55:12 +00002014 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002015 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002016 },
2017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002018 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002019 .vendor = "EMST",
2020 .name = "F25L008A",
2021 .bustype = CHIP_BUSTYPE_SPI,
2022 .manufacture_id = EMST_ID,
2023 .model_id = EMST_F25L008A,
2024 .total_size = 1024,
2025 .page_size = 256,
2026 .tested = TEST_UNTESTED,
2027 .probe = probe_spi_rdid,
2028 .probe_timing = TIMING_ZERO,
2029 .block_erasers =
2030 {
2031 {
2032 .eraseblocks = { {4 * 1024, 256} },
2033 .block_erase = spi_block_erase_20,
2034 }, {
2035 .eraseblocks = { {64 * 1024, 16} },
2036 .block_erase = spi_block_erase_d8,
2037 }, {
2038 .eraseblocks = { {1024 * 1024, 1} },
2039 .block_erase = spi_block_erase_60,
2040 }, {
2041 .eraseblocks = { {1024 * 1024, 1} },
2042 .block_erase = spi_block_erase_c7,
2043 }
2044 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002045 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002046 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002047 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002048 },
2049
2050 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002051 .vendor = "Eon",
2052 .name = "EN25B05",
2053 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002054 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002055 .model_id = EN_25B05,
2056 .total_size = 64,
2057 .page_size = 256,
2058 .tested = TEST_UNTESTED,
2059 .probe = probe_spi_rdid,
2060 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002061 .block_erasers =
2062 {
2063 {
2064 .eraseblocks = {
2065 {4 * 1024, 2},
2066 {8 * 1024, 1},
2067 {16 * 1024, 1},
2068 {32 * 1024, 1},
2069 },
2070 .block_erase = spi_block_erase_d8,
2071 }, {
2072 .eraseblocks = { {64 * 1024, 1} },
2073 .block_erase = spi_block_erase_c7,
2074 }
2075 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002076 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .write = spi_chip_write_256,
2078 .read = spi_chip_read,
2079 },
2080
2081 {
2082 .vendor = "Eon",
2083 .name = "EN25B05T",
2084 .bustype = CHIP_BUSTYPE_SPI,
2085 .manufacture_id = EON_ID_NOPREFIX,
2086 .model_id = EN_25B05,
2087 .total_size = 64,
2088 .page_size = 256,
2089 .tested = TEST_UNTESTED,
2090 .probe = probe_spi_rdid,
2091 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002092 .block_erasers =
2093 {
2094 {
2095 .eraseblocks = {
2096 {32 * 1024, 1},
2097 {16 * 1024, 1},
2098 {8 * 1024, 1},
2099 {4 * 1024, 2},
2100 },
2101 .block_erase = spi_block_erase_d8,
2102 }, {
2103 .eraseblocks = { {64 * 1024, 1} },
2104 .block_erase = spi_block_erase_c7,
2105 }
2106 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002107 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002108 .write = spi_chip_write_256,
2109 .read = spi_chip_read,
2110 },
2111
2112 {
2113 .vendor = "Eon",
2114 .name = "EN25B10",
2115 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002116 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002117 .model_id = EN_25B10,
2118 .total_size = 128,
2119 .page_size = 256,
2120 .tested = TEST_UNTESTED,
2121 .probe = probe_spi_rdid,
2122 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002123 .block_erasers =
2124 {
2125 {
2126 .eraseblocks = {
2127 {4 * 1024, 2},
2128 {8 * 1024, 1},
2129 {16 * 1024, 1},
2130 {32 * 1024, 3},
2131 },
2132 .block_erase = spi_block_erase_d8,
2133 }, {
2134 .eraseblocks = { {128 * 1024, 1} },
2135 .block_erase = spi_block_erase_c7,
2136 }
2137 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002138 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002139 .write = spi_chip_write_256,
2140 .read = spi_chip_read,
2141 },
2142
2143 {
2144 .vendor = "Eon",
2145 .name = "EN25B10T",
2146 .bustype = CHIP_BUSTYPE_SPI,
2147 .manufacture_id = EON_ID_NOPREFIX,
2148 .model_id = EN_25B10,
2149 .total_size = 128,
2150 .page_size = 256,
2151 .tested = TEST_UNTESTED,
2152 .probe = probe_spi_rdid,
2153 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002154 .block_erasers =
2155 {
2156 {
2157 .eraseblocks = {
2158 {32 * 1024, 3},
2159 {16 * 1024, 1},
2160 {8 * 1024, 1},
2161 {4 * 1024, 2},
2162 },
2163 .block_erase = spi_block_erase_d8,
2164 }, {
2165 .eraseblocks = { {128 * 1024, 1} },
2166 .block_erase = spi_block_erase_c7,
2167 }
2168 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002169 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002170 .write = spi_chip_write_256,
2171 .read = spi_chip_read,
2172 },
2173
2174 {
2175 .vendor = "Eon",
2176 .name = "EN25B20",
2177 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002178 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002179 .model_id = EN_25B20,
2180 .total_size = 256,
2181 .page_size = 256,
2182 .tested = TEST_UNTESTED,
2183 .probe = probe_spi_rdid,
2184 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002185 .block_erasers =
2186 {
2187 {
2188 .eraseblocks = {
2189 {4 * 1024, 2},
2190 {8 * 1024, 1},
2191 {16 * 1024, 1},
2192 {32 * 1024, 1},
2193 {64 * 1024, 3}
2194 },
2195 .block_erase = spi_block_erase_d8,
2196 }, {
2197 .eraseblocks = { {256 * 1024, 1} },
2198 .block_erase = spi_block_erase_c7,
2199 }
2200 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002201 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002202 .write = spi_chip_write_256,
2203 .read = spi_chip_read,
2204 },
2205
2206 {
2207 .vendor = "Eon",
2208 .name = "EN25B20T",
2209 .bustype = CHIP_BUSTYPE_SPI,
2210 .manufacture_id = EON_ID_NOPREFIX,
2211 .model_id = EN_25B20,
2212 .total_size = 256,
2213 .page_size = 256,
2214 .tested = TEST_UNTESTED,
2215 .probe = probe_spi_rdid,
2216 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002217 .block_erasers =
2218 {
2219 {
2220 .eraseblocks = {
2221 {64 * 1024, 3},
2222 {32 * 1024, 1},
2223 {16 * 1024, 1},
2224 {8 * 1024, 1},
2225 {4 * 1024, 2},
2226 },
2227 .block_erase = spi_block_erase_d8,
2228 }, {
2229 .eraseblocks = { {256 * 1024, 1} },
2230 .block_erase = spi_block_erase_c7,
2231 }
2232 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002233 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002234 .write = spi_chip_write_256,
2235 .read = spi_chip_read,
2236 },
2237
2238 {
2239 .vendor = "Eon",
2240 .name = "EN25B40",
2241 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002242 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002243 .model_id = EN_25B40,
2244 .total_size = 512,
2245 .page_size = 256,
2246 .tested = TEST_UNTESTED,
2247 .probe = probe_spi_rdid,
2248 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002249 .block_erasers =
2250 {
2251 {
2252 .eraseblocks = {
2253 {4 * 1024, 2},
2254 {8 * 1024, 1},
2255 {16 * 1024, 1},
2256 {32 * 1024, 1},
2257 {64 * 1024, 7}
2258 },
2259 .block_erase = spi_block_erase_d8,
2260 }, {
2261 .eraseblocks = { {512 * 1024, 1} },
2262 .block_erase = spi_block_erase_c7,
2263 }
2264 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002265 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002266 .write = spi_chip_write_256,
2267 .read = spi_chip_read,
2268 },
2269
2270 {
2271 .vendor = "Eon",
2272 .name = "EN25B40T",
2273 .bustype = CHIP_BUSTYPE_SPI,
2274 .manufacture_id = EON_ID_NOPREFIX,
2275 .model_id = EN_25B40,
2276 .total_size = 512,
2277 .page_size = 256,
2278 .tested = TEST_UNTESTED,
2279 .probe = probe_spi_rdid,
2280 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002281 .block_erasers =
2282 {
2283 {
2284 .eraseblocks = {
2285 {64 * 1024, 7},
2286 {32 * 1024, 1},
2287 {16 * 1024, 1},
2288 {8 * 1024, 1},
2289 {4 * 1024, 2},
2290 },
2291 .block_erase = spi_block_erase_d8,
2292 }, {
2293 .eraseblocks = { {512 * 1024, 1} },
2294 .block_erase = spi_block_erase_c7,
2295 }
2296 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002297 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002298 .write = spi_chip_write_256,
2299 .read = spi_chip_read,
2300 },
2301
2302 {
2303 .vendor = "Eon",
2304 .name = "EN25B80",
2305 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002306 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002307 .model_id = EN_25B80,
2308 .total_size = 1024,
2309 .page_size = 256,
2310 .tested = TEST_UNTESTED,
2311 .probe = probe_spi_rdid,
2312 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002313 .block_erasers =
2314 {
2315 {
2316 .eraseblocks = {
2317 {4 * 1024, 2},
2318 {8 * 1024, 1},
2319 {16 * 1024, 1},
2320 {32 * 1024, 1},
2321 {64 * 1024, 15}
2322 },
2323 .block_erase = spi_block_erase_d8,
2324 }, {
2325 .eraseblocks = { {1024 * 1024, 1} },
2326 .block_erase = spi_block_erase_c7,
2327 }
2328 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002329 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002330 .write = spi_chip_write_256,
2331 .read = spi_chip_read,
2332 },
2333
2334 {
2335 .vendor = "Eon",
2336 .name = "EN25B80T",
2337 .bustype = CHIP_BUSTYPE_SPI,
2338 .manufacture_id = EON_ID_NOPREFIX,
2339 .model_id = EN_25B80,
2340 .total_size = 1024,
2341 .page_size = 256,
2342 .tested = TEST_UNTESTED,
2343 .probe = probe_spi_rdid,
2344 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002345 .block_erasers =
2346 {
2347 {
2348 .eraseblocks = {
2349 {64 * 1024, 15},
2350 {32 * 1024, 1},
2351 {16 * 1024, 1},
2352 {8 * 1024, 1},
2353 {4 * 1024, 2},
2354 },
2355 .block_erase = spi_block_erase_d8,
2356 }, {
2357 .eraseblocks = { {1024 * 1024, 1} },
2358 .block_erase = spi_block_erase_c7,
2359 }
2360 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002361 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002362 .write = spi_chip_write_256,
2363 .read = spi_chip_read,
2364 },
2365
2366 {
2367 .vendor = "Eon",
2368 .name = "EN25B16",
2369 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002370 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002371 .model_id = EN_25B16,
2372 .total_size = 2048,
2373 .page_size = 256,
2374 .tested = TEST_UNTESTED,
2375 .probe = probe_spi_rdid,
2376 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002377 .block_erasers =
2378 {
2379 {
2380 .eraseblocks = {
2381 {4 * 1024, 2},
2382 {8 * 1024, 1},
2383 {16 * 1024, 1},
2384 {32 * 1024, 1},
2385 {64 * 1024, 31},
2386 },
2387 .block_erase = spi_block_erase_d8,
2388 }, {
2389 .eraseblocks = { {2 * 1024 * 1024, 1} },
2390 .block_erase = spi_block_erase_c7,
2391 }
2392 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002393 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002394 .write = spi_chip_write_256,
2395 .read = spi_chip_read,
2396 },
2397
2398 {
2399 .vendor = "Eon",
2400 .name = "EN25B16T",
2401 .bustype = CHIP_BUSTYPE_SPI,
2402 .manufacture_id = EON_ID_NOPREFIX,
2403 .model_id = EN_25B16,
2404 .total_size = 2048,
2405 .page_size = 256,
2406 .tested = TEST_UNTESTED,
2407 .probe = probe_spi_rdid,
2408 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002409 .block_erasers =
2410 {
2411 {
2412 .eraseblocks = {
2413 {64 * 1024, 31},
2414 {32 * 1024, 1},
2415 {16 * 1024, 1},
2416 {8 * 1024, 1},
2417 {4 * 1024, 2},
2418 },
2419 .block_erase = spi_block_erase_d8,
2420 }, {
2421 .eraseblocks = { {2 * 1024 * 1024, 1} },
2422 .block_erase = spi_block_erase_c7,
2423 }
2424 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002425 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002426 .write = spi_chip_write_256,
2427 .read = spi_chip_read,
2428 },
2429
2430 {
2431 .vendor = "Eon",
2432 .name = "EN25B32",
2433 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002434 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002435 .model_id = EN_25B32,
2436 .total_size = 4096,
2437 .page_size = 256,
2438 .tested = TEST_UNTESTED,
2439 .probe = probe_spi_rdid,
2440 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002441 .block_erasers =
2442 {
2443 {
2444 .eraseblocks = {
2445 {4 * 1024, 2},
2446 {8 * 1024, 1},
2447 {16 * 1024, 1},
2448 {32 * 1024, 1},
2449 {64 * 1024, 63},
2450 },
2451 .block_erase = spi_block_erase_d8,
2452 }, {
2453 .eraseblocks = { {4 * 1024 * 1024, 1} },
2454 .block_erase = spi_block_erase_c7,
2455 }
2456 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002457 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002458 .write = spi_chip_write_256,
2459 .read = spi_chip_read,
2460 },
2461
2462 {
2463 .vendor = "Eon",
2464 .name = "EN25B32T",
2465 .bustype = CHIP_BUSTYPE_SPI,
2466 .manufacture_id = EON_ID_NOPREFIX,
2467 .model_id = EN_25B32,
2468 .total_size = 4096,
2469 .page_size = 256,
2470 .tested = TEST_UNTESTED,
2471 .probe = probe_spi_rdid,
2472 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002473 .block_erasers =
2474 {
2475 {
2476 .eraseblocks = {
2477 {64 * 1024, 63},
2478 {32 * 1024, 1},
2479 {16 * 1024, 1},
2480 {8 * 1024, 1},
2481 {4 * 1024, 2},
2482 },
2483 .block_erase = spi_block_erase_d8,
2484 }, {
2485 .eraseblocks = { {4 * 1024 * 1024, 1} },
2486 .block_erase = spi_block_erase_c7,
2487 }
2488 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002489 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002490 .write = spi_chip_write_256,
2491 .read = spi_chip_read,
2492 },
2493
2494 {
2495 .vendor = "Eon",
2496 .name = "EN25B64",
2497 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002498 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002499 .model_id = EN_25B64,
2500 .total_size = 8192,
2501 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002502 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002503 .tested = TEST_UNTESTED,
2504 .probe = probe_spi_rdid,
2505 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002506 .block_erasers =
2507 {
2508 {
2509 .eraseblocks = {
2510 {4 * 1024, 2},
2511 {8 * 1024, 1},
2512 {16 * 1024, 1},
2513 {32 * 1024, 1},
2514 {64 * 1024, 127},
2515 },
2516 .block_erase = spi_block_erase_d8,
2517 }, {
2518 .eraseblocks = { {8 * 1024 * 1024, 1} },
2519 .block_erase = spi_block_erase_c7,
2520 }
2521 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002522 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002523 .write = spi_chip_write_256,
2524 .read = spi_chip_read,
2525 },
2526
2527 {
2528 .vendor = "Eon",
2529 .name = "EN25B64T",
2530 .bustype = CHIP_BUSTYPE_SPI,
2531 .manufacture_id = EON_ID_NOPREFIX,
2532 .model_id = EN_25B64,
2533 .total_size = 8192,
2534 .page_size = 256,
2535 .tested = TEST_UNTESTED,
2536 .probe = probe_spi_rdid,
2537 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002538 .block_erasers =
2539 {
2540 {
2541 .eraseblocks = {
2542 {64 * 1024, 127},
2543 {32 * 1024, 1},
2544 {16 * 1024, 1},
2545 {8 * 1024, 1},
2546 {4 * 1024, 2},
2547 },
2548 .block_erase = spi_block_erase_d8,
2549 }, {
2550 .eraseblocks = { {8 * 1024 * 1024, 1} },
2551 .block_erase = spi_block_erase_c7,
2552 }
2553 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002554 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002555 .write = spi_chip_write_256,
2556 .read = spi_chip_read,
2557 },
2558
2559 {
2560 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002561 .name = "EN25D16",
2562 .bustype = CHIP_BUSTYPE_SPI,
2563 .manufacture_id = EON_ID_NOPREFIX,
2564 .model_id = EN_25D16,
2565 .total_size = 2048,
2566 .page_size = 256,
2567 .tested = TEST_UNTESTED,
2568 .probe = probe_spi_rdid,
2569 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002570 .block_erasers =
2571 {
2572 {
2573 .eraseblocks = { {4 * 1024, 512} },
2574 .block_erase = spi_block_erase_20,
2575 }, {
2576 .eraseblocks = { {64 * 1024, 32} },
2577 .block_erase = spi_block_erase_d8,
2578 }, {
2579 .eraseblocks = { {64 * 1024, 32} },
2580 .block_erase = spi_block_erase_52,
2581 }, {
2582 .eraseblocks = { {2 * 1024 * 1024, 1} },
2583 .block_erase = spi_block_erase_60,
2584 }, {
2585 .eraseblocks = { {2 * 1024 * 1024, 1} },
2586 .block_erase = spi_block_erase_c7,
2587 }
2588 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002589 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002590 .write = spi_chip_write_256,
2591 .read = spi_chip_read,
2592 },
2593
2594 {
2595 .vendor = "Eon",
2596 .name = "EN25F05",
2597 .bustype = CHIP_BUSTYPE_SPI,
2598 .manufacture_id = EON_ID_NOPREFIX,
2599 .model_id = EN_25F05,
2600 .total_size = 64,
2601 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002602 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002603 .tested = TEST_UNTESTED,
2604 .probe = probe_spi_rdid,
2605 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002606 .block_erasers =
2607 {
2608 {
2609 .eraseblocks = { {4 * 1024, 16} },
2610 .block_erase = spi_block_erase_20,
2611 }, {
2612 .eraseblocks = { {32 * 1024, 2} },
2613 .block_erase = spi_block_erase_d8,
2614 }, {
2615 .eraseblocks = { {32 * 1024, 2} },
2616 .block_erase = spi_block_erase_52,
2617 }, {
2618 .eraseblocks = { {64 * 1024, 1} },
2619 .block_erase = spi_block_erase_60,
2620 }, {
2621 .eraseblocks = { {64 * 1024, 1} },
2622 .block_erase = spi_block_erase_c7,
2623 }
2624 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002625 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002626 .write = spi_chip_write_256,
2627 .read = spi_chip_read,
2628 },
2629
2630 {
2631 .vendor = "Eon",
2632 .name = "EN25F10",
2633 .bustype = CHIP_BUSTYPE_SPI,
2634 .manufacture_id = EON_ID_NOPREFIX,
2635 .model_id = EN_25F10,
2636 .total_size = 128,
2637 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002638 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002639 .tested = TEST_UNTESTED,
2640 .probe = probe_spi_rdid,
2641 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002642 .block_erasers =
2643 {
2644 {
2645 .eraseblocks = { {4 * 1024, 32} },
2646 .block_erase = spi_block_erase_20,
2647 }, {
2648 .eraseblocks = { {32 * 1024, 4} },
2649 .block_erase = spi_block_erase_d8,
2650 }, {
2651 .eraseblocks = { {32 * 1024, 4} },
2652 .block_erase = spi_block_erase_52,
2653 }, {
2654 .eraseblocks = { {128 * 1024, 1} },
2655 .block_erase = spi_block_erase_60,
2656 }, {
2657 .eraseblocks = { {128 * 1024, 1} },
2658 .block_erase = spi_block_erase_c7,
2659 }
2660 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002661 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002662 .write = spi_chip_write_256,
2663 .read = spi_chip_read,
2664 },
2665
2666 {
2667 .vendor = "Eon",
2668 .name = "EN25F20",
2669 .bustype = CHIP_BUSTYPE_SPI,
2670 .manufacture_id = EON_ID_NOPREFIX,
2671 .model_id = EN_25F20,
2672 .total_size = 256,
2673 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002674 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002675 .tested = TEST_UNTESTED,
2676 .probe = probe_spi_rdid,
2677 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002678 .block_erasers =
2679 {
2680 {
2681 .eraseblocks = { {4 * 1024, 64} },
2682 .block_erase = spi_block_erase_20,
2683 }, {
2684 .eraseblocks = { {64 * 1024, 4} },
2685 .block_erase = spi_block_erase_d8,
2686 }, {
2687 .eraseblocks = { {64 * 1024, 4} },
2688 .block_erase = spi_block_erase_52,
2689 }, {
2690 .eraseblocks = { {256 * 1024, 1} },
2691 .block_erase = spi_block_erase_60,
2692 }, {
2693 .eraseblocks = { {256 * 1024, 1} },
2694 .block_erase = spi_block_erase_c7,
2695 }
2696 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002697 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002698 .write = spi_chip_write_256,
2699 .read = spi_chip_read,
2700 },
2701
2702 {
2703 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002704 .name = "EN25F40",
2705 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002706 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002707 .model_id = EN_25F40,
2708 .total_size = 512,
2709 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002710 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002711 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002712 .probe = probe_spi_rdid,
2713 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002714 .block_erasers =
2715 {
2716 {
Sean Nelson54596372010-01-09 05:30:14 +00002717 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002718 .block_erase = spi_block_erase_20,
2719 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002720 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002721 .block_erase = spi_block_erase_d8,
2722 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002723 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002724 .block_erase = spi_block_erase_60,
2725 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002726 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002727 .block_erase = spi_block_erase_c7,
2728 },
2729 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002730 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002731 .write = spi_chip_write_256,
2732 .read = spi_chip_read,
2733 },
2734
2735 {
2736 .vendor = "Eon",
2737 .name = "EN25F80",
2738 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002739 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002740 .model_id = EN_25F80,
2741 .total_size = 1024,
2742 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002743 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002744 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002745 .probe = probe_spi_rdid,
2746 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002747 .block_erasers =
2748 {
2749 {
2750 .eraseblocks = { {4 * 1024, 256} },
2751 .block_erase = spi_block_erase_20,
2752 }, {
2753 .eraseblocks = { {64 * 1024, 16} },
2754 .block_erase = spi_block_erase_d8,
2755 }, {
2756 .eraseblocks = { {1024 * 1024, 1} },
2757 .block_erase = spi_block_erase_60,
2758 }, {
2759 .eraseblocks = { {1024 * 1024, 1} },
2760 .block_erase = spi_block_erase_c7,
2761 }
2762 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002763 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002764 .write = spi_chip_write_256,
2765 .read = spi_chip_read,
2766 },
2767
2768 {
2769 .vendor = "Eon",
2770 .name = "EN25F16",
2771 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002772 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002773 .model_id = EN_25F16,
2774 .total_size = 2048,
2775 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002776 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002777 .tested = TEST_UNTESTED,
2778 .probe = probe_spi_rdid,
2779 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002780 .block_erasers =
2781 {
2782 {
2783 .eraseblocks = { {4 * 1024, 512} },
2784 .block_erase = spi_block_erase_20,
2785 }, {
2786 .eraseblocks = { {64 * 1024, 32} },
2787 .block_erase = spi_block_erase_d8,
2788 }, {
2789 .eraseblocks = { {2 * 1024 * 1024, 1} },
2790 .block_erase = spi_block_erase_60,
2791 }, {
2792 .eraseblocks = { {2 * 1024 * 1024, 1} },
2793 .block_erase = spi_block_erase_c7,
2794 }
2795 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002796 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002797 .write = spi_chip_write_256,
2798 .read = spi_chip_read,
2799 },
2800
2801 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002802 .vendor = "Eon",
2803 .name = "EN25F32",
2804 .bustype = CHIP_BUSTYPE_SPI,
2805 .manufacture_id = EON_ID_NOPREFIX,
2806 .model_id = EN_25F32,
2807 .total_size = 4096,
2808 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002809 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002810 .tested = TEST_UNTESTED,
2811 .probe = probe_spi_rdid,
2812 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002813 .block_erasers =
2814 {
2815 {
2816 .eraseblocks = { {4 * 1024, 1024} },
2817 .block_erase = spi_block_erase_20,
2818 }, {
2819 .eraseblocks = { {64 * 1024, 64} },
2820 .block_erase = spi_block_erase_d8,
2821 }, {
2822 .eraseblocks = { {4 * 1024 * 1024, 1} },
2823 .block_erase = spi_block_erase_60,
2824 }, {
2825 .eraseblocks = { {4 * 1024 * 1024, 1} },
2826 .block_erase = spi_block_erase_c7,
2827 }
2828 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002829 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002830 .write = spi_chip_write_256,
2831 .read = spi_chip_read,
2832 },
2833
2834 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002835 .vendor = "Eon",
2836 .name = "EN29F010",
2837 .bustype = CHIP_BUSTYPE_PARALLEL,
2838 .manufacture_id = EON_ID,
2839 .model_id = EN_29F010,
2840 .total_size = 128,
2841 .page_size = 128,
2842 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2843 .tested = TEST_OK_PREW,
2844 .probe = probe_jedec,
2845 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2846 .block_erasers =
2847 {
2848 {
2849 .eraseblocks = { {16 * 1024, 8} },
2850 .block_erase = erase_sector_jedec,
2851 },
2852 {
2853 .eraseblocks = { {128 * 1024, 1} },
2854 .block_erase = erase_chip_block_jedec,
2855 },
2856 },
2857 .write = write_jedec_1,
2858 .read = read_memmapped,
2859 },
2860
2861 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002862 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002863 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002864 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002865 .manufacture_id = EON_ID,
2866 .model_id = EN_29F002B,
2867 .total_size = 256,
2868 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002869 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002870 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002871 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002872 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002873 .block_erasers =
2874 {
2875 {
2876 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002877 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002878 {8 * 1024, 2},
2879 {32 * 1024, 1},
2880 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002881 },
2882 .block_erase = erase_sector_jedec,
2883 }, {
2884 .eraseblocks = { {256 * 1024, 1} },
2885 .block_erase = erase_chip_block_jedec,
2886 },
2887 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002888 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002890 },
2891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002893 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002896 .manufacture_id = EON_ID,
2897 .model_id = EN_29F002T,
2898 .total_size = 256,
2899 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002900 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002901 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002902 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002903 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002904 .block_erasers =
2905 {
2906 {
2907 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002908 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002909 {32 * 1024, 1},
2910 {8 * 1024, 2},
2911 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002912 },
2913 .block_erase = erase_sector_jedec,
2914 }, {
2915 .eraseblocks = { {256 * 1024, 1} },
2916 .block_erase = erase_chip_block_jedec,
2917 },
2918 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002919 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002920 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002921 },
2922
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002923 {
2924 .vendor = "Fujitsu",
2925 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002926 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002927 .manufacture_id = FUJITSU_ID,
2928 .model_id = MBM29F004BC,
2929 .total_size = 512,
2930 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002931 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .tested = TEST_UNTESTED,
2933 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002934 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002935 .block_erasers =
2936 {
2937 {
2938 .eraseblocks = {
2939 {16 * 1024, 1},
2940 {8 * 1024, 2},
2941 {32 * 1024, 1},
2942 {64 * 1024, 7},
2943 },
Sean Nelson35727f72010-01-28 23:55:12 +00002944 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002945 }, {
2946 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002947 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002948 },
2949 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002950 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002951 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002952 },
2953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002954 {
2955 .vendor = "Fujitsu",
2956 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002957 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002958 .manufacture_id = FUJITSU_ID,
2959 .model_id = MBM29F004TC,
2960 .total_size = 512,
2961 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002962 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002963 .tested = TEST_UNTESTED,
2964 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002965 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002966 .block_erasers =
2967 {
2968 {
2969 .eraseblocks = {
2970 {64 * 1024, 7},
2971 {32 * 1024, 1},
2972 {8 * 1024, 2},
2973 {16 * 1024, 1},
2974 },
Sean Nelson35727f72010-01-28 23:55:12 +00002975 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002976 }, {
2977 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002978 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002979 },
2980 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002981 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002982 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002983 },
2984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002985 {
Sean Nelson35727f72010-01-28 23:55:12 +00002986 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002987 .vendor = "Fujitsu",
2988 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002989 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002990 .manufacture_id = FUJITSU_ID,
2991 .model_id = MBM29F400BC,
2992 .total_size = 512,
2993 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002994 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002995 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002997 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002998 .block_erasers =
2999 {
3000 {
3001 .eraseblocks = {
3002 {16 * 1024, 1},
3003 {8 * 1024, 2},
3004 {32 * 1024, 1},
3005 {64 * 1024, 7},
3006 },
3007 .block_erase = block_erase_m29f400bt,
3008 }, {
3009 .eraseblocks = { {512 * 1024, 1} },
3010 .block_erase = block_erase_chip_m29f400bt,
3011 },
3012 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003013 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003014 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003015 },
3016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003017 {
3018 .vendor = "Fujitsu",
3019 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003020 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003021 .manufacture_id = FUJITSU_ID,
3022 .model_id = MBM29F400TC,
3023 .total_size = 512,
3024 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003025 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 .tested = TEST_UNTESTED,
3027 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003028 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003029 .block_erasers =
3030 {
3031 {
3032 .eraseblocks = {
3033 {64 * 1024, 7},
3034 {32 * 1024, 1},
3035 {8 * 1024, 2},
3036 {16 * 1024, 1},
3037 },
3038 .block_erase = block_erase_m29f400bt,
3039 }, {
3040 .eraseblocks = { {512 * 1024, 1} },
3041 .block_erase = block_erase_chip_m29f400bt,
3042 },
3043 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003044 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003045 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003046 },
3047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003048 {
David Borgc96a8bd2010-06-21 16:12:22 +00003049 .vendor = "Hyundai",
3050 .name = "HY29F002T",
3051 .bustype = CHIP_BUSTYPE_PARALLEL,
3052 .manufacture_id = HYUNDAI_ID,
3053 .model_id = HY_29F002T,
3054 .total_size = 256,
3055 .page_size = 256 * 1024,
3056 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3057 .tested = TEST_OK_PREW,
3058 .probe = probe_jedec,
3059 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3060 .block_erasers =
3061 {
3062 {
3063 .eraseblocks = {
3064 {64 * 1024, 3},
3065 {32 * 1024, 1},
3066 {8 * 1024, 2},
3067 {16 * 1024, 1},
3068 },
3069 .block_erase = erase_sector_jedec,
3070 }, {
3071 .eraseblocks = { {256 * 1024, 1} },
3072 .block_erase = erase_chip_block_jedec,
3073 },
3074 },
3075 .write = write_jedec_1,
3076 .read = read_memmapped,
3077 },
3078
3079 {
3080 .vendor = "Hyundai",
3081 .name = "HY29F002B",
3082 .bustype = CHIP_BUSTYPE_PARALLEL,
3083 .manufacture_id = HYUNDAI_ID,
3084 .model_id = HY_29F002B,
3085 .total_size = 256,
3086 .page_size = 256 * 1024,
3087 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3088 .tested = TEST_UNTESTED,
3089 .probe = probe_jedec,
3090 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3091 .block_erasers =
3092 {
3093 {
3094 .eraseblocks = {
3095 {16 * 1024, 1},
3096 {8 * 1024, 2},
3097 {32 * 1024, 1},
3098 {64 * 1024, 3},
3099 },
3100 .block_erase = erase_sector_jedec,
3101 }, {
3102 .eraseblocks = { {256 * 1024, 1} },
3103 .block_erase = erase_chip_block_jedec,
3104 },
3105 },
3106 .write = write_jedec_1,
3107 .read = read_memmapped,
3108 },
3109
3110 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003111 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003112 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003113 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003114 .manufacture_id = INTEL_ID,
3115 .model_id = P28F001BXB,
3116 .total_size = 128,
3117 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003118 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003119 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003120 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003121 .block_erasers =
3122 {
3123 {
3124 .eraseblocks = {
3125 {8 * 1024, 1},
3126 {4 * 1024, 2},
3127 {112 * 1024, 1},
3128 },
Sean Nelson28accc22010-03-19 18:47:06 +00003129 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003130 },
3131 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003132 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003133 .read = read_memmapped,
3134 },
3135
3136 {
3137 .vendor = "Intel",
3138 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003139 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003140 .manufacture_id = INTEL_ID,
3141 .model_id = P28F001BXT,
3142 .total_size = 128,
3143 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003144 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003145 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003146 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003147 .block_erasers =
3148 {
3149 {
3150 .eraseblocks = {
3151 {112 * 1024, 1},
3152 {4 * 1024, 2},
3153 {8 * 1024, 1},
3154 },
Sean Nelson28accc22010-03-19 18:47:06 +00003155 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003156 },
3157 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003158 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003159 .read = read_memmapped,
3160 },
3161
3162 {
3163 .vendor = "Intel",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003164 .name = "28F002BC-T",
3165 .bustype = CHIP_BUSTYPE_PARALLEL,
3166 .manufacture_id = INTEL_ID,
3167 .model_id = P28F002BC,
3168 .total_size = 256,
3169 .page_size = 256 * 1024,
3170 .tested = TEST_UNTESTED,
3171 .probe = probe_82802ab,
3172 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3173 .block_erasers =
3174 {
3175 {
3176 .eraseblocks = {
3177 {128 * 1024, 1},
3178 {96 * 1024, 1},
3179 {8 * 1024, 2},
3180 {16 * 1024, 1},
3181 },
3182 .block_erase = erase_block_82802ab,
3183 },
3184 },
3185 .write = write_82802ab,
3186 .read = read_memmapped,
3187 },
3188
3189 {
3190 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003191 .name = "28F004S5",
3192 .bustype = CHIP_BUSTYPE_PARALLEL,
3193 .manufacture_id = INTEL_ID,
3194 .model_id = E_28F004S5,
3195 .total_size = 512,
3196 .page_size = 256,
3197 .tested = TEST_UNTESTED,
3198 .probe = probe_82802ab,
3199 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003200 .block_erasers =
3201 {
3202 {
3203 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003204 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003205 },
3206 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003207 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003208 .write = write_82802ab,
3209 .read = read_memmapped,
3210 },
3211
3212 {
3213 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00003214 .name = "28F004BV/BE-B",
3215 .bustype = CHIP_BUSTYPE_PARALLEL,
3216 .manufacture_id = INTEL_ID,
3217 .model_id = P28F004BB,
3218 .total_size = 512,
3219 .page_size = 128 * 1024, /* maximal block size */
3220 .tested = TEST_UNTESTED,
3221 .probe = probe_82802ab,
3222 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3223 .block_erasers =
3224 {
3225 {
3226 .eraseblocks = {
3227 {16 * 1024, 1},
3228 {8 * 1024, 2},
3229 {96 * 1024, 1},
3230 {128 * 1024, 3},
3231 },
3232 .block_erase = erase_block_82802ab,
3233 },
3234 },
3235 .write = write_82802ab,
3236 .read = read_memmapped,
3237 },
3238
3239 {
3240 .vendor = "Intel",
3241 .name = "28F004BV/BE-T",
3242 .bustype = CHIP_BUSTYPE_PARALLEL,
3243 .manufacture_id = INTEL_ID,
3244 .model_id = P28F004BT,
3245 .total_size = 512,
3246 .page_size = 128 * 1024, /* maximal block size */
3247 .tested = TEST_UNTESTED,
3248 .probe = probe_82802ab,
3249 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3250 .block_erasers =
3251 {
3252 {
3253 .eraseblocks = {
3254 {128 * 1024, 3},
3255 {96 * 1024, 1},
3256 {8 * 1024, 2},
3257 {16 * 1024, 1},
3258 },
3259 .block_erase = erase_block_82802ab,
3260 },
3261 },
3262 .write = write_82802ab,
3263 .read = read_memmapped,
3264 },
3265
3266 {
3267 .vendor = "Intel",
3268 .name = "28F400BV/CV/CE-B",
3269 .bustype = CHIP_BUSTYPE_PARALLEL,
3270 .manufacture_id = INTEL_ID,
3271 .model_id = P28F400BB,
3272 .total_size = 512,
3273 .page_size = 128 * 1024, /* maximal block size */
3274 .feature_bits = FEATURE_ADDR_SHIFTED,
3275 .tested = TEST_UNTESTED,
3276 .probe = probe_82802ab,
3277 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3278 .block_erasers =
3279 {
3280 {
3281 .eraseblocks = {
3282 {16 * 1024, 1},
3283 {8 * 1024, 2},
3284 {96 * 1024, 1},
3285 {128 * 1024, 3},
3286 },
3287 .block_erase = erase_block_82802ab,
3288 },
3289 },
3290 .write = write_82802ab,
3291 .read = read_memmapped,
3292 },
3293
3294 {
3295 .vendor = "Intel",
3296 .name = "28F400BV/CV/CE-T",
3297 .bustype = CHIP_BUSTYPE_PARALLEL,
3298 .manufacture_id = INTEL_ID,
3299 .model_id = P28F400BT,
3300 .total_size = 512,
3301 .page_size = 128 * 1024, /* maximal block size */
3302 .feature_bits = FEATURE_ADDR_SHIFTED,
3303 .tested = TEST_UNTESTED,
3304 .probe = probe_82802ab,
3305 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3306 .block_erasers =
3307 {
3308 {
3309 .eraseblocks = {
3310 {128 * 1024, 3},
3311 {96 * 1024, 1},
3312 {8 * 1024, 2},
3313 {16 * 1024, 1},
3314 },
3315 .block_erase = erase_block_82802ab,
3316 },
3317 },
3318 .write = write_82802ab,
3319 .read = read_memmapped,
3320 },
3321
3322 {
3323 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003324 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003325 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003326 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003327 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .total_size = 512,
3329 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003330 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003331 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003332 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003333 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003334 .block_erasers =
3335 {
3336 {
3337 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003338 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003339 },
3340 },
Sean Nelson28accc22010-03-19 18:47:06 +00003341 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003342 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003343 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003344 },
3345
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003346 {
3347 .vendor = "Intel",
3348 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003349 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003350 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003351 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003352 .total_size = 1024,
3353 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003354 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003355 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003356 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003357 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003358 .block_erasers =
3359 {
3360 {
3361 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003362 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003363 },
3364 },
Sean Nelson28accc22010-03-19 18:47:06 +00003365 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003366 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003367 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003368 },
3369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003370 {
3371 .vendor = "Macronix",
3372 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003373 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003374 .manufacture_id = MX_ID,
3375 .model_id = MX_25L512,
3376 .total_size = 64,
3377 .page_size = 256,
3378 .tested = TEST_UNTESTED,
3379 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003380 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003381 .block_erasers =
3382 {
3383 {
3384 .eraseblocks = { {4 * 1024, 16} },
3385 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003386 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003387 .eraseblocks = { {64 * 1024, 1} },
3388 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003389 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003390 .eraseblocks = { {64 * 1024, 1} },
3391 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003392 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003393 .eraseblocks = { {64 * 1024, 1} },
3394 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003395 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003396 .eraseblocks = { {64 * 1024, 1} },
3397 .block_erase = spi_block_erase_c7,
3398 },
3399 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003400 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003401 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003402 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003403 },
3404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003405 {
3406 .vendor = "Macronix",
3407 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003408 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003409 .manufacture_id = MX_ID,
3410 .model_id = MX_25L1005,
3411 .total_size = 128,
3412 .page_size = 256,
3413 .tested = TEST_UNTESTED,
3414 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003415 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003416 .block_erasers =
3417 {
3418 {
3419 .eraseblocks = { {4 * 1024, 32} },
3420 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003421 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003422 .eraseblocks = { {64 * 1024, 2} },
3423 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003424 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003425 .eraseblocks = { {128 * 1024, 1} },
3426 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003427 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003428 .eraseblocks = { {128 * 1024, 1} },
3429 .block_erase = spi_block_erase_c7,
3430 },
3431 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003432 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003433 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003434 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003435 },
3436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003437 {
3438 .vendor = "Macronix",
3439 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003440 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 .manufacture_id = MX_ID,
3442 .model_id = MX_25L2005,
3443 .total_size = 256,
3444 .page_size = 256,
3445 .tested = TEST_UNTESTED,
3446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003447 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003448 .block_erasers =
3449 {
3450 {
3451 .eraseblocks = { {4 * 1024, 64} },
3452 .block_erase = spi_block_erase_20,
3453 }, {
3454 .eraseblocks = { {64 * 1024, 4} },
3455 .block_erase = spi_block_erase_52,
3456 }, {
3457 .eraseblocks = { {64 * 1024, 4} },
3458 .block_erase = spi_block_erase_d8,
3459 }, {
3460 .eraseblocks = { {256 * 1024, 1} },
3461 .block_erase = spi_block_erase_60,
3462 }, {
3463 .eraseblocks = { {256 * 1024, 1} },
3464 .block_erase = spi_block_erase_c7,
3465 },
3466 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003467 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003468 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003469 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003470 },
3471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003472 {
3473 .vendor = "Macronix",
3474 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003475 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003476 .manufacture_id = MX_ID,
3477 .model_id = MX_25L4005,
3478 .total_size = 512,
3479 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003480 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003481 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003482 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003483 .block_erasers =
3484 {
3485 {
3486 .eraseblocks = { {4 * 1024, 128} },
3487 .block_erase = spi_block_erase_20,
3488 }, {
3489 .eraseblocks = { {64 * 1024, 8} },
3490 .block_erase = spi_block_erase_52,
3491 }, {
3492 .eraseblocks = { {64 * 1024, 8} },
3493 .block_erase = spi_block_erase_d8,
3494 }, {
3495 .eraseblocks = { {512 * 1024, 1} },
3496 .block_erase = spi_block_erase_60,
3497 }, {
3498 .eraseblocks = { {512 * 1024, 1} },
3499 .block_erase = spi_block_erase_c7,
3500 },
3501 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003502 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003503 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003504 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003505 },
3506
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003507 {
3508 .vendor = "Macronix",
3509 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003510 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003511 .manufacture_id = MX_ID,
3512 .model_id = MX_25L8005,
3513 .total_size = 1024,
3514 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00003515 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003516 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003517 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003518 .block_erasers =
3519 {
3520 {
3521 .eraseblocks = { {4 * 1024, 256} },
3522 .block_erase = spi_block_erase_20,
3523 }, {
3524 .eraseblocks = { {64 * 1024, 16} },
3525 .block_erase = spi_block_erase_52,
3526 }, {
3527 .eraseblocks = { {64 * 1024, 16} },
3528 .block_erase = spi_block_erase_d8,
3529 }, {
3530 .eraseblocks = { {1024 * 1024, 1} },
3531 .block_erase = spi_block_erase_60,
3532 }, {
3533 .eraseblocks = { {1024 * 1024, 1} },
3534 .block_erase = spi_block_erase_c7,
3535 },
3536 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003537 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003538 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003539 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003540 },
3541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003542 {
3543 .vendor = "Macronix",
3544 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003545 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .manufacture_id = MX_ID,
3547 .model_id = MX_25L1605,
3548 .total_size = 2048,
3549 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003550 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003552 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003553 .block_erasers =
3554 {
3555 {
3556 .eraseblocks = { {4 * 1024, 512} },
3557 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3558 }, {
3559 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3560 .block_erase = spi_block_erase_52,
3561 }, {
3562 .eraseblocks = { {64 * 1024, 32} },
3563 .block_erase = spi_block_erase_d8,
3564 }, {
3565 .eraseblocks = { {2 * 1024 * 1024, 1} },
3566 .block_erase = spi_block_erase_60,
3567 }, {
3568 .eraseblocks = { {2 * 1024 * 1024, 1} },
3569 .block_erase = spi_block_erase_c7,
3570 },
3571 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003572 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003573 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003574 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003575 },
3576
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 {
3578 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003579 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003580 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003581 .manufacture_id = MX_ID,
3582 .model_id = MX_25L1635D,
3583 .total_size = 2048,
3584 .page_size = 256,
3585 .tested = TEST_UNTESTED,
3586 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003587 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003588 .block_erasers =
3589 {
3590 {
3591 .eraseblocks = { {4 * 1024, 512} },
3592 .block_erase = spi_block_erase_20,
3593 }, {
3594 .eraseblocks = { {64 * 1024, 32} },
3595 .block_erase = spi_block_erase_d8,
3596 }, {
3597 .eraseblocks = { {2 * 1024 * 1024, 1} },
3598 .block_erase = spi_block_erase_60,
3599 }, {
3600 .eraseblocks = { {2 * 1024 * 1024, 1} },
3601 .block_erase = spi_block_erase_c7,
3602 }
3603 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003604 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003605 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003606 .read = spi_chip_read,
3607 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003608
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003609 {
3610 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003611 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003612 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003613 .manufacture_id = MX_ID,
3614 .model_id = MX_25L3205,
3615 .total_size = 4096,
3616 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003617 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003618 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003619 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003620 .block_erasers =
3621 {
3622 {
3623 .eraseblocks = { {4 * 1024, 1024} },
3624 .block_erase = spi_block_erase_20,
3625 }, {
3626 .eraseblocks = { {4 * 1024, 1024} },
3627 .block_erase = spi_block_erase_d8,
3628 }, {
3629 .eraseblocks = { {4 * 1024 * 1024, 1} },
3630 .block_erase = spi_block_erase_60,
3631 }, {
3632 .eraseblocks = { {4 * 1024 * 1024, 1} },
3633 .block_erase = spi_block_erase_c7,
3634 },
3635 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003636 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003637 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003639 },
3640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003641 {
3642 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003643 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003645 .manufacture_id = MX_ID,
3646 .model_id = MX_25L3235D,
3647 .total_size = 4096,
3648 .page_size = 256,
3649 .tested = TEST_UNTESTED,
3650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003651 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003652 .block_erasers =
3653 {
3654 {
3655 .eraseblocks = { {4 * 1024, 1024} },
3656 .block_erase = spi_block_erase_20,
3657 }, {
3658 .eraseblocks = { {64 * 1024, 64} },
3659 .block_erase = spi_block_erase_d8,
3660 }, {
3661 .eraseblocks = { {4 * 1024 * 1024, 1} },
3662 .block_erase = spi_block_erase_60,
3663 }, {
3664 .eraseblocks = { {4 * 1024 * 1024, 1} },
3665 .block_erase = spi_block_erase_c7,
3666 }
3667 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003668 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003669 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003670 .read = spi_chip_read,
3671 },
3672
3673 {
3674 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003675 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003676 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003677 .manufacture_id = MX_ID,
3678 .model_id = MX_25L6405,
3679 .total_size = 8192,
3680 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003681 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003682 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003683 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003684 .block_erasers =
3685 {
3686 {
3687 .eraseblocks = { {64 * 1024, 128} },
3688 .block_erase = spi_block_erase_20,
3689 }, {
3690 .eraseblocks = { {64 * 1024, 128} },
3691 .block_erase = spi_block_erase_d8,
3692 }, {
3693 .eraseblocks = { {8 * 1024 * 1024, 1} },
3694 .block_erase = spi_block_erase_60,
3695 }, {
3696 .eraseblocks = { {8 * 1024 * 1024, 1} },
3697 .block_erase = spi_block_erase_c7,
3698 }
3699 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003700 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003701 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003702 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003703 },
3704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003705 {
3706 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003707 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003708 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003709 .manufacture_id = MX_ID,
3710 .model_id = MX_25L12805,
3711 .total_size = 16384,
3712 .page_size = 256,
3713 .tested = TEST_UNTESTED,
3714 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003715 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003716 .block_erasers =
3717 {
3718 {
3719 .eraseblocks = { {4 * 1024, 4096} },
3720 .block_erase = spi_block_erase_20,
3721 }, {
3722 .eraseblocks = { {64 * 1024, 256} },
3723 .block_erase = spi_block_erase_d8,
3724 }, {
3725 .eraseblocks = { {16 * 1024 * 1024, 1} },
3726 .block_erase = spi_block_erase_60,
3727 }, {
3728 .eraseblocks = { {16 * 1024 * 1024, 1} },
3729 .block_erase = spi_block_erase_c7,
3730 }
3731 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003732 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003733 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003734 .read = spi_chip_read,
3735 },
3736
3737 {
3738 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003739 .name = "MX29F001B",
3740 .bustype = CHIP_BUSTYPE_PARALLEL,
3741 .manufacture_id = MX_ID,
3742 .model_id = MX_29F001B,
3743 .total_size = 128,
3744 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003745 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3746 .tested = TEST_UNTESTED,
3747 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003748 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003749 .block_erasers =
3750 {
3751 {
3752 .eraseblocks = {
3753 {8 * 1024, 1},
3754 {4 * 1024, 2},
3755 {8 * 1024, 2},
3756 {32 * 1024, 1},
3757 {64 * 1024, 1},
3758 },
Sean Nelson35727f72010-01-28 23:55:12 +00003759 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003760 }, {
3761 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003762 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003763 }
3764 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003765 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003766 .read = read_memmapped,
3767 },
3768
3769 {
3770 .vendor = "Macronix",
3771 .name = "MX29F001T",
3772 .bustype = CHIP_BUSTYPE_PARALLEL,
3773 .manufacture_id = MX_ID,
3774 .model_id = MX_29F001T,
3775 .total_size = 128,
3776 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003777 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3778 .tested = TEST_UNTESTED,
3779 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003780 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003781 .block_erasers =
3782 {
3783 {
3784 .eraseblocks = {
3785 {64 * 1024, 1},
3786 {32 * 1024, 1},
3787 {8 * 1024, 2},
3788 {4 * 1024, 2},
3789 {8 * 1024, 1},
3790 },
Sean Nelson35727f72010-01-28 23:55:12 +00003791 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003792 }, {
3793 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003794 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003795 }
3796 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003797 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003798 .read = read_memmapped,
3799 },
3800
3801 {
3802 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003803 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003804 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003805 .manufacture_id = MX_ID,
3806 .model_id = MX_29F002B,
3807 .total_size = 256,
3808 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003809 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003810 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003811 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003812 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003813 .block_erasers =
3814 {
3815 {
3816 .eraseblocks = {
3817 {16 * 1024, 1},
3818 {8 * 1024, 2},
3819 {32 * 1024, 1},
3820 {64 * 1024, 3},
3821 },
Sean Nelson35727f72010-01-28 23:55:12 +00003822 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003823 }, {
3824 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003825 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003826 },
3827 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003828 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003829 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003830 },
3831
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003832 {
3833 .vendor = "Macronix",
3834 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003835 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003836 .manufacture_id = MX_ID,
3837 .model_id = MX_29F002T,
3838 .total_size = 256,
3839 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003840 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003841 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003842 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003843 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003844 .block_erasers =
3845 {
3846 {
3847 .eraseblocks = {
3848 {64 * 1024, 3},
3849 {32 * 1024, 1},
3850 {8 * 1024, 2},
3851 {16 * 1024, 1},
3852 },
Sean Nelson35727f72010-01-28 23:55:12 +00003853 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003854 }, {
3855 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003856 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003857 },
3858 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003859 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003860 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003861 },
3862
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003863 {
3864 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003865 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003866 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003867 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003868 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003869 .total_size = 512,
3870 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003871 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3872 .tested = TEST_UNTESTED,
3873 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003874 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003875 .block_erasers =
3876 {
3877 {
3878 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003879 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003880 }, {
3881 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003882 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003883 },
3884 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003885 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003886 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003887 },
3888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00003890 .vendor = "MoselVitelic",
3891 .name = "V29C51000B",
3892 .bustype = CHIP_BUSTYPE_PARALLEL,
3893 .manufacture_id = SYNCMOS_MVC_ID,
3894 .model_id = MVC_V29C51000B,
3895 .total_size = 64,
3896 .page_size = 512,
3897 .feature_bits = FEATURE_EITHER_RESET,
3898 .tested = TEST_UNTESTED,
3899 .probe = probe_jedec,
3900 .probe_timing = TIMING_ZERO,
3901 .block_erasers =
3902 {
3903 {
3904 .eraseblocks = { {512, 128} },
3905 .block_erase = erase_sector_jedec,
3906 }, {
3907 .eraseblocks = { {64 * 1024, 1} },
3908 .block_erase = erase_chip_block_jedec,
3909 },
3910 },
3911 .write = write_jedec_1,
3912 .read = read_memmapped,
3913 },
3914
3915 {
3916 .vendor = "MoselVitelic",
3917 .name = "V29C51000T",
3918 .bustype = CHIP_BUSTYPE_PARALLEL,
3919 .manufacture_id = SYNCMOS_MVC_ID,
3920 .model_id = MVC_V29C51000T,
3921 .total_size = 64,
3922 .page_size = 512,
3923 .feature_bits = FEATURE_EITHER_RESET,
3924 .tested = TEST_UNTESTED,
3925 .probe = probe_jedec,
3926 .probe_timing = TIMING_ZERO,
3927 .block_erasers =
3928 {
3929 {
3930 .eraseblocks = { {512, 128} },
3931 .block_erase = erase_sector_jedec,
3932 }, {
3933 .eraseblocks = { {64 * 1024, 1} },
3934 .block_erase = erase_chip_block_jedec,
3935 },
3936 },
3937 .write = write_jedec_1,
3938 .read = read_memmapped,
3939 },
3940
3941 {
3942 .vendor = "MoselVitelic",
3943 .name = "V29C51400B",
3944 .bustype = CHIP_BUSTYPE_PARALLEL,
3945 .manufacture_id = SYNCMOS_MVC_ID,
3946 .model_id = MVC_V29C51400B,
3947 .total_size = 512,
3948 .page_size = 1024,
3949 .feature_bits = FEATURE_EITHER_RESET,
3950 .tested = TEST_UNTESTED,
3951 .probe = probe_jedec,
3952 .probe_timing = TIMING_ZERO,
3953 .block_erasers =
3954 {
3955 {
3956 .eraseblocks = { {1024, 512} },
3957 .block_erase = erase_sector_jedec,
3958 }, {
3959 .eraseblocks = { {512 * 1024, 1} },
3960 .block_erase = erase_chip_block_jedec,
3961 },
3962 },
3963 .write = write_jedec_1,
3964 .read = read_memmapped,
3965 },
3966
3967 {
3968 .vendor = "MoselVitelic",
3969 .name = "V29C51400T",
3970 .bustype = CHIP_BUSTYPE_PARALLEL,
3971 .manufacture_id = SYNCMOS_MVC_ID,
3972 .model_id = MVC_V29C51400T,
3973 .total_size = 512,
3974 .page_size = 1024,
3975 .feature_bits = FEATURE_EITHER_RESET,
3976 .tested = TEST_UNTESTED,
3977 .probe = probe_jedec,
3978 .probe_timing = TIMING_ZERO,
3979 .block_erasers =
3980 {
3981 {
3982 .eraseblocks = { {1024, 512} },
3983 .block_erase = erase_sector_jedec,
3984 }, {
3985 .eraseblocks = { {512 * 1024, 1} },
3986 .block_erase = erase_chip_block_jedec,
3987 },
3988 },
3989 .write = write_jedec_1,
3990 .read = read_memmapped,
3991 },
3992
3993 {
3994 .vendor = "MoselVitelic",
3995 .name = "V29LC51000",
3996 .bustype = CHIP_BUSTYPE_PARALLEL,
3997 .manufacture_id = SYNCMOS_MVC_ID,
3998 .model_id = MVC_V29LC51000,
3999 .total_size = 64,
4000 .page_size = 512,
4001 .feature_bits = FEATURE_EITHER_RESET,
4002 .tested = TEST_UNTESTED,
4003 .probe = probe_jedec,
4004 .probe_timing = TIMING_ZERO,
4005 .block_erasers =
4006 {
4007 {
4008 .eraseblocks = { {512, 128} },
4009 .block_erase = erase_sector_jedec,
4010 }, {
4011 .eraseblocks = { {64 * 1024, 1} },
4012 .block_erase = erase_chip_block_jedec,
4013 },
4014 },
4015 .write = write_jedec_1,
4016 .read = read_memmapped,
4017 },
4018
4019 {
4020 .vendor = "MoselVitelic",
4021 .name = "V29LC51001",
4022 .bustype = CHIP_BUSTYPE_PARALLEL,
4023 .manufacture_id = SYNCMOS_MVC_ID,
4024 .model_id = MVC_V29LC51001,
4025 .total_size = 128,
4026 .page_size = 512,
4027 .feature_bits = FEATURE_EITHER_RESET,
4028 .tested = TEST_UNTESTED,
4029 .probe = probe_jedec,
4030 .probe_timing = TIMING_ZERO,
4031 .block_erasers =
4032 {
4033 {
4034 .eraseblocks = { {512, 256} },
4035 .block_erase = erase_sector_jedec,
4036 }, {
4037 .eraseblocks = { {128 * 1024, 1} },
4038 .block_erase = erase_chip_block_jedec,
4039 },
4040 },
4041 .write = write_jedec_1,
4042 .read = read_memmapped,
4043 },
4044
4045 {
4046 .vendor = "MoselVitelic",
4047 .name = "V29LC51002",
4048 .bustype = CHIP_BUSTYPE_PARALLEL,
4049 .manufacture_id = SYNCMOS_MVC_ID,
4050 .model_id = MVC_V29LC51002,
4051 .total_size = 256,
4052 .page_size = 512,
4053 .feature_bits = FEATURE_EITHER_RESET,
4054 .tested = TEST_UNTESTED,
4055 .probe = probe_jedec,
4056 .probe_timing = TIMING_ZERO,
4057 .block_erasers =
4058 {
4059 {
4060 .eraseblocks = { {512, 512} },
4061 .block_erase = erase_sector_jedec,
4062 }, {
4063 .eraseblocks = { {256 * 1024, 1} },
4064 .block_erase = erase_chip_block_jedec,
4065 },
4066 },
4067 .write = write_jedec_1,
4068 .read = read_memmapped,
4069 },
4070
4071 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004072 .vendor = "Numonyx",
4073 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004074 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004075 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004076 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004077 .total_size = 128,
4078 .page_size = 256,
4079 .tested = TEST_UNTESTED,
4080 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004081 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004082 .block_erasers =
4083 {
4084 {
4085 .eraseblocks = { {4 * 1024, 32} },
4086 .block_erase = spi_block_erase_20,
4087 }, {
4088 .eraseblocks = { {64 * 1024, 2} },
4089 .block_erase = spi_block_erase_d8,
4090 }, {
4091 .eraseblocks = { {128 * 1024, 1} },
4092 .block_erase = spi_block_erase_c7,
4093 }
4094 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004095 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004096 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004097 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004098 },
4099
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004100 {
4101 .vendor = "Numonyx",
4102 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004103 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004104 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004105 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .total_size = 256,
4107 .page_size = 256,
4108 .tested = TEST_UNTESTED,
4109 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004110 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004111 .block_erasers =
4112 {
4113 {
4114 .eraseblocks = { {4 * 1024, 64} },
4115 .block_erase = spi_block_erase_20,
4116 }, {
4117 .eraseblocks = { {64 * 1024, 4} },
4118 .block_erase = spi_block_erase_d8,
4119 }, {
4120 .eraseblocks = { {256 * 1024, 1} },
4121 .block_erase = spi_block_erase_c7,
4122 }
4123 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004124 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004125 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004126 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004127 },
4128
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 {
4130 .vendor = "Numonyx",
4131 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004132 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004134 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00004135 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004136 .page_size = 256,
4137 .tested = TEST_UNTESTED,
4138 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004139 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004140 .block_erasers =
4141 {
4142 {
4143 .eraseblocks = { {4 * 1024, 128} },
4144 .block_erase = spi_block_erase_20,
4145 }, {
4146 .eraseblocks = { {64 * 1024, 8} },
4147 .block_erase = spi_block_erase_d8,
4148 }, {
4149 .eraseblocks = { {512 * 1024, 1} },
4150 .block_erase = spi_block_erase_c7,
4151 }
4152 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004153 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004154 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004155 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004156 },
4157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004158 {
4159 .vendor = "Numonyx",
4160 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004161 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004162 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004163 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004164 .total_size = 1024,
4165 .page_size = 256,
4166 .tested = TEST_OK_PREW,
4167 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004168 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004169 .block_erasers =
4170 {
4171 {
4172 .eraseblocks = { {4 * 1024, 256} },
4173 .block_erase = spi_block_erase_20,
4174 }, {
4175 .eraseblocks = { {64 * 1024, 16} },
4176 .block_erase = spi_block_erase_d8,
4177 }, {
4178 .eraseblocks = { {1024 * 1024, 1} },
4179 .block_erase = spi_block_erase_c7,
4180 }
4181 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004182 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004183 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004184 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004185 },
4186
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004187 {
4188 .vendor = "Numonyx",
4189 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004190 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004191 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004192 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 .total_size = 2048,
4194 .page_size = 256,
4195 .tested = TEST_UNTESTED,
4196 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004197 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004198 .block_erasers =
4199 {
4200 {
4201 .eraseblocks = { {4 * 1024, 512} },
4202 .block_erase = spi_block_erase_20,
4203 }, {
4204 .eraseblocks = { {64 * 1024, 32} },
4205 .block_erase = spi_block_erase_d8,
4206 }, {
4207 .eraseblocks = { {2 * 1024 * 1024, 1} },
4208 .block_erase = spi_block_erase_c7,
4209 }
4210 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004211 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004212 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004213 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004214 },
4215
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004216 {
4217 .vendor = "PMC",
4218 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004219 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004220 .manufacture_id = PMC_ID,
4221 .model_id = PMC_25LV010,
4222 .total_size = 128,
4223 .page_size = 256,
4224 .tested = TEST_UNTESTED,
4225 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004226 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004227 .block_erasers =
4228 {
4229 {
4230 .eraseblocks = { {4 * 1024, 32} },
4231 .block_erase = spi_block_erase_d7,
4232 }, {
4233 .eraseblocks = { {32 * 1024, 4} },
4234 .block_erase = spi_block_erase_d8,
4235 }, {
4236 .eraseblocks = { {128 * 1024, 1} },
4237 .block_erase = spi_block_erase_c7,
4238 }
4239 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004240 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004241 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004242 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004243 },
4244
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004245 {
4246 .vendor = "PMC",
4247 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004248 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004249 .manufacture_id = PMC_ID,
4250 .model_id = PMC_25LV016B,
4251 .total_size = 2048,
4252 .page_size = 256,
4253 .tested = TEST_UNTESTED,
4254 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004255 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004256 .block_erasers =
4257 {
4258 {
4259 .eraseblocks = { {4 * 1024, 512} },
4260 .block_erase = spi_block_erase_d7,
4261 }, {
4262 .eraseblocks = { {4 * 1024, 512} },
4263 .block_erase = spi_block_erase_20,
4264 }, {
4265 .eraseblocks = { {64 * 1024, 32} },
4266 .block_erase = spi_block_erase_d8,
4267 }, {
4268 .eraseblocks = { {2 * 1024 * 1024, 1} },
4269 .block_erase = spi_block_erase_60,
4270 }, {
4271 .eraseblocks = { {2 * 1024 * 1024, 1} },
4272 .block_erase = spi_block_erase_c7,
4273 }
4274 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004275 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004276 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004277 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004278 },
4279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004280 {
4281 .vendor = "PMC",
4282 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004283 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004284 .manufacture_id = PMC_ID,
4285 .model_id = PMC_25LV020,
4286 .total_size = 256,
4287 .page_size = 256,
4288 .tested = TEST_UNTESTED,
4289 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004290 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004291 .block_erasers =
4292 {
4293 {
4294 .eraseblocks = { {4 * 1024, 64} },
4295 .block_erase = spi_block_erase_d7,
4296 }, {
4297 .eraseblocks = { {64 * 1024, 4} },
4298 .block_erase = spi_block_erase_d8,
4299 }, {
4300 .eraseblocks = { {256 * 1024, 1} },
4301 .block_erase = spi_block_erase_c7,
4302 }
4303 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004304 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004305 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004306 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004307 },
4308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004309 {
4310 .vendor = "PMC",
4311 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004312 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004313 .manufacture_id = PMC_ID,
4314 .model_id = PMC_25LV040,
4315 .total_size = 512,
4316 .page_size = 256,
4317 .tested = TEST_UNTESTED,
4318 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004319 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004320 .block_erasers =
4321 {
4322 {
4323 .eraseblocks = { {4 * 1024, 128} },
4324 .block_erase = spi_block_erase_d7,
4325 }, {
4326 .eraseblocks = { {64 * 1024, 8} },
4327 .block_erase = spi_block_erase_d8,
4328 }, {
4329 .eraseblocks = { {512 * 1024, 1} },
4330 .block_erase = spi_block_erase_c7,
4331 }
4332 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004333 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004334 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004335 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004336 },
4337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004338 {
4339 .vendor = "PMC",
4340 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004341 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004342 .manufacture_id = PMC_ID,
4343 .model_id = PMC_25LV080B,
4344 .total_size = 1024,
4345 .page_size = 256,
4346 .tested = TEST_UNTESTED,
4347 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004348 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004349 .block_erasers =
4350 {
4351 {
4352 .eraseblocks = { {4 * 1024, 256} },
4353 .block_erase = spi_block_erase_d7,
4354 }, {
4355 .eraseblocks = { {4 * 1024, 256} },
4356 .block_erase = spi_block_erase_20,
4357 }, {
4358 .eraseblocks = { {64 * 1024, 16} },
4359 .block_erase = spi_block_erase_d8,
4360 }, {
4361 .eraseblocks = { {1024 * 1024, 1} },
4362 .block_erase = spi_block_erase_60,
4363 }, {
4364 .eraseblocks = { {1024 * 1024, 1} },
4365 .block_erase = spi_block_erase_c7,
4366 }
4367 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004368 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004370 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004371 },
4372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004373 {
4374 .vendor = "PMC",
4375 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004377 .manufacture_id = PMC_ID,
4378 .model_id = PMC_25LV512,
4379 .total_size = 64,
4380 .page_size = 256,
4381 .tested = TEST_UNTESTED,
4382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004383 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004384 .block_erasers =
4385 {
4386 {
4387 .eraseblocks = { {4 * 1024, 16} },
4388 .block_erase = spi_block_erase_d7,
4389 }, {
4390 .eraseblocks = { {32 * 1024, 2} },
4391 .block_erase = spi_block_erase_d8,
4392 }, {
4393 .eraseblocks = { {64 * 1024, 1} },
4394 .block_erase = spi_block_erase_c7,
4395 }
4396 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004397 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004398 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004399 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004400 },
4401
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004402 {
4403 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004404 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004405 .bustype = CHIP_BUSTYPE_PARALLEL,
4406 .manufacture_id = PMC_ID_NOPREFIX,
4407 .model_id = PMC_29F002T,
4408 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004409 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004410 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4411 .tested = TEST_UNTESTED,
4412 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004413 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004414 .block_erasers =
4415 {
4416 {
4417 .eraseblocks = {
4418 {128 * 1024, 1},
4419 {96 * 1024, 1},
4420 {8 * 1024, 2},
4421 {16 * 1024, 1},
4422 },
Sean Nelson35727f72010-01-28 23:55:12 +00004423 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004424 }, {
4425 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004426 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004427 },
4428 },
Sean Nelson35727f72010-01-28 23:55:12 +00004429 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004430 .read = read_memmapped,
4431 },
4432
4433 {
4434 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004435 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004436 .bustype = CHIP_BUSTYPE_PARALLEL,
4437 .manufacture_id = PMC_ID_NOPREFIX,
4438 .model_id = PMC_29F002B,
4439 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004440 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004441 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004442 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004443 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004444 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004445 .block_erasers =
4446 {
4447 {
4448 .eraseblocks = {
4449 {16 * 1024, 1},
4450 {8 * 1024, 2},
4451 {96 * 1024, 1},
4452 {128 * 1024, 1},
4453 },
Sean Nelson35727f72010-01-28 23:55:12 +00004454 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004455 }, {
4456 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004457 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004458 },
4459 },
Sean Nelson35727f72010-01-28 23:55:12 +00004460 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004461 .read = read_memmapped,
4462 },
4463
4464 {
4465 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004466 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004467 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004468 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004469 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004470 .total_size = 128,
4471 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004472 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004473 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004474 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004475 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004476 .block_erasers =
4477 {
4478 {
4479 .eraseblocks = { {4 * 1024, 32} },
4480 .block_erase = erase_sector_jedec,
4481 }, {
4482 .eraseblocks = { {64 * 1024, 2} },
4483 .block_erase = erase_block_jedec,
4484 }, {
4485 .eraseblocks = { {128 * 1024, 1} },
4486 .block_erase = erase_chip_block_jedec,
4487 }
4488 },
Sean Nelson35727f72010-01-28 23:55:12 +00004489 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004490 .read = read_memmapped,
4491 },
4492
4493 {
4494 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004495 .name = "Pm39LV020",
4496 .bustype = CHIP_BUSTYPE_PARALLEL,
4497 .manufacture_id = PMC_ID_NOPREFIX,
4498 .model_id = PMC_39LV020,
4499 .total_size = 256,
4500 .page_size = 4096,
4501 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4502 .tested = TEST_UNTESTED,
4503 .probe = probe_jedec,
4504 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4505 .block_erasers =
4506 {
4507 {
4508 .eraseblocks = { {4 * 1024, 64} },
4509 .block_erase = erase_sector_jedec,
4510 }, {
4511 .eraseblocks = { {64 * 1024, 4} },
4512 .block_erase = erase_block_jedec,
4513 }, {
4514 .eraseblocks = { {256 * 1024, 1} },
4515 .block_erase = erase_chip_block_jedec,
4516 }
4517 },
4518 .write = write_jedec_1,
4519 .read = read_memmapped,
4520 },
4521
4522 {
4523 .vendor = "PMC",
4524 .name = "Pm39LV040",
4525 .bustype = CHIP_BUSTYPE_PARALLEL,
4526 .manufacture_id = PMC_ID_NOPREFIX,
4527 .model_id = PMC_39LV040,
4528 .total_size = 512,
4529 .page_size = 4096,
4530 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4531 .tested = TEST_UNTESTED,
4532 .probe = probe_jedec,
4533 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4534 .block_erasers =
4535 {
4536 {
4537 .eraseblocks = { {4 * 1024, 128} },
4538 .block_erase = erase_sector_jedec,
4539 }, {
4540 .eraseblocks = { {64 * 1024, 8} },
4541 .block_erase = erase_block_jedec,
4542 }, {
4543 .eraseblocks = { {512 * 1024, 1} },
4544 .block_erase = erase_chip_block_jedec,
4545 }
4546 },
4547 .write = write_jedec_1,
4548 .read = read_memmapped,
4549 },
4550
4551 {
4552 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004553 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00004554 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 .manufacture_id = PMC_ID_NOPREFIX,
4556 .model_id = PMC_49FL002,
4557 .total_size = 256,
4558 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004559 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004560 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004561 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004562 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004563 .block_erasers =
4564 {
4565 {
4566 .eraseblocks = { {4 * 1024, 64} },
4567 .block_erase = erase_sector_jedec,
4568 }, {
4569 .eraseblocks = { {16 * 1024, 16} },
4570 .block_erase = erase_block_jedec,
4571 }, {
4572 .eraseblocks = { {256 * 1024, 1} },
4573 .block_erase = erase_chip_block_jedec,
4574 }
4575 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004576 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004577 .write = write_jedec_1,
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 = "PMC",
4583 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00004584 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .manufacture_id = PMC_ID_NOPREFIX,
4586 .model_id = PMC_49FL004,
4587 .total_size = 512,
4588 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004589 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004590 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004591 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004592 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004593 .block_erasers =
4594 {
4595 {
4596 .eraseblocks = { {4 * 1024, 128} },
4597 .block_erase = erase_sector_jedec,
4598 }, {
4599 .eraseblocks = { {64 * 1024, 8} },
4600 .block_erase = erase_block_jedec,
4601 }, {
4602 .eraseblocks = { {512 * 1024, 1} },
4603 .block_erase = erase_chip_block_jedec,
4604 }
4605 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004606 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004607 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004608 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004609 },
4610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004612 .vendor = "Sanyo",
4613 .name = "LF25FW203A",
4614 .bustype = CHIP_BUSTYPE_SPI,
4615 .manufacture_id = SANYO_ID,
4616 .model_id = SANYO_LE25FW203A,
4617 .total_size = 2048,
4618 .page_size = 256,
4619 .tested = TEST_UNTESTED,
4620 .probe = probe_spi_rdid,
4621 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004622 .block_erasers =
4623 {
4624 {
4625 .eraseblocks = { {64 * 1024, 32} },
4626 .block_erase = spi_block_erase_d8,
4627 }, {
4628 .eraseblocks = { {2 * 1024 * 1024, 1} },
4629 .block_erase = spi_block_erase_c7,
4630 }
4631 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004632 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004633 .write = spi_chip_write_256,
4634 .read = spi_chip_read,
4635 },
4636
4637 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 .vendor = "Sharp",
4639 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004640 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004641 .manufacture_id = SHARP_ID,
4642 .model_id = SHARP_LHF00L04,
4643 .total_size = 1024,
4644 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004645 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004646 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004647 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004648 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004649 .block_erasers =
4650 {
4651 {
4652 .eraseblocks = {
4653 {64 * 1024, 15},
4654 {8 * 1024, 8}
4655 },
Sean Nelson28accc22010-03-19 18:47:06 +00004656 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004657 }, {
4658 .eraseblocks = {
4659 {1024 * 1024, 1}
4660 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004661 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004662 },
4663 },
Sean Nelson28accc22010-03-19 18:47:06 +00004664 .unlock = unlock_82802ab,
4665 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004666 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004667 },
4668
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004669 {
4670 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004671 .name = "S25FL008A",
4672 .bustype = CHIP_BUSTYPE_SPI,
4673 .manufacture_id = SPANSION_ID,
4674 .model_id = SPANSION_S25FL008A,
4675 .total_size = 1024,
4676 .page_size = 256,
4677 .tested = TEST_OK_PREW,
4678 .probe = probe_spi_rdid,
4679 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004680 .block_erasers =
4681 {
4682 {
4683 .eraseblocks = { {64 * 1024, 16} },
4684 .block_erase = spi_block_erase_d8,
4685 }, {
4686 .eraseblocks = { {1024 * 1024, 1} },
4687 .block_erase = spi_block_erase_c7,
4688 }
4689 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004690 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004691 .write = spi_chip_write_256,
4692 .read = spi_chip_read,
4693 },
4694
4695 {
4696 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004697 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004698 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004699 .manufacture_id = SPANSION_ID,
4700 .model_id = SPANSION_S25FL016A,
4701 .total_size = 2048,
4702 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004703 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004704 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004705 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004706 .block_erasers =
4707 {
4708 {
4709 .eraseblocks = { {64 * 1024, 32} },
4710 .block_erase = spi_block_erase_d8,
4711 }, {
4712 .eraseblocks = { {2 * 1024 * 1024, 1} },
4713 .block_erase = spi_block_erase_c7,
4714 }
4715 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004716 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004717 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004718 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004719 },
4720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004721 {
4722 .vendor = "SST",
4723 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004724 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004725 .manufacture_id = SST_ID,
4726 .model_id = SST_25VF016B,
4727 .total_size = 2048,
4728 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004729 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004730 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004731 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004732 .block_erasers =
4733 {
4734 {
4735 .eraseblocks = { {4 * 1024, 512} },
4736 .block_erase = spi_block_erase_20,
4737 }, {
4738 .eraseblocks = { {32 * 1024, 64} },
4739 .block_erase = spi_block_erase_52,
4740 }, {
4741 .eraseblocks = { {64 * 1024, 32} },
4742 .block_erase = spi_block_erase_d8,
4743 }, {
4744 .eraseblocks = { {2 * 1024 * 1024, 1} },
4745 .block_erase = spi_block_erase_60,
4746 }, {
4747 .eraseblocks = { {2 * 1024 * 1024, 1} },
4748 .block_erase = spi_block_erase_c7,
4749 },
4750 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004751 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004752 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004753 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004754 },
4755
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004756 {
4757 .vendor = "SST",
4758 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004759 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004760 .manufacture_id = SST_ID,
4761 .model_id = SST_25VF032B,
4762 .total_size = 4096,
4763 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004764 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004765 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004766 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004767 .block_erasers =
4768 {
4769 {
4770 .eraseblocks = { {4 * 1024, 1024} },
4771 .block_erase = spi_block_erase_20,
4772 }, {
4773 .eraseblocks = { {32 * 1024, 128} },
4774 .block_erase = spi_block_erase_52,
4775 }, {
4776 .eraseblocks = { {64 * 1024, 64} },
4777 .block_erase = spi_block_erase_d8,
4778 }, {
4779 .eraseblocks = { {4 * 1024 * 1024, 1} },
4780 .block_erase = spi_block_erase_60,
4781 }, {
4782 .eraseblocks = { {4 * 1024 * 1024, 1} },
4783 .block_erase = spi_block_erase_c7,
4784 },
4785 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004786 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004787 .write = spi_chip_write_1,
4788 .read = spi_chip_read,
4789 },
4790
4791 {
4792 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004793 .name = "SST25VF064C",
4794 .bustype = CHIP_BUSTYPE_SPI,
4795 .manufacture_id = SST_ID,
4796 .model_id = SST_25VF064C,
4797 .total_size = 8192,
4798 .page_size = 256,
4799 .tested = TEST_OK_PREW,
4800 .probe = probe_spi_rdid,
4801 .probe_timing = TIMING_ZERO,
4802 .block_erasers =
4803 {
4804 {
4805 .eraseblocks = { {4 * 1024, 2048} },
4806 .block_erase = spi_block_erase_20,
4807 }, {
4808 .eraseblocks = { {32 * 1024, 256} },
4809 .block_erase = spi_block_erase_52,
4810 }, {
4811 .eraseblocks = { {64 * 1024, 128} },
4812 .block_erase = spi_block_erase_d8,
4813 }, {
4814 .eraseblocks = { {8 * 1024 * 1024, 1} },
4815 .block_erase = spi_block_erase_60,
4816 }, {
4817 .eraseblocks = { {8 * 1024 * 1024, 1} },
4818 .block_erase = spi_block_erase_c7,
4819 },
4820 },
4821 .unlock = spi_disable_blockprotect,
4822 .write = spi_chip_write_1,
4823 .read = spi_chip_read,
4824 },
4825
4826 {
4827 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004828 .name = "SST25VF040.REMS",
4829 .bustype = CHIP_BUSTYPE_SPI,
4830 .manufacture_id = SST_ID,
4831 .model_id = SST_25VF040_REMS,
4832 .total_size = 512,
4833 .page_size = 256,
4834 .tested = TEST_OK_PR,
4835 .probe = probe_spi_rems,
4836 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004837 .block_erasers =
4838 {
4839 {
4840 .eraseblocks = { {4 * 1024, 128} },
4841 .block_erase = spi_block_erase_20,
4842 }, {
4843 .eraseblocks = { {32 * 1024, 16} },
4844 .block_erase = spi_block_erase_52,
4845 }, {
4846 .eraseblocks = { {512 * 1024, 1} },
4847 .block_erase = spi_block_erase_60,
4848 },
4849 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004850 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004851 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004852 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004853 },
4854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004855 {
4856 .vendor = "SST",
4857 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004858 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 .manufacture_id = SST_ID,
4860 .model_id = SST_25VF040B,
4861 .total_size = 512,
4862 .page_size = 256,
4863 .tested = TEST_UNTESTED,
4864 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004865 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004866 .block_erasers =
4867 {
4868 {
4869 .eraseblocks = { {4 * 1024, 128} },
4870 .block_erase = spi_block_erase_20,
4871 }, {
4872 .eraseblocks = { {32 * 1024, 16} },
4873 .block_erase = spi_block_erase_52,
4874 }, {
4875 .eraseblocks = { {64 * 1024, 8} },
4876 .block_erase = spi_block_erase_d8,
4877 }, {
4878 .eraseblocks = { {512 * 1024, 1} },
4879 .block_erase = spi_block_erase_60,
4880 }, {
4881 .eraseblocks = { {512 * 1024, 1} },
4882 .block_erase = spi_block_erase_c7,
4883 },
4884 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004885 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004886 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004887 .read = spi_chip_read,
4888 },
4889
4890 {
4891 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004892 .name = "SST25LF040A.RES",
4893 .bustype = CHIP_BUSTYPE_SPI,
4894 .manufacture_id = SST_ID,
4895 .model_id = SST_25VF040_REMS,
4896 .total_size = 512,
4897 .page_size = 256,
4898 .tested = TEST_OK_PROBE,
4899 .probe = probe_spi_res2,
4900 .probe_timing = TIMING_ZERO,
4901 .block_erasers =
4902 {
4903 {
4904 .eraseblocks = { {4 * 1024, 128} },
4905 .block_erase = spi_block_erase_20,
4906 }, {
4907 .eraseblocks = { {32 * 1024, 16} },
4908 .block_erase = spi_block_erase_52,
4909 }, {
4910 .eraseblocks = { {512 * 1024, 1} },
4911 .block_erase = spi_block_erase_60,
4912 },
4913 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004914 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004915 .write = spi_chip_write_1,
4916 .read = spi_chip_read,
4917 },
4918
4919 {
4920 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004921 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004922 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004923 .manufacture_id = SST_ID,
4924 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004925 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004926 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004927 .tested = TEST_OK_PR,
4928 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004929 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004930 .block_erasers =
4931 {
4932 {
4933 .eraseblocks = { {4 * 1024, 128} },
4934 .block_erase = spi_block_erase_20,
4935 }, {
4936 .eraseblocks = { {32 * 1024, 16} },
4937 .block_erase = spi_block_erase_52,
4938 }, {
4939 .eraseblocks = { {64 * 1024, 8} },
4940 .block_erase = spi_block_erase_d8,
4941 }, {
4942 .eraseblocks = { {512 * 1024, 1} },
4943 .block_erase = spi_block_erase_60,
4944 }, {
4945 .eraseblocks = { {512 * 1024, 1} },
4946 .block_erase = spi_block_erase_c7,
4947 },
4948 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004949 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004950 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004951 .read = spi_chip_read,
4952 },
4953
4954 {
4955 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004956 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004958 .manufacture_id = SST_ID,
4959 .model_id = SST_25VF080B,
4960 .total_size = 1024,
4961 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00004962 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004964 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004965 .block_erasers =
4966 {
4967 {
4968 .eraseblocks = { {4 * 1024, 256} },
4969 .block_erase = spi_block_erase_20,
4970 }, {
4971 .eraseblocks = { {32 * 1024, 32} },
4972 .block_erase = spi_block_erase_52,
4973 }, {
4974 .eraseblocks = { {64 * 1024, 16} },
4975 .block_erase = spi_block_erase_d8,
4976 }, {
4977 .eraseblocks = { {1024 * 1024, 1} },
4978 .block_erase = spi_block_erase_60,
4979 }, {
4980 .eraseblocks = { {1024 * 1024, 1} },
4981 .block_erase = spi_block_erase_c7,
4982 },
4983 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004984 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004985 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004986 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004987 },
4988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004989 {
4990 .vendor = "SST",
4991 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004992 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004993 .manufacture_id = SST_ID,
4994 .model_id = SST_28SF040,
4995 .total_size = 512,
4996 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004997 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004998 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004999 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005000 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005001 .block_erasers =
5002 {
5003 {
5004 .eraseblocks = { {128, 4096} },
5005 .block_erase = erase_sector_28sf040,
5006 }, {
5007 .eraseblocks = { {512 * 1024, 1} },
5008 .block_erase = erase_chip_28sf040,
5009 }
5010 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005011 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005012 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005013 },
5014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005015 {
5016 .vendor = "SST",
5017 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005018 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005019 .manufacture_id = SST_ID,
5020 .model_id = SST_29EE010,
5021 .total_size = 128,
5022 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005023 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005024 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005025 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005026 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005027 .block_erasers =
5028 {
5029 {
5030 .eraseblocks = { {128 * 1024, 1} },
5031 .block_erase = erase_chip_block_jedec,
5032 }
5033 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005034 .write = write_jedec,
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 = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005041 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005042 .manufacture_id = SST_ID,
5043 .model_id = SST_29LE010,
5044 .total_size = 128,
5045 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005046 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005047 .tested = TEST_UNTESTED,
5048 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005049 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005050 .block_erasers =
5051 {
5052 {
5053 .eraseblocks = { {128 * 1024, 1} },
5054 .block_erase = erase_chip_block_jedec,
5055 }
5056 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005057 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005058 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005059 },
5060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005061 {
5062 .vendor = "SST",
5063 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005064 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005065 .manufacture_id = SST_ID,
5066 .model_id = SST_29EE020A,
5067 .total_size = 256,
5068 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005069 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005070 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005071 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005072 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005073 .block_erasers =
5074 {
5075 {
5076 .eraseblocks = { {256 * 1024, 1} },
5077 .block_erase = erase_chip_block_jedec,
5078 }
5079 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005080 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005081 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005082 },
5083
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005084 {
5085 .vendor = "SST",
5086 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005087 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005088 .manufacture_id = SST_ID,
5089 .model_id = SST_29LE020,
5090 .total_size = 256,
5091 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005092 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00005093 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005095 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005096 .block_erasers =
5097 {
5098 {
5099 .eraseblocks = { {256 * 1024, 1} },
5100 .block_erase = erase_chip_block_jedec,
5101 }
5102 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005103 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005104 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005105 },
5106
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005107 {
5108 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005109 .name = "SST39SF512",
5110 .bustype = CHIP_BUSTYPE_PARALLEL,
5111 .manufacture_id = SST_ID,
5112 .model_id = SST_39SF512,
5113 .total_size = 64,
5114 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005115 .feature_bits = FEATURE_EITHER_RESET,
5116 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005117 .probe = probe_jedec,
5118 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005119 .block_erasers =
5120 {
5121 {
5122 .eraseblocks = { {4 * 1024, 16} },
5123 .block_erase = erase_sector_jedec,
5124 }, {
5125 .eraseblocks = { {64 * 1024, 1} },
5126 .block_erase = erase_chip_block_jedec,
5127 }
5128 },
Sean Nelson35727f72010-01-28 23:55:12 +00005129 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005130 .read = read_memmapped,
5131 },
5132
5133 {
5134 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005135 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005136 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .manufacture_id = SST_ID,
5138 .model_id = SST_39SF010,
5139 .total_size = 128,
5140 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005141 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005142 .tested = TEST_OK_PRW,
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, 32} },
5149 .block_erase = erase_sector_jedec,
5150 }, {
5151 .eraseblocks = { {128 * 1024, 1} },
5152 .block_erase = erase_chip_block_jedec,
5153 }
5154 },
Sean Nelson35727f72010-01-28 23:55:12 +00005155 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005156 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005157 },
5158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005159 {
5160 .vendor = "SST",
5161 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005162 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005163 .manufacture_id = SST_ID,
5164 .model_id = SST_39SF020,
5165 .total_size = 256,
5166 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005167 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005168 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005169 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005170 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005171 .block_erasers =
5172 {
5173 {
5174 .eraseblocks = { {4 * 1024, 64} },
5175 .block_erase = erase_sector_jedec,
5176 }, {
5177 .eraseblocks = { {256 * 1024, 1} },
5178 .block_erase = erase_chip_block_jedec,
5179 }
5180 },
Sean Nelson35727f72010-01-28 23:55:12 +00005181 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005182 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005183 },
5184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005185 {
5186 .vendor = "SST",
5187 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005188 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005189 .manufacture_id = SST_ID,
5190 .model_id = SST_39SF040,
5191 .total_size = 512,
5192 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005193 .feature_bits = FEATURE_EITHER_RESET,
5194 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005195 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005196 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005197 .block_erasers =
5198 {
5199 {
5200 .eraseblocks = { {4 * 1024, 128} },
5201 .block_erase = erase_sector_jedec,
5202 }, {
5203 .eraseblocks = { {512 * 1024, 1} },
5204 .block_erase = erase_chip_block_jedec,
5205 }
5206 },
Sean Nelson35727f72010-01-28 23:55:12 +00005207 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005208 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005209 },
5210
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 {
5212 .vendor = "SST",
5213 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005214 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .manufacture_id = SST_ID,
5216 .model_id = SST_39VF512,
5217 .total_size = 64,
5218 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005219 .feature_bits = FEATURE_EITHER_RESET,
5220 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005221 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005222 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00005223 .block_erasers =
5224 {
5225 {
5226 .eraseblocks = { {4 * 1024, 16} },
5227 .block_erase = erase_sector_jedec,
5228 }, {
5229 .eraseblocks = { {64 * 1024, 1} },
5230 .block_erase = erase_chip_block_jedec,
5231 }
5232 },
Sean Nelson35727f72010-01-28 23:55:12 +00005233 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005234 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005235 },
5236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 {
5238 .vendor = "SST",
5239 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005240 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .manufacture_id = SST_ID,
5242 .model_id = SST_39VF010,
5243 .total_size = 128,
5244 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005245 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005246 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005247 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005248 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005249 .block_erasers =
5250 {
5251 {
5252 .eraseblocks = { {4 * 1024, 32} },
5253 .block_erase = erase_sector_jedec,
5254 }, {
5255 .eraseblocks = { {128 * 1024, 1} },
5256 .block_erase = erase_chip_block_jedec,
5257 }
5258 },
Sean Nelson35727f72010-01-28 23:55:12 +00005259 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005261 },
5262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 {
5264 .vendor = "SST",
5265 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005267 .manufacture_id = SST_ID,
5268 .model_id = SST_39VF020,
5269 .total_size = 256,
5270 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005271 .feature_bits = FEATURE_EITHER_RESET,
5272 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005273 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005274 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005275 .block_erasers =
5276 {
5277 {
5278 .eraseblocks = { {4 * 1024, 64} },
5279 .block_erase = erase_sector_jedec,
5280 }, {
5281 .eraseblocks = { {256 * 1024, 1} },
5282 .block_erase = erase_chip_block_jedec,
5283 }
5284 },
Sean Nelson35727f72010-01-28 23:55:12 +00005285 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005286 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005287 },
5288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 {
5290 .vendor = "SST",
5291 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005292 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005293 .manufacture_id = SST_ID,
5294 .model_id = SST_39VF040,
5295 .total_size = 512,
5296 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005297 .feature_bits = FEATURE_EITHER_RESET,
5298 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005299 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005300 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005301 .block_erasers =
5302 {
5303 {
5304 .eraseblocks = { {4 * 1024, 128} },
5305 .block_erase = erase_sector_jedec,
5306 }, {
5307 .eraseblocks = { {512 * 1024, 1} },
5308 .block_erase = erase_chip_block_jedec,
5309 }
5310 },
Sean Nelson35727f72010-01-28 23:55:12 +00005311 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005312 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005313 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005315 {
5316 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005317 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005318 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005319 .manufacture_id = SST_ID,
5320 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005321 .total_size = 1024,
5322 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005323 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005324 .tested = TEST_UNTESTED,
5325 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005326 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005327 .block_erasers =
5328 {
5329 {
5330 .eraseblocks = { {4 * 1024, 256} },
5331 .block_erase = erase_sector_jedec,
5332 }, {
5333 .eraseblocks = { {64 * 1024, 16} },
5334 .block_erase = erase_block_jedec,
5335 }, {
5336 .eraseblocks = { {1024 * 1024, 1} },
5337 .block_erase = erase_chip_block_jedec,
5338 }
5339 },
Sean Nelson35727f72010-01-28 23:55:12 +00005340 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005341 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005342 },
5343
5344 {
5345 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005346 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005347 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005348 .manufacture_id = SST_ID,
5349 .model_id = SST_49LF002A,
5350 .total_size = 256,
5351 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005352 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005353 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005354 .probe = probe_jedec,
5355 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005356 .block_erasers =
5357 {
5358 {
5359 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005360 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005361 }, {
5362 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005363 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005364 }, {
5365 .eraseblocks = { {256 * 1024, 1} },
5366 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5367 }
5368 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005369 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005370 .unlock = unlock_sst_fwhub,
5371 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005372 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005373 },
5374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005375 {
5376 .vendor = "SST",
5377 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005378 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005379 .manufacture_id = SST_ID,
5380 .model_id = SST_49LF003A,
5381 .total_size = 384,
5382 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005383 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005384 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005385 .probe = probe_jedec,
5386 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005387 .block_erasers =
5388 {
5389 {
5390 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005391 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005392 }, {
5393 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005394 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005395 }, {
5396 .eraseblocks = { {384 * 1024, 1} },
5397 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5398 }
5399 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005400 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005401 .unlock = unlock_sst_fwhub,
5402 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005403 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005404 },
5405
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005406 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005407 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5408 * and is only honored for 64k block erase, but not 4k sector erase.
5409 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005410 .vendor = "SST",
5411 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005412 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005413 .manufacture_id = SST_ID,
5414 .model_id = SST_49LF004A,
5415 .total_size = 512,
5416 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005417 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005418 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005419 .probe = probe_jedec,
5420 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005421 .block_erasers =
5422 {
5423 {
5424 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005425 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005426 }, {
5427 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005428 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005429 }, {
5430 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005431 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005432 },
5433 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005434 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005435 .unlock = unlock_sst_fwhub,
5436 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005437 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005438 },
5439
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005440 {
5441 .vendor = "SST",
5442 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005443 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005444 .manufacture_id = SST_ID,
5445 .model_id = SST_49LF004C,
5446 .total_size = 512,
5447 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005448 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005449 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005450 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005451 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005452 .block_erasers =
5453 {
5454 {
5455 .eraseblocks = { {4 * 1024, 128} },
5456 .block_erase = erase_sector_49lfxxxc,
5457 }, {
5458 .eraseblocks = {
5459 {64 * 1024, 7},
5460 {32 * 1024, 1},
5461 {8 * 1024, 2},
5462 {16 * 1024, 1},
5463 },
Sean Nelson69e58112010-03-23 17:10:28 +00005464 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005465 }
5466 },
Sean Nelson69e58112010-03-23 17:10:28 +00005467 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005468 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005469 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005470 },
5471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005472 {
5473 .vendor = "SST",
5474 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005475 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005476 .manufacture_id = SST_ID,
5477 .model_id = SST_49LF008A,
5478 .total_size = 1024,
5479 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005480 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005481 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005482 .probe = probe_jedec,
5483 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005484 .block_erasers =
5485 {
5486 {
5487 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005488 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005489 }, {
5490 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005491 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005492 }, {
5493 .eraseblocks = { {1024 * 1024, 1} },
5494 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5495 }
5496 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005497 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005498 .unlock = unlock_sst_fwhub,
5499 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005500 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005501 },
5502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005503 {
5504 .vendor = "SST",
5505 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005506 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005507 .manufacture_id = SST_ID,
5508 .model_id = SST_49LF008C,
5509 .total_size = 1024,
5510 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005511 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005513 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005514 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005515 .block_erasers =
5516 {
5517 {
5518 .eraseblocks = { {4 * 1024, 256} },
5519 .block_erase = erase_sector_49lfxxxc,
5520 }, {
5521 .eraseblocks = {
5522 {64 * 1024, 15},
5523 {32 * 1024, 1},
5524 {8 * 1024, 2},
5525 {16 * 1024, 1},
5526 },
Sean Nelson69e58112010-03-23 17:10:28 +00005527 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005528 }
5529 },
Sean Nelson69e58112010-03-23 17:10:28 +00005530 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005531 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005532 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005533 },
5534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005535 {
5536 .vendor = "SST",
5537 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005538 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005539 .manufacture_id = SST_ID,
5540 .model_id = SST_49LF016C,
5541 .total_size = 2048,
5542 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005543 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005544 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005545 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005546 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005547 .block_erasers =
5548 {
5549 {
5550 .eraseblocks = { {4 * 1024, 512} },
5551 .block_erase = erase_sector_49lfxxxc,
5552 }, {
5553 .eraseblocks = {
5554 {64 * 1024, 31},
5555 {32 * 1024, 1},
5556 {8 * 1024, 2},
5557 {16 * 1024, 1},
5558 },
Sean Nelson69e58112010-03-23 17:10:28 +00005559 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005560 }
5561 },
Sean Nelson69e58112010-03-23 17:10:28 +00005562 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005563 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005564 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005565 },
5566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005567 {
5568 .vendor = "SST",
5569 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005570 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005571 .manufacture_id = SST_ID,
5572 .model_id = SST_49LF020,
5573 .total_size = 256,
5574 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005575 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005576 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005577 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005578 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005579 .block_erasers =
5580 {
5581 {
5582 .eraseblocks = { {4 * 1024, 64} },
5583 .block_erase = erase_sector_jedec,
5584 }, {
5585 .eraseblocks = { {16 * 1024, 16} },
5586 .block_erase = erase_block_jedec,
5587 }, {
5588 .eraseblocks = { {256 * 1024, 1} },
5589 .block_erase = NULL,
5590 }
5591 },
Sean Nelson35727f72010-01-28 23:55:12 +00005592 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005593 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005594 },
5595
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005596 {
5597 .vendor = "SST",
5598 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005599 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005600 .manufacture_id = SST_ID,
5601 .model_id = SST_49LF020A,
5602 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005603 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005604 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005605 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005606 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005607 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005608 .block_erasers =
5609 {
5610 {
5611 .eraseblocks = { {4 * 1024, 64} },
5612 .block_erase = erase_sector_jedec,
5613 }, {
5614 .eraseblocks = { {16 * 1024, 16} },
5615 .block_erase = erase_block_jedec,
5616 }, {
5617 .eraseblocks = { {256 * 1024, 1} },
5618 .block_erase = NULL,
5619 }
5620 },
Sean Nelson35727f72010-01-28 23:55:12 +00005621 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005622 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005623 },
5624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005625 {
5626 .vendor = "SST",
5627 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005628 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005629 .manufacture_id = SST_ID,
5630 .model_id = SST_49LF040,
5631 .total_size = 512,
5632 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005633 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00005634 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005635 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005636 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005637 .block_erasers =
5638 {
5639 {
5640 .eraseblocks = { {4 * 1024, 128} },
5641 .block_erase = erase_sector_jedec,
5642 }, {
5643 .eraseblocks = { {64 * 1024, 8} },
5644 .block_erase = erase_block_jedec,
5645 }, {
5646 .eraseblocks = { {512 * 1024, 1} },
5647 .block_erase = NULL,
5648 }
5649 },
Sean Nelson35727f72010-01-28 23:55:12 +00005650 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005651 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005652 },
5653
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005654 {
5655 .vendor = "SST",
5656 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005657 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005658 .manufacture_id = SST_ID,
5659 .model_id = SST_49LF040B,
5660 .total_size = 512,
5661 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005662 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
5663 .tested = TEST_OK_PREW,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005664 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005665 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005666 .block_erasers =
5667 {
5668 {
5669 .eraseblocks = { {4 * 1024, 128} },
5670 .block_erase = erase_sector_jedec,
5671 }, {
5672 .eraseblocks = { {64 * 1024, 8} },
5673 .block_erase = erase_block_jedec,
5674 }, {
5675 .eraseblocks = { {512 * 1024, 1} },
5676 .block_erase = NULL,
5677 }
5678 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005679 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00005680 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005681 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005682 },
5683
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005684 {
5685 .vendor = "SST",
5686 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005687 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005688 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005689 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005690 .total_size = 1024,
5691 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005692 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005693 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005694 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005695 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005696 .block_erasers =
5697 {
5698 {
5699 .eraseblocks = { {4 * 1024, 256} },
5700 .block_erase = erase_sector_jedec,
5701 }, {
5702 .eraseblocks = { {64 * 1024, 16} },
5703 .block_erase = erase_block_jedec,
5704 }, {
5705 .eraseblocks = { {1024 * 1024, 1} },
5706 .block_erase = NULL,
5707 }
5708 },
Sean Nelson35727f72010-01-28 23:55:12 +00005709 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005711 },
5712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005713 {
5714 .vendor = "SST",
5715 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005716 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005717 .manufacture_id = SST_ID,
5718 .model_id = SST_49LF160C,
5719 .total_size = 2048,
5720 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005721 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005722 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005723 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005724 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005725 .block_erasers =
5726 {
5727 {
5728 .eraseblocks = { {4 * 1024, 512} },
5729 .block_erase = erase_sector_49lfxxxc,
5730 }, {
5731 .eraseblocks = {
5732 {64 * 1024, 31},
5733 {32 * 1024, 1},
5734 {8 * 1024, 2},
5735 {16 * 1024, 1},
5736 },
Sean Nelson69e58112010-03-23 17:10:28 +00005737 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005738 }
5739 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005740 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005742 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005743 },
5744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005745 {
5746 .vendor = "ST",
5747 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005749 .manufacture_id = ST_ID,
5750 .model_id = ST_M25P05A,
5751 .total_size = 64,
5752 .page_size = 256,
5753 .tested = TEST_UNTESTED,
5754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005755 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005756 .block_erasers =
5757 {
5758 {
5759 .eraseblocks = { {32 * 1024, 2} },
5760 .block_erase = spi_block_erase_d8,
5761 }, {
5762 .eraseblocks = { {64 * 1024, 1} },
5763 .block_erase = spi_block_erase_c7,
5764 }
5765 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005766 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005767 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005768 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005769 },
5770
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005771 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5772 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005773 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005774 * only is successful if RDID does not work.
5775 */
5776 {
5777 .vendor = "ST",
5778 .name = "M25P05.RES",
5779 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005780 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005781 .model_id = ST_M25P05_RES,
5782 .total_size = 64,
5783 .page_size = 256,
5784 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005785 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005786 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005787 .block_erasers =
5788 {
5789 {
5790 .eraseblocks = { {32 * 1024, 2} },
5791 .block_erase = spi_block_erase_d8,
5792 }, {
5793 .eraseblocks = { {64 * 1024, 1} },
5794 .block_erase = spi_block_erase_c7,
5795 }
5796 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005797 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005798 .write = spi_chip_write_1, /* 128 */
5799 .read = spi_chip_read,
5800 },
5801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005802 {
5803 .vendor = "ST",
5804 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005805 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005806 .manufacture_id = ST_ID,
5807 .model_id = ST_M25P10A,
5808 .total_size = 128,
5809 .page_size = 256,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005810 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005811 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005812 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005813 .block_erasers =
5814 {
5815 {
5816 .eraseblocks = { {32 * 1024, 4} },
5817 .block_erase = spi_block_erase_d8,
5818 }, {
5819 .eraseblocks = { {128 * 1024, 1} },
5820 .block_erase = spi_block_erase_c7,
5821 }
5822 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005823 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005824 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005825 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005826 },
5827
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005828 /* The ST M25P10 has the same problem as the M25P05. */
5829 {
5830 .vendor = "ST",
5831 .name = "M25P10.RES",
5832 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005833 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005834 .model_id = ST_M25P10_RES,
5835 .total_size = 128,
5836 .page_size = 256,
5837 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005838 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005839 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005840 .block_erasers =
5841 {
5842 {
5843 .eraseblocks = { {32 * 1024, 4} },
5844 .block_erase = spi_block_erase_d8,
5845 }, {
5846 .eraseblocks = { {128 * 1024, 1} },
5847 .block_erase = spi_block_erase_c7,
5848 }
5849 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005850 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005851 .write = spi_chip_write_1, /* 128 */
5852 .read = spi_chip_read,
5853 },
5854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005855 {
5856 .vendor = "ST",
5857 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005858 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005859 .manufacture_id = ST_ID,
5860 .model_id = ST_M25P20,
5861 .total_size = 256,
5862 .page_size = 256,
5863 .tested = TEST_UNTESTED,
5864 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005865 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005866 .block_erasers =
5867 {
5868 {
5869 .eraseblocks = { {64 * 1024, 4} },
5870 .block_erase = spi_block_erase_d8,
5871 }, {
5872 .eraseblocks = { {256 * 1024, 1} },
5873 .block_erase = spi_block_erase_c7,
5874 }
5875 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005876 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005877 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005878 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005879 },
5880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 {
5882 .vendor = "ST",
5883 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005884 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005885 .manufacture_id = ST_ID,
5886 .model_id = ST_M25P40,
5887 .total_size = 512,
5888 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005889 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005890 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005891 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005892 .block_erasers =
5893 {
5894 {
5895 .eraseblocks = { {64 * 1024, 8} },
5896 .block_erase = spi_block_erase_d8,
5897 }, {
5898 .eraseblocks = { {512 * 1024, 1} },
5899 .block_erase = spi_block_erase_c7,
5900 }
5901 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005902 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005903 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005904 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005905 },
5906
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005907 {
5908 .vendor = "ST",
5909 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005910 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005911 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .model_id = ST_M25P40_RES,
5913 .total_size = 512,
5914 .page_size = 256,
5915 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005916 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005917 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005918 .block_erasers =
5919 {
5920 {
5921 .eraseblocks = { {64 * 1024, 8} },
5922 .block_erase = spi_block_erase_d8,
5923 }, {
5924 .eraseblocks = { {512 * 1024, 1} },
5925 .block_erase = spi_block_erase_c7,
5926 }
5927 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005928 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005929 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005930 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "ST",
5935 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005936 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = ST_ID,
5938 .model_id = ST_M25P80,
5939 .total_size = 1024,
5940 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005941 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005942 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005943 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005944 .block_erasers =
5945 {
5946 {
5947 .eraseblocks = { {64 * 1024, 16} },
5948 .block_erase = spi_block_erase_d8,
5949 }, {
5950 .eraseblocks = { {1024 * 1024, 1} },
5951 .block_erase = spi_block_erase_c7,
5952 }
5953 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005954 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005955 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005956 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005957 },
5958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005959 {
5960 .vendor = "ST",
5961 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005962 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005963 .manufacture_id = ST_ID,
5964 .model_id = ST_M25P16,
5965 .total_size = 2048,
5966 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005967 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005969 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005970 .block_erasers =
5971 {
5972 {
5973 .eraseblocks = { {64 * 1024, 32} },
5974 .block_erase = spi_block_erase_d8,
5975 }, {
5976 .eraseblocks = { {2 * 1024 * 1024, 1} },
5977 .block_erase = spi_block_erase_c7,
5978 }
5979 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005980 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005981 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005982 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005983 },
5984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005985 {
5986 .vendor = "ST",
5987 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005988 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .manufacture_id = ST_ID,
5990 .model_id = ST_M25P32,
5991 .total_size = 4096,
5992 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005993 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005995 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005996 .block_erasers =
5997 {
5998 {
5999 .eraseblocks = { {64 * 1024, 64} },
6000 .block_erase = spi_block_erase_d8,
6001 }, {
6002 .eraseblocks = { {4 * 1024 * 1024, 1} },
6003 .block_erase = spi_block_erase_c7,
6004 }
6005 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006006 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006007 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006008 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006009 },
6010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006011 {
6012 .vendor = "ST",
6013 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006014 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006015 .manufacture_id = ST_ID,
6016 .model_id = ST_M25P64,
6017 .total_size = 8192,
6018 .page_size = 256,
6019 .tested = TEST_UNTESTED,
6020 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006021 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006022 .block_erasers =
6023 {
6024 {
6025 .eraseblocks = { {64 * 1024, 128} },
6026 .block_erase = spi_block_erase_d8,
6027 }, {
6028 .eraseblocks = { {8 * 1024 * 1024, 1} },
6029 .block_erase = spi_block_erase_c7,
6030 }
6031 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006032 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006033 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006034 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006035 },
6036
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006037 {
6038 .vendor = "ST",
6039 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006040 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006041 .manufacture_id = ST_ID,
6042 .model_id = ST_M25P128,
6043 .total_size = 16384,
6044 .page_size = 256,
6045 .tested = TEST_UNTESTED,
6046 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006047 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006048 .block_erasers =
6049 {
6050 {
6051 .eraseblocks = { {256 * 1024, 64} },
6052 .block_erase = spi_block_erase_d8,
6053 }, {
6054 .eraseblocks = { {16 * 1024 * 1024, 1} },
6055 .block_erase = spi_block_erase_c7,
6056 }
6057 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006058 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006059 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006060 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006061 },
6062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 {
6064 .vendor = "ST",
6065 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006066 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006067 .manufacture_id = ST_ID,
6068 .model_id = ST_M29F002B,
6069 .total_size = 256,
6070 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006071 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006072 .tested = TEST_UNTESTED,
6073 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006074 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006075 .block_erasers =
6076 {
6077 {
6078 .eraseblocks = {
6079 {16 * 1024, 1},
6080 {8 * 1024, 2},
6081 {32 * 1024, 1},
6082 {64 * 1024, 3},
6083 },
6084 .block_erase = erase_sector_jedec,
6085 }, {
6086 .eraseblocks = { {256 * 1024, 1} },
6087 .block_erase = erase_chip_block_jedec,
6088 }
6089 },
Sean Nelson35727f72010-01-28 23:55:12 +00006090 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006091 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006092 },
6093
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006094 {
6095 .vendor = "ST",
6096 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006097 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006098 .manufacture_id = ST_ID,
6099 .model_id = ST_M29F002T,
6100 .total_size = 256,
6101 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006102 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6103 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006104 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006105 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006106 .block_erasers =
6107 {
6108 {
6109 .eraseblocks = {
6110 {64 * 1024, 3},
6111 {32 * 1024, 1},
6112 {8 * 1024, 2},
6113 {16 * 1024, 1},
6114 },
6115 .block_erase = erase_sector_jedec,
6116 }, {
6117 .eraseblocks = { {256 * 1024, 1} },
6118 .block_erase = erase_chip_block_jedec,
6119 }
6120 },
Sean Nelson35727f72010-01-28 23:55:12 +00006121 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006122 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006123 },
6124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006125 {
6126 .vendor = "ST",
6127 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006128 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006129 .manufacture_id = ST_ID,
6130 .model_id = ST_M29F040B,
6131 .total_size = 512,
6132 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006133 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6134 .tested = TEST_UNTESTED,
6135 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006136 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006137 .block_erasers =
6138 {
6139 {
6140 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006141 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006142 }, {
6143 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006144 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006145 }
6146 },
Sean Nelson35727f72010-01-28 23:55:12 +00006147 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006149 },
6150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006151 {
Sean Nelson35727f72010-01-28 23:55:12 +00006152 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006153 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006154 .name = "M29F400BB",
6155 .bustype = CHIP_BUSTYPE_PARALLEL,
6156 .manufacture_id = ST_ID,
6157 .model_id = ST_M29F400BB,
6158 .total_size = 512,
6159 .page_size = 64 * 1024,
6160 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
6161 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
6162 .probe = probe_m29f400bt,
6163 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6164 .block_erasers =
6165 {
6166 {
6167 .eraseblocks = {
6168 {16 * 1024, 1},
6169 {8 * 1024, 2},
6170 {32 * 1024, 1},
6171 {64 * 1024, 7},
6172 },
6173 .block_erase = block_erase_m29f400bt,
6174 }, {
6175 .eraseblocks = { {512 * 1024, 1} },
6176 .block_erase = block_erase_chip_m29f400bt,
6177 }
6178 },
6179 .write = NULL,
6180 .read = read_memmapped,
6181 },
6182 {
6183 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6184 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006185 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006186 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006187 .manufacture_id = ST_ID,
6188 .model_id = ST_M29F400BT,
6189 .total_size = 512,
6190 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006191 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 .tested = TEST_UNTESTED,
6193 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006194 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006195 .block_erasers =
6196 {
6197 {
6198 .eraseblocks = {
6199 {64 * 1024, 7},
6200 {32 * 1024, 1},
6201 {8 * 1024, 2},
6202 {16 * 1024, 1},
6203 },
6204 .block_erase = block_erase_m29f400bt,
6205 }, {
6206 .eraseblocks = { {512 * 1024, 1} },
6207 .block_erase = block_erase_chip_m29f400bt,
6208 }
6209 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006210 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006211 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006212 },
6213
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006214 {
6215 .vendor = "ST",
6216 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006217 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006218 .manufacture_id = ST_ID,
6219 .model_id = ST_M29W010B,
6220 .total_size = 128,
6221 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006222 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006223 .tested = TEST_UNTESTED,
6224 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006225 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006226 .block_erasers =
6227 {
6228 {
6229 .eraseblocks = { {16 * 1024, 8}, },
6230 .block_erase = erase_sector_jedec,
6231 }, {
6232 .eraseblocks = { {128 * 1024, 1} },
6233 .block_erase = erase_chip_block_jedec,
6234 }
6235 },
Sean Nelson35727f72010-01-28 23:55:12 +00006236 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006237 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006238 },
6239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006240 {
6241 .vendor = "ST",
6242 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006243 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006244 .manufacture_id = ST_ID,
6245 .model_id = ST_M29W040B,
6246 .total_size = 512,
6247 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006248 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006249 .tested = TEST_UNTESTED,
6250 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006251 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006252 .block_erasers =
6253 {
6254 {
6255 .eraseblocks = { {64 * 1024, 8}, },
6256 .block_erase = erase_sector_jedec,
6257 }, {
6258 .eraseblocks = { {512 * 1024, 1} },
6259 .block_erase = erase_chip_block_jedec,
6260 }
6261 },
Sean Nelson35727f72010-01-28 23:55:12 +00006262 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006263 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006264 },
6265
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006266 {
6267 .vendor = "ST",
6268 .name = "M29W512B",
6269 .bustype = CHIP_BUSTYPE_PARALLEL,
6270 .manufacture_id = ST_ID,
6271 .model_id = ST_M29W512B,
6272 .total_size = 64,
6273 .page_size = 64 * 1024,
6274 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6275 .tested = TEST_OK_PREW,
6276 .probe = probe_jedec,
6277 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006278 .block_erasers =
6279 {
6280 {
6281 .eraseblocks = { {64 * 1024, 1} },
6282 .block_erase = erase_chip_block_jedec,
6283 }
6284 },
6285 .write = write_jedec_1,
6286 .read = read_memmapped,
6287 },
6288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006289 {
6290 .vendor = "ST",
6291 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006292 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006293 .manufacture_id = ST_ID,
6294 .model_id = ST_M50FLW040A,
6295 .total_size = 512,
6296 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006297 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006298 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006299 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006300 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006301 .block_erasers =
6302 {
6303 {
Sean Nelson329bde72010-01-19 16:39:19 +00006304 .eraseblocks = {
6305 {4 * 1024, 16}, /* sector */
6306 {64 * 1024, 5}, /* block */
6307 {4 * 1024, 16}, /* sector */
6308 {4 * 1024, 16}, /* sector */
6309 },
6310 .block_erase = NULL,
6311 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006312 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006313 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006314 }, {
6315 .eraseblocks = { {512 * 1024, 1} },
6316 .block_erase = erase_chip_stm50flw0x0x,
6317 }
6318 },
Sean Nelson28accc22010-03-19 18:47:06 +00006319 .unlock = unlock_stm50flw0x0x,
6320 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006321 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006322 },
6323
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006324 {
6325 .vendor = "ST",
6326 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006327 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006328 .manufacture_id = ST_ID,
6329 .model_id = ST_M50FLW040B,
6330 .total_size = 512,
6331 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006332 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006333 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006334 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006335 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006336 .block_erasers =
6337 {
6338 {
Sean Nelson329bde72010-01-19 16:39:19 +00006339 .eraseblocks = {
6340 {4 * 1024, 16}, /* sector */
6341 {4 * 1024, 16}, /* sector */
6342 {64 * 1024, 5}, /* block */
6343 {4 * 1024, 16}, /* sector */
6344 },
6345 .block_erase = NULL,
6346 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006347 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006348 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006349 }, {
6350 .eraseblocks = { {512 * 1024, 1} },
6351 .block_erase = erase_chip_stm50flw0x0x,
6352 }
6353 },
Sean Nelson28accc22010-03-19 18:47:06 +00006354 .unlock = unlock_stm50flw0x0x,
6355 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006357 },
6358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006359 {
6360 .vendor = "ST",
6361 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006362 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006363 .manufacture_id = ST_ID,
6364 .model_id = ST_M50FLW080A,
6365 .total_size = 1024,
6366 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006367 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00006368 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00006369 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006370 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006371 .block_erasers =
6372 {
6373 {
Sean Nelson329bde72010-01-19 16:39:19 +00006374 .eraseblocks = {
6375 {4 * 1024, 16}, /* sector */
6376 {64 * 1024, 13}, /* block */
6377 {4 * 1024, 16}, /* sector */
6378 {4 * 1024, 16}, /* sector */
6379 },
6380 .block_erase = NULL,
6381 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006382 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006383 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006384 }, {
6385 .eraseblocks = { {1024 * 1024, 1} },
6386 .block_erase = erase_chip_stm50flw0x0x,
6387 }
6388 },
Sean Nelson28accc22010-03-19 18:47:06 +00006389 .unlock = unlock_stm50flw0x0x,
6390 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006391 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006392 },
6393
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006394 {
6395 .vendor = "ST",
6396 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006397 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006398 .manufacture_id = ST_ID,
6399 .model_id = ST_M50FLW080B,
6400 .total_size = 1024,
6401 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006402 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006403 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006404 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006405 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006406 .block_erasers =
6407 {
6408 {
Sean Nelson329bde72010-01-19 16:39:19 +00006409 .eraseblocks = {
6410 {4 * 1024, 16}, /* sector */
6411 {4 * 1024, 16}, /* sector */
6412 {64 * 1024, 13}, /* block */
6413 {4 * 1024, 16}, /* sector */
6414 },
6415 .block_erase = NULL,
6416 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006417 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006418 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006419 }, {
6420 .eraseblocks = { {1024 * 1024, 1} },
6421 .block_erase = erase_chip_stm50flw0x0x,
6422 }
6423 },
Sean Nelson28accc22010-03-19 18:47:06 +00006424 .unlock = unlock_stm50flw0x0x,
6425 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006426 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006427 },
6428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006429 {
6430 .vendor = "ST",
6431 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006432 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006433 .manufacture_id = ST_ID,
6434 .model_id = ST_M50FW002,
6435 .total_size = 256,
6436 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006437 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006438 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006439 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006440 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006441 .block_erasers =
6442 {
6443 {
6444 .eraseblocks = {
6445 {64 * 1024, 3},
6446 {32 * 1024, 1},
6447 {8 * 1024, 2},
6448 {16 * 1024, 1},
6449 },
Sean Nelson28accc22010-03-19 18:47:06 +00006450 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006451 }, {
6452 .eraseblocks = { {256 * 1024, 1} },
6453 .block_erase = erase_chip_stm50flw0x0x,
6454 }
6455 },
Sean Nelson28accc22010-03-19 18:47:06 +00006456 .unlock = unlock_stm50flw0x0x,
6457 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006458 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006459 },
6460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006461 {
6462 .vendor = "ST",
6463 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006464 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006465 .manufacture_id = ST_ID,
6466 .model_id = ST_M50FW016,
6467 .total_size = 2048,
6468 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006469 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006470 .tested = TEST_UNTESTED,
6471 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006472 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006473 .block_erasers =
6474 {
6475 {
6476 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006477 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006478 }, {
6479 .eraseblocks = { {2 * 1024 * 1024, 1} },
6480 .block_erase = erase_chip_stm50flw0x0x,
6481 }
6482 },
Sean Nelson28accc22010-03-19 18:47:06 +00006483 .unlock = unlock_stm50flw0x0x,
6484 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006485 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006486 },
6487
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006488 {
6489 .vendor = "ST",
6490 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006491 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006492 .manufacture_id = ST_ID,
6493 .model_id = ST_M50FW040,
6494 .total_size = 512,
6495 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006496 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006497 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006498 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006499 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006500 .block_erasers =
6501 {
6502 {
6503 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006504 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006505 }, {
6506 .eraseblocks = { {512 * 1024, 1} },
6507 .block_erase = erase_chip_stm50flw0x0x,
6508 }
6509 },
Sean Nelson28accc22010-03-19 18:47:06 +00006510 .unlock = unlock_stm50flw0x0x,
6511 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006512 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006513 },
6514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006515 {
6516 .vendor = "ST",
6517 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006518 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006519 .manufacture_id = ST_ID,
6520 .model_id = ST_M50FW080,
6521 .total_size = 1024,
6522 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006523 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006524 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006525 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006526 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006527 .block_erasers =
6528 {
6529 {
6530 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006531 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006532 }, {
6533 .eraseblocks = { {1024 * 1024, 1} },
6534 .block_erase = erase_chip_stm50flw0x0x,
6535 }
6536 },
Sean Nelson28accc22010-03-19 18:47:06 +00006537 .unlock = unlock_stm50flw0x0x,
6538 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006539 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006540 },
6541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006542 {
6543 .vendor = "ST",
6544 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006545 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006546 .manufacture_id = ST_ID,
6547 .model_id = ST_M50LPW116,
6548 .total_size = 2048,
6549 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006550 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006551 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006552 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006553 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006554 .block_erasers =
6555 {
6556 {
6557 .eraseblocks = {
6558 {4 * 1024, 16},
6559 {64 * 1024, 30},
6560 {32 * 1024, 1},
6561 {8 * 1024, 2},
6562 {16 * 1024, 1},
6563 },
Sean Nelson28accc22010-03-19 18:47:06 +00006564 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006565 }, {
6566 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006567 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006568 }
6569 },
Sean Nelson28accc22010-03-19 18:47:06 +00006570 .unlock = unlock_stm50flw0x0x,
6571 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006572 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006573 },
6574
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006575 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006576 .vendor = "SyncMOS/MoselVitelic",
6577 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006578 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006579 .manufacture_id = SYNCMOS_MVC_ID,
6580 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006581 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006582 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006583 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006584 .tested = TEST_UNTESTED,
6585 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006586 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006587 .block_erasers =
6588 {
6589 {
6590 .eraseblocks = { {512, 256} },
6591 .block_erase = erase_sector_jedec,
6592 }, {
6593 .eraseblocks = { {128 * 1024, 1} },
6594 .block_erase = erase_chip_block_jedec,
6595 },
6596 },
Sean Nelson35727f72010-01-28 23:55:12 +00006597 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006598 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006599 },
6600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006601 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006602 .vendor = "SyncMOS/MoselVitelic",
6603 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006604 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006605 .manufacture_id = SYNCMOS_MVC_ID,
6606 .model_id = SM_MVC_29C51001T,
6607 .total_size = 128,
6608 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006609 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006610 .tested = TEST_UNTESTED,
6611 .probe = probe_jedec,
6612 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6613 .block_erasers =
6614 {
6615 {
6616 .eraseblocks = { {512, 256} },
6617 .block_erase = erase_sector_jedec,
6618 }, {
6619 .eraseblocks = { {128 * 1024, 1} },
6620 .block_erase = erase_chip_block_jedec,
6621 },
6622 },
6623 .write = write_jedec_1,
6624 .read = read_memmapped,
6625 },
6626
6627 {
6628 .vendor = "SyncMOS/MoselVitelic",
6629 .name = "{F,S,V}29C51002B",
6630 .bustype = CHIP_BUSTYPE_PARALLEL,
6631 .manufacture_id = SYNCMOS_MVC_ID,
6632 .model_id = SM_MVC_29C51002B,
6633 .total_size = 256,
6634 .page_size = 512,
6635 .feature_bits = FEATURE_EITHER_RESET,
6636 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006637 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006638 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006639 .block_erasers =
6640 {
6641 {
6642 .eraseblocks = { {512, 512} },
6643 .block_erase = erase_sector_jedec,
6644 }, {
6645 .eraseblocks = { {256 * 1024, 1} },
6646 .block_erase = erase_chip_block_jedec,
6647 },
6648 },
Sean Nelson35727f72010-01-28 23:55:12 +00006649 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006650 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006651 },
6652
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006653 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006654 .vendor = "SyncMOS/MoselVitelic",
6655 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006656 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006657 .manufacture_id = SYNCMOS_MVC_ID,
6658 .model_id = SM_MVC_29C51002T,
6659 .total_size = 256,
6660 .page_size = 512,
6661 .feature_bits = FEATURE_EITHER_RESET,
6662 .tested = TEST_OK_PR,
6663 .probe = probe_jedec,
6664 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6665 .block_erasers =
6666 {
6667 {
6668 .eraseblocks = { {512, 512} },
6669 .block_erase = erase_sector_jedec,
6670 }, {
6671 .eraseblocks = { {256 * 1024, 1} },
6672 .block_erase = erase_chip_block_jedec,
6673 },
6674 },
6675 .write = write_jedec_1,
6676 .read = read_memmapped,
6677 },
6678
6679 {
6680 .vendor = "SyncMOS/MoselVitelic",
6681 .name = "{F,S,V}29C51004B",
6682 .bustype = CHIP_BUSTYPE_PARALLEL,
6683 .manufacture_id = SYNCMOS_MVC_ID,
6684 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006685 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006686 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006687 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006688 .tested = TEST_UNTESTED,
6689 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006690 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006691 .block_erasers =
6692 {
6693 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006694 .eraseblocks = { {1024, 512} },
6695 .block_erase = erase_sector_jedec,
6696 }, {
6697 .eraseblocks = { {512 * 1024, 1} },
6698 .block_erase = erase_chip_block_jedec,
6699 },
6700 },
6701 .write = write_jedec_1,
6702 .read = read_memmapped,
6703 },
6704
6705 {
6706 .vendor = "SyncMOS/MoselVitelic",
6707 .name = "{F,S,V}29C51004T",
6708 .bustype = CHIP_BUSTYPE_PARALLEL,
6709 .manufacture_id = SYNCMOS_MVC_ID,
6710 .model_id = SM_MVC_29C51004T,
6711 .total_size = 512,
6712 .page_size = 1024,
6713 .feature_bits = FEATURE_EITHER_RESET,
6714 .tested = TEST_UNTESTED,
6715 .probe = probe_jedec,
6716 .probe_timing = TIMING_ZERO,
6717 .block_erasers =
6718 {
6719 {
6720 .eraseblocks = { {1024, 512} },
6721 .block_erase = erase_sector_jedec,
6722 }, {
6723 .eraseblocks = { {512 * 1024, 1} },
6724 .block_erase = erase_chip_block_jedec,
6725 },
6726 },
6727 .write = write_jedec_1,
6728 .read = read_memmapped,
6729 },
6730
6731 {
6732 .vendor = "SyncMOS/MoselVitelic",
6733 .name = "{S,V}29C31004B",
6734 .bustype = CHIP_BUSTYPE_PARALLEL,
6735 .manufacture_id = SYNCMOS_MVC_ID,
6736 .model_id = SM_MVC_29C31004B,
6737 .total_size = 512,
6738 .page_size = 1024,
6739 .feature_bits = FEATURE_EITHER_RESET,
6740 .tested = TEST_UNTESTED,
6741 .probe = probe_jedec,
6742 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6743 .block_erasers =
6744 {
6745 {
6746 .eraseblocks = { {1024, 512} },
6747 .block_erase = erase_sector_jedec,
6748 }, {
6749 .eraseblocks = { {512 * 1024, 1} },
6750 .block_erase = erase_chip_block_jedec,
6751 },
6752 },
6753 .write = write_jedec_1,
6754 .read = read_memmapped,
6755 },
6756
6757 {
6758 .vendor = "SyncMOS/MoselVitelic",
6759 .name = "{S,V}29C31004T",
6760 .bustype = CHIP_BUSTYPE_PARALLEL,
6761 .manufacture_id = SYNCMOS_MVC_ID,
6762 .model_id = SM_MVC_29C31004T,
6763 .total_size = 512,
6764 .page_size = 1024,
6765 .feature_bits = FEATURE_EITHER_RESET,
6766 .tested = TEST_UNTESTED,
6767 .probe = probe_jedec,
6768 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6769 .block_erasers =
6770 {
6771 {
6772 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006773 .block_erase = erase_sector_jedec,
6774 }, {
6775 .eraseblocks = { {512 * 1024, 1} },
6776 .block_erase = erase_chip_block_jedec,
6777 },
6778 },
Sean Nelson35727f72010-01-28 23:55:12 +00006779 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006780 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006781 },
6782
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006783 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006784 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006785 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006786 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006787 .manufacture_id = TI_OLD_ID,
6788 .model_id = TI_TMS29F002RB,
6789 .total_size = 256,
6790 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006791 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006792 .tested = TEST_UNTESTED,
6793 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006794 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006795 .block_erasers =
6796 {
6797 {
6798 .eraseblocks = {
6799 {16 * 1024, 1},
6800 {8 * 1024, 2},
6801 {32 * 1024, 1},
6802 {64 * 1024, 3},
6803 },
6804 .block_erase = erase_sector_jedec,
6805 }, {
6806 .eraseblocks = { {256 * 1024, 1} },
6807 .block_erase = erase_chip_block_jedec,
6808 },
6809 },
Sean Nelson35727f72010-01-28 23:55:12 +00006810 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006811 .read = read_memmapped,
6812 },
6813
6814 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006815 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006816 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006817 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006818 .manufacture_id = TI_OLD_ID,
6819 .model_id = TI_TMS29F002RT,
6820 .total_size = 256,
6821 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006822 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006823 .tested = TEST_UNTESTED,
6824 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006825 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006826 .block_erasers =
6827 {
6828 {
6829 .eraseblocks = {
6830 {64 * 1024, 3},
6831 {32 * 1024, 1},
6832 {8 * 1024, 2},
6833 {16 * 1024, 1},
6834 },
6835 .block_erase = erase_sector_jedec,
6836 }, {
6837 .eraseblocks = { {256 * 1024, 1} },
6838 .block_erase = erase_chip_block_jedec,
6839 },
6840 },
Sean Nelson35727f72010-01-28 23:55:12 +00006841 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006842 .read = read_memmapped,
6843 },
6844
6845 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006846 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006847 .name = "W25Q80",
6848 .bustype = CHIP_BUSTYPE_SPI,
6849 .manufacture_id = WINBOND_NEX_ID,
6850 .model_id = W_25Q80,
6851 .total_size = 1024,
6852 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006853 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00006854 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006855 .probe = probe_spi_rdid,
6856 .probe_timing = TIMING_ZERO,
6857 .block_erasers =
6858 {
6859 {
6860 .eraseblocks = { {4 * 1024, 256} },
6861 .block_erase = spi_block_erase_20,
6862 }, {
6863 .eraseblocks = { {32 * 1024, 32} },
6864 .block_erase = spi_block_erase_52,
6865 }, {
6866 .eraseblocks = { {64 * 1024, 16} },
6867 .block_erase = spi_block_erase_d8,
6868 }, {
6869 .eraseblocks = { {1024 * 1024, 1} },
6870 .block_erase = spi_block_erase_60,
6871 }, {
6872 .eraseblocks = { {1024 * 1024, 1} },
6873 .block_erase = spi_block_erase_c7,
6874 }
6875 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006876 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006877 .write = spi_chip_write_256,
6878 .read = spi_chip_read,
6879 },
6880
6881 {
6882 .vendor = "Winbond",
6883 .name = "W25Q16",
6884 .bustype = CHIP_BUSTYPE_SPI,
6885 .manufacture_id = WINBOND_NEX_ID,
6886 .model_id = W_25Q16,
6887 .total_size = 2048,
6888 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006889 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006890 .tested = TEST_UNTESTED,
6891 .probe = probe_spi_rdid,
6892 .probe_timing = TIMING_ZERO,
6893 .block_erasers =
6894 {
6895 {
6896 .eraseblocks = { {4 * 1024, 512} },
6897 .block_erase = spi_block_erase_20,
6898 }, {
6899 .eraseblocks = { {32 * 1024, 64} },
6900 .block_erase = spi_block_erase_52,
6901 }, {
6902 .eraseblocks = { {64 * 1024, 32} },
6903 .block_erase = spi_block_erase_d8,
6904 }, {
6905 .eraseblocks = { {2 * 1024 * 1024, 1} },
6906 .block_erase = spi_block_erase_60,
6907 }, {
6908 .eraseblocks = { {2 * 1024 * 1024, 1} },
6909 .block_erase = spi_block_erase_c7,
6910 }
6911 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006912 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006913 .write = spi_chip_write_256,
6914 .read = spi_chip_read,
6915 },
6916
6917 {
6918 .vendor = "Winbond",
6919 .name = "W25Q32",
6920 .bustype = CHIP_BUSTYPE_SPI,
6921 .manufacture_id = WINBOND_NEX_ID,
6922 .model_id = W_25Q32,
6923 .total_size = 4096,
6924 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006925 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006926 .tested = TEST_UNTESTED,
6927 .probe = probe_spi_rdid,
6928 .probe_timing = TIMING_ZERO,
6929 .block_erasers =
6930 {
6931 {
6932 .eraseblocks = { {4 * 1024, 1024} },
6933 .block_erase = spi_block_erase_20,
6934 }, {
6935 .eraseblocks = { {32 * 1024, 128} },
6936 .block_erase = spi_block_erase_52,
6937 }, {
6938 .eraseblocks = { {64 * 1024, 64} },
6939 .block_erase = spi_block_erase_d8,
6940 }, {
6941 .eraseblocks = { {4 * 1024 * 1024, 1} },
6942 .block_erase = spi_block_erase_60,
6943 }, {
6944 .eraseblocks = { {4 * 1024 * 1024, 1} },
6945 .block_erase = spi_block_erase_c7,
6946 }
6947 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006948 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006949 .write = spi_chip_write_256,
6950 .read = spi_chip_read,
6951 },
6952
6953 {
6954 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006955 .name = "W25Q64",
6956 .bustype = CHIP_BUSTYPE_SPI,
6957 .manufacture_id = WINBOND_NEX_ID,
6958 .model_id = W_25Q64,
6959 .total_size = 8192,
6960 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006961 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksc4acec92010-06-24 11:39:57 +00006962 .tested = TEST_OK_PRW,
6963 .probe = probe_spi_rdid,
6964 .probe_timing = TIMING_ZERO,
6965 .block_erasers =
6966 {
6967 {
6968 .eraseblocks = { {4 * 1024, 2048} },
6969 .block_erase = spi_block_erase_20,
6970 }, {
6971 .eraseblocks = { {32 * 1024, 256} },
6972 .block_erase = spi_block_erase_52,
6973 }, {
6974 .eraseblocks = { {64 * 1024, 128} },
6975 .block_erase = spi_block_erase_d8,
6976 }, {
6977 .eraseblocks = { {8 * 1024 * 1024, 1} },
6978 .block_erase = spi_block_erase_60,
6979 }, {
6980 .eraseblocks = { {8 * 1024 * 1024, 1} },
6981 .block_erase = spi_block_erase_c7,
6982 }
6983 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006984 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006985 .write = spi_chip_write_256,
6986 .read = spi_chip_read,
6987 },
6988
6989 {
6990 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006991 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006992 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006993 .manufacture_id = WINBOND_NEX_ID,
6994 .model_id = W_25X10,
6995 .total_size = 128,
6996 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006997 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006998 .tested = TEST_UNTESTED,
6999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007000 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007001 .block_erasers =
7002 {
7003 {
7004 .eraseblocks = { {4 * 1024, 32} },
7005 .block_erase = spi_block_erase_20,
7006 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007007 .eraseblocks = { {64 * 1024, 2} },
7008 .block_erase = spi_block_erase_d8,
7009 }, {
7010 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007011 .block_erase = spi_block_erase_c7,
7012 }
7013 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007014 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007015 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007016 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007017 },
7018
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007019 {
7020 .vendor = "Winbond",
7021 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007022 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007023 .manufacture_id = WINBOND_NEX_ID,
7024 .model_id = W_25X20,
7025 .total_size = 256,
7026 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007027 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007028 .tested = TEST_UNTESTED,
7029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007030 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007031 .block_erasers =
7032 {
7033 {
7034 .eraseblocks = { {4 * 1024, 64} },
7035 .block_erase = spi_block_erase_20,
7036 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007037 .eraseblocks = { {64 * 1024, 4} },
7038 .block_erase = spi_block_erase_d8,
7039 }, {
7040 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007041 .block_erase = spi_block_erase_c7,
7042 }
7043 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007044 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007045 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007046 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007047 },
7048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007049 {
7050 .vendor = "Winbond",
7051 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007052 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007053 .manufacture_id = WINBOND_NEX_ID,
7054 .model_id = W_25X40,
7055 .total_size = 512,
7056 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007057 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007058 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007059 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007060 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007061 .block_erasers =
7062 {
7063 {
7064 .eraseblocks = { {4 * 1024, 128} },
7065 .block_erase = spi_block_erase_20,
7066 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007067 .eraseblocks = { {64 * 1024, 8} },
7068 .block_erase = spi_block_erase_d8,
7069 }, {
7070 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007071 .block_erase = spi_block_erase_c7,
7072 }
7073 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007074 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007075 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007076 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007077 },
7078
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007079 {
7080 .vendor = "Winbond",
7081 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007082 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007083 .manufacture_id = WINBOND_NEX_ID,
7084 .model_id = W_25X80,
7085 .total_size = 1024,
7086 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007087 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007088 .tested = TEST_OK_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,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007091 .block_erasers =
7092 {
7093 {
7094 .eraseblocks = { {4 * 1024, 256} },
7095 .block_erase = spi_block_erase_20,
7096 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007097 .eraseblocks = { {64 * 1024, 16} },
7098 .block_erase = spi_block_erase_d8,
7099 }, {
7100 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007101 .block_erase = spi_block_erase_c7,
7102 }
7103 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007104 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007105 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007106 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007107 },
7108
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007109 {
7110 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007111 .name = "W25x16",
7112 .bustype = CHIP_BUSTYPE_SPI,
7113 .manufacture_id = WINBOND_NEX_ID,
7114 .model_id = W_25X16,
7115 .total_size = 2048,
7116 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007117 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007118 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00007119 .probe = probe_spi_rdid,
7120 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007121 .block_erasers =
7122 {
7123 {
7124 .eraseblocks = { {4 * 1024, 512} },
7125 .block_erase = spi_block_erase_20,
7126 }, {
7127 .eraseblocks = { {32 * 1024, 64} },
7128 .block_erase = spi_block_erase_52,
7129 }, {
7130 .eraseblocks = { {64 * 1024, 32} },
7131 .block_erase = spi_block_erase_d8,
7132 }, {
7133 .eraseblocks = { {2 * 1024 * 1024, 1} },
7134 .block_erase = spi_block_erase_60,
7135 }, {
7136 .eraseblocks = { {2 * 1024 * 1024, 1} },
7137 .block_erase = spi_block_erase_c7,
7138 }
7139 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007140 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007141 .write = spi_chip_write_256,
7142 .read = spi_chip_read,
7143 },
7144
7145 {
7146 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007147 .name = "W25x32",
7148 .bustype = CHIP_BUSTYPE_SPI,
7149 .manufacture_id = WINBOND_NEX_ID,
7150 .model_id = W_25X32,
7151 .total_size = 4096,
7152 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007153 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007154 .tested = TEST_OK_PROBE,
7155 .probe = probe_spi_rdid,
7156 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007157 .block_erasers =
7158 {
7159 {
7160 .eraseblocks = { {4 * 1024, 1024} },
7161 .block_erase = spi_block_erase_20,
7162 }, {
7163 .eraseblocks = { {32 * 1024, 128} },
7164 .block_erase = spi_block_erase_52,
7165 }, {
7166 .eraseblocks = { {64 * 1024, 64} },
7167 .block_erase = spi_block_erase_d8,
7168 }, {
7169 .eraseblocks = { {4 * 1024 * 1024, 1} },
7170 .block_erase = spi_block_erase_60,
7171 }, {
7172 .eraseblocks = { {4 * 1024 * 1024, 1} },
7173 .block_erase = spi_block_erase_c7,
7174 }
7175 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007176 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007177 .write = spi_chip_write_256,
7178 .read = spi_chip_read,
7179 },
7180
7181 {
7182 .vendor = "Winbond",
7183 .name = "W25x64",
7184 .bustype = CHIP_BUSTYPE_SPI,
7185 .manufacture_id = WINBOND_NEX_ID,
7186 .model_id = W_25X64,
7187 .total_size = 8192,
7188 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007189 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007190 .tested = TEST_UNTESTED,
7191 .probe = probe_spi_rdid,
7192 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007193 .block_erasers =
7194 {
7195 {
7196 .eraseblocks = { {4 * 1024, 2048} },
7197 .block_erase = spi_block_erase_20,
7198 }, {
7199 .eraseblocks = { {32 * 1024, 256} },
7200 .block_erase = spi_block_erase_52,
7201 }, {
7202 .eraseblocks = { {64 * 1024, 128} },
7203 .block_erase = spi_block_erase_d8,
7204 }, {
7205 .eraseblocks = { {8 * 1024 * 1024, 1} },
7206 .block_erase = spi_block_erase_60,
7207 }, {
7208 .eraseblocks = { {8 * 1024 * 1024, 1} },
7209 .block_erase = spi_block_erase_c7,
7210 }
7211 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007212 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007213 .write = spi_chip_write_256,
7214 .read = spi_chip_read,
7215 },
7216
7217 {
7218 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007219 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007221 .manufacture_id = WINBOND_ID,
7222 .model_id = W_29C011,
7223 .total_size = 128,
7224 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007225 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00007226 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007227 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007228 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007229 .block_erasers =
7230 {
7231 {
7232 .eraseblocks = { {128 * 1024, 1} },
7233 .block_erase = erase_chip_block_jedec,
7234 }
7235 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007236 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007237 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007238 },
7239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007240 {
7241 .vendor = "Winbond",
7242 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00007243 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007244 .manufacture_id = WINBOND_ID,
7245 .model_id = W_29C020C,
7246 .total_size = 256,
7247 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007248 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007249 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007250 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007251 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007252 .block_erasers =
7253 {
7254 {
7255 .eraseblocks = { {256 * 1024, 1} },
7256 .block_erase = erase_chip_block_jedec,
7257 }
7258 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007259 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007261 },
7262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007263 {
7264 .vendor = "Winbond",
7265 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007267 .manufacture_id = WINBOND_ID,
7268 .model_id = W_29C040P,
7269 .total_size = 512,
7270 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007271 .feature_bits = FEATURE_LONG_RESET,
7272 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007273 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007274 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007275 .block_erasers =
7276 {
7277 {
7278 .eraseblocks = { {512 * 1024, 1} },
7279 .block_erase = erase_chip_block_jedec,
7280 }
7281 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007282 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007283 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007284 },
7285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007286 {
7287 .vendor = "Winbond",
7288 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007289 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007290 .manufacture_id = WINBOND_ID,
7291 .model_id = W_29C011,
7292 .total_size = 128,
7293 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007294 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00007295 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007296 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007297 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007298 .block_erasers =
7299 {
7300 {
7301 .eraseblocks = { {128 * 1024, 1} },
7302 .block_erase = erase_chip_block_jedec,
7303 }
7304 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007305 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007306 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007307 },
7308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007309 {
7310 .vendor = "Winbond",
7311 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007312 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007313 .manufacture_id = WINBOND_ID,
7314 .model_id = W_39V040A,
7315 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007316 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007317 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00007318 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007319 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007320 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007321 .block_erasers =
7322 {
7323 {
7324 .eraseblocks = { {64 * 1024, 8} },
7325 .block_erase = erase_sector_jedec,
7326 }, {
7327 .eraseblocks = { {512 * 1024, 1} },
7328 .block_erase = erase_chip_block_jedec,
7329 }
7330 },
Sean Nelson35727f72010-01-28 23:55:12 +00007331 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007332 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007333 },
7334
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007335 {
7336 .vendor = "Winbond",
7337 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007338 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007339 .manufacture_id = WINBOND_ID,
7340 .model_id = W_39V040B,
7341 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007342 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007343 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00007344 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007345 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007346 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007347 .block_erasers =
7348 {
7349 {
7350 .eraseblocks = { {64 * 1024, 8} },
7351 .block_erase = erase_sector_jedec,
7352 }, {
7353 .eraseblocks = { {512 * 1024, 1} },
7354 .block_erase = erase_chip_block_jedec,
7355 }
7356 },
Sean Nelson35727f72010-01-28 23:55:12 +00007357 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007358 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007359 },
7360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007361 {
7362 .vendor = "Winbond",
7363 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007364 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007365 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00007366 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007367 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007368 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007369 .feature_bits = FEATURE_EITHER_RESET,
7370 .tested = TEST_UNTESTED,
7371 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007372 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007373 .block_erasers =
7374 {
7375 {
7376 .eraseblocks = { {64 * 1024, 8} },
7377 .block_erase = erase_sector_jedec,
7378 }, {
7379 .eraseblocks = { {512 * 1024, 1} },
7380 .block_erase = erase_chip_block_jedec,
7381 }
7382 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007383 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007384 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007385 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007386 },
7387
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007388 {
7389 .vendor = "Winbond",
7390 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007391 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007392 .manufacture_id = WINBOND_ID,
7393 .model_id = W_39V040FA,
7394 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007395 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007396 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00007397 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007398 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007399 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007400 .block_erasers =
7401 {
7402 {
7403 .eraseblocks = { {4 * 1024, 128} },
7404 .block_erase = erase_block_jedec,
7405 }, {
7406 .eraseblocks = { {64 * 1024, 8} },
7407 .block_erase = erase_sector_jedec,
7408 }, {
7409 .eraseblocks = { {512 * 1024, 1} },
7410 .block_erase = erase_chip_block_jedec,
7411 }
7412 },
Michael Karcherc9b63412010-05-30 16:55:18 +00007413 .printlock = printlock_sst_fwhub,
7414 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007415 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007416 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007417 },
7418
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007419 {
7420 .vendor = "Winbond",
7421 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007422 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007423 .manufacture_id = WINBOND_ID,
7424 .model_id = W_39V080A,
7425 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007426 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007427 .feature_bits = FEATURE_EITHER_RESET,
7428 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007429 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007430 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007431 .block_erasers =
7432 {
7433 {
7434 .eraseblocks = { {64 * 1024, 16} },
7435 .block_erase = erase_sector_jedec,
7436 }, {
7437 .eraseblocks = { {1024 * 1024, 1} },
7438 .block_erase = erase_chip_block_jedec,
7439 }
7440 },
Sean Nelson35727f72010-01-28 23:55:12 +00007441 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007442 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007443 },
7444
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007445 {
7446 .vendor = "Winbond",
7447 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00007448 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007449 .manufacture_id = WINBOND_ID,
7450 .model_id = W_49F002U,
7451 .total_size = 256,
7452 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007453 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00007454 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007455 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007456 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007457 .block_erasers =
7458 {
7459 {
7460 .eraseblocks = {
7461 {128 * 1024, 1},
7462 {96 * 1024, 1},
7463 {8 * 1024, 2},
7464 {16 * 1024, 1},
7465 },
7466 .block_erase = erase_sector_jedec,
7467 }, {
7468 .eraseblocks = { {256 * 1024, 1} },
7469 .block_erase = erase_chip_block_jedec,
7470 }
7471 },
Sean Nelson35727f72010-01-28 23:55:12 +00007472 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007473 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007474 },
7475
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007476 {
7477 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007478 .name = "W49F020",
7479 .bustype = CHIP_BUSTYPE_PARALLEL,
7480 .manufacture_id = WINBOND_ID,
7481 .model_id = W_49F020,
7482 .total_size = 256,
7483 .page_size = 128,
7484 .feature_bits = FEATURE_EITHER_RESET,
7485 .tested = TEST_OK_PROBE,
7486 .probe = probe_jedec,
7487 .probe_timing = 10,
7488 .block_erasers =
7489 {
7490 {
7491 .eraseblocks = { {256 * 1024, 1} },
7492 .block_erase = erase_chip_block_jedec,
7493 }
7494 },
7495 .write = write_jedec_1,
7496 .read = read_memmapped,
7497 },
7498
7499 {
7500 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007501 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007502 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007503 .manufacture_id = WINBOND_ID,
7504 .model_id = W_49V002A,
7505 .total_size = 256,
7506 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007507 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007508 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007509 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007510 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007511 .block_erasers =
7512 {
7513 {
7514 .eraseblocks = {
7515 {64 * 1024, 3},
7516 {32 * 1024, 1},
7517 {8 * 1024, 2},
7518 {16 * 1024, 1},
7519 },
7520 .block_erase = erase_sector_jedec,
7521 }, {
7522 .eraseblocks = { {256 * 1024, 1} },
7523 .block_erase = erase_chip_block_jedec,
7524 }
7525 },
Sean Nelson35727f72010-01-28 23:55:12 +00007526 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007527 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007528 },
7529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007530 {
7531 .vendor = "Winbond",
7532 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007533 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007534 .manufacture_id = WINBOND_ID,
7535 .model_id = W_49V002FA,
7536 .total_size = 256,
7537 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007538 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00007539 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007540 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007541 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007542 .block_erasers =
7543 {
7544 {
7545 .eraseblocks = {
7546 {64 * 1024, 3},
7547 {32 * 1024, 1},
7548 {8 * 1024, 2},
7549 {16 * 1024, 1},
7550 },
7551 .block_erase = erase_sector_jedec,
7552 }, {
7553 .eraseblocks = { {256 * 1024, 1} },
7554 .block_erase = erase_chip_block_jedec,
7555 }
7556 },
Sean Nelson35727f72010-01-28 23:55:12 +00007557 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007558 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007559 },
7560
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007561 {
7562 .vendor = "Winbond",
7563 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007564 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007565 .manufacture_id = WINBOND_ID,
7566 .model_id = W_39V080FA,
7567 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007568 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007569 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007570 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007571 .probe = probe_jedec,
7572 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007573 .block_erasers =
7574 {
7575 {
7576 .eraseblocks = { {64 * 1024, 16}, },
7577 .block_erase = erase_sector_jedec,
7578 }, {
7579 .eraseblocks = { {1024 * 1024, 1} },
7580 .block_erase = erase_chip_block_jedec,
7581 }
7582 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007583 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007584 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007585 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007586 },
7587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007588 {
7589 .vendor = "Winbond",
7590 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007591 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007592 .manufacture_id = WINBOND_ID,
7593 .model_id = W_39V080FA_DM,
7594 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007595 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007596 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007597 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007598 .probe = probe_jedec,
7599 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007600 .block_erasers =
7601 {
7602 {
7603 .eraseblocks = { {64 * 1024, 8}, },
7604 .block_erase = erase_sector_jedec,
7605 }, {
7606 .eraseblocks = { {512 * 1024, 1} },
7607 .block_erase = erase_chip_block_jedec,
7608 }
7609 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007610 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007611 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007612 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007613 },
7614
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007615 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007616 .vendor = "AMIC",
7617 .name = "unknown AMIC SPI chip",
7618 .bustype = CHIP_BUSTYPE_SPI,
7619 .manufacture_id = AMIC_ID,
7620 .model_id = GENERIC_DEVICE_ID,
7621 .total_size = 0,
7622 .page_size = 256,
7623 .tested = TEST_BAD_PREW,
7624 .probe = probe_spi_rdid4,
7625 .probe_timing = TIMING_ZERO,
7626 .write = NULL,
7627 .read = NULL,
7628 },
7629
7630 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007631 .vendor = "Atmel",
7632 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007633 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007634 .manufacture_id = ATMEL_ID,
7635 .model_id = GENERIC_DEVICE_ID,
7636 .total_size = 0,
7637 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007638 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007639 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007640 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007641 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007642 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007643 },
7644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007645 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007646 .vendor = "Eon",
7647 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007648 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007649 .manufacture_id = EON_ID_NOPREFIX,
7650 .model_id = GENERIC_DEVICE_ID,
7651 .total_size = 0,
7652 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007653 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007654 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007655 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007656 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007657 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007658 },
7659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007660 {
7661 .vendor = "Macronix",
7662 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007663 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007664 .manufacture_id = MX_ID,
7665 .model_id = GENERIC_DEVICE_ID,
7666 .total_size = 0,
7667 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007668 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007669 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007670 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007671 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007672 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007673 },
7674
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007675 {
7676 .vendor = "PMC",
7677 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007678 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007679 .manufacture_id = PMC_ID,
7680 .model_id = GENERIC_DEVICE_ID,
7681 .total_size = 0,
7682 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007683 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007684 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007685 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007686 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007687 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007688 },
7689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007690 {
7691 .vendor = "SST",
7692 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007693 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007694 .manufacture_id = SST_ID,
7695 .model_id = GENERIC_DEVICE_ID,
7696 .total_size = 0,
7697 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007698 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007699 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007700 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007701 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007702 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007703 },
7704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007705 {
7706 .vendor = "ST",
7707 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007708 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007709 .manufacture_id = ST_ID,
7710 .model_id = GENERIC_DEVICE_ID,
7711 .total_size = 0,
7712 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007713 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007714 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007715 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007716 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007717 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007718 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007719
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007720 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007721 .vendor = "Sanyo",
7722 .name = "unknown Sanyo SPI chip",
7723 .bustype = CHIP_BUSTYPE_SPI,
7724 .manufacture_id = SANYO_ID,
7725 .model_id = GENERIC_DEVICE_ID,
7726 .total_size = 0,
7727 .page_size = 256,
7728 .tested = TEST_BAD_PREW,
7729 .probe = probe_spi_rdid,
7730 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007731 .write = NULL,
7732 .read = NULL,
7733 },
7734
7735 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007736 .vendor = "Generic",
7737 .name = "unknown SPI chip (RDID)",
7738 .bustype = CHIP_BUSTYPE_SPI,
7739 .manufacture_id = GENERIC_MANUF_ID,
7740 .model_id = GENERIC_DEVICE_ID,
7741 .total_size = 0,
7742 .page_size = 256,
7743 .tested = TEST_BAD_PREW,
7744 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007745 .write = NULL,
7746 },
7747 {
7748 .vendor = "Generic",
7749 .name = "unknown SPI chip (REMS)",
7750 .bustype = CHIP_BUSTYPE_SPI,
7751 .manufacture_id = GENERIC_MANUF_ID,
7752 .model_id = GENERIC_DEVICE_ID,
7753 .total_size = 0,
7754 .page_size = 256,
7755 .tested = TEST_BAD_PREW,
7756 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007757 .write = NULL,
7758 },
7759
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007760 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007761};