blob: a071242d25d42b64cddc76ca3758e2b60d90588f [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000278 .vendor = "AMIC",
279 .name = "A25L05PT",
280 .bustype = CHIP_BUSTYPE_SPI,
281 .manufacture_id = AMIC_ID,
282 .model_id = AMIC_A25L05PT,
283 .total_size = 64,
284 .page_size = 256,
285 .tested = TEST_UNTESTED,
286 .probe = probe_spi_rdid4,
287 .probe_timing = TIMING_ZERO,
288 .block_erasers =
289 {
290 {
291 .eraseblocks = {
292 {32 * 1024, 1},
293 {16 * 1024, 1},
294 {8 * 1024, 1},
295 {4 * 1024, 2},
296 },
297 .block_erase = spi_block_erase_d8,
298 }, {
299 .eraseblocks = { {64 * 1024, 1} },
300 .block_erase = spi_block_erase_c7,
301 }
302 },
303 .unlock = spi_disable_blockprotect,
304 .write = spi_chip_write_256,
305 .read = spi_chip_read,
306 },
307
308 {
309 .vendor = "AMIC",
310 .name = "A25L05PU",
311 .bustype = CHIP_BUSTYPE_SPI,
312 .manufacture_id = AMIC_ID,
313 .model_id = AMIC_A25L05PU,
314 .total_size = 64,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid4,
318 .probe_timing = TIMING_ZERO,
319 .block_erasers =
320 {
321 {
322 .eraseblocks = {
323 {4 * 1024, 2},
324 {8 * 1024, 1},
325 {16 * 1024, 1},
326 {32 * 1024, 1},
327 },
328 .block_erase = spi_block_erase_d8,
329 }, {
330 .eraseblocks = { {64 * 1024, 1} },
331 .block_erase = spi_block_erase_c7,
332 }
333 },
334 .unlock = spi_disable_blockprotect,
335 .write = spi_chip_write_256,
336 .read = spi_chip_read,
337 },
338
339 {
340 .vendor = "AMIC",
341 .name = "A25L10PT",
342 .bustype = CHIP_BUSTYPE_SPI,
343 .manufacture_id = AMIC_ID,
344 .model_id = AMIC_A25L10PT,
345 .total_size = 128,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid4,
349 .probe_timing = TIMING_ZERO,
350 .block_erasers =
351 {
352 {
353 .eraseblocks = {
354 {64 * 1024, 1},
355 {32 * 1024, 1},
356 {16 * 1024, 1},
357 {8 * 1024, 1},
358 {4 * 1024, 2},
359 },
360 .block_erase = spi_block_erase_d8,
361 }, {
362 .eraseblocks = { {128 * 1024, 1} },
363 .block_erase = spi_block_erase_c7,
364 }
365 },
366 .unlock = spi_disable_blockprotect,
367 .write = spi_chip_write_256,
368 .read = spi_chip_read,
369 },
370
371 {
372 .vendor = "AMIC",
373 .name = "A25L10PU",
374 .bustype = CHIP_BUSTYPE_SPI,
375 .manufacture_id = AMIC_ID,
376 .model_id = AMIC_A25L10PU,
377 .total_size = 128,
378 .page_size = 256,
379 .tested = TEST_UNTESTED,
380 .probe = probe_spi_rdid4,
381 .probe_timing = TIMING_ZERO,
382 .block_erasers =
383 {
384 {
385 .eraseblocks = {
386 {4 * 1024, 2},
387 {8 * 1024, 1},
388 {16 * 1024, 1},
389 {32 * 1024, 1},
390 {64 * 1024, 1},
391 },
392 .block_erase = spi_block_erase_d8,
393 }, {
394 .eraseblocks = { {128 * 1024, 1} },
395 .block_erase = spi_block_erase_c7,
396 }
397 },
398 .unlock = spi_disable_blockprotect,
399 .write = spi_chip_write_256,
400 .read = spi_chip_read,
401 },
402
403 {
404 .vendor = "AMIC",
405 .name = "A25L20PT",
406 .bustype = CHIP_BUSTYPE_SPI,
407 .manufacture_id = AMIC_ID,
408 .model_id = AMIC_A25L20PT,
409 .total_size = 256,
410 .page_size = 256,
411 .tested = TEST_UNTESTED,
412 .probe = probe_spi_rdid4,
413 .probe_timing = TIMING_ZERO,
414 .block_erasers =
415 {
416 {
417 .eraseblocks = {
418 {64 * 1024, 3},
419 {32 * 1024, 1},
420 {16 * 1024, 1},
421 {8 * 1024, 1},
422 {4 * 1024, 2},
423 },
424 .block_erase = spi_block_erase_d8,
425 }, {
426 .eraseblocks = { {256 * 1024, 1} },
427 .block_erase = spi_block_erase_c7,
428 }
429 },
430 .unlock = spi_disable_blockprotect,
431 .write = spi_chip_write_256,
432 .read = spi_chip_read,
433 },
434
435 {
436 .vendor = "AMIC",
437 .name = "A25L20PU",
438 .bustype = CHIP_BUSTYPE_SPI,
439 .manufacture_id = AMIC_ID,
440 .model_id = AMIC_A25L20PU,
441 .total_size = 256,
442 .page_size = 256,
443 .tested = TEST_UNTESTED,
444 .probe = probe_spi_rdid4,
445 .probe_timing = TIMING_ZERO,
446 .block_erasers =
447 {
448 {
449 .eraseblocks = {
450 {4 * 1024, 2},
451 {8 * 1024, 1},
452 {16 * 1024, 1},
453 {32 * 1024, 1},
454 {64 * 1024, 3},
455 },
456 .block_erase = spi_block_erase_d8,
457 }, {
458 .eraseblocks = { {256 * 1024, 1} },
459 .block_erase = spi_block_erase_c7,
460 }
461 },
462 .unlock = spi_disable_blockprotect,
463 .write = spi_chip_write_256,
464 .read = spi_chip_read,
465 },
466
467 /* The A25L40P{T,U} chips are distinguished by their
468 * erase block layouts, but without any distinction in RDID.
469 * This inexplicable quirk was verified by Rudolf Marek
470 * and discussed on the flashrom mailing list on 2010-07-12.
471 */
472 {
473 .vendor = "AMIC",
474 .name = "A25L40PT",
475 .bustype = CHIP_BUSTYPE_SPI,
476 .manufacture_id = AMIC_ID,
477 .model_id = AMIC_A25L40PT,
478 .total_size = 512,
479 .page_size = 256,
480 .tested = TEST_OK_PRW,
481 .probe = probe_spi_rdid4,
482 .probe_timing = TIMING_ZERO,
483 .block_erasers =
484 {
485 {
486 .eraseblocks = {
487 {64 * 1024, 7},
488 {32 * 1024, 1},
489 {16 * 1024, 1},
490 {8 * 1024, 1},
491 {4 * 1024, 2},
492 },
493 .block_erase = spi_block_erase_d8,
494 }, {
495 .eraseblocks = { {512 * 1024, 1} },
496 .block_erase = spi_block_erase_c7,
497 }
498 },
499 .unlock = spi_disable_blockprotect,
500 .write = spi_chip_write_256,
501 .read = spi_chip_read,
502 },
503
504 {
505 .vendor = "AMIC",
506 .name = "A25L40PU",
507 .bustype = CHIP_BUSTYPE_SPI,
508 .manufacture_id = AMIC_ID,
509 .model_id = AMIC_A25L40PU,
510 .total_size = 512,
511 .page_size = 256,
512 .tested = TEST_OK_PRW,
513 .probe = probe_spi_rdid4,
514 .probe_timing = TIMING_ZERO,
515 .block_erasers =
516 {
517 {
518 .eraseblocks = {
519 {4 * 1024, 2},
520 {8 * 1024, 1},
521 {16 * 1024, 1},
522 {32 * 1024, 1},
523 {64 * 1024, 7},
524 },
525 .block_erase = spi_block_erase_d8,
526 }, {
527 .eraseblocks = { {512 * 1024, 1} },
528 .block_erase = spi_block_erase_c7,
529 }
530 },
531 .unlock = spi_disable_blockprotect,
532 .write = spi_chip_write_256,
533 .read = spi_chip_read,
534 },
535
536 {
537 .vendor = "AMIC",
538 .name = "A25L80P",
539 .bustype = CHIP_BUSTYPE_SPI,
540 .manufacture_id = AMIC_ID,
541 .model_id = AMIC_A25L80P,
542 .total_size = 1024,
543 .page_size = 256,
544 .tested = TEST_OK_PREW,
545 .probe = probe_spi_rdid4,
546 .probe_timing = TIMING_ZERO,
547 .block_erasers =
548 {
549 {
550 .eraseblocks = {
551 {4 * 1024, 2},
552 {8 * 1024, 1},
553 {16 * 1024, 1},
554 {32 * 1024, 1},
555 {64 * 1024, 15},
556 },
557 .block_erase = spi_block_erase_d8,
558 }, {
559 .eraseblocks = { {1024 * 1024, 1} },
560 .block_erase = spi_block_erase_c7,
561 }
562 },
563 .unlock = spi_disable_blockprotect,
564 .write = spi_chip_write_256,
565 .read = spi_chip_read,
566 },
567
568 {
569 .vendor = "AMIC",
570 .name = "A25L16PT",
571 .bustype = CHIP_BUSTYPE_SPI,
572 .manufacture_id = AMIC_ID,
573 .model_id = AMIC_A25L16PT,
574 .total_size = 2048,
575 .page_size = 256,
576 .tested = TEST_UNTESTED,
577 .probe = probe_spi_rdid4,
578 .probe_timing = TIMING_ZERO,
579 .block_erasers =
580 {
581 {
582 .eraseblocks = {
583 {64 * 1024, 31},
584 {32 * 1024, 1},
585 {16 * 1024, 1},
586 {8 * 1024, 1},
587 {4 * 1024, 2},
588 },
589 .block_erase = spi_block_erase_d8,
590 }, {
591 .eraseblocks = { {2048 * 1024, 1} },
592 .block_erase = spi_block_erase_60,
593 }, {
594 .eraseblocks = { {2048 * 1024, 1} },
595 .block_erase = spi_block_erase_c7,
596 }
597 },
598 .unlock = spi_disable_blockprotect,
599 .write = spi_chip_write_256,
600 .read = spi_chip_read,
601 },
602
603 {
604 .vendor = "AMIC",
605 .name = "A25L16PU",
606 .bustype = CHIP_BUSTYPE_SPI,
607 .manufacture_id = AMIC_ID,
608 .model_id = AMIC_A25L16PU,
609 .total_size = 2048,
610 .page_size = 256,
611 .tested = TEST_OK_PRW,
612 .probe = probe_spi_rdid4,
613 .probe_timing = TIMING_ZERO,
614 .block_erasers =
615 {
616 {
617 .eraseblocks = {
618 {4 * 1024, 2},
619 {8 * 1024, 1},
620 {16 * 1024, 1},
621 {32 * 1024, 1},
622 {64 * 1024, 31},
623 },
624 .block_erase = spi_block_erase_d8,
625 }, {
626 .eraseblocks = { {2048 * 1024, 1} },
627 .block_erase = spi_block_erase_60,
628 }, {
629 .eraseblocks = { {2048 * 1024, 1} },
630 .block_erase = spi_block_erase_c7,
631 }
632 },
633 .unlock = spi_disable_blockprotect,
634 .write = spi_chip_write_256,
635 .read = spi_chip_read,
636 },
637
638 {
639 .vendor = "AMIC",
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,
2502 .tested = TEST_UNTESTED,
2503 .probe = probe_spi_rdid,
2504 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002505 .block_erasers =
2506 {
2507 {
2508 .eraseblocks = {
2509 {4 * 1024, 2},
2510 {8 * 1024, 1},
2511 {16 * 1024, 1},
2512 {32 * 1024, 1},
2513 {64 * 1024, 127},
2514 },
2515 .block_erase = spi_block_erase_d8,
2516 }, {
2517 .eraseblocks = { {8 * 1024 * 1024, 1} },
2518 .block_erase = spi_block_erase_c7,
2519 }
2520 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002521 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002522 .write = spi_chip_write_256,
2523 .read = spi_chip_read,
2524 },
2525
2526 {
2527 .vendor = "Eon",
2528 .name = "EN25B64T",
2529 .bustype = CHIP_BUSTYPE_SPI,
2530 .manufacture_id = EON_ID_NOPREFIX,
2531 .model_id = EN_25B64,
2532 .total_size = 8192,
2533 .page_size = 256,
2534 .tested = TEST_UNTESTED,
2535 .probe = probe_spi_rdid,
2536 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002537 .block_erasers =
2538 {
2539 {
2540 .eraseblocks = {
2541 {64 * 1024, 127},
2542 {32 * 1024, 1},
2543 {16 * 1024, 1},
2544 {8 * 1024, 1},
2545 {4 * 1024, 2},
2546 },
2547 .block_erase = spi_block_erase_d8,
2548 }, {
2549 .eraseblocks = { {8 * 1024 * 1024, 1} },
2550 .block_erase = spi_block_erase_c7,
2551 }
2552 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002553 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002554 .write = spi_chip_write_256,
2555 .read = spi_chip_read,
2556 },
2557
2558 {
2559 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002560 .name = "EN25D16",
2561 .bustype = CHIP_BUSTYPE_SPI,
2562 .manufacture_id = EON_ID_NOPREFIX,
2563 .model_id = EN_25D16,
2564 .total_size = 2048,
2565 .page_size = 256,
2566 .tested = TEST_UNTESTED,
2567 .probe = probe_spi_rdid,
2568 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002569 .block_erasers =
2570 {
2571 {
2572 .eraseblocks = { {4 * 1024, 512} },
2573 .block_erase = spi_block_erase_20,
2574 }, {
2575 .eraseblocks = { {64 * 1024, 32} },
2576 .block_erase = spi_block_erase_d8,
2577 }, {
2578 .eraseblocks = { {64 * 1024, 32} },
2579 .block_erase = spi_block_erase_52,
2580 }, {
2581 .eraseblocks = { {2 * 1024 * 1024, 1} },
2582 .block_erase = spi_block_erase_60,
2583 }, {
2584 .eraseblocks = { {2 * 1024 * 1024, 1} },
2585 .block_erase = spi_block_erase_c7,
2586 }
2587 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002588 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002589 .write = spi_chip_write_256,
2590 .read = spi_chip_read,
2591 },
2592
2593 {
2594 .vendor = "Eon",
2595 .name = "EN25F05",
2596 .bustype = CHIP_BUSTYPE_SPI,
2597 .manufacture_id = EON_ID_NOPREFIX,
2598 .model_id = EN_25F05,
2599 .total_size = 64,
2600 .page_size = 256,
2601 .tested = TEST_UNTESTED,
2602 .probe = probe_spi_rdid,
2603 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002604 .block_erasers =
2605 {
2606 {
2607 .eraseblocks = { {4 * 1024, 16} },
2608 .block_erase = spi_block_erase_20,
2609 }, {
2610 .eraseblocks = { {32 * 1024, 2} },
2611 .block_erase = spi_block_erase_d8,
2612 }, {
2613 .eraseblocks = { {32 * 1024, 2} },
2614 .block_erase = spi_block_erase_52,
2615 }, {
2616 .eraseblocks = { {64 * 1024, 1} },
2617 .block_erase = spi_block_erase_60,
2618 }, {
2619 .eraseblocks = { {64 * 1024, 1} },
2620 .block_erase = spi_block_erase_c7,
2621 }
2622 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002623 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002624 .write = spi_chip_write_256,
2625 .read = spi_chip_read,
2626 },
2627
2628 {
2629 .vendor = "Eon",
2630 .name = "EN25F10",
2631 .bustype = CHIP_BUSTYPE_SPI,
2632 .manufacture_id = EON_ID_NOPREFIX,
2633 .model_id = EN_25F10,
2634 .total_size = 128,
2635 .page_size = 256,
2636 .tested = TEST_UNTESTED,
2637 .probe = probe_spi_rdid,
2638 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002639 .block_erasers =
2640 {
2641 {
2642 .eraseblocks = { {4 * 1024, 32} },
2643 .block_erase = spi_block_erase_20,
2644 }, {
2645 .eraseblocks = { {32 * 1024, 4} },
2646 .block_erase = spi_block_erase_d8,
2647 }, {
2648 .eraseblocks = { {32 * 1024, 4} },
2649 .block_erase = spi_block_erase_52,
2650 }, {
2651 .eraseblocks = { {128 * 1024, 1} },
2652 .block_erase = spi_block_erase_60,
2653 }, {
2654 .eraseblocks = { {128 * 1024, 1} },
2655 .block_erase = spi_block_erase_c7,
2656 }
2657 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002658 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002659 .write = spi_chip_write_256,
2660 .read = spi_chip_read,
2661 },
2662
2663 {
2664 .vendor = "Eon",
2665 .name = "EN25F20",
2666 .bustype = CHIP_BUSTYPE_SPI,
2667 .manufacture_id = EON_ID_NOPREFIX,
2668 .model_id = EN_25F20,
2669 .total_size = 256,
2670 .page_size = 256,
2671 .tested = TEST_UNTESTED,
2672 .probe = probe_spi_rdid,
2673 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002674 .block_erasers =
2675 {
2676 {
2677 .eraseblocks = { {4 * 1024, 64} },
2678 .block_erase = spi_block_erase_20,
2679 }, {
2680 .eraseblocks = { {64 * 1024, 4} },
2681 .block_erase = spi_block_erase_d8,
2682 }, {
2683 .eraseblocks = { {64 * 1024, 4} },
2684 .block_erase = spi_block_erase_52,
2685 }, {
2686 .eraseblocks = { {256 * 1024, 1} },
2687 .block_erase = spi_block_erase_60,
2688 }, {
2689 .eraseblocks = { {256 * 1024, 1} },
2690 .block_erase = spi_block_erase_c7,
2691 }
2692 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002693 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002694 .write = spi_chip_write_256,
2695 .read = spi_chip_read,
2696 },
2697
2698 {
2699 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002700 .name = "EN25F40",
2701 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002702 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002703 .model_id = EN_25F40,
2704 .total_size = 512,
2705 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002706 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002707 .probe = probe_spi_rdid,
2708 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002709 .block_erasers =
2710 {
2711 {
Sean Nelson54596372010-01-09 05:30:14 +00002712 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002713 .block_erase = spi_block_erase_20,
2714 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002715 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002716 .block_erase = spi_block_erase_d8,
2717 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002718 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002719 .block_erase = spi_block_erase_60,
2720 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002721 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002722 .block_erase = spi_block_erase_c7,
2723 },
2724 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002725 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002726 .write = spi_chip_write_256,
2727 .read = spi_chip_read,
2728 },
2729
2730 {
2731 .vendor = "Eon",
2732 .name = "EN25F80",
2733 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002734 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002735 .model_id = EN_25F80,
2736 .total_size = 1024,
2737 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002738 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002739 .probe = probe_spi_rdid,
2740 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002741 .block_erasers =
2742 {
2743 {
2744 .eraseblocks = { {4 * 1024, 256} },
2745 .block_erase = spi_block_erase_20,
2746 }, {
2747 .eraseblocks = { {64 * 1024, 16} },
2748 .block_erase = spi_block_erase_d8,
2749 }, {
2750 .eraseblocks = { {1024 * 1024, 1} },
2751 .block_erase = spi_block_erase_60,
2752 }, {
2753 .eraseblocks = { {1024 * 1024, 1} },
2754 .block_erase = spi_block_erase_c7,
2755 }
2756 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002757 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002758 .write = spi_chip_write_256,
2759 .read = spi_chip_read,
2760 },
2761
2762 {
2763 .vendor = "Eon",
2764 .name = "EN25F16",
2765 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002766 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002767 .model_id = EN_25F16,
2768 .total_size = 2048,
2769 .page_size = 256,
2770 .tested = TEST_UNTESTED,
2771 .probe = probe_spi_rdid,
2772 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002773 .block_erasers =
2774 {
2775 {
2776 .eraseblocks = { {4 * 1024, 512} },
2777 .block_erase = spi_block_erase_20,
2778 }, {
2779 .eraseblocks = { {64 * 1024, 32} },
2780 .block_erase = spi_block_erase_d8,
2781 }, {
2782 .eraseblocks = { {2 * 1024 * 1024, 1} },
2783 .block_erase = spi_block_erase_60,
2784 }, {
2785 .eraseblocks = { {2 * 1024 * 1024, 1} },
2786 .block_erase = spi_block_erase_c7,
2787 }
2788 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002789 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002790 .write = spi_chip_write_256,
2791 .read = spi_chip_read,
2792 },
2793
2794 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002795 .vendor = "Eon",
2796 .name = "EN25F32",
2797 .bustype = CHIP_BUSTYPE_SPI,
2798 .manufacture_id = EON_ID_NOPREFIX,
2799 .model_id = EN_25F32,
2800 .total_size = 4096,
2801 .page_size = 256,
2802 .tested = TEST_UNTESTED,
2803 .probe = probe_spi_rdid,
2804 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002805 .block_erasers =
2806 {
2807 {
2808 .eraseblocks = { {4 * 1024, 1024} },
2809 .block_erase = spi_block_erase_20,
2810 }, {
2811 .eraseblocks = { {64 * 1024, 64} },
2812 .block_erase = spi_block_erase_d8,
2813 }, {
2814 .eraseblocks = { {4 * 1024 * 1024, 1} },
2815 .block_erase = spi_block_erase_60,
2816 }, {
2817 .eraseblocks = { {4 * 1024 * 1024, 1} },
2818 .block_erase = spi_block_erase_c7,
2819 }
2820 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002821 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002822 .write = spi_chip_write_256,
2823 .read = spi_chip_read,
2824 },
2825
2826 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002827 .vendor = "Eon",
2828 .name = "EN29F010",
2829 .bustype = CHIP_BUSTYPE_PARALLEL,
2830 .manufacture_id = EON_ID,
2831 .model_id = EN_29F010,
2832 .total_size = 128,
2833 .page_size = 128,
2834 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2835 .tested = TEST_OK_PREW,
2836 .probe = probe_jedec,
2837 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2838 .block_erasers =
2839 {
2840 {
2841 .eraseblocks = { {16 * 1024, 8} },
2842 .block_erase = erase_sector_jedec,
2843 },
2844 {
2845 .eraseblocks = { {128 * 1024, 1} },
2846 .block_erase = erase_chip_block_jedec,
2847 },
2848 },
2849 .write = write_jedec_1,
2850 .read = read_memmapped,
2851 },
2852
2853 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002854 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002855 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002856 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002857 .manufacture_id = EON_ID,
2858 .model_id = EN_29F002B,
2859 .total_size = 256,
2860 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002861 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002862 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002863 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002864 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002865 .block_erasers =
2866 {
2867 {
2868 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002869 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002870 {8 * 1024, 2},
2871 {32 * 1024, 1},
2872 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002873 },
2874 .block_erase = erase_sector_jedec,
2875 }, {
2876 .eraseblocks = { {256 * 1024, 1} },
2877 .block_erase = erase_chip_block_jedec,
2878 },
2879 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002882 },
2883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002884 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002885 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002886 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002887 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 .manufacture_id = EON_ID,
2889 .model_id = EN_29F002T,
2890 .total_size = 256,
2891 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002892 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002893 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002895 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002896 .block_erasers =
2897 {
2898 {
2899 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002900 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002901 {32 * 1024, 1},
2902 {8 * 1024, 2},
2903 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002904 },
2905 .block_erase = erase_sector_jedec,
2906 }, {
2907 .eraseblocks = { {256 * 1024, 1} },
2908 .block_erase = erase_chip_block_jedec,
2909 },
2910 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002911 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002913 },
2914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002915 {
2916 .vendor = "Fujitsu",
2917 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002918 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002919 .manufacture_id = FUJITSU_ID,
2920 .model_id = MBM29F004BC,
2921 .total_size = 512,
2922 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002923 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002924 .tested = TEST_UNTESTED,
2925 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002926 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002927 .block_erasers =
2928 {
2929 {
2930 .eraseblocks = {
2931 {16 * 1024, 1},
2932 {8 * 1024, 2},
2933 {32 * 1024, 1},
2934 {64 * 1024, 7},
2935 },
Sean Nelson35727f72010-01-28 23:55:12 +00002936 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002937 }, {
2938 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002939 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002940 },
2941 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002942 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002943 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002944 },
2945
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 {
2947 .vendor = "Fujitsu",
2948 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002949 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002950 .manufacture_id = FUJITSU_ID,
2951 .model_id = MBM29F004TC,
2952 .total_size = 512,
2953 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002954 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002955 .tested = TEST_UNTESTED,
2956 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002957 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002958 .block_erasers =
2959 {
2960 {
2961 .eraseblocks = {
2962 {64 * 1024, 7},
2963 {32 * 1024, 1},
2964 {8 * 1024, 2},
2965 {16 * 1024, 1},
2966 },
Sean Nelson35727f72010-01-28 23:55:12 +00002967 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002968 }, {
2969 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002970 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002971 },
2972 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002973 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002974 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002975 },
2976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002977 {
Sean Nelson35727f72010-01-28 23:55:12 +00002978 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002979 .vendor = "Fujitsu",
2980 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002981 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002982 .manufacture_id = FUJITSU_ID,
2983 .model_id = MBM29F400BC,
2984 .total_size = 512,
2985 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002986 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002987 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002988 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002989 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002990 .block_erasers =
2991 {
2992 {
2993 .eraseblocks = {
2994 {16 * 1024, 1},
2995 {8 * 1024, 2},
2996 {32 * 1024, 1},
2997 {64 * 1024, 7},
2998 },
2999 .block_erase = block_erase_m29f400bt,
3000 }, {
3001 .eraseblocks = { {512 * 1024, 1} },
3002 .block_erase = block_erase_chip_m29f400bt,
3003 },
3004 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003005 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003006 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003007 },
3008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003009 {
3010 .vendor = "Fujitsu",
3011 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003012 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003013 .manufacture_id = FUJITSU_ID,
3014 .model_id = MBM29F400TC,
3015 .total_size = 512,
3016 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003017 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003018 .tested = TEST_UNTESTED,
3019 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003020 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003021 .block_erasers =
3022 {
3023 {
3024 .eraseblocks = {
3025 {64 * 1024, 7},
3026 {32 * 1024, 1},
3027 {8 * 1024, 2},
3028 {16 * 1024, 1},
3029 },
3030 .block_erase = block_erase_m29f400bt,
3031 }, {
3032 .eraseblocks = { {512 * 1024, 1} },
3033 .block_erase = block_erase_chip_m29f400bt,
3034 },
3035 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003036 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003037 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003038 },
3039
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003040 {
David Borgc96a8bd2010-06-21 16:12:22 +00003041 .vendor = "Hyundai",
3042 .name = "HY29F002T",
3043 .bustype = CHIP_BUSTYPE_PARALLEL,
3044 .manufacture_id = HYUNDAI_ID,
3045 .model_id = HY_29F002T,
3046 .total_size = 256,
3047 .page_size = 256 * 1024,
3048 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3049 .tested = TEST_OK_PREW,
3050 .probe = probe_jedec,
3051 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3052 .block_erasers =
3053 {
3054 {
3055 .eraseblocks = {
3056 {64 * 1024, 3},
3057 {32 * 1024, 1},
3058 {8 * 1024, 2},
3059 {16 * 1024, 1},
3060 },
3061 .block_erase = erase_sector_jedec,
3062 }, {
3063 .eraseblocks = { {256 * 1024, 1} },
3064 .block_erase = erase_chip_block_jedec,
3065 },
3066 },
3067 .write = write_jedec_1,
3068 .read = read_memmapped,
3069 },
3070
3071 {
3072 .vendor = "Hyundai",
3073 .name = "HY29F002B",
3074 .bustype = CHIP_BUSTYPE_PARALLEL,
3075 .manufacture_id = HYUNDAI_ID,
3076 .model_id = HY_29F002B,
3077 .total_size = 256,
3078 .page_size = 256 * 1024,
3079 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3080 .tested = TEST_UNTESTED,
3081 .probe = probe_jedec,
3082 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3083 .block_erasers =
3084 {
3085 {
3086 .eraseblocks = {
3087 {16 * 1024, 1},
3088 {8 * 1024, 2},
3089 {32 * 1024, 1},
3090 {64 * 1024, 3},
3091 },
3092 .block_erase = erase_sector_jedec,
3093 }, {
3094 .eraseblocks = { {256 * 1024, 1} },
3095 .block_erase = erase_chip_block_jedec,
3096 },
3097 },
3098 .write = write_jedec_1,
3099 .read = read_memmapped,
3100 },
3101
3102 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003103 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003104 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003105 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003106 .manufacture_id = INTEL_ID,
3107 .model_id = P28F001BXB,
3108 .total_size = 128,
3109 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003110 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003111 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003112 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003113 .block_erasers =
3114 {
3115 {
3116 .eraseblocks = {
3117 {8 * 1024, 1},
3118 {4 * 1024, 2},
3119 {112 * 1024, 1},
3120 },
Sean Nelson28accc22010-03-19 18:47:06 +00003121 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003122 },
3123 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003124 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003125 .read = read_memmapped,
3126 },
3127
3128 {
3129 .vendor = "Intel",
3130 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003131 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003132 .manufacture_id = INTEL_ID,
3133 .model_id = P28F001BXT,
3134 .total_size = 128,
3135 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003136 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003137 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003138 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003139 .block_erasers =
3140 {
3141 {
3142 .eraseblocks = {
3143 {112 * 1024, 1},
3144 {4 * 1024, 2},
3145 {8 * 1024, 1},
3146 },
Sean Nelson28accc22010-03-19 18:47:06 +00003147 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003148 },
3149 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003150 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003151 .read = read_memmapped,
3152 },
3153
3154 {
3155 .vendor = "Intel",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003156 .name = "28F002BC-T",
3157 .bustype = CHIP_BUSTYPE_PARALLEL,
3158 .manufacture_id = INTEL_ID,
3159 .model_id = P28F002BC,
3160 .total_size = 256,
3161 .page_size = 256 * 1024,
3162 .tested = TEST_UNTESTED,
3163 .probe = probe_82802ab,
3164 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3165 .block_erasers =
3166 {
3167 {
3168 .eraseblocks = {
3169 {128 * 1024, 1},
3170 {96 * 1024, 1},
3171 {8 * 1024, 2},
3172 {16 * 1024, 1},
3173 },
3174 .block_erase = erase_block_82802ab,
3175 },
3176 },
3177 .write = write_82802ab,
3178 .read = read_memmapped,
3179 },
3180
3181 {
3182 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003183 .name = "28F004S5",
3184 .bustype = CHIP_BUSTYPE_PARALLEL,
3185 .manufacture_id = INTEL_ID,
3186 .model_id = E_28F004S5,
3187 .total_size = 512,
3188 .page_size = 256,
3189 .tested = TEST_UNTESTED,
3190 .probe = probe_82802ab,
3191 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003192 .block_erasers =
3193 {
3194 {
3195 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003196 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003197 },
3198 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003199 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003200 .write = write_82802ab,
3201 .read = read_memmapped,
3202 },
3203
3204 {
3205 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00003206 .name = "28F004BV/BE-B",
3207 .bustype = CHIP_BUSTYPE_PARALLEL,
3208 .manufacture_id = INTEL_ID,
3209 .model_id = P28F004BB,
3210 .total_size = 512,
3211 .page_size = 128 * 1024, /* maximal block size */
3212 .tested = TEST_UNTESTED,
3213 .probe = probe_82802ab,
3214 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3215 .block_erasers =
3216 {
3217 {
3218 .eraseblocks = {
3219 {16 * 1024, 1},
3220 {8 * 1024, 2},
3221 {96 * 1024, 1},
3222 {128 * 1024, 3},
3223 },
3224 .block_erase = erase_block_82802ab,
3225 },
3226 },
3227 .write = write_82802ab,
3228 .read = read_memmapped,
3229 },
3230
3231 {
3232 .vendor = "Intel",
3233 .name = "28F004BV/BE-T",
3234 .bustype = CHIP_BUSTYPE_PARALLEL,
3235 .manufacture_id = INTEL_ID,
3236 .model_id = P28F004BT,
3237 .total_size = 512,
3238 .page_size = 128 * 1024, /* maximal block size */
3239 .tested = TEST_UNTESTED,
3240 .probe = probe_82802ab,
3241 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3242 .block_erasers =
3243 {
3244 {
3245 .eraseblocks = {
3246 {128 * 1024, 3},
3247 {96 * 1024, 1},
3248 {8 * 1024, 2},
3249 {16 * 1024, 1},
3250 },
3251 .block_erase = erase_block_82802ab,
3252 },
3253 },
3254 .write = write_82802ab,
3255 .read = read_memmapped,
3256 },
3257
3258 {
3259 .vendor = "Intel",
3260 .name = "28F400BV/CV/CE-B",
3261 .bustype = CHIP_BUSTYPE_PARALLEL,
3262 .manufacture_id = INTEL_ID,
3263 .model_id = P28F400BB,
3264 .total_size = 512,
3265 .page_size = 128 * 1024, /* maximal block size */
3266 .feature_bits = FEATURE_ADDR_SHIFTED,
3267 .tested = TEST_UNTESTED,
3268 .probe = probe_82802ab,
3269 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3270 .block_erasers =
3271 {
3272 {
3273 .eraseblocks = {
3274 {16 * 1024, 1},
3275 {8 * 1024, 2},
3276 {96 * 1024, 1},
3277 {128 * 1024, 3},
3278 },
3279 .block_erase = erase_block_82802ab,
3280 },
3281 },
3282 .write = write_82802ab,
3283 .read = read_memmapped,
3284 },
3285
3286 {
3287 .vendor = "Intel",
3288 .name = "28F400BV/CV/CE-T",
3289 .bustype = CHIP_BUSTYPE_PARALLEL,
3290 .manufacture_id = INTEL_ID,
3291 .model_id = P28F400BT,
3292 .total_size = 512,
3293 .page_size = 128 * 1024, /* maximal block size */
3294 .feature_bits = FEATURE_ADDR_SHIFTED,
3295 .tested = TEST_UNTESTED,
3296 .probe = probe_82802ab,
3297 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3298 .block_erasers =
3299 {
3300 {
3301 .eraseblocks = {
3302 {128 * 1024, 3},
3303 {96 * 1024, 1},
3304 {8 * 1024, 2},
3305 {16 * 1024, 1},
3306 },
3307 .block_erase = erase_block_82802ab,
3308 },
3309 },
3310 .write = write_82802ab,
3311 .read = read_memmapped,
3312 },
3313
3314 {
3315 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003316 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003317 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003318 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003319 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003320 .total_size = 512,
3321 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003322 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003323 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003324 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003325 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003326 .block_erasers =
3327 {
3328 {
3329 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003330 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003331 },
3332 },
Sean Nelson28accc22010-03-19 18:47:06 +00003333 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003334 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003335 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003336 },
3337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003338 {
3339 .vendor = "Intel",
3340 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003341 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003342 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003343 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003344 .total_size = 1024,
3345 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003346 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003347 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003348 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003349 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003350 .block_erasers =
3351 {
3352 {
3353 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003354 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003355 },
3356 },
Sean Nelson28accc22010-03-19 18:47:06 +00003357 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003358 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003359 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003360 },
3361
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003362 {
3363 .vendor = "Macronix",
3364 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003365 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003366 .manufacture_id = MX_ID,
3367 .model_id = MX_25L512,
3368 .total_size = 64,
3369 .page_size = 256,
3370 .tested = TEST_UNTESTED,
3371 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003372 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003373 .block_erasers =
3374 {
3375 {
3376 .eraseblocks = { {4 * 1024, 16} },
3377 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003378 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003379 .eraseblocks = { {64 * 1024, 1} },
3380 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003381 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003382 .eraseblocks = { {64 * 1024, 1} },
3383 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003384 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003385 .eraseblocks = { {64 * 1024, 1} },
3386 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003387 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003388 .eraseblocks = { {64 * 1024, 1} },
3389 .block_erase = spi_block_erase_c7,
3390 },
3391 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003392 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003393 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003394 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003395 },
3396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003397 {
3398 .vendor = "Macronix",
3399 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003400 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003401 .manufacture_id = MX_ID,
3402 .model_id = MX_25L1005,
3403 .total_size = 128,
3404 .page_size = 256,
3405 .tested = TEST_UNTESTED,
3406 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003407 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003408 .block_erasers =
3409 {
3410 {
3411 .eraseblocks = { {4 * 1024, 32} },
3412 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003413 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003414 .eraseblocks = { {64 * 1024, 2} },
3415 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003416 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003417 .eraseblocks = { {128 * 1024, 1} },
3418 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003419 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003420 .eraseblocks = { {128 * 1024, 1} },
3421 .block_erase = spi_block_erase_c7,
3422 },
3423 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003424 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003425 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003426 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003427 },
3428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 {
3430 .vendor = "Macronix",
3431 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003432 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003433 .manufacture_id = MX_ID,
3434 .model_id = MX_25L2005,
3435 .total_size = 256,
3436 .page_size = 256,
3437 .tested = TEST_UNTESTED,
3438 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003439 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003440 .block_erasers =
3441 {
3442 {
3443 .eraseblocks = { {4 * 1024, 64} },
3444 .block_erase = spi_block_erase_20,
3445 }, {
3446 .eraseblocks = { {64 * 1024, 4} },
3447 .block_erase = spi_block_erase_52,
3448 }, {
3449 .eraseblocks = { {64 * 1024, 4} },
3450 .block_erase = spi_block_erase_d8,
3451 }, {
3452 .eraseblocks = { {256 * 1024, 1} },
3453 .block_erase = spi_block_erase_60,
3454 }, {
3455 .eraseblocks = { {256 * 1024, 1} },
3456 .block_erase = spi_block_erase_c7,
3457 },
3458 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003459 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003460 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003461 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003462 },
3463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003464 {
3465 .vendor = "Macronix",
3466 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003467 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 .manufacture_id = MX_ID,
3469 .model_id = MX_25L4005,
3470 .total_size = 512,
3471 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003472 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003473 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003474 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003475 .block_erasers =
3476 {
3477 {
3478 .eraseblocks = { {4 * 1024, 128} },
3479 .block_erase = spi_block_erase_20,
3480 }, {
3481 .eraseblocks = { {64 * 1024, 8} },
3482 .block_erase = spi_block_erase_52,
3483 }, {
3484 .eraseblocks = { {64 * 1024, 8} },
3485 .block_erase = spi_block_erase_d8,
3486 }, {
3487 .eraseblocks = { {512 * 1024, 1} },
3488 .block_erase = spi_block_erase_60,
3489 }, {
3490 .eraseblocks = { {512 * 1024, 1} },
3491 .block_erase = spi_block_erase_c7,
3492 },
3493 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003494 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003495 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003496 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003497 },
3498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003499 {
3500 .vendor = "Macronix",
3501 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003502 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003503 .manufacture_id = MX_ID,
3504 .model_id = MX_25L8005,
3505 .total_size = 1024,
3506 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00003507 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003509 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003510 .block_erasers =
3511 {
3512 {
3513 .eraseblocks = { {4 * 1024, 256} },
3514 .block_erase = spi_block_erase_20,
3515 }, {
3516 .eraseblocks = { {64 * 1024, 16} },
3517 .block_erase = spi_block_erase_52,
3518 }, {
3519 .eraseblocks = { {64 * 1024, 16} },
3520 .block_erase = spi_block_erase_d8,
3521 }, {
3522 .eraseblocks = { {1024 * 1024, 1} },
3523 .block_erase = spi_block_erase_60,
3524 }, {
3525 .eraseblocks = { {1024 * 1024, 1} },
3526 .block_erase = spi_block_erase_c7,
3527 },
3528 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003529 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003530 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003531 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003532 },
3533
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003534 {
3535 .vendor = "Macronix",
3536 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003537 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003538 .manufacture_id = MX_ID,
3539 .model_id = MX_25L1605,
3540 .total_size = 2048,
3541 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003542 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003543 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003544 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003545 .block_erasers =
3546 {
3547 {
3548 .eraseblocks = { {4 * 1024, 512} },
3549 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3550 }, {
3551 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3552 .block_erase = spi_block_erase_52,
3553 }, {
3554 .eraseblocks = { {64 * 1024, 32} },
3555 .block_erase = spi_block_erase_d8,
3556 }, {
3557 .eraseblocks = { {2 * 1024 * 1024, 1} },
3558 .block_erase = spi_block_erase_60,
3559 }, {
3560 .eraseblocks = { {2 * 1024 * 1024, 1} },
3561 .block_erase = spi_block_erase_c7,
3562 },
3563 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003564 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003565 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003566 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003567 },
3568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003569 {
3570 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003571 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003572 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003573 .manufacture_id = MX_ID,
3574 .model_id = MX_25L1635D,
3575 .total_size = 2048,
3576 .page_size = 256,
3577 .tested = TEST_UNTESTED,
3578 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003579 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003580 .block_erasers =
3581 {
3582 {
3583 .eraseblocks = { {4 * 1024, 512} },
3584 .block_erase = spi_block_erase_20,
3585 }, {
3586 .eraseblocks = { {64 * 1024, 32} },
3587 .block_erase = spi_block_erase_d8,
3588 }, {
3589 .eraseblocks = { {2 * 1024 * 1024, 1} },
3590 .block_erase = spi_block_erase_60,
3591 }, {
3592 .eraseblocks = { {2 * 1024 * 1024, 1} },
3593 .block_erase = spi_block_erase_c7,
3594 }
3595 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003596 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003597 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003598 .read = spi_chip_read,
3599 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003600
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003601 {
3602 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003603 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003605 .manufacture_id = MX_ID,
3606 .model_id = MX_25L3205,
3607 .total_size = 4096,
3608 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003609 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003611 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003612 .block_erasers =
3613 {
3614 {
3615 .eraseblocks = { {4 * 1024, 1024} },
3616 .block_erase = spi_block_erase_20,
3617 }, {
3618 .eraseblocks = { {4 * 1024, 1024} },
3619 .block_erase = spi_block_erase_d8,
3620 }, {
3621 .eraseblocks = { {4 * 1024 * 1024, 1} },
3622 .block_erase = spi_block_erase_60,
3623 }, {
3624 .eraseblocks = { {4 * 1024 * 1024, 1} },
3625 .block_erase = spi_block_erase_c7,
3626 },
3627 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003628 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003629 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003630 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003631 },
3632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 {
3634 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003635 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003636 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003637 .manufacture_id = MX_ID,
3638 .model_id = MX_25L3235D,
3639 .total_size = 4096,
3640 .page_size = 256,
3641 .tested = TEST_UNTESTED,
3642 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003643 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003644 .block_erasers =
3645 {
3646 {
3647 .eraseblocks = { {4 * 1024, 1024} },
3648 .block_erase = spi_block_erase_20,
3649 }, {
3650 .eraseblocks = { {64 * 1024, 64} },
3651 .block_erase = spi_block_erase_d8,
3652 }, {
3653 .eraseblocks = { {4 * 1024 * 1024, 1} },
3654 .block_erase = spi_block_erase_60,
3655 }, {
3656 .eraseblocks = { {4 * 1024 * 1024, 1} },
3657 .block_erase = spi_block_erase_c7,
3658 }
3659 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003660 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003661 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003662 .read = spi_chip_read,
3663 },
3664
3665 {
3666 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003667 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003668 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003669 .manufacture_id = MX_ID,
3670 .model_id = MX_25L6405,
3671 .total_size = 8192,
3672 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003673 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003674 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003675 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003676 .block_erasers =
3677 {
3678 {
3679 .eraseblocks = { {64 * 1024, 128} },
3680 .block_erase = spi_block_erase_20,
3681 }, {
3682 .eraseblocks = { {64 * 1024, 128} },
3683 .block_erase = spi_block_erase_d8,
3684 }, {
3685 .eraseblocks = { {8 * 1024 * 1024, 1} },
3686 .block_erase = spi_block_erase_60,
3687 }, {
3688 .eraseblocks = { {8 * 1024 * 1024, 1} },
3689 .block_erase = spi_block_erase_c7,
3690 }
3691 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003692 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003693 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003694 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003695 },
3696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003697 {
3698 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003699 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003700 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003701 .manufacture_id = MX_ID,
3702 .model_id = MX_25L12805,
3703 .total_size = 16384,
3704 .page_size = 256,
3705 .tested = TEST_UNTESTED,
3706 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003707 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003708 .block_erasers =
3709 {
3710 {
3711 .eraseblocks = { {4 * 1024, 4096} },
3712 .block_erase = spi_block_erase_20,
3713 }, {
3714 .eraseblocks = { {64 * 1024, 256} },
3715 .block_erase = spi_block_erase_d8,
3716 }, {
3717 .eraseblocks = { {16 * 1024 * 1024, 1} },
3718 .block_erase = spi_block_erase_60,
3719 }, {
3720 .eraseblocks = { {16 * 1024 * 1024, 1} },
3721 .block_erase = spi_block_erase_c7,
3722 }
3723 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003724 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003725 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003726 .read = spi_chip_read,
3727 },
3728
3729 {
3730 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003731 .name = "MX29F001B",
3732 .bustype = CHIP_BUSTYPE_PARALLEL,
3733 .manufacture_id = MX_ID,
3734 .model_id = MX_29F001B,
3735 .total_size = 128,
3736 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003737 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3738 .tested = TEST_UNTESTED,
3739 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003740 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003741 .block_erasers =
3742 {
3743 {
3744 .eraseblocks = {
3745 {8 * 1024, 1},
3746 {4 * 1024, 2},
3747 {8 * 1024, 2},
3748 {32 * 1024, 1},
3749 {64 * 1024, 1},
3750 },
Sean Nelson35727f72010-01-28 23:55:12 +00003751 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003752 }, {
3753 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003754 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003755 }
3756 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003757 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003758 .read = read_memmapped,
3759 },
3760
3761 {
3762 .vendor = "Macronix",
3763 .name = "MX29F001T",
3764 .bustype = CHIP_BUSTYPE_PARALLEL,
3765 .manufacture_id = MX_ID,
3766 .model_id = MX_29F001T,
3767 .total_size = 128,
3768 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003769 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3770 .tested = TEST_UNTESTED,
3771 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003772 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003773 .block_erasers =
3774 {
3775 {
3776 .eraseblocks = {
3777 {64 * 1024, 1},
3778 {32 * 1024, 1},
3779 {8 * 1024, 2},
3780 {4 * 1024, 2},
3781 {8 * 1024, 1},
3782 },
Sean Nelson35727f72010-01-28 23:55:12 +00003783 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003784 }, {
3785 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003786 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003787 }
3788 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003789 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003790 .read = read_memmapped,
3791 },
3792
3793 {
3794 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003795 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003796 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003797 .manufacture_id = MX_ID,
3798 .model_id = MX_29F002B,
3799 .total_size = 256,
3800 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003801 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003802 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003803 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003804 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003805 .block_erasers =
3806 {
3807 {
3808 .eraseblocks = {
3809 {16 * 1024, 1},
3810 {8 * 1024, 2},
3811 {32 * 1024, 1},
3812 {64 * 1024, 3},
3813 },
Sean Nelson35727f72010-01-28 23:55:12 +00003814 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003815 }, {
3816 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003817 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003818 },
3819 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003820 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003821 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003822 },
3823
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003824 {
3825 .vendor = "Macronix",
3826 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003827 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003828 .manufacture_id = MX_ID,
3829 .model_id = MX_29F002T,
3830 .total_size = 256,
3831 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003832 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003833 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003834 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003835 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003836 .block_erasers =
3837 {
3838 {
3839 .eraseblocks = {
3840 {64 * 1024, 3},
3841 {32 * 1024, 1},
3842 {8 * 1024, 2},
3843 {16 * 1024, 1},
3844 },
Sean Nelson35727f72010-01-28 23:55:12 +00003845 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003846 }, {
3847 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003848 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003849 },
3850 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003851 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003853 },
3854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003855 {
3856 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003857 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003860 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 .total_size = 512,
3862 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003863 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3864 .tested = TEST_UNTESTED,
3865 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003866 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003867 .block_erasers =
3868 {
3869 {
3870 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003871 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003872 }, {
3873 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003874 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003875 },
3876 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003877 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003878 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003879 },
3880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003881 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00003882 .vendor = "MoselVitelic",
3883 .name = "V29C51000B",
3884 .bustype = CHIP_BUSTYPE_PARALLEL,
3885 .manufacture_id = SYNCMOS_MVC_ID,
3886 .model_id = MVC_V29C51000B,
3887 .total_size = 64,
3888 .page_size = 512,
3889 .feature_bits = FEATURE_EITHER_RESET,
3890 .tested = TEST_UNTESTED,
3891 .probe = probe_jedec,
3892 .probe_timing = TIMING_ZERO,
3893 .block_erasers =
3894 {
3895 {
3896 .eraseblocks = { {512, 128} },
3897 .block_erase = erase_sector_jedec,
3898 }, {
3899 .eraseblocks = { {64 * 1024, 1} },
3900 .block_erase = erase_chip_block_jedec,
3901 },
3902 },
3903 .write = write_jedec_1,
3904 .read = read_memmapped,
3905 },
3906
3907 {
3908 .vendor = "MoselVitelic",
3909 .name = "V29C51000T",
3910 .bustype = CHIP_BUSTYPE_PARALLEL,
3911 .manufacture_id = SYNCMOS_MVC_ID,
3912 .model_id = MVC_V29C51000T,
3913 .total_size = 64,
3914 .page_size = 512,
3915 .feature_bits = FEATURE_EITHER_RESET,
3916 .tested = TEST_UNTESTED,
3917 .probe = probe_jedec,
3918 .probe_timing = TIMING_ZERO,
3919 .block_erasers =
3920 {
3921 {
3922 .eraseblocks = { {512, 128} },
3923 .block_erase = erase_sector_jedec,
3924 }, {
3925 .eraseblocks = { {64 * 1024, 1} },
3926 .block_erase = erase_chip_block_jedec,
3927 },
3928 },
3929 .write = write_jedec_1,
3930 .read = read_memmapped,
3931 },
3932
3933 {
3934 .vendor = "MoselVitelic",
3935 .name = "V29C51400B",
3936 .bustype = CHIP_BUSTYPE_PARALLEL,
3937 .manufacture_id = SYNCMOS_MVC_ID,
3938 .model_id = MVC_V29C51400B,
3939 .total_size = 512,
3940 .page_size = 1024,
3941 .feature_bits = FEATURE_EITHER_RESET,
3942 .tested = TEST_UNTESTED,
3943 .probe = probe_jedec,
3944 .probe_timing = TIMING_ZERO,
3945 .block_erasers =
3946 {
3947 {
3948 .eraseblocks = { {1024, 512} },
3949 .block_erase = erase_sector_jedec,
3950 }, {
3951 .eraseblocks = { {512 * 1024, 1} },
3952 .block_erase = erase_chip_block_jedec,
3953 },
3954 },
3955 .write = write_jedec_1,
3956 .read = read_memmapped,
3957 },
3958
3959 {
3960 .vendor = "MoselVitelic",
3961 .name = "V29C51400T",
3962 .bustype = CHIP_BUSTYPE_PARALLEL,
3963 .manufacture_id = SYNCMOS_MVC_ID,
3964 .model_id = MVC_V29C51400T,
3965 .total_size = 512,
3966 .page_size = 1024,
3967 .feature_bits = FEATURE_EITHER_RESET,
3968 .tested = TEST_UNTESTED,
3969 .probe = probe_jedec,
3970 .probe_timing = TIMING_ZERO,
3971 .block_erasers =
3972 {
3973 {
3974 .eraseblocks = { {1024, 512} },
3975 .block_erase = erase_sector_jedec,
3976 }, {
3977 .eraseblocks = { {512 * 1024, 1} },
3978 .block_erase = erase_chip_block_jedec,
3979 },
3980 },
3981 .write = write_jedec_1,
3982 .read = read_memmapped,
3983 },
3984
3985 {
3986 .vendor = "MoselVitelic",
3987 .name = "V29LC51000",
3988 .bustype = CHIP_BUSTYPE_PARALLEL,
3989 .manufacture_id = SYNCMOS_MVC_ID,
3990 .model_id = MVC_V29LC51000,
3991 .total_size = 64,
3992 .page_size = 512,
3993 .feature_bits = FEATURE_EITHER_RESET,
3994 .tested = TEST_UNTESTED,
3995 .probe = probe_jedec,
3996 .probe_timing = TIMING_ZERO,
3997 .block_erasers =
3998 {
3999 {
4000 .eraseblocks = { {512, 128} },
4001 .block_erase = erase_sector_jedec,
4002 }, {
4003 .eraseblocks = { {64 * 1024, 1} },
4004 .block_erase = erase_chip_block_jedec,
4005 },
4006 },
4007 .write = write_jedec_1,
4008 .read = read_memmapped,
4009 },
4010
4011 {
4012 .vendor = "MoselVitelic",
4013 .name = "V29LC51001",
4014 .bustype = CHIP_BUSTYPE_PARALLEL,
4015 .manufacture_id = SYNCMOS_MVC_ID,
4016 .model_id = MVC_V29LC51001,
4017 .total_size = 128,
4018 .page_size = 512,
4019 .feature_bits = FEATURE_EITHER_RESET,
4020 .tested = TEST_UNTESTED,
4021 .probe = probe_jedec,
4022 .probe_timing = TIMING_ZERO,
4023 .block_erasers =
4024 {
4025 {
4026 .eraseblocks = { {512, 256} },
4027 .block_erase = erase_sector_jedec,
4028 }, {
4029 .eraseblocks = { {128 * 1024, 1} },
4030 .block_erase = erase_chip_block_jedec,
4031 },
4032 },
4033 .write = write_jedec_1,
4034 .read = read_memmapped,
4035 },
4036
4037 {
4038 .vendor = "MoselVitelic",
4039 .name = "V29LC51002",
4040 .bustype = CHIP_BUSTYPE_PARALLEL,
4041 .manufacture_id = SYNCMOS_MVC_ID,
4042 .model_id = MVC_V29LC51002,
4043 .total_size = 256,
4044 .page_size = 512,
4045 .feature_bits = FEATURE_EITHER_RESET,
4046 .tested = TEST_UNTESTED,
4047 .probe = probe_jedec,
4048 .probe_timing = TIMING_ZERO,
4049 .block_erasers =
4050 {
4051 {
4052 .eraseblocks = { {512, 512} },
4053 .block_erase = erase_sector_jedec,
4054 }, {
4055 .eraseblocks = { {256 * 1024, 1} },
4056 .block_erase = erase_chip_block_jedec,
4057 },
4058 },
4059 .write = write_jedec_1,
4060 .read = read_memmapped,
4061 },
4062
4063 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004064 .vendor = "Numonyx",
4065 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004066 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004067 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004068 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004069 .total_size = 128,
4070 .page_size = 256,
4071 .tested = TEST_UNTESTED,
4072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004073 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004074 .block_erasers =
4075 {
4076 {
4077 .eraseblocks = { {4 * 1024, 32} },
4078 .block_erase = spi_block_erase_20,
4079 }, {
4080 .eraseblocks = { {64 * 1024, 2} },
4081 .block_erase = spi_block_erase_d8,
4082 }, {
4083 .eraseblocks = { {128 * 1024, 1} },
4084 .block_erase = spi_block_erase_c7,
4085 }
4086 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004087 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004088 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004089 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004090 },
4091
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004092 {
4093 .vendor = "Numonyx",
4094 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004095 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004096 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004097 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004098 .total_size = 256,
4099 .page_size = 256,
4100 .tested = TEST_UNTESTED,
4101 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004102 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004103 .block_erasers =
4104 {
4105 {
4106 .eraseblocks = { {4 * 1024, 64} },
4107 .block_erase = spi_block_erase_20,
4108 }, {
4109 .eraseblocks = { {64 * 1024, 4} },
4110 .block_erase = spi_block_erase_d8,
4111 }, {
4112 .eraseblocks = { {256 * 1024, 1} },
4113 .block_erase = spi_block_erase_c7,
4114 }
4115 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004116 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004117 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004118 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004119 },
4120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004121 {
4122 .vendor = "Numonyx",
4123 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004124 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004125 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004126 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00004127 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004128 .page_size = 256,
4129 .tested = TEST_UNTESTED,
4130 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004131 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004132 .block_erasers =
4133 {
4134 {
4135 .eraseblocks = { {4 * 1024, 128} },
4136 .block_erase = spi_block_erase_20,
4137 }, {
4138 .eraseblocks = { {64 * 1024, 8} },
4139 .block_erase = spi_block_erase_d8,
4140 }, {
4141 .eraseblocks = { {512 * 1024, 1} },
4142 .block_erase = spi_block_erase_c7,
4143 }
4144 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004145 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004146 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004147 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004148 },
4149
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004150 {
4151 .vendor = "Numonyx",
4152 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004153 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004154 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004155 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004156 .total_size = 1024,
4157 .page_size = 256,
4158 .tested = TEST_OK_PREW,
4159 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004160 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004161 .block_erasers =
4162 {
4163 {
4164 .eraseblocks = { {4 * 1024, 256} },
4165 .block_erase = spi_block_erase_20,
4166 }, {
4167 .eraseblocks = { {64 * 1024, 16} },
4168 .block_erase = spi_block_erase_d8,
4169 }, {
4170 .eraseblocks = { {1024 * 1024, 1} },
4171 .block_erase = spi_block_erase_c7,
4172 }
4173 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004174 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004175 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004176 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004177 },
4178
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004179 {
4180 .vendor = "Numonyx",
4181 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004182 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004183 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004184 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004185 .total_size = 2048,
4186 .page_size = 256,
4187 .tested = TEST_UNTESTED,
4188 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004189 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004190 .block_erasers =
4191 {
4192 {
4193 .eraseblocks = { {4 * 1024, 512} },
4194 .block_erase = spi_block_erase_20,
4195 }, {
4196 .eraseblocks = { {64 * 1024, 32} },
4197 .block_erase = spi_block_erase_d8,
4198 }, {
4199 .eraseblocks = { {2 * 1024 * 1024, 1} },
4200 .block_erase = spi_block_erase_c7,
4201 }
4202 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004203 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004204 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004205 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004206 },
4207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004208 {
4209 .vendor = "PMC",
4210 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004211 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004212 .manufacture_id = PMC_ID,
4213 .model_id = PMC_25LV010,
4214 .total_size = 128,
4215 .page_size = 256,
4216 .tested = TEST_UNTESTED,
4217 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004218 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004219 .block_erasers =
4220 {
4221 {
4222 .eraseblocks = { {4 * 1024, 32} },
4223 .block_erase = spi_block_erase_d7,
4224 }, {
4225 .eraseblocks = { {32 * 1024, 4} },
4226 .block_erase = spi_block_erase_d8,
4227 }, {
4228 .eraseblocks = { {128 * 1024, 1} },
4229 .block_erase = spi_block_erase_c7,
4230 }
4231 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004232 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004233 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004234 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004235 },
4236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004237 {
4238 .vendor = "PMC",
4239 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004240 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004241 .manufacture_id = PMC_ID,
4242 .model_id = PMC_25LV016B,
4243 .total_size = 2048,
4244 .page_size = 256,
4245 .tested = TEST_UNTESTED,
4246 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004247 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004248 .block_erasers =
4249 {
4250 {
4251 .eraseblocks = { {4 * 1024, 512} },
4252 .block_erase = spi_block_erase_d7,
4253 }, {
4254 .eraseblocks = { {4 * 1024, 512} },
4255 .block_erase = spi_block_erase_20,
4256 }, {
4257 .eraseblocks = { {64 * 1024, 32} },
4258 .block_erase = spi_block_erase_d8,
4259 }, {
4260 .eraseblocks = { {2 * 1024 * 1024, 1} },
4261 .block_erase = spi_block_erase_60,
4262 }, {
4263 .eraseblocks = { {2 * 1024 * 1024, 1} },
4264 .block_erase = spi_block_erase_c7,
4265 }
4266 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004267 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004268 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004269 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004270 },
4271
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004272 {
4273 .vendor = "PMC",
4274 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004275 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004276 .manufacture_id = PMC_ID,
4277 .model_id = PMC_25LV020,
4278 .total_size = 256,
4279 .page_size = 256,
4280 .tested = TEST_UNTESTED,
4281 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004282 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004283 .block_erasers =
4284 {
4285 {
4286 .eraseblocks = { {4 * 1024, 64} },
4287 .block_erase = spi_block_erase_d7,
4288 }, {
4289 .eraseblocks = { {64 * 1024, 4} },
4290 .block_erase = spi_block_erase_d8,
4291 }, {
4292 .eraseblocks = { {256 * 1024, 1} },
4293 .block_erase = spi_block_erase_c7,
4294 }
4295 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004296 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004297 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004298 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004299 },
4300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004301 {
4302 .vendor = "PMC",
4303 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004304 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004305 .manufacture_id = PMC_ID,
4306 .model_id = PMC_25LV040,
4307 .total_size = 512,
4308 .page_size = 256,
4309 .tested = TEST_UNTESTED,
4310 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004311 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004312 .block_erasers =
4313 {
4314 {
4315 .eraseblocks = { {4 * 1024, 128} },
4316 .block_erase = spi_block_erase_d7,
4317 }, {
4318 .eraseblocks = { {64 * 1024, 8} },
4319 .block_erase = spi_block_erase_d8,
4320 }, {
4321 .eraseblocks = { {512 * 1024, 1} },
4322 .block_erase = spi_block_erase_c7,
4323 }
4324 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004325 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004326 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004327 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004328 },
4329
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004330 {
4331 .vendor = "PMC",
4332 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004333 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004334 .manufacture_id = PMC_ID,
4335 .model_id = PMC_25LV080B,
4336 .total_size = 1024,
4337 .page_size = 256,
4338 .tested = TEST_UNTESTED,
4339 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004340 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004341 .block_erasers =
4342 {
4343 {
4344 .eraseblocks = { {4 * 1024, 256} },
4345 .block_erase = spi_block_erase_d7,
4346 }, {
4347 .eraseblocks = { {4 * 1024, 256} },
4348 .block_erase = spi_block_erase_20,
4349 }, {
4350 .eraseblocks = { {64 * 1024, 16} },
4351 .block_erase = spi_block_erase_d8,
4352 }, {
4353 .eraseblocks = { {1024 * 1024, 1} },
4354 .block_erase = spi_block_erase_60,
4355 }, {
4356 .eraseblocks = { {1024 * 1024, 1} },
4357 .block_erase = spi_block_erase_c7,
4358 }
4359 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004360 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004361 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004362 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004363 },
4364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004365 {
4366 .vendor = "PMC",
4367 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004368 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004369 .manufacture_id = PMC_ID,
4370 .model_id = PMC_25LV512,
4371 .total_size = 64,
4372 .page_size = 256,
4373 .tested = TEST_UNTESTED,
4374 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004375 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004376 .block_erasers =
4377 {
4378 {
4379 .eraseblocks = { {4 * 1024, 16} },
4380 .block_erase = spi_block_erase_d7,
4381 }, {
4382 .eraseblocks = { {32 * 1024, 2} },
4383 .block_erase = spi_block_erase_d8,
4384 }, {
4385 .eraseblocks = { {64 * 1024, 1} },
4386 .block_erase = spi_block_erase_c7,
4387 }
4388 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004389 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004390 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004391 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004392 },
4393
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004394 {
4395 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004396 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004397 .bustype = CHIP_BUSTYPE_PARALLEL,
4398 .manufacture_id = PMC_ID_NOPREFIX,
4399 .model_id = PMC_29F002T,
4400 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004401 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004402 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4403 .tested = TEST_UNTESTED,
4404 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004405 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004406 .block_erasers =
4407 {
4408 {
4409 .eraseblocks = {
4410 {128 * 1024, 1},
4411 {96 * 1024, 1},
4412 {8 * 1024, 2},
4413 {16 * 1024, 1},
4414 },
Sean Nelson35727f72010-01-28 23:55:12 +00004415 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004416 }, {
4417 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004418 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004419 },
4420 },
Sean Nelson35727f72010-01-28 23:55:12 +00004421 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004422 .read = read_memmapped,
4423 },
4424
4425 {
4426 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004427 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004428 .bustype = CHIP_BUSTYPE_PARALLEL,
4429 .manufacture_id = PMC_ID_NOPREFIX,
4430 .model_id = PMC_29F002B,
4431 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004432 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004433 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004434 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004435 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004436 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004437 .block_erasers =
4438 {
4439 {
4440 .eraseblocks = {
4441 {16 * 1024, 1},
4442 {8 * 1024, 2},
4443 {96 * 1024, 1},
4444 {128 * 1024, 1},
4445 },
Sean Nelson35727f72010-01-28 23:55:12 +00004446 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004447 }, {
4448 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004449 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004450 },
4451 },
Sean Nelson35727f72010-01-28 23:55:12 +00004452 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004453 .read = read_memmapped,
4454 },
4455
4456 {
4457 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004458 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004459 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004460 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004461 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004462 .total_size = 128,
4463 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004464 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004465 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004466 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004467 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004468 .block_erasers =
4469 {
4470 {
4471 .eraseblocks = { {4 * 1024, 32} },
4472 .block_erase = erase_sector_jedec,
4473 }, {
4474 .eraseblocks = { {64 * 1024, 2} },
4475 .block_erase = erase_block_jedec,
4476 }, {
4477 .eraseblocks = { {128 * 1024, 1} },
4478 .block_erase = erase_chip_block_jedec,
4479 }
4480 },
Sean Nelson35727f72010-01-28 23:55:12 +00004481 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004482 .read = read_memmapped,
4483 },
4484
4485 {
4486 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004487 .name = "Pm39LV020",
4488 .bustype = CHIP_BUSTYPE_PARALLEL,
4489 .manufacture_id = PMC_ID_NOPREFIX,
4490 .model_id = PMC_39LV020,
4491 .total_size = 256,
4492 .page_size = 4096,
4493 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4494 .tested = TEST_UNTESTED,
4495 .probe = probe_jedec,
4496 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4497 .block_erasers =
4498 {
4499 {
4500 .eraseblocks = { {4 * 1024, 64} },
4501 .block_erase = erase_sector_jedec,
4502 }, {
4503 .eraseblocks = { {64 * 1024, 4} },
4504 .block_erase = erase_block_jedec,
4505 }, {
4506 .eraseblocks = { {256 * 1024, 1} },
4507 .block_erase = erase_chip_block_jedec,
4508 }
4509 },
4510 .write = write_jedec_1,
4511 .read = read_memmapped,
4512 },
4513
4514 {
4515 .vendor = "PMC",
4516 .name = "Pm39LV040",
4517 .bustype = CHIP_BUSTYPE_PARALLEL,
4518 .manufacture_id = PMC_ID_NOPREFIX,
4519 .model_id = PMC_39LV040,
4520 .total_size = 512,
4521 .page_size = 4096,
4522 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4523 .tested = TEST_UNTESTED,
4524 .probe = probe_jedec,
4525 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4526 .block_erasers =
4527 {
4528 {
4529 .eraseblocks = { {4 * 1024, 128} },
4530 .block_erase = erase_sector_jedec,
4531 }, {
4532 .eraseblocks = { {64 * 1024, 8} },
4533 .block_erase = erase_block_jedec,
4534 }, {
4535 .eraseblocks = { {512 * 1024, 1} },
4536 .block_erase = erase_chip_block_jedec,
4537 }
4538 },
4539 .write = write_jedec_1,
4540 .read = read_memmapped,
4541 },
4542
4543 {
4544 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004545 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00004546 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004547 .manufacture_id = PMC_ID_NOPREFIX,
4548 .model_id = PMC_49FL002,
4549 .total_size = 256,
4550 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004551 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004552 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004553 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004554 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004555 .block_erasers =
4556 {
4557 {
4558 .eraseblocks = { {4 * 1024, 64} },
4559 .block_erase = erase_sector_jedec,
4560 }, {
4561 .eraseblocks = { {16 * 1024, 16} },
4562 .block_erase = erase_block_jedec,
4563 }, {
4564 .eraseblocks = { {256 * 1024, 1} },
4565 .block_erase = erase_chip_block_jedec,
4566 }
4567 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004568 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004569 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004570 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004571 },
4572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004573 {
4574 .vendor = "PMC",
4575 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00004576 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004577 .manufacture_id = PMC_ID_NOPREFIX,
4578 .model_id = PMC_49FL004,
4579 .total_size = 512,
4580 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004581 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004582 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004583 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004584 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004585 .block_erasers =
4586 {
4587 {
4588 .eraseblocks = { {4 * 1024, 128} },
4589 .block_erase = erase_sector_jedec,
4590 }, {
4591 .eraseblocks = { {64 * 1024, 8} },
4592 .block_erase = erase_block_jedec,
4593 }, {
4594 .eraseblocks = { {512 * 1024, 1} },
4595 .block_erase = erase_chip_block_jedec,
4596 }
4597 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004598 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004599 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004601 },
4602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004603 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004604 .vendor = "Sanyo",
4605 .name = "LF25FW203A",
4606 .bustype = CHIP_BUSTYPE_SPI,
4607 .manufacture_id = SANYO_ID,
4608 .model_id = SANYO_LE25FW203A,
4609 .total_size = 2048,
4610 .page_size = 256,
4611 .tested = TEST_UNTESTED,
4612 .probe = probe_spi_rdid,
4613 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004614 .block_erasers =
4615 {
4616 {
4617 .eraseblocks = { {64 * 1024, 32} },
4618 .block_erase = spi_block_erase_d8,
4619 }, {
4620 .eraseblocks = { {2 * 1024 * 1024, 1} },
4621 .block_erase = spi_block_erase_c7,
4622 }
4623 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004624 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004625 .write = spi_chip_write_256,
4626 .read = spi_chip_read,
4627 },
4628
4629 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004630 .vendor = "Sharp",
4631 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004632 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004633 .manufacture_id = SHARP_ID,
4634 .model_id = SHARP_LHF00L04,
4635 .total_size = 1024,
4636 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004637 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004639 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004640 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004641 .block_erasers =
4642 {
4643 {
4644 .eraseblocks = {
4645 {64 * 1024, 15},
4646 {8 * 1024, 8}
4647 },
Sean Nelson28accc22010-03-19 18:47:06 +00004648 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004649 }, {
4650 .eraseblocks = {
4651 {1024 * 1024, 1}
4652 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004653 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004654 },
4655 },
Sean Nelson28accc22010-03-19 18:47:06 +00004656 .unlock = unlock_82802ab,
4657 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004658 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004659 },
4660
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004661 {
4662 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004663 .name = "S25FL008A",
4664 .bustype = CHIP_BUSTYPE_SPI,
4665 .manufacture_id = SPANSION_ID,
4666 .model_id = SPANSION_S25FL008A,
4667 .total_size = 1024,
4668 .page_size = 256,
4669 .tested = TEST_OK_PREW,
4670 .probe = probe_spi_rdid,
4671 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004672 .block_erasers =
4673 {
4674 {
4675 .eraseblocks = { {64 * 1024, 16} },
4676 .block_erase = spi_block_erase_d8,
4677 }, {
4678 .eraseblocks = { {1024 * 1024, 1} },
4679 .block_erase = spi_block_erase_c7,
4680 }
4681 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004682 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004683 .write = spi_chip_write_256,
4684 .read = spi_chip_read,
4685 },
4686
4687 {
4688 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004689 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004690 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 .manufacture_id = SPANSION_ID,
4692 .model_id = SPANSION_S25FL016A,
4693 .total_size = 2048,
4694 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004695 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004696 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004697 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004698 .block_erasers =
4699 {
4700 {
4701 .eraseblocks = { {64 * 1024, 32} },
4702 .block_erase = spi_block_erase_d8,
4703 }, {
4704 .eraseblocks = { {2 * 1024 * 1024, 1} },
4705 .block_erase = spi_block_erase_c7,
4706 }
4707 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004708 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004709 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004710 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004711 },
4712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 {
4714 .vendor = "SST",
4715 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004716 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 .manufacture_id = SST_ID,
4718 .model_id = SST_25VF016B,
4719 .total_size = 2048,
4720 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004721 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004722 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004723 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004724 .block_erasers =
4725 {
4726 {
4727 .eraseblocks = { {4 * 1024, 512} },
4728 .block_erase = spi_block_erase_20,
4729 }, {
4730 .eraseblocks = { {32 * 1024, 64} },
4731 .block_erase = spi_block_erase_52,
4732 }, {
4733 .eraseblocks = { {64 * 1024, 32} },
4734 .block_erase = spi_block_erase_d8,
4735 }, {
4736 .eraseblocks = { {2 * 1024 * 1024, 1} },
4737 .block_erase = spi_block_erase_60,
4738 }, {
4739 .eraseblocks = { {2 * 1024 * 1024, 1} },
4740 .block_erase = spi_block_erase_c7,
4741 },
4742 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004743 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004744 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004746 },
4747
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 {
4749 .vendor = "SST",
4750 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004751 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004752 .manufacture_id = SST_ID,
4753 .model_id = SST_25VF032B,
4754 .total_size = 4096,
4755 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004756 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004757 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004758 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004759 .block_erasers =
4760 {
4761 {
4762 .eraseblocks = { {4 * 1024, 1024} },
4763 .block_erase = spi_block_erase_20,
4764 }, {
4765 .eraseblocks = { {32 * 1024, 128} },
4766 .block_erase = spi_block_erase_52,
4767 }, {
4768 .eraseblocks = { {64 * 1024, 64} },
4769 .block_erase = spi_block_erase_d8,
4770 }, {
4771 .eraseblocks = { {4 * 1024 * 1024, 1} },
4772 .block_erase = spi_block_erase_60,
4773 }, {
4774 .eraseblocks = { {4 * 1024 * 1024, 1} },
4775 .block_erase = spi_block_erase_c7,
4776 },
4777 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004778 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004779 .write = spi_chip_write_1,
4780 .read = spi_chip_read,
4781 },
4782
4783 {
4784 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004785 .name = "SST25VF064C",
4786 .bustype = CHIP_BUSTYPE_SPI,
4787 .manufacture_id = SST_ID,
4788 .model_id = SST_25VF064C,
4789 .total_size = 8192,
4790 .page_size = 256,
4791 .tested = TEST_OK_PREW,
4792 .probe = probe_spi_rdid,
4793 .probe_timing = TIMING_ZERO,
4794 .block_erasers =
4795 {
4796 {
4797 .eraseblocks = { {4 * 1024, 2048} },
4798 .block_erase = spi_block_erase_20,
4799 }, {
4800 .eraseblocks = { {32 * 1024, 256} },
4801 .block_erase = spi_block_erase_52,
4802 }, {
4803 .eraseblocks = { {64 * 1024, 128} },
4804 .block_erase = spi_block_erase_d8,
4805 }, {
4806 .eraseblocks = { {8 * 1024 * 1024, 1} },
4807 .block_erase = spi_block_erase_60,
4808 }, {
4809 .eraseblocks = { {8 * 1024 * 1024, 1} },
4810 .block_erase = spi_block_erase_c7,
4811 },
4812 },
4813 .unlock = spi_disable_blockprotect,
4814 .write = spi_chip_write_1,
4815 .read = spi_chip_read,
4816 },
4817
4818 {
4819 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004820 .name = "SST25VF040.REMS",
4821 .bustype = CHIP_BUSTYPE_SPI,
4822 .manufacture_id = SST_ID,
4823 .model_id = SST_25VF040_REMS,
4824 .total_size = 512,
4825 .page_size = 256,
4826 .tested = TEST_OK_PR,
4827 .probe = probe_spi_rems,
4828 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004829 .block_erasers =
4830 {
4831 {
4832 .eraseblocks = { {4 * 1024, 128} },
4833 .block_erase = spi_block_erase_20,
4834 }, {
4835 .eraseblocks = { {32 * 1024, 16} },
4836 .block_erase = spi_block_erase_52,
4837 }, {
4838 .eraseblocks = { {512 * 1024, 1} },
4839 .block_erase = spi_block_erase_60,
4840 },
4841 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004842 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004843 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004844 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004845 },
4846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004847 {
4848 .vendor = "SST",
4849 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004850 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004851 .manufacture_id = SST_ID,
4852 .model_id = SST_25VF040B,
4853 .total_size = 512,
4854 .page_size = 256,
4855 .tested = TEST_UNTESTED,
4856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004857 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004858 .block_erasers =
4859 {
4860 {
4861 .eraseblocks = { {4 * 1024, 128} },
4862 .block_erase = spi_block_erase_20,
4863 }, {
4864 .eraseblocks = { {32 * 1024, 16} },
4865 .block_erase = spi_block_erase_52,
4866 }, {
4867 .eraseblocks = { {64 * 1024, 8} },
4868 .block_erase = spi_block_erase_d8,
4869 }, {
4870 .eraseblocks = { {512 * 1024, 1} },
4871 .block_erase = spi_block_erase_60,
4872 }, {
4873 .eraseblocks = { {512 * 1024, 1} },
4874 .block_erase = spi_block_erase_c7,
4875 },
4876 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004877 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004878 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004879 .read = spi_chip_read,
4880 },
4881
4882 {
4883 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004884 .name = "SST25LF040A.RES",
4885 .bustype = CHIP_BUSTYPE_SPI,
4886 .manufacture_id = SST_ID,
4887 .model_id = SST_25VF040_REMS,
4888 .total_size = 512,
4889 .page_size = 256,
4890 .tested = TEST_OK_PROBE,
4891 .probe = probe_spi_res2,
4892 .probe_timing = TIMING_ZERO,
4893 .block_erasers =
4894 {
4895 {
4896 .eraseblocks = { {4 * 1024, 128} },
4897 .block_erase = spi_block_erase_20,
4898 }, {
4899 .eraseblocks = { {32 * 1024, 16} },
4900 .block_erase = spi_block_erase_52,
4901 }, {
4902 .eraseblocks = { {512 * 1024, 1} },
4903 .block_erase = spi_block_erase_60,
4904 },
4905 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004906 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004907 .write = spi_chip_write_1,
4908 .read = spi_chip_read,
4909 },
4910
4911 {
4912 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004913 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004914 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004915 .manufacture_id = SST_ID,
4916 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004917 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004918 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004919 .tested = TEST_OK_PR,
4920 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004921 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004922 .block_erasers =
4923 {
4924 {
4925 .eraseblocks = { {4 * 1024, 128} },
4926 .block_erase = spi_block_erase_20,
4927 }, {
4928 .eraseblocks = { {32 * 1024, 16} },
4929 .block_erase = spi_block_erase_52,
4930 }, {
4931 .eraseblocks = { {64 * 1024, 8} },
4932 .block_erase = spi_block_erase_d8,
4933 }, {
4934 .eraseblocks = { {512 * 1024, 1} },
4935 .block_erase = spi_block_erase_60,
4936 }, {
4937 .eraseblocks = { {512 * 1024, 1} },
4938 .block_erase = spi_block_erase_c7,
4939 },
4940 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004941 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004942 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004943 .read = spi_chip_read,
4944 },
4945
4946 {
4947 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004948 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004949 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004950 .manufacture_id = SST_ID,
4951 .model_id = SST_25VF080B,
4952 .total_size = 1024,
4953 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00004954 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004955 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004956 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004957 .block_erasers =
4958 {
4959 {
4960 .eraseblocks = { {4 * 1024, 256} },
4961 .block_erase = spi_block_erase_20,
4962 }, {
4963 .eraseblocks = { {32 * 1024, 32} },
4964 .block_erase = spi_block_erase_52,
4965 }, {
4966 .eraseblocks = { {64 * 1024, 16} },
4967 .block_erase = spi_block_erase_d8,
4968 }, {
4969 .eraseblocks = { {1024 * 1024, 1} },
4970 .block_erase = spi_block_erase_60,
4971 }, {
4972 .eraseblocks = { {1024 * 1024, 1} },
4973 .block_erase = spi_block_erase_c7,
4974 },
4975 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004976 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004977 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004978 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004979 },
4980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004981 {
4982 .vendor = "SST",
4983 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004984 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004985 .manufacture_id = SST_ID,
4986 .model_id = SST_28SF040,
4987 .total_size = 512,
4988 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004989 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004990 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004991 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004992 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004993 .block_erasers =
4994 {
4995 {
4996 .eraseblocks = { {128, 4096} },
4997 .block_erase = erase_sector_28sf040,
4998 }, {
4999 .eraseblocks = { {512 * 1024, 1} },
5000 .block_erase = erase_chip_28sf040,
5001 }
5002 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005003 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005004 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005005 },
5006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005007 {
5008 .vendor = "SST",
5009 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005010 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005011 .manufacture_id = SST_ID,
5012 .model_id = SST_29EE010,
5013 .total_size = 128,
5014 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005015 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005016 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005017 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005018 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005019 .block_erasers =
5020 {
5021 {
5022 .eraseblocks = { {128 * 1024, 1} },
5023 .block_erase = erase_chip_block_jedec,
5024 }
5025 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005026 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005027 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005028 },
5029
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005030 {
5031 .vendor = "SST",
5032 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005033 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005034 .manufacture_id = SST_ID,
5035 .model_id = SST_29LE010,
5036 .total_size = 128,
5037 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005038 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005039 .tested = TEST_UNTESTED,
5040 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005041 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005042 .block_erasers =
5043 {
5044 {
5045 .eraseblocks = { {128 * 1024, 1} },
5046 .block_erase = erase_chip_block_jedec,
5047 }
5048 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005049 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005050 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005051 },
5052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005053 {
5054 .vendor = "SST",
5055 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005056 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005057 .manufacture_id = SST_ID,
5058 .model_id = SST_29EE020A,
5059 .total_size = 256,
5060 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005061 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005062 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005064 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005065 .block_erasers =
5066 {
5067 {
5068 .eraseblocks = { {256 * 1024, 1} },
5069 .block_erase = erase_chip_block_jedec,
5070 }
5071 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005072 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005073 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005074 },
5075
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005076 {
5077 .vendor = "SST",
5078 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005079 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005080 .manufacture_id = SST_ID,
5081 .model_id = SST_29LE020,
5082 .total_size = 256,
5083 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005084 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00005085 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005086 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005087 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005088 .block_erasers =
5089 {
5090 {
5091 .eraseblocks = { {256 * 1024, 1} },
5092 .block_erase = erase_chip_block_jedec,
5093 }
5094 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005095 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005096 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005097 },
5098
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005099 {
5100 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005101 .name = "SST39SF512",
5102 .bustype = CHIP_BUSTYPE_PARALLEL,
5103 .manufacture_id = SST_ID,
5104 .model_id = SST_39SF512,
5105 .total_size = 64,
5106 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005107 .feature_bits = FEATURE_EITHER_RESET,
5108 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005109 .probe = probe_jedec,
5110 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005111 .block_erasers =
5112 {
5113 {
5114 .eraseblocks = { {4 * 1024, 16} },
5115 .block_erase = erase_sector_jedec,
5116 }, {
5117 .eraseblocks = { {64 * 1024, 1} },
5118 .block_erase = erase_chip_block_jedec,
5119 }
5120 },
Sean Nelson35727f72010-01-28 23:55:12 +00005121 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005122 .read = read_memmapped,
5123 },
5124
5125 {
5126 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005128 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005129 .manufacture_id = SST_ID,
5130 .model_id = SST_39SF010,
5131 .total_size = 128,
5132 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005133 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005134 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005135 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005136 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005137 .block_erasers =
5138 {
5139 {
5140 .eraseblocks = { {4 * 1024, 32} },
5141 .block_erase = erase_sector_jedec,
5142 }, {
5143 .eraseblocks = { {128 * 1024, 1} },
5144 .block_erase = erase_chip_block_jedec,
5145 }
5146 },
Sean Nelson35727f72010-01-28 23:55:12 +00005147 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005149 },
5150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005151 {
5152 .vendor = "SST",
5153 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005154 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005155 .manufacture_id = SST_ID,
5156 .model_id = SST_39SF020,
5157 .total_size = 256,
5158 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005159 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005160 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005161 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005162 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005163 .block_erasers =
5164 {
5165 {
5166 .eraseblocks = { {4 * 1024, 64} },
5167 .block_erase = erase_sector_jedec,
5168 }, {
5169 .eraseblocks = { {256 * 1024, 1} },
5170 .block_erase = erase_chip_block_jedec,
5171 }
5172 },
Sean Nelson35727f72010-01-28 23:55:12 +00005173 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005174 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005175 },
5176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005177 {
5178 .vendor = "SST",
5179 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005180 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005181 .manufacture_id = SST_ID,
5182 .model_id = SST_39SF040,
5183 .total_size = 512,
5184 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005185 .feature_bits = FEATURE_EITHER_RESET,
5186 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005187 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005188 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005189 .block_erasers =
5190 {
5191 {
5192 .eraseblocks = { {4 * 1024, 128} },
5193 .block_erase = erase_sector_jedec,
5194 }, {
5195 .eraseblocks = { {512 * 1024, 1} },
5196 .block_erase = erase_chip_block_jedec,
5197 }
5198 },
Sean Nelson35727f72010-01-28 23:55:12 +00005199 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005200 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005201 },
5202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005203 {
5204 .vendor = "SST",
5205 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005206 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005207 .manufacture_id = SST_ID,
5208 .model_id = SST_39VF512,
5209 .total_size = 64,
5210 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005211 .feature_bits = FEATURE_EITHER_RESET,
5212 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005213 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005214 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00005215 .block_erasers =
5216 {
5217 {
5218 .eraseblocks = { {4 * 1024, 16} },
5219 .block_erase = erase_sector_jedec,
5220 }, {
5221 .eraseblocks = { {64 * 1024, 1} },
5222 .block_erase = erase_chip_block_jedec,
5223 }
5224 },
Sean Nelson35727f72010-01-28 23:55:12 +00005225 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005226 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005227 },
5228
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005229 {
5230 .vendor = "SST",
5231 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005232 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005233 .manufacture_id = SST_ID,
5234 .model_id = SST_39VF010,
5235 .total_size = 128,
5236 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005237 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00005238 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005239 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005240 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005241 .block_erasers =
5242 {
5243 {
5244 .eraseblocks = { {4 * 1024, 32} },
5245 .block_erase = erase_sector_jedec,
5246 }, {
5247 .eraseblocks = { {128 * 1024, 1} },
5248 .block_erase = erase_chip_block_jedec,
5249 }
5250 },
Sean Nelson35727f72010-01-28 23:55:12 +00005251 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005252 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005253 },
5254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005255 {
5256 .vendor = "SST",
5257 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005258 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 .manufacture_id = SST_ID,
5260 .model_id = SST_39VF020,
5261 .total_size = 256,
5262 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005263 .feature_bits = FEATURE_EITHER_RESET,
5264 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005265 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005266 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005267 .block_erasers =
5268 {
5269 {
5270 .eraseblocks = { {4 * 1024, 64} },
5271 .block_erase = erase_sector_jedec,
5272 }, {
5273 .eraseblocks = { {256 * 1024, 1} },
5274 .block_erase = erase_chip_block_jedec,
5275 }
5276 },
Sean Nelson35727f72010-01-28 23:55:12 +00005277 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005278 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005279 },
5280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005281 {
5282 .vendor = "SST",
5283 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005284 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005285 .manufacture_id = SST_ID,
5286 .model_id = SST_39VF040,
5287 .total_size = 512,
5288 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005289 .feature_bits = FEATURE_EITHER_RESET,
5290 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005292 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005293 .block_erasers =
5294 {
5295 {
5296 .eraseblocks = { {4 * 1024, 128} },
5297 .block_erase = erase_sector_jedec,
5298 }, {
5299 .eraseblocks = { {512 * 1024, 1} },
5300 .block_erase = erase_chip_block_jedec,
5301 }
5302 },
Sean Nelson35727f72010-01-28 23:55:12 +00005303 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005304 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005305 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005306
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005307 {
5308 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005309 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005310 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005311 .manufacture_id = SST_ID,
5312 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005313 .total_size = 1024,
5314 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005315 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005316 .tested = TEST_UNTESTED,
5317 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005318 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005319 .block_erasers =
5320 {
5321 {
5322 .eraseblocks = { {4 * 1024, 256} },
5323 .block_erase = erase_sector_jedec,
5324 }, {
5325 .eraseblocks = { {64 * 1024, 16} },
5326 .block_erase = erase_block_jedec,
5327 }, {
5328 .eraseblocks = { {1024 * 1024, 1} },
5329 .block_erase = erase_chip_block_jedec,
5330 }
5331 },
Sean Nelson35727f72010-01-28 23:55:12 +00005332 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005333 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005334 },
5335
5336 {
5337 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005338 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005339 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005340 .manufacture_id = SST_ID,
5341 .model_id = SST_49LF002A,
5342 .total_size = 256,
5343 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005344 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005345 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005346 .probe = probe_jedec,
5347 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005348 .block_erasers =
5349 {
5350 {
5351 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005352 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005353 }, {
5354 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005355 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005356 }, {
5357 .eraseblocks = { {256 * 1024, 1} },
5358 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5359 }
5360 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005361 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005362 .unlock = unlock_sst_fwhub,
5363 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005364 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005365 },
5366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005367 {
5368 .vendor = "SST",
5369 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005370 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005371 .manufacture_id = SST_ID,
5372 .model_id = SST_49LF003A,
5373 .total_size = 384,
5374 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005375 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005376 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005377 .probe = probe_jedec,
5378 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005379 .block_erasers =
5380 {
5381 {
5382 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005383 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005384 }, {
5385 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005386 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005387 }, {
5388 .eraseblocks = { {384 * 1024, 1} },
5389 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5390 }
5391 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005392 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005393 .unlock = unlock_sst_fwhub,
5394 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005395 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005396 },
5397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005398 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005399 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5400 * and is only honored for 64k block erase, but not 4k sector erase.
5401 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 .vendor = "SST",
5403 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005404 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .manufacture_id = SST_ID,
5406 .model_id = SST_49LF004A,
5407 .total_size = 512,
5408 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005409 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005410 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005411 .probe = probe_jedec,
5412 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005413 .block_erasers =
5414 {
5415 {
5416 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005417 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005418 }, {
5419 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005420 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005421 }, {
5422 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005423 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005424 },
5425 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005426 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005427 .unlock = unlock_sst_fwhub,
5428 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005429 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005430 },
5431
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 {
5433 .vendor = "SST",
5434 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005435 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005436 .manufacture_id = SST_ID,
5437 .model_id = SST_49LF004C,
5438 .total_size = 512,
5439 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005440 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005441 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005442 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005443 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005444 .block_erasers =
5445 {
5446 {
5447 .eraseblocks = { {4 * 1024, 128} },
5448 .block_erase = erase_sector_49lfxxxc,
5449 }, {
5450 .eraseblocks = {
5451 {64 * 1024, 7},
5452 {32 * 1024, 1},
5453 {8 * 1024, 2},
5454 {16 * 1024, 1},
5455 },
Sean Nelson69e58112010-03-23 17:10:28 +00005456 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005457 }
5458 },
Sean Nelson69e58112010-03-23 17:10:28 +00005459 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005460 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005461 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005462 },
5463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005464 {
5465 .vendor = "SST",
5466 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005467 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005468 .manufacture_id = SST_ID,
5469 .model_id = SST_49LF008A,
5470 .total_size = 1024,
5471 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005472 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005473 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005474 .probe = probe_jedec,
5475 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005476 .block_erasers =
5477 {
5478 {
5479 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005480 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005481 }, {
5482 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005483 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005484 }, {
5485 .eraseblocks = { {1024 * 1024, 1} },
5486 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5487 }
5488 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005489 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005490 .unlock = unlock_sst_fwhub,
5491 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005492 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005493 },
5494
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005495 {
5496 .vendor = "SST",
5497 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005498 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005499 .manufacture_id = SST_ID,
5500 .model_id = SST_49LF008C,
5501 .total_size = 1024,
5502 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005503 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005504 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005505 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005506 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005507 .block_erasers =
5508 {
5509 {
5510 .eraseblocks = { {4 * 1024, 256} },
5511 .block_erase = erase_sector_49lfxxxc,
5512 }, {
5513 .eraseblocks = {
5514 {64 * 1024, 15},
5515 {32 * 1024, 1},
5516 {8 * 1024, 2},
5517 {16 * 1024, 1},
5518 },
Sean Nelson69e58112010-03-23 17:10:28 +00005519 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005520 }
5521 },
Sean Nelson69e58112010-03-23 17:10:28 +00005522 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005523 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005524 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005525 },
5526
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005527 {
5528 .vendor = "SST",
5529 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005530 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005531 .manufacture_id = SST_ID,
5532 .model_id = SST_49LF016C,
5533 .total_size = 2048,
5534 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005535 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005536 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005537 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005538 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005539 .block_erasers =
5540 {
5541 {
5542 .eraseblocks = { {4 * 1024, 512} },
5543 .block_erase = erase_sector_49lfxxxc,
5544 }, {
5545 .eraseblocks = {
5546 {64 * 1024, 31},
5547 {32 * 1024, 1},
5548 {8 * 1024, 2},
5549 {16 * 1024, 1},
5550 },
Sean Nelson69e58112010-03-23 17:10:28 +00005551 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005552 }
5553 },
Sean Nelson69e58112010-03-23 17:10:28 +00005554 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005555 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005556 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005557 },
5558
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005559 {
5560 .vendor = "SST",
5561 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005562 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005563 .manufacture_id = SST_ID,
5564 .model_id = SST_49LF020,
5565 .total_size = 256,
5566 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005567 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005568 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005569 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005570 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005571 .block_erasers =
5572 {
5573 {
5574 .eraseblocks = { {4 * 1024, 64} },
5575 .block_erase = erase_sector_jedec,
5576 }, {
5577 .eraseblocks = { {16 * 1024, 16} },
5578 .block_erase = erase_block_jedec,
5579 }, {
5580 .eraseblocks = { {256 * 1024, 1} },
5581 .block_erase = NULL,
5582 }
5583 },
Sean Nelson35727f72010-01-28 23:55:12 +00005584 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005585 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005586 },
5587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005588 {
5589 .vendor = "SST",
5590 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005591 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005592 .manufacture_id = SST_ID,
5593 .model_id = SST_49LF020A,
5594 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005595 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005596 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005597 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005598 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005599 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005600 .block_erasers =
5601 {
5602 {
5603 .eraseblocks = { {4 * 1024, 64} },
5604 .block_erase = erase_sector_jedec,
5605 }, {
5606 .eraseblocks = { {16 * 1024, 16} },
5607 .block_erase = erase_block_jedec,
5608 }, {
5609 .eraseblocks = { {256 * 1024, 1} },
5610 .block_erase = NULL,
5611 }
5612 },
Sean Nelson35727f72010-01-28 23:55:12 +00005613 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005614 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005615 },
5616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005617 {
5618 .vendor = "SST",
5619 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005620 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005621 .manufacture_id = SST_ID,
5622 .model_id = SST_49LF040,
5623 .total_size = 512,
5624 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005625 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005626 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005627 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005628 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005629 .block_erasers =
5630 {
5631 {
5632 .eraseblocks = { {4 * 1024, 128} },
5633 .block_erase = erase_sector_jedec,
5634 }, {
5635 .eraseblocks = { {64 * 1024, 8} },
5636 .block_erase = erase_block_jedec,
5637 }, {
5638 .eraseblocks = { {512 * 1024, 1} },
5639 .block_erase = NULL,
5640 }
5641 },
Sean Nelson35727f72010-01-28 23:55:12 +00005642 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005643 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005644 },
5645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005646 {
5647 .vendor = "SST",
5648 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005649 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005650 .manufacture_id = SST_ID,
5651 .model_id = SST_49LF040B,
5652 .total_size = 512,
5653 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005654 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005655 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005656 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005657 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005658 .block_erasers =
5659 {
5660 {
5661 .eraseblocks = { {4 * 1024, 128} },
5662 .block_erase = erase_sector_jedec,
5663 }, {
5664 .eraseblocks = { {64 * 1024, 8} },
5665 .block_erase = erase_block_jedec,
5666 }, {
5667 .eraseblocks = { {512 * 1024, 1} },
5668 .block_erase = NULL,
5669 }
5670 },
Sean Nelson35727f72010-01-28 23:55:12 +00005671 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005672 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005673 },
5674
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005675 {
5676 .vendor = "SST",
5677 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005678 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005679 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005680 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005681 .total_size = 1024,
5682 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005683 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005684 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005686 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005687 .block_erasers =
5688 {
5689 {
5690 .eraseblocks = { {4 * 1024, 256} },
5691 .block_erase = erase_sector_jedec,
5692 }, {
5693 .eraseblocks = { {64 * 1024, 16} },
5694 .block_erase = erase_block_jedec,
5695 }, {
5696 .eraseblocks = { {1024 * 1024, 1} },
5697 .block_erase = NULL,
5698 }
5699 },
Sean Nelson35727f72010-01-28 23:55:12 +00005700 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005701 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005702 },
5703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005704 {
5705 .vendor = "SST",
5706 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005707 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005708 .manufacture_id = SST_ID,
5709 .model_id = SST_49LF160C,
5710 .total_size = 2048,
5711 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005712 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005713 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005714 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005715 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005716 .block_erasers =
5717 {
5718 {
5719 .eraseblocks = { {4 * 1024, 512} },
5720 .block_erase = erase_sector_49lfxxxc,
5721 }, {
5722 .eraseblocks = {
5723 {64 * 1024, 31},
5724 {32 * 1024, 1},
5725 {8 * 1024, 2},
5726 {16 * 1024, 1},
5727 },
Sean Nelson69e58112010-03-23 17:10:28 +00005728 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005729 }
5730 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005731 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005732 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005734 },
5735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005736 {
5737 .vendor = "ST",
5738 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005739 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .manufacture_id = ST_ID,
5741 .model_id = ST_M25P05A,
5742 .total_size = 64,
5743 .page_size = 256,
5744 .tested = TEST_UNTESTED,
5745 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005746 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005747 .block_erasers =
5748 {
5749 {
5750 .eraseblocks = { {32 * 1024, 2} },
5751 .block_erase = spi_block_erase_d8,
5752 }, {
5753 .eraseblocks = { {64 * 1024, 1} },
5754 .block_erase = spi_block_erase_c7,
5755 }
5756 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005757 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005758 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005759 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005760 },
5761
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005762 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5763 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005764 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005765 * only is successful if RDID does not work.
5766 */
5767 {
5768 .vendor = "ST",
5769 .name = "M25P05.RES",
5770 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005771 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005772 .model_id = ST_M25P05_RES,
5773 .total_size = 64,
5774 .page_size = 256,
5775 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005776 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005777 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005778 .block_erasers =
5779 {
5780 {
5781 .eraseblocks = { {32 * 1024, 2} },
5782 .block_erase = spi_block_erase_d8,
5783 }, {
5784 .eraseblocks = { {64 * 1024, 1} },
5785 .block_erase = spi_block_erase_c7,
5786 }
5787 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005788 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005789 .write = spi_chip_write_1, /* 128 */
5790 .read = spi_chip_read,
5791 },
5792
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 {
5794 .vendor = "ST",
5795 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005796 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005797 .manufacture_id = ST_ID,
5798 .model_id = ST_M25P10A,
5799 .total_size = 128,
5800 .page_size = 256,
5801 .tested = TEST_UNTESTED,
5802 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005803 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005804 .block_erasers =
5805 {
5806 {
5807 .eraseblocks = { {32 * 1024, 4} },
5808 .block_erase = spi_block_erase_d8,
5809 }, {
5810 .eraseblocks = { {128 * 1024, 1} },
5811 .block_erase = spi_block_erase_c7,
5812 }
5813 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005814 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005815 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005816 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005817 },
5818
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005819 /* The ST M25P10 has the same problem as the M25P05. */
5820 {
5821 .vendor = "ST",
5822 .name = "M25P10.RES",
5823 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005824 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005825 .model_id = ST_M25P10_RES,
5826 .total_size = 128,
5827 .page_size = 256,
5828 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005829 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005830 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005831 .block_erasers =
5832 {
5833 {
5834 .eraseblocks = { {32 * 1024, 4} },
5835 .block_erase = spi_block_erase_d8,
5836 }, {
5837 .eraseblocks = { {128 * 1024, 1} },
5838 .block_erase = spi_block_erase_c7,
5839 }
5840 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005842 .write = spi_chip_write_1, /* 128 */
5843 .read = spi_chip_read,
5844 },
5845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 {
5847 .vendor = "ST",
5848 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005849 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005850 .manufacture_id = ST_ID,
5851 .model_id = ST_M25P20,
5852 .total_size = 256,
5853 .page_size = 256,
5854 .tested = TEST_UNTESTED,
5855 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005856 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005857 .block_erasers =
5858 {
5859 {
5860 .eraseblocks = { {64 * 1024, 4} },
5861 .block_erase = spi_block_erase_d8,
5862 }, {
5863 .eraseblocks = { {256 * 1024, 1} },
5864 .block_erase = spi_block_erase_c7,
5865 }
5866 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005867 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005868 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005869 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005870 },
5871
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005872 {
5873 .vendor = "ST",
5874 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005875 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005876 .manufacture_id = ST_ID,
5877 .model_id = ST_M25P40,
5878 .total_size = 512,
5879 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005880 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005882 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005883 .block_erasers =
5884 {
5885 {
5886 .eraseblocks = { {64 * 1024, 8} },
5887 .block_erase = spi_block_erase_d8,
5888 }, {
5889 .eraseblocks = { {512 * 1024, 1} },
5890 .block_erase = spi_block_erase_c7,
5891 }
5892 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005893 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005894 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005895 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005896 },
5897
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005898 {
5899 .vendor = "ST",
5900 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005901 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005902 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005903 .model_id = ST_M25P40_RES,
5904 .total_size = 512,
5905 .page_size = 256,
5906 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005907 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005908 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005909 .block_erasers =
5910 {
5911 {
5912 .eraseblocks = { {64 * 1024, 8} },
5913 .block_erase = spi_block_erase_d8,
5914 }, {
5915 .eraseblocks = { {512 * 1024, 1} },
5916 .block_erase = spi_block_erase_c7,
5917 }
5918 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005919 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005920 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005921 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005922 },
5923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 {
5925 .vendor = "ST",
5926 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005927 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005928 .manufacture_id = ST_ID,
5929 .model_id = ST_M25P80,
5930 .total_size = 1024,
5931 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005932 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005934 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005935 .block_erasers =
5936 {
5937 {
5938 .eraseblocks = { {64 * 1024, 16} },
5939 .block_erase = spi_block_erase_d8,
5940 }, {
5941 .eraseblocks = { {1024 * 1024, 1} },
5942 .block_erase = spi_block_erase_c7,
5943 }
5944 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005945 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005946 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005947 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005948 },
5949
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005950 {
5951 .vendor = "ST",
5952 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005953 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005954 .manufacture_id = ST_ID,
5955 .model_id = ST_M25P16,
5956 .total_size = 2048,
5957 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005958 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005959 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005960 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005961 .block_erasers =
5962 {
5963 {
5964 .eraseblocks = { {64 * 1024, 32} },
5965 .block_erase = spi_block_erase_d8,
5966 }, {
5967 .eraseblocks = { {2 * 1024 * 1024, 1} },
5968 .block_erase = spi_block_erase_c7,
5969 }
5970 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005971 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005972 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005974 },
5975
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005976 {
5977 .vendor = "ST",
5978 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005979 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005980 .manufacture_id = ST_ID,
5981 .model_id = ST_M25P32,
5982 .total_size = 4096,
5983 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005984 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005985 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005986 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005987 .block_erasers =
5988 {
5989 {
5990 .eraseblocks = { {64 * 1024, 64} },
5991 .block_erase = spi_block_erase_d8,
5992 }, {
5993 .eraseblocks = { {4 * 1024 * 1024, 1} },
5994 .block_erase = spi_block_erase_c7,
5995 }
5996 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005997 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005998 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005999 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006000 },
6001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 {
6003 .vendor = "ST",
6004 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006005 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 .manufacture_id = ST_ID,
6007 .model_id = ST_M25P64,
6008 .total_size = 8192,
6009 .page_size = 256,
6010 .tested = TEST_UNTESTED,
6011 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006012 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006013 .block_erasers =
6014 {
6015 {
6016 .eraseblocks = { {64 * 1024, 128} },
6017 .block_erase = spi_block_erase_d8,
6018 }, {
6019 .eraseblocks = { {8 * 1024 * 1024, 1} },
6020 .block_erase = spi_block_erase_c7,
6021 }
6022 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006023 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006024 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006025 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006026 },
6027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006028 {
6029 .vendor = "ST",
6030 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006031 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .manufacture_id = ST_ID,
6033 .model_id = ST_M25P128,
6034 .total_size = 16384,
6035 .page_size = 256,
6036 .tested = TEST_UNTESTED,
6037 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006038 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006039 .block_erasers =
6040 {
6041 {
6042 .eraseblocks = { {256 * 1024, 64} },
6043 .block_erase = spi_block_erase_d8,
6044 }, {
6045 .eraseblocks = { {16 * 1024 * 1024, 1} },
6046 .block_erase = spi_block_erase_c7,
6047 }
6048 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006049 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006050 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006051 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006052 },
6053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006054 {
6055 .vendor = "ST",
6056 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006057 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006058 .manufacture_id = ST_ID,
6059 .model_id = ST_M29F002B,
6060 .total_size = 256,
6061 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006062 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 .tested = TEST_UNTESTED,
6064 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006065 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006066 .block_erasers =
6067 {
6068 {
6069 .eraseblocks = {
6070 {16 * 1024, 1},
6071 {8 * 1024, 2},
6072 {32 * 1024, 1},
6073 {64 * 1024, 3},
6074 },
6075 .block_erase = erase_sector_jedec,
6076 }, {
6077 .eraseblocks = { {256 * 1024, 1} },
6078 .block_erase = erase_chip_block_jedec,
6079 }
6080 },
Sean Nelson35727f72010-01-28 23:55:12 +00006081 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006082 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006083 },
6084
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006085 {
6086 .vendor = "ST",
6087 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006089 .manufacture_id = ST_ID,
6090 .model_id = ST_M29F002T,
6091 .total_size = 256,
6092 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006093 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6094 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006095 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006096 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006097 .block_erasers =
6098 {
6099 {
6100 .eraseblocks = {
6101 {64 * 1024, 3},
6102 {32 * 1024, 1},
6103 {8 * 1024, 2},
6104 {16 * 1024, 1},
6105 },
6106 .block_erase = erase_sector_jedec,
6107 }, {
6108 .eraseblocks = { {256 * 1024, 1} },
6109 .block_erase = erase_chip_block_jedec,
6110 }
6111 },
Sean Nelson35727f72010-01-28 23:55:12 +00006112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006114 },
6115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 {
6117 .vendor = "ST",
6118 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006120 .manufacture_id = ST_ID,
6121 .model_id = ST_M29F040B,
6122 .total_size = 512,
6123 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006124 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6125 .tested = TEST_UNTESTED,
6126 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006127 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006128 .block_erasers =
6129 {
6130 {
6131 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006132 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006133 }, {
6134 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006135 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006136 }
6137 },
Sean Nelson35727f72010-01-28 23:55:12 +00006138 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006140 },
6141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006142 {
Sean Nelson35727f72010-01-28 23:55:12 +00006143 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006144 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006145 .name = "M29F400BB",
6146 .bustype = CHIP_BUSTYPE_PARALLEL,
6147 .manufacture_id = ST_ID,
6148 .model_id = ST_M29F400BB,
6149 .total_size = 512,
6150 .page_size = 64 * 1024,
6151 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
6152 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
6153 .probe = probe_m29f400bt,
6154 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6155 .block_erasers =
6156 {
6157 {
6158 .eraseblocks = {
6159 {16 * 1024, 1},
6160 {8 * 1024, 2},
6161 {32 * 1024, 1},
6162 {64 * 1024, 7},
6163 },
6164 .block_erase = block_erase_m29f400bt,
6165 }, {
6166 .eraseblocks = { {512 * 1024, 1} },
6167 .block_erase = block_erase_chip_m29f400bt,
6168 }
6169 },
6170 .write = NULL,
6171 .read = read_memmapped,
6172 },
6173 {
6174 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6175 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006176 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006177 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006178 .manufacture_id = ST_ID,
6179 .model_id = ST_M29F400BT,
6180 .total_size = 512,
6181 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006182 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006183 .tested = TEST_UNTESTED,
6184 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006185 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006186 .block_erasers =
6187 {
6188 {
6189 .eraseblocks = {
6190 {64 * 1024, 7},
6191 {32 * 1024, 1},
6192 {8 * 1024, 2},
6193 {16 * 1024, 1},
6194 },
6195 .block_erase = block_erase_m29f400bt,
6196 }, {
6197 .eraseblocks = { {512 * 1024, 1} },
6198 .block_erase = block_erase_chip_m29f400bt,
6199 }
6200 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006201 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006202 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006203 },
6204
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006205 {
6206 .vendor = "ST",
6207 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006208 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006209 .manufacture_id = ST_ID,
6210 .model_id = ST_M29W010B,
6211 .total_size = 128,
6212 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006213 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006214 .tested = TEST_UNTESTED,
6215 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006216 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006217 .block_erasers =
6218 {
6219 {
6220 .eraseblocks = { {16 * 1024, 8}, },
6221 .block_erase = erase_sector_jedec,
6222 }, {
6223 .eraseblocks = { {128 * 1024, 1} },
6224 .block_erase = erase_chip_block_jedec,
6225 }
6226 },
Sean Nelson35727f72010-01-28 23:55:12 +00006227 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006228 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006229 },
6230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006231 {
6232 .vendor = "ST",
6233 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006234 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006235 .manufacture_id = ST_ID,
6236 .model_id = ST_M29W040B,
6237 .total_size = 512,
6238 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006239 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006240 .tested = TEST_UNTESTED,
6241 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006242 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006243 .block_erasers =
6244 {
6245 {
6246 .eraseblocks = { {64 * 1024, 8}, },
6247 .block_erase = erase_sector_jedec,
6248 }, {
6249 .eraseblocks = { {512 * 1024, 1} },
6250 .block_erase = erase_chip_block_jedec,
6251 }
6252 },
Sean Nelson35727f72010-01-28 23:55:12 +00006253 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006254 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006255 },
6256
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006257 {
6258 .vendor = "ST",
6259 .name = "M29W512B",
6260 .bustype = CHIP_BUSTYPE_PARALLEL,
6261 .manufacture_id = ST_ID,
6262 .model_id = ST_M29W512B,
6263 .total_size = 64,
6264 .page_size = 64 * 1024,
6265 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6266 .tested = TEST_OK_PREW,
6267 .probe = probe_jedec,
6268 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006269 .block_erasers =
6270 {
6271 {
6272 .eraseblocks = { {64 * 1024, 1} },
6273 .block_erase = erase_chip_block_jedec,
6274 }
6275 },
6276 .write = write_jedec_1,
6277 .read = read_memmapped,
6278 },
6279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006280 {
6281 .vendor = "ST",
6282 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006283 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006284 .manufacture_id = ST_ID,
6285 .model_id = ST_M50FLW040A,
6286 .total_size = 512,
6287 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006288 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006289 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006290 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006291 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006292 .block_erasers =
6293 {
6294 {
Sean Nelson329bde72010-01-19 16:39:19 +00006295 .eraseblocks = {
6296 {4 * 1024, 16}, /* sector */
6297 {64 * 1024, 5}, /* block */
6298 {4 * 1024, 16}, /* sector */
6299 {4 * 1024, 16}, /* sector */
6300 },
6301 .block_erase = NULL,
6302 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006303 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006304 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006305 }, {
6306 .eraseblocks = { {512 * 1024, 1} },
6307 .block_erase = erase_chip_stm50flw0x0x,
6308 }
6309 },
Sean Nelson28accc22010-03-19 18:47:06 +00006310 .unlock = unlock_stm50flw0x0x,
6311 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006313 },
6314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006315 {
6316 .vendor = "ST",
6317 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006318 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006319 .manufacture_id = ST_ID,
6320 .model_id = ST_M50FLW040B,
6321 .total_size = 512,
6322 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006323 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006324 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006325 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006326 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006327 .block_erasers =
6328 {
6329 {
Sean Nelson329bde72010-01-19 16:39:19 +00006330 .eraseblocks = {
6331 {4 * 1024, 16}, /* sector */
6332 {4 * 1024, 16}, /* sector */
6333 {64 * 1024, 5}, /* block */
6334 {4 * 1024, 16}, /* sector */
6335 },
6336 .block_erase = NULL,
6337 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006338 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006339 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006340 }, {
6341 .eraseblocks = { {512 * 1024, 1} },
6342 .block_erase = erase_chip_stm50flw0x0x,
6343 }
6344 },
Sean Nelson28accc22010-03-19 18:47:06 +00006345 .unlock = unlock_stm50flw0x0x,
6346 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006347 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006348 },
6349
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006350 {
6351 .vendor = "ST",
6352 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006353 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006354 .manufacture_id = ST_ID,
6355 .model_id = ST_M50FLW080A,
6356 .total_size = 1024,
6357 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006358 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00006359 .tested = TEST_UNTESTED,
6360 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006361 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006362 .block_erasers =
6363 {
6364 {
Sean Nelson329bde72010-01-19 16:39:19 +00006365 .eraseblocks = {
6366 {4 * 1024, 16}, /* sector */
6367 {64 * 1024, 13}, /* block */
6368 {4 * 1024, 16}, /* sector */
6369 {4 * 1024, 16}, /* sector */
6370 },
6371 .block_erase = NULL,
6372 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006373 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006374 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006375 }, {
6376 .eraseblocks = { {1024 * 1024, 1} },
6377 .block_erase = erase_chip_stm50flw0x0x,
6378 }
6379 },
Sean Nelson28accc22010-03-19 18:47:06 +00006380 .unlock = unlock_stm50flw0x0x,
6381 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006382 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006383 },
6384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006385 {
6386 .vendor = "ST",
6387 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006388 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006389 .manufacture_id = ST_ID,
6390 .model_id = ST_M50FLW080B,
6391 .total_size = 1024,
6392 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006393 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006394 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006395 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006396 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006397 .block_erasers =
6398 {
6399 {
Sean Nelson329bde72010-01-19 16:39:19 +00006400 .eraseblocks = {
6401 {4 * 1024, 16}, /* sector */
6402 {4 * 1024, 16}, /* sector */
6403 {64 * 1024, 13}, /* block */
6404 {4 * 1024, 16}, /* sector */
6405 },
6406 .block_erase = NULL,
6407 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006408 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006409 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006410 }, {
6411 .eraseblocks = { {1024 * 1024, 1} },
6412 .block_erase = erase_chip_stm50flw0x0x,
6413 }
6414 },
Sean Nelson28accc22010-03-19 18:47:06 +00006415 .unlock = unlock_stm50flw0x0x,
6416 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006417 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006418 },
6419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006420 {
6421 .vendor = "ST",
6422 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006423 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006424 .manufacture_id = ST_ID,
6425 .model_id = ST_M50FW002,
6426 .total_size = 256,
6427 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006428 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006429 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006430 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006431 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006432 .block_erasers =
6433 {
6434 {
6435 .eraseblocks = {
6436 {64 * 1024, 3},
6437 {32 * 1024, 1},
6438 {8 * 1024, 2},
6439 {16 * 1024, 1},
6440 },
Sean Nelson28accc22010-03-19 18:47:06 +00006441 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006442 }, {
6443 .eraseblocks = { {256 * 1024, 1} },
6444 .block_erase = erase_chip_stm50flw0x0x,
6445 }
6446 },
Sean Nelson28accc22010-03-19 18:47:06 +00006447 .unlock = unlock_stm50flw0x0x,
6448 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006449 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006450 },
6451
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006452 {
6453 .vendor = "ST",
6454 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006455 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006456 .manufacture_id = ST_ID,
6457 .model_id = ST_M50FW016,
6458 .total_size = 2048,
6459 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006460 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006461 .tested = TEST_UNTESTED,
6462 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006463 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006464 .block_erasers =
6465 {
6466 {
6467 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006468 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006469 }, {
6470 .eraseblocks = { {2 * 1024 * 1024, 1} },
6471 .block_erase = erase_chip_stm50flw0x0x,
6472 }
6473 },
Sean Nelson28accc22010-03-19 18:47:06 +00006474 .unlock = unlock_stm50flw0x0x,
6475 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006476 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006477 },
6478
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006479 {
6480 .vendor = "ST",
6481 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006482 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006483 .manufacture_id = ST_ID,
6484 .model_id = ST_M50FW040,
6485 .total_size = 512,
6486 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006487 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006488 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006489 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006490 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006491 .block_erasers =
6492 {
6493 {
6494 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006495 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006496 }, {
6497 .eraseblocks = { {512 * 1024, 1} },
6498 .block_erase = erase_chip_stm50flw0x0x,
6499 }
6500 },
Sean Nelson28accc22010-03-19 18:47:06 +00006501 .unlock = unlock_stm50flw0x0x,
6502 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006503 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006504 },
6505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006506 {
6507 .vendor = "ST",
6508 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006509 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006510 .manufacture_id = ST_ID,
6511 .model_id = ST_M50FW080,
6512 .total_size = 1024,
6513 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006514 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006515 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006516 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006517 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006518 .block_erasers =
6519 {
6520 {
6521 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006522 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006523 }, {
6524 .eraseblocks = { {1024 * 1024, 1} },
6525 .block_erase = erase_chip_stm50flw0x0x,
6526 }
6527 },
Sean Nelson28accc22010-03-19 18:47:06 +00006528 .unlock = unlock_stm50flw0x0x,
6529 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006530 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006531 },
6532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006533 {
6534 .vendor = "ST",
6535 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006536 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006537 .manufacture_id = ST_ID,
6538 .model_id = ST_M50LPW116,
6539 .total_size = 2048,
6540 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006541 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006542 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006543 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006544 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006545 .block_erasers =
6546 {
6547 {
6548 .eraseblocks = {
6549 {4 * 1024, 16},
6550 {64 * 1024, 30},
6551 {32 * 1024, 1},
6552 {8 * 1024, 2},
6553 {16 * 1024, 1},
6554 },
Sean Nelson28accc22010-03-19 18:47:06 +00006555 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006556 }, {
6557 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006558 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006559 }
6560 },
Sean Nelson28accc22010-03-19 18:47:06 +00006561 .unlock = unlock_stm50flw0x0x,
6562 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006563 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006564 },
6565
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006566 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006567 .vendor = "SyncMOS/MoselVitelic",
6568 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006569 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006570 .manufacture_id = SYNCMOS_MVC_ID,
6571 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006572 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006573 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006574 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006575 .tested = TEST_UNTESTED,
6576 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006577 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006578 .block_erasers =
6579 {
6580 {
6581 .eraseblocks = { {512, 256} },
6582 .block_erase = erase_sector_jedec,
6583 }, {
6584 .eraseblocks = { {128 * 1024, 1} },
6585 .block_erase = erase_chip_block_jedec,
6586 },
6587 },
Sean Nelson35727f72010-01-28 23:55:12 +00006588 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006589 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006590 },
6591
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006592 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006593 .vendor = "SyncMOS/MoselVitelic",
6594 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006595 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006596 .manufacture_id = SYNCMOS_MVC_ID,
6597 .model_id = SM_MVC_29C51001T,
6598 .total_size = 128,
6599 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006600 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006601 .tested = TEST_UNTESTED,
6602 .probe = probe_jedec,
6603 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6604 .block_erasers =
6605 {
6606 {
6607 .eraseblocks = { {512, 256} },
6608 .block_erase = erase_sector_jedec,
6609 }, {
6610 .eraseblocks = { {128 * 1024, 1} },
6611 .block_erase = erase_chip_block_jedec,
6612 },
6613 },
6614 .write = write_jedec_1,
6615 .read = read_memmapped,
6616 },
6617
6618 {
6619 .vendor = "SyncMOS/MoselVitelic",
6620 .name = "{F,S,V}29C51002B",
6621 .bustype = CHIP_BUSTYPE_PARALLEL,
6622 .manufacture_id = SYNCMOS_MVC_ID,
6623 .model_id = SM_MVC_29C51002B,
6624 .total_size = 256,
6625 .page_size = 512,
6626 .feature_bits = FEATURE_EITHER_RESET,
6627 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006629 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006630 .block_erasers =
6631 {
6632 {
6633 .eraseblocks = { {512, 512} },
6634 .block_erase = erase_sector_jedec,
6635 }, {
6636 .eraseblocks = { {256 * 1024, 1} },
6637 .block_erase = erase_chip_block_jedec,
6638 },
6639 },
Sean Nelson35727f72010-01-28 23:55:12 +00006640 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006641 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006642 },
6643
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006644 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006645 .vendor = "SyncMOS/MoselVitelic",
6646 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006647 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006648 .manufacture_id = SYNCMOS_MVC_ID,
6649 .model_id = SM_MVC_29C51002T,
6650 .total_size = 256,
6651 .page_size = 512,
6652 .feature_bits = FEATURE_EITHER_RESET,
6653 .tested = TEST_OK_PR,
6654 .probe = probe_jedec,
6655 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6656 .block_erasers =
6657 {
6658 {
6659 .eraseblocks = { {512, 512} },
6660 .block_erase = erase_sector_jedec,
6661 }, {
6662 .eraseblocks = { {256 * 1024, 1} },
6663 .block_erase = erase_chip_block_jedec,
6664 },
6665 },
6666 .write = write_jedec_1,
6667 .read = read_memmapped,
6668 },
6669
6670 {
6671 .vendor = "SyncMOS/MoselVitelic",
6672 .name = "{F,S,V}29C51004B",
6673 .bustype = CHIP_BUSTYPE_PARALLEL,
6674 .manufacture_id = SYNCMOS_MVC_ID,
6675 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006676 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006677 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006678 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006679 .tested = TEST_UNTESTED,
6680 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006681 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006682 .block_erasers =
6683 {
6684 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006685 .eraseblocks = { {1024, 512} },
6686 .block_erase = erase_sector_jedec,
6687 }, {
6688 .eraseblocks = { {512 * 1024, 1} },
6689 .block_erase = erase_chip_block_jedec,
6690 },
6691 },
6692 .write = write_jedec_1,
6693 .read = read_memmapped,
6694 },
6695
6696 {
6697 .vendor = "SyncMOS/MoselVitelic",
6698 .name = "{F,S,V}29C51004T",
6699 .bustype = CHIP_BUSTYPE_PARALLEL,
6700 .manufacture_id = SYNCMOS_MVC_ID,
6701 .model_id = SM_MVC_29C51004T,
6702 .total_size = 512,
6703 .page_size = 1024,
6704 .feature_bits = FEATURE_EITHER_RESET,
6705 .tested = TEST_UNTESTED,
6706 .probe = probe_jedec,
6707 .probe_timing = TIMING_ZERO,
6708 .block_erasers =
6709 {
6710 {
6711 .eraseblocks = { {1024, 512} },
6712 .block_erase = erase_sector_jedec,
6713 }, {
6714 .eraseblocks = { {512 * 1024, 1} },
6715 .block_erase = erase_chip_block_jedec,
6716 },
6717 },
6718 .write = write_jedec_1,
6719 .read = read_memmapped,
6720 },
6721
6722 {
6723 .vendor = "SyncMOS/MoselVitelic",
6724 .name = "{S,V}29C31004B",
6725 .bustype = CHIP_BUSTYPE_PARALLEL,
6726 .manufacture_id = SYNCMOS_MVC_ID,
6727 .model_id = SM_MVC_29C31004B,
6728 .total_size = 512,
6729 .page_size = 1024,
6730 .feature_bits = FEATURE_EITHER_RESET,
6731 .tested = TEST_UNTESTED,
6732 .probe = probe_jedec,
6733 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6734 .block_erasers =
6735 {
6736 {
6737 .eraseblocks = { {1024, 512} },
6738 .block_erase = erase_sector_jedec,
6739 }, {
6740 .eraseblocks = { {512 * 1024, 1} },
6741 .block_erase = erase_chip_block_jedec,
6742 },
6743 },
6744 .write = write_jedec_1,
6745 .read = read_memmapped,
6746 },
6747
6748 {
6749 .vendor = "SyncMOS/MoselVitelic",
6750 .name = "{S,V}29C31004T",
6751 .bustype = CHIP_BUSTYPE_PARALLEL,
6752 .manufacture_id = SYNCMOS_MVC_ID,
6753 .model_id = SM_MVC_29C31004T,
6754 .total_size = 512,
6755 .page_size = 1024,
6756 .feature_bits = FEATURE_EITHER_RESET,
6757 .tested = TEST_UNTESTED,
6758 .probe = probe_jedec,
6759 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6760 .block_erasers =
6761 {
6762 {
6763 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006764 .block_erase = erase_sector_jedec,
6765 }, {
6766 .eraseblocks = { {512 * 1024, 1} },
6767 .block_erase = erase_chip_block_jedec,
6768 },
6769 },
Sean Nelson35727f72010-01-28 23:55:12 +00006770 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006771 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006772 },
6773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006774 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006775 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006776 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006777 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006778 .manufacture_id = TI_OLD_ID,
6779 .model_id = TI_TMS29F002RB,
6780 .total_size = 256,
6781 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006782 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006783 .tested = TEST_UNTESTED,
6784 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006785 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006786 .block_erasers =
6787 {
6788 {
6789 .eraseblocks = {
6790 {16 * 1024, 1},
6791 {8 * 1024, 2},
6792 {32 * 1024, 1},
6793 {64 * 1024, 3},
6794 },
6795 .block_erase = erase_sector_jedec,
6796 }, {
6797 .eraseblocks = { {256 * 1024, 1} },
6798 .block_erase = erase_chip_block_jedec,
6799 },
6800 },
Sean Nelson35727f72010-01-28 23:55:12 +00006801 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006802 .read = read_memmapped,
6803 },
6804
6805 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006806 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006807 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006808 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006809 .manufacture_id = TI_OLD_ID,
6810 .model_id = TI_TMS29F002RT,
6811 .total_size = 256,
6812 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006813 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006814 .tested = TEST_UNTESTED,
6815 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006816 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006817 .block_erasers =
6818 {
6819 {
6820 .eraseblocks = {
6821 {64 * 1024, 3},
6822 {32 * 1024, 1},
6823 {8 * 1024, 2},
6824 {16 * 1024, 1},
6825 },
6826 .block_erase = erase_sector_jedec,
6827 }, {
6828 .eraseblocks = { {256 * 1024, 1} },
6829 .block_erase = erase_chip_block_jedec,
6830 },
6831 },
Sean Nelson35727f72010-01-28 23:55:12 +00006832 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006833 .read = read_memmapped,
6834 },
6835
6836 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006837 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006838 .name = "W25Q80",
6839 .bustype = CHIP_BUSTYPE_SPI,
6840 .manufacture_id = WINBOND_NEX_ID,
6841 .model_id = W_25Q80,
6842 .total_size = 1024,
6843 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00006844 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006845 .probe = probe_spi_rdid,
6846 .probe_timing = TIMING_ZERO,
6847 .block_erasers =
6848 {
6849 {
6850 .eraseblocks = { {4 * 1024, 256} },
6851 .block_erase = spi_block_erase_20,
6852 }, {
6853 .eraseblocks = { {32 * 1024, 32} },
6854 .block_erase = spi_block_erase_52,
6855 }, {
6856 .eraseblocks = { {64 * 1024, 16} },
6857 .block_erase = spi_block_erase_d8,
6858 }, {
6859 .eraseblocks = { {1024 * 1024, 1} },
6860 .block_erase = spi_block_erase_60,
6861 }, {
6862 .eraseblocks = { {1024 * 1024, 1} },
6863 .block_erase = spi_block_erase_c7,
6864 }
6865 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006866 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006867 .write = spi_chip_write_256,
6868 .read = spi_chip_read,
6869 },
6870
6871 {
6872 .vendor = "Winbond",
6873 .name = "W25Q16",
6874 .bustype = CHIP_BUSTYPE_SPI,
6875 .manufacture_id = WINBOND_NEX_ID,
6876 .model_id = W_25Q16,
6877 .total_size = 2048,
6878 .page_size = 256,
6879 .tested = TEST_UNTESTED,
6880 .probe = probe_spi_rdid,
6881 .probe_timing = TIMING_ZERO,
6882 .block_erasers =
6883 {
6884 {
6885 .eraseblocks = { {4 * 1024, 512} },
6886 .block_erase = spi_block_erase_20,
6887 }, {
6888 .eraseblocks = { {32 * 1024, 64} },
6889 .block_erase = spi_block_erase_52,
6890 }, {
6891 .eraseblocks = { {64 * 1024, 32} },
6892 .block_erase = spi_block_erase_d8,
6893 }, {
6894 .eraseblocks = { {2 * 1024 * 1024, 1} },
6895 .block_erase = spi_block_erase_60,
6896 }, {
6897 .eraseblocks = { {2 * 1024 * 1024, 1} },
6898 .block_erase = spi_block_erase_c7,
6899 }
6900 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006901 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006902 .write = spi_chip_write_256,
6903 .read = spi_chip_read,
6904 },
6905
6906 {
6907 .vendor = "Winbond",
6908 .name = "W25Q32",
6909 .bustype = CHIP_BUSTYPE_SPI,
6910 .manufacture_id = WINBOND_NEX_ID,
6911 .model_id = W_25Q32,
6912 .total_size = 4096,
6913 .page_size = 256,
6914 .tested = TEST_UNTESTED,
6915 .probe = probe_spi_rdid,
6916 .probe_timing = TIMING_ZERO,
6917 .block_erasers =
6918 {
6919 {
6920 .eraseblocks = { {4 * 1024, 1024} },
6921 .block_erase = spi_block_erase_20,
6922 }, {
6923 .eraseblocks = { {32 * 1024, 128} },
6924 .block_erase = spi_block_erase_52,
6925 }, {
6926 .eraseblocks = { {64 * 1024, 64} },
6927 .block_erase = spi_block_erase_d8,
6928 }, {
6929 .eraseblocks = { {4 * 1024 * 1024, 1} },
6930 .block_erase = spi_block_erase_60,
6931 }, {
6932 .eraseblocks = { {4 * 1024 * 1024, 1} },
6933 .block_erase = spi_block_erase_c7,
6934 }
6935 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006936 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006937 .write = spi_chip_write_256,
6938 .read = spi_chip_read,
6939 },
6940
6941 {
6942 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006943 .name = "W25Q64",
6944 .bustype = CHIP_BUSTYPE_SPI,
6945 .manufacture_id = WINBOND_NEX_ID,
6946 .model_id = W_25Q64,
6947 .total_size = 8192,
6948 .page_size = 256,
6949 .tested = TEST_OK_PRW,
6950 .probe = probe_spi_rdid,
6951 .probe_timing = TIMING_ZERO,
6952 .block_erasers =
6953 {
6954 {
6955 .eraseblocks = { {4 * 1024, 2048} },
6956 .block_erase = spi_block_erase_20,
6957 }, {
6958 .eraseblocks = { {32 * 1024, 256} },
6959 .block_erase = spi_block_erase_52,
6960 }, {
6961 .eraseblocks = { {64 * 1024, 128} },
6962 .block_erase = spi_block_erase_d8,
6963 }, {
6964 .eraseblocks = { {8 * 1024 * 1024, 1} },
6965 .block_erase = spi_block_erase_60,
6966 }, {
6967 .eraseblocks = { {8 * 1024 * 1024, 1} },
6968 .block_erase = spi_block_erase_c7,
6969 }
6970 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006971 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006972 .write = spi_chip_write_256,
6973 .read = spi_chip_read,
6974 },
6975
6976 {
6977 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006978 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006979 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006980 .manufacture_id = WINBOND_NEX_ID,
6981 .model_id = W_25X10,
6982 .total_size = 128,
6983 .page_size = 256,
6984 .tested = TEST_UNTESTED,
6985 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006986 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006987 .block_erasers =
6988 {
6989 {
6990 .eraseblocks = { {4 * 1024, 32} },
6991 .block_erase = spi_block_erase_20,
6992 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006993 .eraseblocks = { {64 * 1024, 2} },
6994 .block_erase = spi_block_erase_d8,
6995 }, {
6996 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006997 .block_erase = spi_block_erase_c7,
6998 }
6999 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007000 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007001 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007002 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007003 },
7004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007005 {
7006 .vendor = "Winbond",
7007 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007009 .manufacture_id = WINBOND_NEX_ID,
7010 .model_id = W_25X20,
7011 .total_size = 256,
7012 .page_size = 256,
7013 .tested = TEST_UNTESTED,
7014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007015 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007016 .block_erasers =
7017 {
7018 {
7019 .eraseblocks = { {4 * 1024, 64} },
7020 .block_erase = spi_block_erase_20,
7021 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007022 .eraseblocks = { {64 * 1024, 4} },
7023 .block_erase = spi_block_erase_d8,
7024 }, {
7025 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007026 .block_erase = spi_block_erase_c7,
7027 }
7028 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007029 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007030 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007031 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007032 },
7033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007034 {
7035 .vendor = "Winbond",
7036 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007037 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007038 .manufacture_id = WINBOND_NEX_ID,
7039 .model_id = W_25X40,
7040 .total_size = 512,
7041 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007042 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007043 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007044 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007045 .block_erasers =
7046 {
7047 {
7048 .eraseblocks = { {4 * 1024, 128} },
7049 .block_erase = spi_block_erase_20,
7050 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007051 .eraseblocks = { {64 * 1024, 8} },
7052 .block_erase = spi_block_erase_d8,
7053 }, {
7054 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007055 .block_erase = spi_block_erase_c7,
7056 }
7057 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007058 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007059 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007060 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007061 },
7062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007063 {
7064 .vendor = "Winbond",
7065 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007066 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007067 .manufacture_id = WINBOND_NEX_ID,
7068 .model_id = W_25X80,
7069 .total_size = 1024,
7070 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007071 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007073 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007074 .block_erasers =
7075 {
7076 {
7077 .eraseblocks = { {4 * 1024, 256} },
7078 .block_erase = spi_block_erase_20,
7079 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007080 .eraseblocks = { {64 * 1024, 16} },
7081 .block_erase = spi_block_erase_d8,
7082 }, {
7083 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007084 .block_erase = spi_block_erase_c7,
7085 }
7086 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007087 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007088 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007089 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007090 },
7091
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007092 {
7093 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007094 .name = "W25x16",
7095 .bustype = CHIP_BUSTYPE_SPI,
7096 .manufacture_id = WINBOND_NEX_ID,
7097 .model_id = W_25X16,
7098 .total_size = 2048,
7099 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007100 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00007101 .probe = probe_spi_rdid,
7102 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007103 .block_erasers =
7104 {
7105 {
7106 .eraseblocks = { {4 * 1024, 512} },
7107 .block_erase = spi_block_erase_20,
7108 }, {
7109 .eraseblocks = { {32 * 1024, 64} },
7110 .block_erase = spi_block_erase_52,
7111 }, {
7112 .eraseblocks = { {64 * 1024, 32} },
7113 .block_erase = spi_block_erase_d8,
7114 }, {
7115 .eraseblocks = { {2 * 1024 * 1024, 1} },
7116 .block_erase = spi_block_erase_60,
7117 }, {
7118 .eraseblocks = { {2 * 1024 * 1024, 1} },
7119 .block_erase = spi_block_erase_c7,
7120 }
7121 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007122 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007123 .write = spi_chip_write_256,
7124 .read = spi_chip_read,
7125 },
7126
7127 {
7128 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007129 .name = "W25x32",
7130 .bustype = CHIP_BUSTYPE_SPI,
7131 .manufacture_id = WINBOND_NEX_ID,
7132 .model_id = W_25X32,
7133 .total_size = 4096,
7134 .page_size = 256,
7135 .tested = TEST_OK_PROBE,
7136 .probe = probe_spi_rdid,
7137 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007138 .block_erasers =
7139 {
7140 {
7141 .eraseblocks = { {4 * 1024, 1024} },
7142 .block_erase = spi_block_erase_20,
7143 }, {
7144 .eraseblocks = { {32 * 1024, 128} },
7145 .block_erase = spi_block_erase_52,
7146 }, {
7147 .eraseblocks = { {64 * 1024, 64} },
7148 .block_erase = spi_block_erase_d8,
7149 }, {
7150 .eraseblocks = { {4 * 1024 * 1024, 1} },
7151 .block_erase = spi_block_erase_60,
7152 }, {
7153 .eraseblocks = { {4 * 1024 * 1024, 1} },
7154 .block_erase = spi_block_erase_c7,
7155 }
7156 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007157 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007158 .write = spi_chip_write_256,
7159 .read = spi_chip_read,
7160 },
7161
7162 {
7163 .vendor = "Winbond",
7164 .name = "W25x64",
7165 .bustype = CHIP_BUSTYPE_SPI,
7166 .manufacture_id = WINBOND_NEX_ID,
7167 .model_id = W_25X64,
7168 .total_size = 8192,
7169 .page_size = 256,
7170 .tested = TEST_UNTESTED,
7171 .probe = probe_spi_rdid,
7172 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007173 .block_erasers =
7174 {
7175 {
7176 .eraseblocks = { {4 * 1024, 2048} },
7177 .block_erase = spi_block_erase_20,
7178 }, {
7179 .eraseblocks = { {32 * 1024, 256} },
7180 .block_erase = spi_block_erase_52,
7181 }, {
7182 .eraseblocks = { {64 * 1024, 128} },
7183 .block_erase = spi_block_erase_d8,
7184 }, {
7185 .eraseblocks = { {8 * 1024 * 1024, 1} },
7186 .block_erase = spi_block_erase_60,
7187 }, {
7188 .eraseblocks = { {8 * 1024 * 1024, 1} },
7189 .block_erase = spi_block_erase_c7,
7190 }
7191 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007192 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007193 .write = spi_chip_write_256,
7194 .read = spi_chip_read,
7195 },
7196
7197 {
7198 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007199 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007200 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007201 .manufacture_id = WINBOND_ID,
7202 .model_id = W_29C011,
7203 .total_size = 128,
7204 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007205 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00007206 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007207 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007208 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007209 .block_erasers =
7210 {
7211 {
7212 .eraseblocks = { {128 * 1024, 1} },
7213 .block_erase = erase_chip_block_jedec,
7214 }
7215 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007216 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007217 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007218 },
7219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007220 {
7221 .vendor = "Winbond",
7222 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00007223 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007224 .manufacture_id = WINBOND_ID,
7225 .model_id = W_29C020C,
7226 .total_size = 256,
7227 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007228 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007229 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007230 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007231 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007232 .block_erasers =
7233 {
7234 {
7235 .eraseblocks = { {256 * 1024, 1} },
7236 .block_erase = erase_chip_block_jedec,
7237 }
7238 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007239 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007240 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007241 },
7242
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007243 {
7244 .vendor = "Winbond",
7245 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007246 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007247 .manufacture_id = WINBOND_ID,
7248 .model_id = W_29C040P,
7249 .total_size = 512,
7250 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007251 .feature_bits = FEATURE_LONG_RESET,
7252 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007253 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007254 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007255 .block_erasers =
7256 {
7257 {
7258 .eraseblocks = { {512 * 1024, 1} },
7259 .block_erase = erase_chip_block_jedec,
7260 }
7261 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007262 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007263 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007264 },
7265
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007266 {
7267 .vendor = "Winbond",
7268 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007269 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007270 .manufacture_id = WINBOND_ID,
7271 .model_id = W_29C011,
7272 .total_size = 128,
7273 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007274 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007275 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007276 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007277 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007278 .block_erasers =
7279 {
7280 {
7281 .eraseblocks = { {128 * 1024, 1} },
7282 .block_erase = erase_chip_block_jedec,
7283 }
7284 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007285 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007286 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007287 },
7288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007289 {
7290 .vendor = "Winbond",
7291 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007292 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007293 .manufacture_id = WINBOND_ID,
7294 .model_id = W_39V040A,
7295 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007296 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007297 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00007298 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007299 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007300 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007301 .block_erasers =
7302 {
7303 {
7304 .eraseblocks = { {64 * 1024, 8} },
7305 .block_erase = erase_sector_jedec,
7306 }, {
7307 .eraseblocks = { {512 * 1024, 1} },
7308 .block_erase = erase_chip_block_jedec,
7309 }
7310 },
Sean Nelson35727f72010-01-28 23:55:12 +00007311 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007313 },
7314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007315 {
7316 .vendor = "Winbond",
7317 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007318 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007319 .manufacture_id = WINBOND_ID,
7320 .model_id = W_39V040B,
7321 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007322 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007323 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00007324 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007325 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007326 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007327 .block_erasers =
7328 {
7329 {
7330 .eraseblocks = { {64 * 1024, 8} },
7331 .block_erase = erase_sector_jedec,
7332 }, {
7333 .eraseblocks = { {512 * 1024, 1} },
7334 .block_erase = erase_chip_block_jedec,
7335 }
7336 },
Sean Nelson35727f72010-01-28 23:55:12 +00007337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007339 },
7340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007341 {
7342 .vendor = "Winbond",
7343 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007344 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007345 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00007346 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007347 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007348 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007349 .feature_bits = FEATURE_EITHER_RESET,
7350 .tested = TEST_UNTESTED,
7351 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007352 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007353 .block_erasers =
7354 {
7355 {
7356 .eraseblocks = { {64 * 1024, 8} },
7357 .block_erase = erase_sector_jedec,
7358 }, {
7359 .eraseblocks = { {512 * 1024, 1} },
7360 .block_erase = erase_chip_block_jedec,
7361 }
7362 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007363 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007364 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007365 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007366 },
7367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007368 {
7369 .vendor = "Winbond",
7370 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007371 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007372 .manufacture_id = WINBOND_ID,
7373 .model_id = W_39V040FA,
7374 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007375 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007376 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00007377 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007378 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007379 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007380 .block_erasers =
7381 {
7382 {
7383 .eraseblocks = { {4 * 1024, 128} },
7384 .block_erase = erase_block_jedec,
7385 }, {
7386 .eraseblocks = { {64 * 1024, 8} },
7387 .block_erase = erase_sector_jedec,
7388 }, {
7389 .eraseblocks = { {512 * 1024, 1} },
7390 .block_erase = erase_chip_block_jedec,
7391 }
7392 },
Michael Karcherc9b63412010-05-30 16:55:18 +00007393 .printlock = printlock_sst_fwhub,
7394 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007395 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007397 },
7398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007399 {
7400 .vendor = "Winbond",
7401 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007402 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007403 .manufacture_id = WINBOND_ID,
7404 .model_id = W_39V080A,
7405 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007406 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007407 .feature_bits = FEATURE_EITHER_RESET,
7408 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007409 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007410 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007411 .block_erasers =
7412 {
7413 {
7414 .eraseblocks = { {64 * 1024, 16} },
7415 .block_erase = erase_sector_jedec,
7416 }, {
7417 .eraseblocks = { {1024 * 1024, 1} },
7418 .block_erase = erase_chip_block_jedec,
7419 }
7420 },
Sean Nelson35727f72010-01-28 23:55:12 +00007421 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007422 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007423 },
7424
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007425 {
7426 .vendor = "Winbond",
7427 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00007428 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007429 .manufacture_id = WINBOND_ID,
7430 .model_id = W_49F002U,
7431 .total_size = 256,
7432 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007433 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00007434 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007435 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007436 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007437 .block_erasers =
7438 {
7439 {
7440 .eraseblocks = {
7441 {128 * 1024, 1},
7442 {96 * 1024, 1},
7443 {8 * 1024, 2},
7444 {16 * 1024, 1},
7445 },
7446 .block_erase = erase_sector_jedec,
7447 }, {
7448 .eraseblocks = { {256 * 1024, 1} },
7449 .block_erase = erase_chip_block_jedec,
7450 }
7451 },
Sean Nelson35727f72010-01-28 23:55:12 +00007452 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007453 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007454 },
7455
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007456 {
7457 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007458 .name = "W49F020",
7459 .bustype = CHIP_BUSTYPE_PARALLEL,
7460 .manufacture_id = WINBOND_ID,
7461 .model_id = W_49F020,
7462 .total_size = 256,
7463 .page_size = 128,
7464 .feature_bits = FEATURE_EITHER_RESET,
7465 .tested = TEST_OK_PROBE,
7466 .probe = probe_jedec,
7467 .probe_timing = 10,
7468 .block_erasers =
7469 {
7470 {
7471 .eraseblocks = { {256 * 1024, 1} },
7472 .block_erase = erase_chip_block_jedec,
7473 }
7474 },
7475 .write = write_jedec_1,
7476 .read = read_memmapped,
7477 },
7478
7479 {
7480 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007481 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007482 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007483 .manufacture_id = WINBOND_ID,
7484 .model_id = W_49V002A,
7485 .total_size = 256,
7486 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007487 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007488 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007489 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007490 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007491 .block_erasers =
7492 {
7493 {
7494 .eraseblocks = {
7495 {64 * 1024, 3},
7496 {32 * 1024, 1},
7497 {8 * 1024, 2},
7498 {16 * 1024, 1},
7499 },
7500 .block_erase = erase_sector_jedec,
7501 }, {
7502 .eraseblocks = { {256 * 1024, 1} },
7503 .block_erase = erase_chip_block_jedec,
7504 }
7505 },
Sean Nelson35727f72010-01-28 23:55:12 +00007506 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007507 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007508 },
7509
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007510 {
7511 .vendor = "Winbond",
7512 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007513 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007514 .manufacture_id = WINBOND_ID,
7515 .model_id = W_49V002FA,
7516 .total_size = 256,
7517 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007518 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00007519 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007520 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007521 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007522 .block_erasers =
7523 {
7524 {
7525 .eraseblocks = {
7526 {64 * 1024, 3},
7527 {32 * 1024, 1},
7528 {8 * 1024, 2},
7529 {16 * 1024, 1},
7530 },
7531 .block_erase = erase_sector_jedec,
7532 }, {
7533 .eraseblocks = { {256 * 1024, 1} },
7534 .block_erase = erase_chip_block_jedec,
7535 }
7536 },
Sean Nelson35727f72010-01-28 23:55:12 +00007537 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007538 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007539 },
7540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007541 {
7542 .vendor = "Winbond",
7543 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007544 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007545 .manufacture_id = WINBOND_ID,
7546 .model_id = W_39V080FA,
7547 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007548 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007549 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007550 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007551 .probe = probe_jedec,
7552 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007553 .block_erasers =
7554 {
7555 {
7556 .eraseblocks = { {64 * 1024, 16}, },
7557 .block_erase = erase_sector_jedec,
7558 }, {
7559 .eraseblocks = { {1024 * 1024, 1} },
7560 .block_erase = erase_chip_block_jedec,
7561 }
7562 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007563 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007564 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007565 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007566 },
7567
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007568 {
7569 .vendor = "Winbond",
7570 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007571 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007572 .manufacture_id = WINBOND_ID,
7573 .model_id = W_39V080FA_DM,
7574 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007575 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007576 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007577 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007578 .probe = probe_jedec,
7579 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007580 .block_erasers =
7581 {
7582 {
7583 .eraseblocks = { {64 * 1024, 8}, },
7584 .block_erase = erase_sector_jedec,
7585 }, {
7586 .eraseblocks = { {512 * 1024, 1} },
7587 .block_erase = erase_chip_block_jedec,
7588 }
7589 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007590 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007591 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007593 },
7594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007595 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007596 .vendor = "AMIC",
7597 .name = "unknown AMIC SPI chip",
7598 .bustype = CHIP_BUSTYPE_SPI,
7599 .manufacture_id = AMIC_ID,
7600 .model_id = GENERIC_DEVICE_ID,
7601 .total_size = 0,
7602 .page_size = 256,
7603 .tested = TEST_BAD_PREW,
7604 .probe = probe_spi_rdid4,
7605 .probe_timing = TIMING_ZERO,
7606 .write = NULL,
7607 .read = NULL,
7608 },
7609
7610 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007611 .vendor = "Atmel",
7612 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007613 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007614 .manufacture_id = ATMEL_ID,
7615 .model_id = GENERIC_DEVICE_ID,
7616 .total_size = 0,
7617 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007618 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007619 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007620 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007621 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007622 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007623 },
7624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007625 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007626 .vendor = "Eon",
7627 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007628 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007629 .manufacture_id = EON_ID_NOPREFIX,
7630 .model_id = GENERIC_DEVICE_ID,
7631 .total_size = 0,
7632 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007633 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007634 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007635 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007636 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007637 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007638 },
7639
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007640 {
7641 .vendor = "Macronix",
7642 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007643 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007644 .manufacture_id = MX_ID,
7645 .model_id = GENERIC_DEVICE_ID,
7646 .total_size = 0,
7647 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007648 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007649 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007650 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007651 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007652 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007653 },
7654
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007655 {
7656 .vendor = "PMC",
7657 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007658 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007659 .manufacture_id = PMC_ID,
7660 .model_id = GENERIC_DEVICE_ID,
7661 .total_size = 0,
7662 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007663 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007664 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007665 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007666 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007667 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007668 },
7669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007670 {
7671 .vendor = "SST",
7672 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007674 .manufacture_id = SST_ID,
7675 .model_id = GENERIC_DEVICE_ID,
7676 .total_size = 0,
7677 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007678 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007680 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007681 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007682 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007683 },
7684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007685 {
7686 .vendor = "ST",
7687 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007688 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007689 .manufacture_id = ST_ID,
7690 .model_id = GENERIC_DEVICE_ID,
7691 .total_size = 0,
7692 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007693 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007694 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007695 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007696 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007697 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007698 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007699
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007700 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007701 .vendor = "Sanyo",
7702 .name = "unknown Sanyo SPI chip",
7703 .bustype = CHIP_BUSTYPE_SPI,
7704 .manufacture_id = SANYO_ID,
7705 .model_id = GENERIC_DEVICE_ID,
7706 .total_size = 0,
7707 .page_size = 256,
7708 .tested = TEST_BAD_PREW,
7709 .probe = probe_spi_rdid,
7710 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007711 .write = NULL,
7712 .read = NULL,
7713 },
7714
7715 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007716 .vendor = "Generic",
7717 .name = "unknown SPI chip (RDID)",
7718 .bustype = CHIP_BUSTYPE_SPI,
7719 .manufacture_id = GENERIC_MANUF_ID,
7720 .model_id = GENERIC_DEVICE_ID,
7721 .total_size = 0,
7722 .page_size = 256,
7723 .tested = TEST_BAD_PREW,
7724 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007725 .write = NULL,
7726 },
7727 {
7728 .vendor = "Generic",
7729 .name = "unknown SPI chip (REMS)",
7730 .bustype = CHIP_BUSTYPE_SPI,
7731 .manufacture_id = GENERIC_MANUF_ID,
7732 .model_id = GENERIC_DEVICE_ID,
7733 .total_size = 0,
7734 .page_size = 256,
7735 .tested = TEST_BAD_PREW,
7736 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007737 .write = NULL,
7738 },
7739
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007740 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007741};