blob: 3ca46a1bba3d5d9151793fc2d151b1b0e3d6dcc3 [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +000068 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +000069 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000278 .vendor = "AMIC",
279 .name = "A25L05PT",
280 .bustype = CHIP_BUSTYPE_SPI,
281 .manufacture_id = AMIC_ID,
282 .model_id = AMIC_A25L05PT,
283 .total_size = 64,
284 .page_size = 256,
285 .tested = TEST_UNTESTED,
286 .probe = probe_spi_rdid4,
287 .probe_timing = TIMING_ZERO,
288 .block_erasers =
289 {
290 {
291 .eraseblocks = {
292 {32 * 1024, 1},
293 {16 * 1024, 1},
294 {8 * 1024, 1},
295 {4 * 1024, 2},
296 },
297 .block_erase = spi_block_erase_d8,
298 }, {
299 .eraseblocks = { {64 * 1024, 1} },
300 .block_erase = spi_block_erase_c7,
301 }
302 },
303 .unlock = spi_disable_blockprotect,
304 .write = spi_chip_write_256,
305 .read = spi_chip_read,
306 },
307
308 {
309 .vendor = "AMIC",
310 .name = "A25L05PU",
311 .bustype = CHIP_BUSTYPE_SPI,
312 .manufacture_id = AMIC_ID,
313 .model_id = AMIC_A25L05PU,
314 .total_size = 64,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid4,
318 .probe_timing = TIMING_ZERO,
319 .block_erasers =
320 {
321 {
322 .eraseblocks = {
323 {4 * 1024, 2},
324 {8 * 1024, 1},
325 {16 * 1024, 1},
326 {32 * 1024, 1},
327 },
328 .block_erase = spi_block_erase_d8,
329 }, {
330 .eraseblocks = { {64 * 1024, 1} },
331 .block_erase = spi_block_erase_c7,
332 }
333 },
334 .unlock = spi_disable_blockprotect,
335 .write = spi_chip_write_256,
336 .read = spi_chip_read,
337 },
338
339 {
340 .vendor = "AMIC",
341 .name = "A25L10PT",
342 .bustype = CHIP_BUSTYPE_SPI,
343 .manufacture_id = AMIC_ID,
344 .model_id = AMIC_A25L10PT,
345 .total_size = 128,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid4,
349 .probe_timing = TIMING_ZERO,
350 .block_erasers =
351 {
352 {
353 .eraseblocks = {
354 {64 * 1024, 1},
355 {32 * 1024, 1},
356 {16 * 1024, 1},
357 {8 * 1024, 1},
358 {4 * 1024, 2},
359 },
360 .block_erase = spi_block_erase_d8,
361 }, {
362 .eraseblocks = { {128 * 1024, 1} },
363 .block_erase = spi_block_erase_c7,
364 }
365 },
366 .unlock = spi_disable_blockprotect,
367 .write = spi_chip_write_256,
368 .read = spi_chip_read,
369 },
370
371 {
372 .vendor = "AMIC",
373 .name = "A25L10PU",
374 .bustype = CHIP_BUSTYPE_SPI,
375 .manufacture_id = AMIC_ID,
376 .model_id = AMIC_A25L10PU,
377 .total_size = 128,
378 .page_size = 256,
379 .tested = TEST_UNTESTED,
380 .probe = probe_spi_rdid4,
381 .probe_timing = TIMING_ZERO,
382 .block_erasers =
383 {
384 {
385 .eraseblocks = {
386 {4 * 1024, 2},
387 {8 * 1024, 1},
388 {16 * 1024, 1},
389 {32 * 1024, 1},
390 {64 * 1024, 1},
391 },
392 .block_erase = spi_block_erase_d8,
393 }, {
394 .eraseblocks = { {128 * 1024, 1} },
395 .block_erase = spi_block_erase_c7,
396 }
397 },
398 .unlock = spi_disable_blockprotect,
399 .write = spi_chip_write_256,
400 .read = spi_chip_read,
401 },
402
403 {
404 .vendor = "AMIC",
405 .name = "A25L20PT",
406 .bustype = CHIP_BUSTYPE_SPI,
407 .manufacture_id = AMIC_ID,
408 .model_id = AMIC_A25L20PT,
409 .total_size = 256,
410 .page_size = 256,
411 .tested = TEST_UNTESTED,
412 .probe = probe_spi_rdid4,
413 .probe_timing = TIMING_ZERO,
414 .block_erasers =
415 {
416 {
417 .eraseblocks = {
418 {64 * 1024, 3},
419 {32 * 1024, 1},
420 {16 * 1024, 1},
421 {8 * 1024, 1},
422 {4 * 1024, 2},
423 },
424 .block_erase = spi_block_erase_d8,
425 }, {
426 .eraseblocks = { {256 * 1024, 1} },
427 .block_erase = spi_block_erase_c7,
428 }
429 },
430 .unlock = spi_disable_blockprotect,
431 .write = spi_chip_write_256,
432 .read = spi_chip_read,
433 },
434
435 {
436 .vendor = "AMIC",
437 .name = "A25L20PU",
438 .bustype = CHIP_BUSTYPE_SPI,
439 .manufacture_id = AMIC_ID,
440 .model_id = AMIC_A25L20PU,
441 .total_size = 256,
442 .page_size = 256,
443 .tested = TEST_UNTESTED,
444 .probe = probe_spi_rdid4,
445 .probe_timing = TIMING_ZERO,
446 .block_erasers =
447 {
448 {
449 .eraseblocks = {
450 {4 * 1024, 2},
451 {8 * 1024, 1},
452 {16 * 1024, 1},
453 {32 * 1024, 1},
454 {64 * 1024, 3},
455 },
456 .block_erase = spi_block_erase_d8,
457 }, {
458 .eraseblocks = { {256 * 1024, 1} },
459 .block_erase = spi_block_erase_c7,
460 }
461 },
462 .unlock = spi_disable_blockprotect,
463 .write = spi_chip_write_256,
464 .read = spi_chip_read,
465 },
466
467 /* The A25L40P{T,U} chips are distinguished by their
468 * erase block layouts, but without any distinction in RDID.
469 * This inexplicable quirk was verified by Rudolf Marek
470 * and discussed on the flashrom mailing list on 2010-07-12.
471 */
472 {
473 .vendor = "AMIC",
474 .name = "A25L40PT",
475 .bustype = CHIP_BUSTYPE_SPI,
476 .manufacture_id = AMIC_ID,
477 .model_id = AMIC_A25L40PT,
478 .total_size = 512,
479 .page_size = 256,
480 .tested = TEST_OK_PRW,
481 .probe = probe_spi_rdid4,
482 .probe_timing = TIMING_ZERO,
483 .block_erasers =
484 {
485 {
486 .eraseblocks = {
487 {64 * 1024, 7},
488 {32 * 1024, 1},
489 {16 * 1024, 1},
490 {8 * 1024, 1},
491 {4 * 1024, 2},
492 },
493 .block_erase = spi_block_erase_d8,
494 }, {
495 .eraseblocks = { {512 * 1024, 1} },
496 .block_erase = spi_block_erase_c7,
497 }
498 },
499 .unlock = spi_disable_blockprotect,
500 .write = spi_chip_write_256,
501 .read = spi_chip_read,
502 },
503
504 {
505 .vendor = "AMIC",
506 .name = "A25L40PU",
507 .bustype = CHIP_BUSTYPE_SPI,
508 .manufacture_id = AMIC_ID,
509 .model_id = AMIC_A25L40PU,
510 .total_size = 512,
511 .page_size = 256,
512 .tested = TEST_OK_PRW,
513 .probe = probe_spi_rdid4,
514 .probe_timing = TIMING_ZERO,
515 .block_erasers =
516 {
517 {
518 .eraseblocks = {
519 {4 * 1024, 2},
520 {8 * 1024, 1},
521 {16 * 1024, 1},
522 {32 * 1024, 1},
523 {64 * 1024, 7},
524 },
525 .block_erase = spi_block_erase_d8,
526 }, {
527 .eraseblocks = { {512 * 1024, 1} },
528 .block_erase = spi_block_erase_c7,
529 }
530 },
531 .unlock = spi_disable_blockprotect,
532 .write = spi_chip_write_256,
533 .read = spi_chip_read,
534 },
535
536 {
537 .vendor = "AMIC",
538 .name = "A25L80P",
539 .bustype = CHIP_BUSTYPE_SPI,
540 .manufacture_id = AMIC_ID,
541 .model_id = AMIC_A25L80P,
542 .total_size = 1024,
543 .page_size = 256,
544 .tested = TEST_OK_PREW,
545 .probe = probe_spi_rdid4,
546 .probe_timing = TIMING_ZERO,
547 .block_erasers =
548 {
549 {
550 .eraseblocks = {
551 {4 * 1024, 2},
552 {8 * 1024, 1},
553 {16 * 1024, 1},
554 {32 * 1024, 1},
555 {64 * 1024, 15},
556 },
557 .block_erase = spi_block_erase_d8,
558 }, {
559 .eraseblocks = { {1024 * 1024, 1} },
560 .block_erase = spi_block_erase_c7,
561 }
562 },
563 .unlock = spi_disable_blockprotect,
564 .write = spi_chip_write_256,
565 .read = spi_chip_read,
566 },
567
568 {
569 .vendor = "AMIC",
570 .name = "A25L16PT",
571 .bustype = CHIP_BUSTYPE_SPI,
572 .manufacture_id = AMIC_ID,
573 .model_id = AMIC_A25L16PT,
574 .total_size = 2048,
575 .page_size = 256,
576 .tested = TEST_UNTESTED,
577 .probe = probe_spi_rdid4,
578 .probe_timing = TIMING_ZERO,
579 .block_erasers =
580 {
581 {
582 .eraseblocks = {
583 {64 * 1024, 31},
584 {32 * 1024, 1},
585 {16 * 1024, 1},
586 {8 * 1024, 1},
587 {4 * 1024, 2},
588 },
589 .block_erase = spi_block_erase_d8,
590 }, {
591 .eraseblocks = { {2048 * 1024, 1} },
592 .block_erase = spi_block_erase_60,
593 }, {
594 .eraseblocks = { {2048 * 1024, 1} },
595 .block_erase = spi_block_erase_c7,
596 }
597 },
598 .unlock = spi_disable_blockprotect,
599 .write = spi_chip_write_256,
600 .read = spi_chip_read,
601 },
602
603 {
604 .vendor = "AMIC",
605 .name = "A25L16PU",
606 .bustype = CHIP_BUSTYPE_SPI,
607 .manufacture_id = AMIC_ID,
608 .model_id = AMIC_A25L16PU,
609 .total_size = 2048,
610 .page_size = 256,
611 .tested = TEST_OK_PRW,
612 .probe = probe_spi_rdid4,
613 .probe_timing = TIMING_ZERO,
614 .block_erasers =
615 {
616 {
617 .eraseblocks = {
618 {4 * 1024, 2},
619 {8 * 1024, 1},
620 {16 * 1024, 1},
621 {32 * 1024, 1},
622 {64 * 1024, 31},
623 },
624 .block_erase = spi_block_erase_d8,
625 }, {
626 .eraseblocks = { {2048 * 1024, 1} },
627 .block_erase = spi_block_erase_60,
628 }, {
629 .eraseblocks = { {2048 * 1024, 1} },
630 .block_erase = spi_block_erase_c7,
631 }
632 },
633 .unlock = spi_disable_blockprotect,
634 .write = spi_chip_write_256,
635 .read = spi_chip_read,
636 },
637
638 {
639 .vendor = "AMIC",
Dan Lenski11617122010-07-29 15:00:40 +0000640 .name = "A25L512",
641 .bustype = CHIP_BUSTYPE_SPI,
642 .manufacture_id = AMIC_ID_NOPREFIX,
643 .model_id = AMIC_A25L512,
644 .total_size = 64,
645 .page_size = 256,
646 .tested = TEST_UNTESTED,
647 .probe = probe_spi_rdid,
648 .probe_timing = TIMING_ZERO,
649 .block_erasers =
650 {
651 {
652 .eraseblocks = { { 4 * 1024, 16 } },
653 .block_erase = spi_block_erase_20,
654 }, {
655 .eraseblocks = { { 64 * 1024, 1 } },
656 .block_erase = spi_block_erase_d8,
657 }, {
658 .eraseblocks = { { 64 * 1024, 1 } },
659 .block_erase = spi_block_erase_c7,
660 }
661 },
662 .unlock = spi_disable_blockprotect,
663 .write = spi_chip_write_256,
664 .read = spi_chip_read,
665 },
666
667 {
668 .vendor = "AMIC",
669 .name = "A25L010",
670 .bustype = CHIP_BUSTYPE_SPI,
671 .manufacture_id = AMIC_ID_NOPREFIX,
672 .model_id = AMIC_A25L010,
673 .total_size = 128,
674 .page_size = 256,
675 .tested = TEST_UNTESTED,
676 .probe = probe_spi_rdid,
677 .probe_timing = TIMING_ZERO,
678 .block_erasers =
679 {
680 {
681 .eraseblocks = { { 4 * 1024, 32 } },
682 .block_erase = spi_block_erase_20,
683 }, {
684 .eraseblocks = { { 64 * 1024, 2 } },
685 .block_erase = spi_block_erase_d8,
686 }, {
687 .eraseblocks = { { 128 * 1024, 1 } },
688 .block_erase = spi_block_erase_c7,
689 }
690 },
691 .unlock = spi_disable_blockprotect,
692 .write = spi_chip_write_256,
693 .read = spi_chip_read,
694 },
695
696 {
697 .vendor = "AMIC",
698 .name = "A25L020",
699 .bustype = CHIP_BUSTYPE_SPI,
700 .manufacture_id = AMIC_ID_NOPREFIX,
701 .model_id = AMIC_A25L020,
702 .total_size = 256,
703 .page_size = 256,
704 .tested = TEST_UNTESTED,
705 .probe = probe_spi_rdid,
706 .probe_timing = TIMING_ZERO,
707 .block_erasers =
708 {
709 {
710 .eraseblocks = { { 4 * 1024, 64 } },
711 .block_erase = spi_block_erase_20,
712 }, {
713 .eraseblocks = { { 64 * 1024, 4 } },
714 .block_erase = spi_block_erase_d8,
715 }, {
716 .eraseblocks = { { 256 * 1024, 1 } },
717 .block_erase = spi_block_erase_c7,
718 }
719 },
720 .unlock = spi_disable_blockprotect,
721 .write = spi_chip_write_256,
722 .read = spi_chip_read,
723 },
724
725 {
726 .vendor = "AMIC",
727 .name = "A25L040",
728 .bustype = CHIP_BUSTYPE_SPI,
729 .manufacture_id = AMIC_ID_NOPREFIX,
730 .model_id = AMIC_A25L040,
731 .total_size = 512,
732 .page_size = 256,
733 .tested = TEST_UNTESTED,
734 .probe = probe_spi_rdid,
735 .probe_timing = TIMING_ZERO,
736 .block_erasers =
737 {
738 {
739 .eraseblocks = { { 4 * 1024, 128 } },
740 .block_erase = spi_block_erase_20,
741 }, {
742 .eraseblocks = { { 64 * 1024, 8 } },
743 .block_erase = spi_block_erase_d8,
744 }, {
745 .eraseblocks = { { 512 * 1024, 1 } },
746 .block_erase = spi_block_erase_c7,
747 }
748 },
749 .unlock = spi_disable_blockprotect,
750 .write = spi_chip_write_256,
751 .read = spi_chip_read,
752 },
753
754 {
755 .vendor = "AMIC",
756 .name = "A25L080",
757 .bustype = CHIP_BUSTYPE_SPI,
758 .manufacture_id = AMIC_ID_NOPREFIX,
759 .model_id = AMIC_A25L080,
760 .total_size = 1024,
761 .page_size = 256,
762 .tested = TEST_UNTESTED,
763 .probe = probe_spi_rdid,
764 .probe_timing = TIMING_ZERO,
765 .block_erasers =
766 {
767 {
768 .eraseblocks = { { 4 * 1024, 256 } },
769 .block_erase = spi_block_erase_20,
770 }, {
771 .eraseblocks = { { 64 * 1024, 16 } },
772 .block_erase = spi_block_erase_d8,
773 }, {
774 .eraseblocks = { { 1024 * 1024, 1 } },
775 .block_erase = spi_block_erase_c7,
776 }
777 },
778 .unlock = spi_disable_blockprotect,
779 .write = spi_chip_write_256,
780 .read = spi_chip_read,
781 },
782
783 {
784 .vendor = "AMIC",
785 .name = "A25L016",
786 .bustype = CHIP_BUSTYPE_SPI,
787 .manufacture_id = AMIC_ID_NOPREFIX,
788 .model_id = AMIC_A25L016,
789 .total_size = 2048,
790 .page_size = 256,
791 .tested = TEST_UNTESTED,
792 .probe = probe_spi_rdid,
793 .probe_timing = TIMING_ZERO,
794 .block_erasers =
795 {
796 {
797 .eraseblocks = { { 4 * 1024, 512 } },
798 .block_erase = spi_block_erase_20,
799 }, {
800 .eraseblocks = { { 64 * 1024, 32 } },
801 .block_erase = spi_block_erase_d8,
802 }, {
803 .eraseblocks = { { 2048 * 1024, 1 } },
804 .block_erase = spi_block_erase_c7,
805 }
806 },
807 .unlock = spi_disable_blockprotect,
808 .write = spi_chip_write_256,
809 .read = spi_chip_read,
810 },
811
812 {
813 .vendor = "AMIC",
814 .name = "A25L032",
815 .bustype = CHIP_BUSTYPE_SPI,
816 .manufacture_id = AMIC_ID_NOPREFIX,
817 .model_id = AMIC_A25L032,
818 .total_size = 4096,
819 .page_size = 256,
820 .tested = TEST_UNTESTED,
821 .probe = probe_spi_rdid,
822 .probe_timing = TIMING_ZERO,
823 .block_erasers =
824 {
825 {
826 .eraseblocks = { { 4 * 1024, 1024 } },
827 .block_erase = spi_block_erase_20,
828 }, {
829 .eraseblocks = { { 64 * 1024, 64 } },
830 .block_erase = spi_block_erase_52,
831 }, {
832 .eraseblocks = { { 64 * 1024, 64 } },
833 .block_erase = spi_block_erase_d8,
834 }, {
835 .eraseblocks = { { 4096 * 1024, 1 } },
836 .block_erase = spi_block_erase_60,
837 }, {
838 .eraseblocks = { { 4096 * 1024, 1 } },
839 .block_erase = spi_block_erase_c7,
840 }
841 },
842 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
843 .write = spi_chip_write_256,
844 .read = spi_chip_read,
845 },
846
847 {
848 .vendor = "AMIC",
849 .name = "A25LQ032",
850 .bustype = CHIP_BUSTYPE_SPI,
851 .manufacture_id = AMIC_ID_NOPREFIX,
852 .model_id = AMIC_A25LQ032,
853 .total_size = 4096,
854 .page_size = 256,
855 .tested = TEST_UNTESTED,
856 .probe = probe_spi_rdid,
857 .probe_timing = TIMING_ZERO,
858 .block_erasers =
859 {
860 {
861 .eraseblocks = { { 4 * 1024, 1024 } },
862 .block_erase = spi_block_erase_20,
863 }, {
864 .eraseblocks = { { 64 * 1024, 64 } },
865 .block_erase = spi_block_erase_52,
866 }, {
867 .eraseblocks = { { 64 * 1024, 64 } },
868 .block_erase = spi_block_erase_d8,
869 }, {
870 .eraseblocks = { { 4096 * 1024, 1 } },
871 .block_erase = spi_block_erase_60,
872 }, {
873 .eraseblocks = { { 4096 * 1024, 1 } },
874 .block_erase = spi_block_erase_c7,
875 }
876 },
877 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
878 .write = spi_chip_write_256,
879 .read = spi_chip_read,
880 },
881
882 {
883 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000884 .name = "A29002B",
885 .bustype = CHIP_BUSTYPE_PARALLEL,
886 .manufacture_id = AMIC_ID_NOPREFIX,
887 .model_id = AMIC_A29002B,
888 .total_size = 256,
889 .page_size = 64 * 1024,
890 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
891 .tested = TEST_UNTESTED,
892 .probe = probe_jedec,
893 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
894 .block_erasers =
895 {
896 {
897 .eraseblocks = {
898 {16 * 1024, 1},
899 {8 * 1024, 2},
900 {32 * 1024, 1},
901 {64 * 1024, 3},
902 },
903 .block_erase = erase_sector_jedec,
904 }, {
905 .eraseblocks = { {256 * 1024, 1} },
906 .block_erase = erase_chip_block_jedec,
907 },
908 },
909 .write = write_jedec_1,
910 .read = read_memmapped,
911 },
912
913 {
914 .vendor = "AMIC",
915 .name = "A29002T",
916 .bustype = CHIP_BUSTYPE_PARALLEL,
917 .manufacture_id = AMIC_ID_NOPREFIX,
918 .model_id = AMIC_A29002T,
919 .total_size = 256,
920 .page_size = 64 * 1024,
921 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
922 .tested = TEST_OK_PRW,
923 .probe = probe_jedec,
924 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
925 .block_erasers =
926 {
927 {
928 .eraseblocks = {
929 {64 * 1024, 3},
930 {32 * 1024, 1},
931 {8 * 1024, 2},
932 {16 * 1024, 1},
933 },
934 .block_erase = erase_sector_jedec,
935 }, {
936 .eraseblocks = { {256 * 1024, 1} },
937 .block_erase = erase_chip_block_jedec,
938 },
939 },
940 .write = write_jedec_1,
941 .read = read_memmapped,
942 },
943
944 {
945 .vendor = "AMIC",
946 .name = "A29040B",
947 .bustype = CHIP_BUSTYPE_PARALLEL,
948 .manufacture_id = AMIC_ID_NOPREFIX,
949 .model_id = AMIC_A29040B,
950 .total_size = 512,
951 .page_size = 64 * 1024,
952 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
953 .tested = TEST_UNTESTED,
954 .probe = probe_jedec,
955 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
956 .block_erasers =
957 {
958 {
959 .eraseblocks = { {64 * 1024, 8} },
960 .block_erase = erase_sector_jedec,
961 }, {
962 .eraseblocks = { {512 * 1024, 1} },
963 .block_erase = erase_chip_block_jedec,
964 },
965 },
966 .write = write_jedec_1,
967 .read = read_memmapped,
968 },
969
970 {
971 .vendor = "AMIC",
972 .name = "A49LF040A",
973 .bustype = CHIP_BUSTYPE_LPC,
974 .manufacture_id = AMIC_ID_NOPREFIX,
975 .model_id = AMIC_A49LF040A,
976 .total_size = 512,
977 .page_size = 64 * 1024,
978 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
979 .tested = TEST_OK_PREW,
980 .probe = probe_jedec,
981 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
982 .block_erasers =
983 {
984 {
985 .eraseblocks = { {64 * 1024, 8} },
986 .block_erase = erase_block_jedec,
987 }, {
988 .eraseblocks = { {512 * 1024, 1} },
989 .block_erase = erase_chip_block_jedec,
990 }
991 },
992 .unlock = unlock_49fl00x,
993 .write = write_jedec_1,
994 .read = read_memmapped,
995 },
996
997 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .vendor = "ASD",
999 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +00001000 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .manufacture_id = ASD_ID,
1002 .model_id = ASD_AE49F2008,
1003 .total_size = 256,
1004 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001005 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 .tested = TEST_UNTESTED,
1007 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001008 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +00001009 .block_erasers =
1010 {
1011 {
1012 .eraseblocks = {
1013 {128 * 1024, 1},
1014 {96 * 1024, 1},
1015 {8 * 1024, 2},
1016 {16 * 1024, 1},
1017 },
1018 .block_erase = erase_sector_jedec,
1019 }, {
1020 .eraseblocks = { {256 * 1024, 1} },
1021 .block_erase = erase_chip_block_jedec,
1022 }
1023 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001025 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001026 },
1027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 {
1029 .vendor = "Atmel",
1030 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001031 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001032 .manufacture_id = ATMEL_ID,
1033 .model_id = AT_25DF021,
1034 .total_size = 256,
1035 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001036 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001037 .tested = TEST_UNTESTED,
1038 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001039 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001040 .block_erasers =
1041 {
1042 {
1043 .eraseblocks = { {4 * 1024, 64} },
1044 .block_erase = spi_block_erase_20,
1045 }, {
1046 .eraseblocks = { {32 * 1024, 8} },
1047 .block_erase = spi_block_erase_52,
1048 }, {
1049 .eraseblocks = { {64 * 1024, 4} },
1050 .block_erase = spi_block_erase_d8,
1051 }, {
1052 .eraseblocks = { {256 * 1024, 1} },
1053 .block_erase = spi_block_erase_60,
1054 }, {
1055 .eraseblocks = { {256 * 1024, 1} },
1056 .block_erase = spi_block_erase_c7,
1057 }
1058 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001059 .printlock = spi_prettyprint_status_register_at25df,
1060 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001061 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001062 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001063 },
1064
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001065 {
1066 .vendor = "Atmel",
1067 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001068 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001069 .manufacture_id = ATMEL_ID,
1070 .model_id = AT_25DF041A,
1071 .total_size = 512,
1072 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001073 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .tested = TEST_UNTESTED,
1075 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001076 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001077 .block_erasers =
1078 {
1079 {
1080 .eraseblocks = { {4 * 1024, 128} },
1081 .block_erase = spi_block_erase_20,
1082 }, {
1083 .eraseblocks = { {32 * 1024, 16} },
1084 .block_erase = spi_block_erase_52,
1085 }, {
1086 .eraseblocks = { {64 * 1024, 8} },
1087 .block_erase = spi_block_erase_d8,
1088 }, {
1089 .eraseblocks = { {512 * 1024, 1} },
1090 .block_erase = spi_block_erase_60,
1091 }, {
1092 .eraseblocks = { {512 * 1024, 1} },
1093 .block_erase = spi_block_erase_c7,
1094 }
1095 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001096 .printlock = spi_prettyprint_status_register_at25df,
1097 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001098 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001099 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001100 },
1101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001102 {
1103 .vendor = "Atmel",
1104 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001105 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001106 .manufacture_id = ATMEL_ID,
1107 .model_id = AT_25DF081,
1108 .total_size = 1024,
1109 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001110 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 .tested = TEST_UNTESTED,
1112 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001113 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001114 .block_erasers =
1115 {
1116 {
1117 .eraseblocks = { {4 * 1024, 256} },
1118 .block_erase = spi_block_erase_20,
1119 }, {
1120 .eraseblocks = { {32 * 1024, 32} },
1121 .block_erase = spi_block_erase_52,
1122 }, {
1123 .eraseblocks = { {64 * 1024, 16} },
1124 .block_erase = spi_block_erase_d8,
1125 }, {
1126 .eraseblocks = { {1024 * 1024, 1} },
1127 .block_erase = spi_block_erase_60,
1128 }, {
1129 .eraseblocks = { {1024 * 1024, 1} },
1130 .block_erase = spi_block_erase_c7,
1131 }
1132 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001133 .printlock = spi_prettyprint_status_register_at25df,
1134 .unlock = spi_disable_blockprotect_at25df,
1135 .write = spi_chip_write_256,
1136 .read = spi_chip_read,
1137 },
1138
1139 {
1140 .vendor = "Atmel",
1141 .name = "AT25DF081A",
1142 .bustype = CHIP_BUSTYPE_SPI,
1143 .manufacture_id = ATMEL_ID,
1144 .model_id = AT_25DF081A,
1145 .total_size = 1024,
1146 .page_size = 256,
1147 .feature_bits = FEATURE_WRSR_WREN,
1148 .tested = TEST_UNTESTED,
1149 .probe = probe_spi_rdid,
1150 .probe_timing = TIMING_ZERO,
1151 .block_erasers =
1152 {
1153 {
1154 .eraseblocks = { {4 * 1024, 256} },
1155 .block_erase = spi_block_erase_20,
1156 }, {
1157 .eraseblocks = { {32 * 1024, 32} },
1158 .block_erase = spi_block_erase_52,
1159 }, {
1160 .eraseblocks = { {64 * 1024, 16} },
1161 .block_erase = spi_block_erase_d8,
1162 }, {
1163 .eraseblocks = { {1024 * 1024, 1} },
1164 .block_erase = spi_block_erase_60,
1165 }, {
1166 .eraseblocks = { {1024 * 1024, 1} },
1167 .block_erase = spi_block_erase_c7,
1168 }
1169 },
1170 .printlock = spi_prettyprint_status_register_at25df_sec,
1171 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001172 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001173 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001174 },
1175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001176 {
1177 .vendor = "Atmel",
1178 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001179 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001180 .manufacture_id = ATMEL_ID,
1181 .model_id = AT_25DF161,
1182 .total_size = 2048,
1183 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001184 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001185 .tested = TEST_UNTESTED,
1186 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001187 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001188 .block_erasers =
1189 {
1190 {
1191 .eraseblocks = { {4 * 1024, 512} },
1192 .block_erase = spi_block_erase_20,
1193 }, {
1194 .eraseblocks = { {32 * 1024, 64} },
1195 .block_erase = spi_block_erase_52,
1196 }, {
1197 .eraseblocks = { {64 * 1024, 32} },
1198 .block_erase = spi_block_erase_d8,
1199 }, {
1200 .eraseblocks = { {2 * 1024 * 1024, 1} },
1201 .block_erase = spi_block_erase_60,
1202 }, {
1203 .eraseblocks = { {2 * 1024 * 1024, 1} },
1204 .block_erase = spi_block_erase_c7,
1205 }
1206 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001207 .printlock = spi_prettyprint_status_register_at25df_sec,
1208 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001209 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001210 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001211 },
1212
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001213 {
1214 .vendor = "Atmel",
1215 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001216 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001217 .manufacture_id = ATMEL_ID,
1218 .model_id = AT_25DF321,
1219 .total_size = 4096,
1220 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001221 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00001222 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001223 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001224 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001225 .block_erasers =
1226 {
1227 {
1228 .eraseblocks = { {4 * 1024, 1024} },
1229 .block_erase = spi_block_erase_20,
1230 }, {
1231 .eraseblocks = { {32 * 1024, 128} },
1232 .block_erase = spi_block_erase_52,
1233 }, {
1234 .eraseblocks = { {64 * 1024, 64} },
1235 .block_erase = spi_block_erase_d8,
1236 }, {
1237 .eraseblocks = { {4 * 1024 * 1024, 1} },
1238 .block_erase = spi_block_erase_60,
1239 }, {
1240 .eraseblocks = { {4 * 1024 * 1024, 1} },
1241 .block_erase = spi_block_erase_c7,
1242 }
1243 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001244 .printlock = spi_prettyprint_status_register_at25df,
1245 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001246 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001247 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001248 },
1249
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001250 {
1251 .vendor = "Atmel",
1252 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001253 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001254 .manufacture_id = ATMEL_ID,
1255 .model_id = AT_25DF321A,
1256 .total_size = 4096,
1257 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001258 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001259 .tested = TEST_UNTESTED,
1260 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001261 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001262 .block_erasers =
1263 {
1264 {
1265 .eraseblocks = { {4 * 1024, 1024} },
1266 .block_erase = spi_block_erase_20,
1267 }, {
1268 .eraseblocks = { {32 * 1024, 128} },
1269 .block_erase = spi_block_erase_52,
1270 }, {
1271 .eraseblocks = { {64 * 1024, 64} },
1272 .block_erase = spi_block_erase_d8,
1273 }, {
1274 .eraseblocks = { {4 * 1024 * 1024, 1} },
1275 .block_erase = spi_block_erase_60,
1276 }, {
1277 .eraseblocks = { {4 * 1024 * 1024, 1} },
1278 .block_erase = spi_block_erase_c7,
1279 }
1280 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001281 .printlock = spi_prettyprint_status_register_at25df_sec,
1282 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001283 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "Atmel",
1289 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001290 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = ATMEL_ID,
1292 .model_id = AT_25DF641,
1293 .total_size = 8192,
1294 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001295 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001296 .tested = TEST_UNTESTED,
1297 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001298 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001299 .block_erasers =
1300 {
1301 {
1302 .eraseblocks = { {4 * 1024, 2048} },
1303 .block_erase = spi_block_erase_20,
1304 }, {
1305 .eraseblocks = { {32 * 1024, 256} },
1306 .block_erase = spi_block_erase_52,
1307 }, {
1308 .eraseblocks = { {64 * 1024, 128} },
1309 .block_erase = spi_block_erase_d8,
1310 }, {
1311 .eraseblocks = { {8 * 1024 * 1024, 1} },
1312 .block_erase = spi_block_erase_60,
1313 }, {
1314 .eraseblocks = { {8 * 1024 * 1024, 1} },
1315 .block_erase = spi_block_erase_c7,
1316 }
1317 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001318 .printlock = spi_prettyprint_status_register_at25df_sec,
1319 .unlock = spi_disable_blockprotect_at25df_sec,
1320 .write = spi_chip_write_256,
1321 .read = spi_chip_read,
1322 },
1323
1324 {
1325 .vendor = "Atmel",
1326 .name = "AT25DQ161",
1327 .bustype = CHIP_BUSTYPE_SPI,
1328 .manufacture_id = ATMEL_ID,
1329 .model_id = AT_25DQ161,
1330 .total_size = 2048,
1331 .page_size = 256,
1332 .feature_bits = FEATURE_WRSR_WREN,
1333 .tested = TEST_UNTESTED,
1334 .probe = probe_spi_rdid,
1335 .probe_timing = TIMING_ZERO,
1336 .block_erasers =
1337 {
1338 {
1339 .eraseblocks = { {4 * 1024, 512} },
1340 .block_erase = spi_block_erase_20,
1341 }, {
1342 .eraseblocks = { {32 * 1024, 64} },
1343 .block_erase = spi_block_erase_52,
1344 }, {
1345 .eraseblocks = { {64 * 1024, 32} },
1346 .block_erase = spi_block_erase_d8,
1347 }, {
1348 .eraseblocks = { {2 * 1024 * 1024, 1} },
1349 .block_erase = spi_block_erase_60,
1350 }, {
1351 .eraseblocks = { {2 * 1024 * 1024, 1} },
1352 .block_erase = spi_block_erase_c7,
1353 }
1354 },
1355 .printlock = spi_prettyprint_status_register_at25df_sec,
1356 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001357 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001359 },
1360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001361 {
1362 .vendor = "Atmel",
1363 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001364 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001365 .manufacture_id = ATMEL_ID,
1366 .model_id = AT_25F512B,
1367 .total_size = 64,
1368 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001369 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001370 .tested = TEST_UNTESTED,
1371 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001372 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001373 .block_erasers =
1374 {
1375 {
1376 .eraseblocks = { {4 * 1024, 16} },
1377 .block_erase = spi_block_erase_20,
1378 }, {
1379 .eraseblocks = { {32 * 1024, 2} },
1380 .block_erase = spi_block_erase_52,
1381 }, {
1382 .eraseblocks = { {32 * 1024, 2} },
1383 .block_erase = spi_block_erase_d8,
1384 }, {
1385 .eraseblocks = { {64 * 1024, 1} },
1386 .block_erase = spi_block_erase_60,
1387 }, {
1388 .eraseblocks = { {64 * 1024, 1} },
1389 .block_erase = spi_block_erase_c7,
1390 }
1391 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001392 .printlock = spi_prettyprint_status_register_at25f,
1393 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001394 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001395 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001396 },
1397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001398 {
1399 .vendor = "Atmel",
1400 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001401 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001402 .manufacture_id = ATMEL_ID,
1403 .model_id = AT_25FS010,
1404 .total_size = 128,
1405 .page_size = 256,
1406 .tested = TEST_UNTESTED,
1407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001408 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001409 .block_erasers =
1410 {
1411 {
1412 .eraseblocks = { {4 * 1024, 32} },
1413 .block_erase = spi_block_erase_20,
1414 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001415 .eraseblocks = { {4 * 1024, 32} },
1416 .block_erase = spi_block_erase_d7,
1417 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001418 .eraseblocks = { {32 * 1024, 4} },
1419 .block_erase = spi_block_erase_52,
1420 }, {
1421 .eraseblocks = { {32 * 1024, 4} },
1422 .block_erase = spi_block_erase_d8,
1423 }, {
1424 .eraseblocks = { {128 * 1024, 1} },
1425 .block_erase = spi_block_erase_60,
1426 }, {
1427 .eraseblocks = { {128 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001431 .printlock = spi_prettyprint_status_register_at25fs010,
1432 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001433 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001434 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001435 },
1436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001437 {
1438 .vendor = "Atmel",
1439 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001440 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001441 .manufacture_id = ATMEL_ID,
1442 .model_id = AT_25FS040,
1443 .total_size = 512,
1444 .page_size = 256,
1445 .tested = TEST_UNTESTED,
1446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001447 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001448 .block_erasers =
1449 {
1450 {
1451 .eraseblocks = { {4 * 1024, 128} },
1452 .block_erase = spi_block_erase_20,
1453 }, {
1454 .eraseblocks = { {64 * 1024, 8} },
1455 .block_erase = spi_block_erase_52,
1456 }, {
1457 .eraseblocks = { {64 * 1024, 8} },
1458 .block_erase = spi_block_erase_d8,
1459 }, {
1460 .eraseblocks = { {512 * 1024, 1} },
1461 .block_erase = spi_block_erase_60,
1462 }, {
1463 .eraseblocks = { {512 * 1024, 1} },
1464 .block_erase = spi_block_erase_c7,
1465 }
1466 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001467 .printlock = spi_prettyprint_status_register_at25fs040,
1468 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001469 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001470 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001471 },
1472
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001473 {
1474 .vendor = "Atmel",
1475 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001476 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001477 .manufacture_id = ATMEL_ID,
1478 .model_id = AT_26DF041,
1479 .total_size = 512,
1480 .page_size = 256,
1481 .tested = TEST_UNTESTED,
1482 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001483 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001484 .block_erasers =
1485 {
1486 {
1487 .eraseblocks = { {4 * 1024, 128} },
1488 .block_erase = spi_block_erase_20,
1489 }
1490 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001491 .write = NULL /* Incompatible Page write */,
1492 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001493 },
1494
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 {
1496 .vendor = "Atmel",
1497 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001498 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001499 .manufacture_id = ATMEL_ID,
1500 .model_id = AT_26DF081A,
1501 .total_size = 1024,
1502 .page_size = 256,
1503 .tested = TEST_UNTESTED,
1504 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001505 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001506 .block_erasers =
1507 {
1508 {
1509 .eraseblocks = { {4 * 1024, 256} },
1510 .block_erase = spi_block_erase_20,
1511 }, {
1512 .eraseblocks = { {32 * 1024, 32} },
1513 .block_erase = spi_block_erase_52,
1514 }, {
1515 .eraseblocks = { {64 * 1024, 16} },
1516 .block_erase = spi_block_erase_d8,
1517 }, {
1518 .eraseblocks = { {1024 * 1024, 1} },
1519 .block_erase = spi_block_erase_60,
1520 }, {
1521 .eraseblocks = { {1024 * 1024, 1} },
1522 .block_erase = spi_block_erase_c7,
1523 }
1524 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001525 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001526 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001527 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001528 },
1529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001530 {
1531 .vendor = "Atmel",
1532 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001533 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001534 .manufacture_id = ATMEL_ID,
1535 .model_id = AT_26DF161,
1536 .total_size = 2048,
1537 .page_size = 256,
1538 .tested = TEST_UNTESTED,
1539 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001540 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001541 .block_erasers =
1542 {
1543 {
1544 .eraseblocks = { {4 * 1024, 512} },
1545 .block_erase = spi_block_erase_20,
1546 }, {
1547 .eraseblocks = { {32 * 1024, 64} },
1548 .block_erase = spi_block_erase_52,
1549 }, {
1550 .eraseblocks = { {64 * 1024, 32} },
1551 .block_erase = spi_block_erase_d8,
1552 }, {
1553 .eraseblocks = { {2 * 1024 * 1024, 1} },
1554 .block_erase = spi_block_erase_60,
1555 }, {
1556 .eraseblocks = { {2 * 1024 * 1024, 1} },
1557 .block_erase = spi_block_erase_c7,
1558 }
1559 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001560 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001561 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001562 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "Atmel",
1567 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001569 .manufacture_id = ATMEL_ID,
1570 .model_id = AT_26DF161A,
1571 .total_size = 2048,
1572 .page_size = 256,
1573 .tested = TEST_UNTESTED,
1574 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001575 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001576 .block_erasers =
1577 {
1578 {
1579 .eraseblocks = { {4 * 1024, 512} },
1580 .block_erase = spi_block_erase_20,
1581 }, {
1582 .eraseblocks = { {32 * 1024, 64} },
1583 .block_erase = spi_block_erase_52,
1584 }, {
1585 .eraseblocks = { {64 * 1024, 32} },
1586 .block_erase = spi_block_erase_d8,
1587 }, {
1588 .eraseblocks = { {2 * 1024 * 1024, 1} },
1589 .block_erase = spi_block_erase_60,
1590 }, {
1591 .eraseblocks = { {2 * 1024 * 1024, 1} },
1592 .block_erase = spi_block_erase_c7,
1593 }
1594 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001595 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001596 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001597 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001598 },
1599
1600 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001601 /*{
1602 .vendor = "Atmel",
1603 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001605 .manufacture_id = ATMEL_ID,
1606 .model_id = AT_26DF321,
1607 .total_size = 4096,
1608 .page_size = 256,
1609 .tested = TEST_UNTESTED,
1610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001611 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001612 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001613 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001614 .read = spi_chip_read,
1615 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001617 {
1618 .vendor = "Atmel",
1619 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001620 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 .manufacture_id = ATMEL_ID,
1622 .model_id = AT_26F004,
1623 .total_size = 512,
1624 .page_size = 256,
1625 .tested = TEST_UNTESTED,
1626 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001627 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001628 .block_erasers =
1629 {
1630 {
1631 .eraseblocks = { {4 * 1024, 128} },
1632 .block_erase = spi_block_erase_20,
1633 }, {
1634 .eraseblocks = { {32 * 1024, 16} },
1635 .block_erase = spi_block_erase_52,
1636 }, {
1637 .eraseblocks = { {64 * 1024, 8} },
1638 .block_erase = spi_block_erase_d8,
1639 }, {
1640 .eraseblocks = { {512 * 1024, 1} },
1641 .block_erase = spi_block_erase_60,
1642 }, {
1643 .eraseblocks = { {512 * 1024, 1} },
1644 .block_erase = spi_block_erase_c7,
1645 }
1646 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 .write = NULL /* Incompatible Page write */,
1648 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001649 },
1650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001651 {
1652 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001653 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001654 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001655 .manufacture_id = ATMEL_ID,
1656 .model_id = AT_29C512,
1657 .total_size = 64,
1658 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001659 .feature_bits = FEATURE_LONG_RESET,
1660 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001661 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001662 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001663 .block_erasers =
1664 {
1665 {
1666 .eraseblocks = { {64 * 1024, 1} },
1667 .block_erase = erase_chip_block_jedec,
1668 }
1669 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001670 .write = write_jedec,
1671 .read = read_memmapped,
1672
1673 },
1674
1675 {
1676 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001677 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001678 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001679 .manufacture_id = ATMEL_ID,
1680 .model_id = AT_29C010A,
1681 .total_size = 128,
1682 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001683 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00001684 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001685 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001686 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001687 .block_erasers =
1688 {
1689 {
1690 .eraseblocks = { {128 * 1024, 1} },
1691 .block_erase = erase_chip_block_jedec,
1692 }
1693 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001694 .write = write_jedec, /* FIXME */
1695 .read = read_memmapped,
1696 },
1697
1698 {
1699 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001700 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001701 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001702 .manufacture_id = ATMEL_ID,
1703 .model_id = AT_29C020,
1704 .total_size = 256,
1705 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001706 .feature_bits = FEATURE_LONG_RESET,
1707 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001708 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001709 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00001710 .block_erasers =
1711 {
1712 {
1713 .eraseblocks = { {256 * 1024, 1} },
1714 .block_erase = erase_chip_block_jedec,
1715 }
1716 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001717 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001718 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001719 },
1720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001721 {
1722 .vendor = "Atmel",
1723 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001724 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 .manufacture_id = ATMEL_ID,
1726 .model_id = AT_29C040A,
1727 .total_size = 512,
1728 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001729 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001730 .tested = TEST_UNTESTED,
1731 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001732 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00001733 .block_erasers =
1734 {
1735 {
1736 .eraseblocks = { {512 * 1024, 1} },
1737 .block_erase = erase_chip_block_jedec,
1738 }
1739 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001740 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001741 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001742 },
1743
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001744 {
1745 .vendor = "Atmel",
1746 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001747 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001748 .manufacture_id = ATMEL_ID,
1749 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001750 .total_size = 16896 /* No power of two sizes */,
1751 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .tested = TEST_BAD_READ,
1753 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001754 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001755 .write = NULL /* Incompatible Page write */,
1756 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001757 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001759 {
1760 .vendor = "Atmel",
1761 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001762 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001763 .manufacture_id = ATMEL_ID,
1764 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001765 .total_size = 128 /* Size can only be determined from status register */,
1766 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001767 .tested = TEST_BAD_READ,
1768 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001769 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .write = NULL,
1771 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001772 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 {
1775 .vendor = "Atmel",
1776 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001777 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001778 .manufacture_id = ATMEL_ID,
1779 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001780 .total_size = 256 /* Size can only be determined from status register */,
1781 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001782 .tested = TEST_BAD_READ,
1783 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001784 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001785 .write = NULL,
1786 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001787 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 {
1790 .vendor = "Atmel",
1791 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001792 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001793 .manufacture_id = ATMEL_ID,
1794 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001795 .total_size = 512 /* Size can only be determined from status register */,
1796 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001797 .tested = TEST_BAD_READ,
1798 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001799 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 .write = NULL,
1801 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001802 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001804 {
1805 .vendor = "Atmel",
1806 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001807 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001808 .manufacture_id = ATMEL_ID,
1809 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001810 .total_size = 1024 /* Size can only be determined from status register */,
1811 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001812 .tested = TEST_BAD_READ,
1813 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001814 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001815 .write = NULL,
1816 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001817 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001819 {
1820 .vendor = "Atmel",
1821 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001822 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001823 .manufacture_id = ATMEL_ID,
1824 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001825 .total_size = 2048 /* Size can only be determined from status register */,
1826 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001827 .tested = TEST_BAD_READ,
1828 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001829 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001830 .write = NULL,
1831 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001832 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 {
1835 .vendor = "Atmel",
1836 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001837 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001838 .manufacture_id = ATMEL_ID,
1839 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001840 .total_size = 4224 /* No power of two sizes */,
1841 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001842 .tested = TEST_BAD_READ,
1843 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001844 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001845 .write = NULL,
1846 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001847 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001848
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001849 {
1850 .vendor = "Atmel",
1851 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001852 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001853 .manufacture_id = ATMEL_ID,
1854 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001855 .total_size = 4096 /* Size can only be determined from status register */,
1856 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001857 .tested = TEST_BAD_READ,
1858 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001859 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001860 .write = NULL,
1861 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001862 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001864 {
1865 .vendor = "Atmel",
1866 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001867 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 .manufacture_id = ATMEL_ID,
1869 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001870 .total_size = 8192 /* Size can only be determined from status register */,
1871 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001872 .tested = TEST_BAD_READ,
1873 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001874 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001875 .write = NULL,
1876 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001877 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001879 {
1880 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001881 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001882 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001883 .manufacture_id = ATMEL_ID,
1884 .model_id = AT_49BV512,
1885 .total_size = 64,
1886 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001887 .feature_bits = FEATURE_EITHER_RESET,
1888 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001889 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001890 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001891 .block_erasers =
1892 {
1893 {
1894 .eraseblocks = { {64 * 1024, 1} },
1895 .block_erase = erase_chip_block_jedec,
1896 }
1897 },
Sean Nelson35727f72010-01-28 23:55:12 +00001898 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001899 .read = read_memmapped,
1900 },
1901
1902 {
1903 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001904 .name = "AT49F020",
1905 .bustype = CHIP_BUSTYPE_PARALLEL,
1906 .manufacture_id = ATMEL_ID,
1907 .model_id = AT_49F020,
1908 .total_size = 256,
1909 .page_size = 256,
1910 .feature_bits = FEATURE_EITHER_RESET,
1911 .tested = TEST_OK_PREW,
1912 .probe = probe_jedec,
1913 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1914 .block_erasers =
1915 {
1916 {
1917 .eraseblocks = { {256 * 1024, 1} },
1918 .block_erase = erase_chip_block_jedec,
1919 }
1920 },
1921 .write = write_jedec_1,
1922 .read = read_memmapped,
1923 },
1924
1925 {
1926 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001927 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001928 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001929 .manufacture_id = ATMEL_ID,
1930 .model_id = AT_49F002N,
1931 .total_size = 256,
1932 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001933 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001934 .tested = TEST_UNTESTED,
1935 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001936 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001937 .block_erasers =
1938 {
1939 {
1940 .eraseblocks = {
1941 {16 * 1024, 1},
1942 {8 * 1024, 2},
1943 {96 * 1024, 1},
1944 {128 * 1024, 1},
1945 },
1946 .block_erase = erase_sector_jedec,
1947 }, {
1948 .eraseblocks = { {256 * 1024, 1} },
1949 .block_erase = erase_chip_block_jedec,
1950 }
1951 },
Sean Nelson35727f72010-01-28 23:55:12 +00001952 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001953 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001954 },
1955
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001956 {
1957 .vendor = "Atmel",
1958 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001959 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001960 .manufacture_id = ATMEL_ID,
1961 .model_id = AT_49F002NT,
1962 .total_size = 256,
1963 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001964 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001965 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001966 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001967 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001968 .block_erasers =
1969 {
1970 {
1971 .eraseblocks = {
1972 {128 * 1024, 1},
1973 {96 * 1024, 1},
1974 {8 * 1024, 2},
1975 {16 * 1024, 1},
1976 },
1977 .block_erase = erase_sector_jedec,
1978 }, {
1979 .eraseblocks = { {256 * 1024, 1} },
1980 .block_erase = erase_chip_block_jedec,
1981 }
1982 },
Sean Nelson35727f72010-01-28 23:55:12 +00001983 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001984 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001985 },
1986
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001987 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001988 .vendor = "EMST",
1989 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001990 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001991 .manufacture_id = EMST_ID,
1992 .model_id = EMST_F49B002UA,
1993 .total_size = 256,
1994 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001995 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001996 .tested = TEST_UNTESTED,
1997 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001998 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001999 .block_erasers =
2000 {
2001 {
2002 .eraseblocks = {
2003 {128 * 1024, 1},
2004 {96 * 1024, 1},
2005 {8 * 1024, 2},
2006 {16 * 1024, 1},
2007 },
2008 .block_erase = erase_sector_jedec,
2009 }, {
2010 .eraseblocks = { {256 * 1024, 1} },
2011 .block_erase = erase_chip_block_jedec,
2012 }
2013 },
Sean Nelson35727f72010-01-28 23:55:12 +00002014 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002015 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002016 },
2017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002018 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002019 .vendor = "EMST",
2020 .name = "F25L008A",
2021 .bustype = CHIP_BUSTYPE_SPI,
2022 .manufacture_id = EMST_ID,
2023 .model_id = EMST_F25L008A,
2024 .total_size = 1024,
2025 .page_size = 256,
2026 .tested = TEST_UNTESTED,
2027 .probe = probe_spi_rdid,
2028 .probe_timing = TIMING_ZERO,
2029 .block_erasers =
2030 {
2031 {
2032 .eraseblocks = { {4 * 1024, 256} },
2033 .block_erase = spi_block_erase_20,
2034 }, {
2035 .eraseblocks = { {64 * 1024, 16} },
2036 .block_erase = spi_block_erase_d8,
2037 }, {
2038 .eraseblocks = { {1024 * 1024, 1} },
2039 .block_erase = spi_block_erase_60,
2040 }, {
2041 .eraseblocks = { {1024 * 1024, 1} },
2042 .block_erase = spi_block_erase_c7,
2043 }
2044 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002045 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002046 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002047 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002048 },
2049
2050 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002051 .vendor = "Eon",
2052 .name = "EN25B05",
2053 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002054 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002055 .model_id = EN_25B05,
2056 .total_size = 64,
2057 .page_size = 256,
2058 .tested = TEST_UNTESTED,
2059 .probe = probe_spi_rdid,
2060 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002061 .block_erasers =
2062 {
2063 {
2064 .eraseblocks = {
2065 {4 * 1024, 2},
2066 {8 * 1024, 1},
2067 {16 * 1024, 1},
2068 {32 * 1024, 1},
2069 },
2070 .block_erase = spi_block_erase_d8,
2071 }, {
2072 .eraseblocks = { {64 * 1024, 1} },
2073 .block_erase = spi_block_erase_c7,
2074 }
2075 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002076 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .write = spi_chip_write_256,
2078 .read = spi_chip_read,
2079 },
2080
2081 {
2082 .vendor = "Eon",
2083 .name = "EN25B05T",
2084 .bustype = CHIP_BUSTYPE_SPI,
2085 .manufacture_id = EON_ID_NOPREFIX,
2086 .model_id = EN_25B05,
2087 .total_size = 64,
2088 .page_size = 256,
2089 .tested = TEST_UNTESTED,
2090 .probe = probe_spi_rdid,
2091 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002092 .block_erasers =
2093 {
2094 {
2095 .eraseblocks = {
2096 {32 * 1024, 1},
2097 {16 * 1024, 1},
2098 {8 * 1024, 1},
2099 {4 * 1024, 2},
2100 },
2101 .block_erase = spi_block_erase_d8,
2102 }, {
2103 .eraseblocks = { {64 * 1024, 1} },
2104 .block_erase = spi_block_erase_c7,
2105 }
2106 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002107 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002108 .write = spi_chip_write_256,
2109 .read = spi_chip_read,
2110 },
2111
2112 {
2113 .vendor = "Eon",
2114 .name = "EN25B10",
2115 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002116 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002117 .model_id = EN_25B10,
2118 .total_size = 128,
2119 .page_size = 256,
2120 .tested = TEST_UNTESTED,
2121 .probe = probe_spi_rdid,
2122 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002123 .block_erasers =
2124 {
2125 {
2126 .eraseblocks = {
2127 {4 * 1024, 2},
2128 {8 * 1024, 1},
2129 {16 * 1024, 1},
2130 {32 * 1024, 3},
2131 },
2132 .block_erase = spi_block_erase_d8,
2133 }, {
2134 .eraseblocks = { {128 * 1024, 1} },
2135 .block_erase = spi_block_erase_c7,
2136 }
2137 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002138 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002139 .write = spi_chip_write_256,
2140 .read = spi_chip_read,
2141 },
2142
2143 {
2144 .vendor = "Eon",
2145 .name = "EN25B10T",
2146 .bustype = CHIP_BUSTYPE_SPI,
2147 .manufacture_id = EON_ID_NOPREFIX,
2148 .model_id = EN_25B10,
2149 .total_size = 128,
2150 .page_size = 256,
2151 .tested = TEST_UNTESTED,
2152 .probe = probe_spi_rdid,
2153 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002154 .block_erasers =
2155 {
2156 {
2157 .eraseblocks = {
2158 {32 * 1024, 3},
2159 {16 * 1024, 1},
2160 {8 * 1024, 1},
2161 {4 * 1024, 2},
2162 },
2163 .block_erase = spi_block_erase_d8,
2164 }, {
2165 .eraseblocks = { {128 * 1024, 1} },
2166 .block_erase = spi_block_erase_c7,
2167 }
2168 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002169 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002170 .write = spi_chip_write_256,
2171 .read = spi_chip_read,
2172 },
2173
2174 {
2175 .vendor = "Eon",
2176 .name = "EN25B20",
2177 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002178 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002179 .model_id = EN_25B20,
2180 .total_size = 256,
2181 .page_size = 256,
2182 .tested = TEST_UNTESTED,
2183 .probe = probe_spi_rdid,
2184 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002185 .block_erasers =
2186 {
2187 {
2188 .eraseblocks = {
2189 {4 * 1024, 2},
2190 {8 * 1024, 1},
2191 {16 * 1024, 1},
2192 {32 * 1024, 1},
2193 {64 * 1024, 3}
2194 },
2195 .block_erase = spi_block_erase_d8,
2196 }, {
2197 .eraseblocks = { {256 * 1024, 1} },
2198 .block_erase = spi_block_erase_c7,
2199 }
2200 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002201 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002202 .write = spi_chip_write_256,
2203 .read = spi_chip_read,
2204 },
2205
2206 {
2207 .vendor = "Eon",
2208 .name = "EN25B20T",
2209 .bustype = CHIP_BUSTYPE_SPI,
2210 .manufacture_id = EON_ID_NOPREFIX,
2211 .model_id = EN_25B20,
2212 .total_size = 256,
2213 .page_size = 256,
2214 .tested = TEST_UNTESTED,
2215 .probe = probe_spi_rdid,
2216 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002217 .block_erasers =
2218 {
2219 {
2220 .eraseblocks = {
2221 {64 * 1024, 3},
2222 {32 * 1024, 1},
2223 {16 * 1024, 1},
2224 {8 * 1024, 1},
2225 {4 * 1024, 2},
2226 },
2227 .block_erase = spi_block_erase_d8,
2228 }, {
2229 .eraseblocks = { {256 * 1024, 1} },
2230 .block_erase = spi_block_erase_c7,
2231 }
2232 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002233 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002234 .write = spi_chip_write_256,
2235 .read = spi_chip_read,
2236 },
2237
2238 {
2239 .vendor = "Eon",
2240 .name = "EN25B40",
2241 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002242 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002243 .model_id = EN_25B40,
2244 .total_size = 512,
2245 .page_size = 256,
2246 .tested = TEST_UNTESTED,
2247 .probe = probe_spi_rdid,
2248 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002249 .block_erasers =
2250 {
2251 {
2252 .eraseblocks = {
2253 {4 * 1024, 2},
2254 {8 * 1024, 1},
2255 {16 * 1024, 1},
2256 {32 * 1024, 1},
2257 {64 * 1024, 7}
2258 },
2259 .block_erase = spi_block_erase_d8,
2260 }, {
2261 .eraseblocks = { {512 * 1024, 1} },
2262 .block_erase = spi_block_erase_c7,
2263 }
2264 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002265 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002266 .write = spi_chip_write_256,
2267 .read = spi_chip_read,
2268 },
2269
2270 {
2271 .vendor = "Eon",
2272 .name = "EN25B40T",
2273 .bustype = CHIP_BUSTYPE_SPI,
2274 .manufacture_id = EON_ID_NOPREFIX,
2275 .model_id = EN_25B40,
2276 .total_size = 512,
2277 .page_size = 256,
2278 .tested = TEST_UNTESTED,
2279 .probe = probe_spi_rdid,
2280 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002281 .block_erasers =
2282 {
2283 {
2284 .eraseblocks = {
2285 {64 * 1024, 7},
2286 {32 * 1024, 1},
2287 {16 * 1024, 1},
2288 {8 * 1024, 1},
2289 {4 * 1024, 2},
2290 },
2291 .block_erase = spi_block_erase_d8,
2292 }, {
2293 .eraseblocks = { {512 * 1024, 1} },
2294 .block_erase = spi_block_erase_c7,
2295 }
2296 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002297 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002298 .write = spi_chip_write_256,
2299 .read = spi_chip_read,
2300 },
2301
2302 {
2303 .vendor = "Eon",
2304 .name = "EN25B80",
2305 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002306 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002307 .model_id = EN_25B80,
2308 .total_size = 1024,
2309 .page_size = 256,
2310 .tested = TEST_UNTESTED,
2311 .probe = probe_spi_rdid,
2312 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002313 .block_erasers =
2314 {
2315 {
2316 .eraseblocks = {
2317 {4 * 1024, 2},
2318 {8 * 1024, 1},
2319 {16 * 1024, 1},
2320 {32 * 1024, 1},
2321 {64 * 1024, 15}
2322 },
2323 .block_erase = spi_block_erase_d8,
2324 }, {
2325 .eraseblocks = { {1024 * 1024, 1} },
2326 .block_erase = spi_block_erase_c7,
2327 }
2328 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002329 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002330 .write = spi_chip_write_256,
2331 .read = spi_chip_read,
2332 },
2333
2334 {
2335 .vendor = "Eon",
2336 .name = "EN25B80T",
2337 .bustype = CHIP_BUSTYPE_SPI,
2338 .manufacture_id = EON_ID_NOPREFIX,
2339 .model_id = EN_25B80,
2340 .total_size = 1024,
2341 .page_size = 256,
2342 .tested = TEST_UNTESTED,
2343 .probe = probe_spi_rdid,
2344 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002345 .block_erasers =
2346 {
2347 {
2348 .eraseblocks = {
2349 {64 * 1024, 15},
2350 {32 * 1024, 1},
2351 {16 * 1024, 1},
2352 {8 * 1024, 1},
2353 {4 * 1024, 2},
2354 },
2355 .block_erase = spi_block_erase_d8,
2356 }, {
2357 .eraseblocks = { {1024 * 1024, 1} },
2358 .block_erase = spi_block_erase_c7,
2359 }
2360 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002361 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002362 .write = spi_chip_write_256,
2363 .read = spi_chip_read,
2364 },
2365
2366 {
2367 .vendor = "Eon",
2368 .name = "EN25B16",
2369 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002370 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002371 .model_id = EN_25B16,
2372 .total_size = 2048,
2373 .page_size = 256,
2374 .tested = TEST_UNTESTED,
2375 .probe = probe_spi_rdid,
2376 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002377 .block_erasers =
2378 {
2379 {
2380 .eraseblocks = {
2381 {4 * 1024, 2},
2382 {8 * 1024, 1},
2383 {16 * 1024, 1},
2384 {32 * 1024, 1},
2385 {64 * 1024, 31},
2386 },
2387 .block_erase = spi_block_erase_d8,
2388 }, {
2389 .eraseblocks = { {2 * 1024 * 1024, 1} },
2390 .block_erase = spi_block_erase_c7,
2391 }
2392 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002393 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002394 .write = spi_chip_write_256,
2395 .read = spi_chip_read,
2396 },
2397
2398 {
2399 .vendor = "Eon",
2400 .name = "EN25B16T",
2401 .bustype = CHIP_BUSTYPE_SPI,
2402 .manufacture_id = EON_ID_NOPREFIX,
2403 .model_id = EN_25B16,
2404 .total_size = 2048,
2405 .page_size = 256,
2406 .tested = TEST_UNTESTED,
2407 .probe = probe_spi_rdid,
2408 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002409 .block_erasers =
2410 {
2411 {
2412 .eraseblocks = {
2413 {64 * 1024, 31},
2414 {32 * 1024, 1},
2415 {16 * 1024, 1},
2416 {8 * 1024, 1},
2417 {4 * 1024, 2},
2418 },
2419 .block_erase = spi_block_erase_d8,
2420 }, {
2421 .eraseblocks = { {2 * 1024 * 1024, 1} },
2422 .block_erase = spi_block_erase_c7,
2423 }
2424 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002425 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002426 .write = spi_chip_write_256,
2427 .read = spi_chip_read,
2428 },
2429
2430 {
2431 .vendor = "Eon",
2432 .name = "EN25B32",
2433 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002434 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002435 .model_id = EN_25B32,
2436 .total_size = 4096,
2437 .page_size = 256,
2438 .tested = TEST_UNTESTED,
2439 .probe = probe_spi_rdid,
2440 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002441 .block_erasers =
2442 {
2443 {
2444 .eraseblocks = {
2445 {4 * 1024, 2},
2446 {8 * 1024, 1},
2447 {16 * 1024, 1},
2448 {32 * 1024, 1},
2449 {64 * 1024, 63},
2450 },
2451 .block_erase = spi_block_erase_d8,
2452 }, {
2453 .eraseblocks = { {4 * 1024 * 1024, 1} },
2454 .block_erase = spi_block_erase_c7,
2455 }
2456 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002457 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002458 .write = spi_chip_write_256,
2459 .read = spi_chip_read,
2460 },
2461
2462 {
2463 .vendor = "Eon",
2464 .name = "EN25B32T",
2465 .bustype = CHIP_BUSTYPE_SPI,
2466 .manufacture_id = EON_ID_NOPREFIX,
2467 .model_id = EN_25B32,
2468 .total_size = 4096,
2469 .page_size = 256,
2470 .tested = TEST_UNTESTED,
2471 .probe = probe_spi_rdid,
2472 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002473 .block_erasers =
2474 {
2475 {
2476 .eraseblocks = {
2477 {64 * 1024, 63},
2478 {32 * 1024, 1},
2479 {16 * 1024, 1},
2480 {8 * 1024, 1},
2481 {4 * 1024, 2},
2482 },
2483 .block_erase = spi_block_erase_d8,
2484 }, {
2485 .eraseblocks = { {4 * 1024 * 1024, 1} },
2486 .block_erase = spi_block_erase_c7,
2487 }
2488 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002489 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002490 .write = spi_chip_write_256,
2491 .read = spi_chip_read,
2492 },
2493
2494 {
2495 .vendor = "Eon",
2496 .name = "EN25B64",
2497 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002498 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002499 .model_id = EN_25B64,
2500 .total_size = 8192,
2501 .page_size = 256,
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 Hermann51afebb2010-08-01 00:13:49 +00005160 .tested = TEST_OK_PREW,
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,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005238 .tested = TEST_OK_PREW,
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 Hermann1e94fa62010-08-08 15:52:07 +00005626 .tested = TEST_OK_PREW,
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,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005654 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
5655 .tested = TEST_OK_PREW,
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 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005671 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00005672 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005673 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005674 },
5675
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005676 {
5677 .vendor = "SST",
5678 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005679 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005680 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005681 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005682 .total_size = 1024,
5683 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005684 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005685 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005686 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005687 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005688 .block_erasers =
5689 {
5690 {
5691 .eraseblocks = { {4 * 1024, 256} },
5692 .block_erase = erase_sector_jedec,
5693 }, {
5694 .eraseblocks = { {64 * 1024, 16} },
5695 .block_erase = erase_block_jedec,
5696 }, {
5697 .eraseblocks = { {1024 * 1024, 1} },
5698 .block_erase = NULL,
5699 }
5700 },
Sean Nelson35727f72010-01-28 23:55:12 +00005701 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005702 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005703 },
5704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005705 {
5706 .vendor = "SST",
5707 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005708 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005709 .manufacture_id = SST_ID,
5710 .model_id = SST_49LF160C,
5711 .total_size = 2048,
5712 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005713 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005714 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005715 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005716 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005717 .block_erasers =
5718 {
5719 {
5720 .eraseblocks = { {4 * 1024, 512} },
5721 .block_erase = erase_sector_49lfxxxc,
5722 }, {
5723 .eraseblocks = {
5724 {64 * 1024, 31},
5725 {32 * 1024, 1},
5726 {8 * 1024, 2},
5727 {16 * 1024, 1},
5728 },
Sean Nelson69e58112010-03-23 17:10:28 +00005729 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005730 }
5731 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005732 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005733 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005734 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005735 },
5736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005737 {
5738 .vendor = "ST",
5739 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005740 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 .manufacture_id = ST_ID,
5742 .model_id = ST_M25P05A,
5743 .total_size = 64,
5744 .page_size = 256,
5745 .tested = TEST_UNTESTED,
5746 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005747 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005748 .block_erasers =
5749 {
5750 {
5751 .eraseblocks = { {32 * 1024, 2} },
5752 .block_erase = spi_block_erase_d8,
5753 }, {
5754 .eraseblocks = { {64 * 1024, 1} },
5755 .block_erase = spi_block_erase_c7,
5756 }
5757 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005758 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005759 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005760 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005761 },
5762
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005763 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5764 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005765 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005766 * only is successful if RDID does not work.
5767 */
5768 {
5769 .vendor = "ST",
5770 .name = "M25P05.RES",
5771 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005772 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005773 .model_id = ST_M25P05_RES,
5774 .total_size = 64,
5775 .page_size = 256,
5776 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005777 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005778 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005779 .block_erasers =
5780 {
5781 {
5782 .eraseblocks = { {32 * 1024, 2} },
5783 .block_erase = spi_block_erase_d8,
5784 }, {
5785 .eraseblocks = { {64 * 1024, 1} },
5786 .block_erase = spi_block_erase_c7,
5787 }
5788 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005789 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005790 .write = spi_chip_write_1, /* 128 */
5791 .read = spi_chip_read,
5792 },
5793
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005794 {
5795 .vendor = "ST",
5796 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005797 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005798 .manufacture_id = ST_ID,
5799 .model_id = ST_M25P10A,
5800 .total_size = 128,
5801 .page_size = 256,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005802 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005803 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005804 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005805 .block_erasers =
5806 {
5807 {
5808 .eraseblocks = { {32 * 1024, 4} },
5809 .block_erase = spi_block_erase_d8,
5810 }, {
5811 .eraseblocks = { {128 * 1024, 1} },
5812 .block_erase = spi_block_erase_c7,
5813 }
5814 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005815 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005816 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005818 },
5819
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005820 /* The ST M25P10 has the same problem as the M25P05. */
5821 {
5822 .vendor = "ST",
5823 .name = "M25P10.RES",
5824 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005825 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005826 .model_id = ST_M25P10_RES,
5827 .total_size = 128,
5828 .page_size = 256,
5829 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005830 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005831 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005832 .block_erasers =
5833 {
5834 {
5835 .eraseblocks = { {32 * 1024, 4} },
5836 .block_erase = spi_block_erase_d8,
5837 }, {
5838 .eraseblocks = { {128 * 1024, 1} },
5839 .block_erase = spi_block_erase_c7,
5840 }
5841 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005842 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005843 .write = spi_chip_write_1, /* 128 */
5844 .read = spi_chip_read,
5845 },
5846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005847 {
5848 .vendor = "ST",
5849 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005850 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005851 .manufacture_id = ST_ID,
5852 .model_id = ST_M25P20,
5853 .total_size = 256,
5854 .page_size = 256,
5855 .tested = TEST_UNTESTED,
5856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005857 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005858 .block_erasers =
5859 {
5860 {
5861 .eraseblocks = { {64 * 1024, 4} },
5862 .block_erase = spi_block_erase_d8,
5863 }, {
5864 .eraseblocks = { {256 * 1024, 1} },
5865 .block_erase = spi_block_erase_c7,
5866 }
5867 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005868 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005869 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005870 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005871 },
5872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005873 {
5874 .vendor = "ST",
5875 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005876 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005877 .manufacture_id = ST_ID,
5878 .model_id = ST_M25P40,
5879 .total_size = 512,
5880 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005881 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005882 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005883 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005884 .block_erasers =
5885 {
5886 {
5887 .eraseblocks = { {64 * 1024, 8} },
5888 .block_erase = spi_block_erase_d8,
5889 }, {
5890 .eraseblocks = { {512 * 1024, 1} },
5891 .block_erase = spi_block_erase_c7,
5892 }
5893 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005894 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005895 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005896 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005897 },
5898
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005899 {
5900 .vendor = "ST",
5901 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005902 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005903 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005904 .model_id = ST_M25P40_RES,
5905 .total_size = 512,
5906 .page_size = 256,
5907 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005908 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005909 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005910 .block_erasers =
5911 {
5912 {
5913 .eraseblocks = { {64 * 1024, 8} },
5914 .block_erase = spi_block_erase_d8,
5915 }, {
5916 .eraseblocks = { {512 * 1024, 1} },
5917 .block_erase = spi_block_erase_c7,
5918 }
5919 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005920 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005921 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005922 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005923 },
5924
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005925 {
5926 .vendor = "ST",
5927 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005928 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005929 .manufacture_id = ST_ID,
5930 .model_id = ST_M25P80,
5931 .total_size = 1024,
5932 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005933 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005934 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005935 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005936 .block_erasers =
5937 {
5938 {
5939 .eraseblocks = { {64 * 1024, 16} },
5940 .block_erase = spi_block_erase_d8,
5941 }, {
5942 .eraseblocks = { {1024 * 1024, 1} },
5943 .block_erase = spi_block_erase_c7,
5944 }
5945 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005946 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005947 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005948 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005949 },
5950
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005951 {
5952 .vendor = "ST",
5953 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005954 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005955 .manufacture_id = ST_ID,
5956 .model_id = ST_M25P16,
5957 .total_size = 2048,
5958 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005959 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005960 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005961 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005962 .block_erasers =
5963 {
5964 {
5965 .eraseblocks = { {64 * 1024, 32} },
5966 .block_erase = spi_block_erase_d8,
5967 }, {
5968 .eraseblocks = { {2 * 1024 * 1024, 1} },
5969 .block_erase = spi_block_erase_c7,
5970 }
5971 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005972 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005973 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005974 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005975 },
5976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005977 {
5978 .vendor = "ST",
5979 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005981 .manufacture_id = ST_ID,
5982 .model_id = ST_M25P32,
5983 .total_size = 4096,
5984 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005985 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005987 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005988 .block_erasers =
5989 {
5990 {
5991 .eraseblocks = { {64 * 1024, 64} },
5992 .block_erase = spi_block_erase_d8,
5993 }, {
5994 .eraseblocks = { {4 * 1024 * 1024, 1} },
5995 .block_erase = spi_block_erase_c7,
5996 }
5997 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005998 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005999 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006000 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006001 },
6002
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 {
6004 .vendor = "ST",
6005 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006006 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006007 .manufacture_id = ST_ID,
6008 .model_id = ST_M25P64,
6009 .total_size = 8192,
6010 .page_size = 256,
6011 .tested = TEST_UNTESTED,
6012 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006013 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006014 .block_erasers =
6015 {
6016 {
6017 .eraseblocks = { {64 * 1024, 128} },
6018 .block_erase = spi_block_erase_d8,
6019 }, {
6020 .eraseblocks = { {8 * 1024 * 1024, 1} },
6021 .block_erase = spi_block_erase_c7,
6022 }
6023 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006024 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006025 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006026 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006027 },
6028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006029 {
6030 .vendor = "ST",
6031 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006032 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 .manufacture_id = ST_ID,
6034 .model_id = ST_M25P128,
6035 .total_size = 16384,
6036 .page_size = 256,
6037 .tested = TEST_UNTESTED,
6038 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006039 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006040 .block_erasers =
6041 {
6042 {
6043 .eraseblocks = { {256 * 1024, 64} },
6044 .block_erase = spi_block_erase_d8,
6045 }, {
6046 .eraseblocks = { {16 * 1024 * 1024, 1} },
6047 .block_erase = spi_block_erase_c7,
6048 }
6049 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006050 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006051 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006052 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006053 },
6054
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006055 {
6056 .vendor = "ST",
6057 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006058 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006059 .manufacture_id = ST_ID,
6060 .model_id = ST_M29F002B,
6061 .total_size = 256,
6062 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006063 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006064 .tested = TEST_UNTESTED,
6065 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006066 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006067 .block_erasers =
6068 {
6069 {
6070 .eraseblocks = {
6071 {16 * 1024, 1},
6072 {8 * 1024, 2},
6073 {32 * 1024, 1},
6074 {64 * 1024, 3},
6075 },
6076 .block_erase = erase_sector_jedec,
6077 }, {
6078 .eraseblocks = { {256 * 1024, 1} },
6079 .block_erase = erase_chip_block_jedec,
6080 }
6081 },
Sean Nelson35727f72010-01-28 23:55:12 +00006082 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006083 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006084 },
6085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006086 {
6087 .vendor = "ST",
6088 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006089 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 .manufacture_id = ST_ID,
6091 .model_id = ST_M29F002T,
6092 .total_size = 256,
6093 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006094 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6095 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006096 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006097 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006098 .block_erasers =
6099 {
6100 {
6101 .eraseblocks = {
6102 {64 * 1024, 3},
6103 {32 * 1024, 1},
6104 {8 * 1024, 2},
6105 {16 * 1024, 1},
6106 },
6107 .block_erase = erase_sector_jedec,
6108 }, {
6109 .eraseblocks = { {256 * 1024, 1} },
6110 .block_erase = erase_chip_block_jedec,
6111 }
6112 },
Sean Nelson35727f72010-01-28 23:55:12 +00006113 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006114 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006115 },
6116
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006117 {
6118 .vendor = "ST",
6119 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006120 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006121 .manufacture_id = ST_ID,
6122 .model_id = ST_M29F040B,
6123 .total_size = 512,
6124 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006125 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6126 .tested = TEST_UNTESTED,
6127 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006128 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006129 .block_erasers =
6130 {
6131 {
6132 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006133 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006134 }, {
6135 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006136 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006137 }
6138 },
Sean Nelson35727f72010-01-28 23:55:12 +00006139 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006140 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006141 },
6142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006143 {
Sean Nelson35727f72010-01-28 23:55:12 +00006144 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006145 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006146 .name = "M29F400BB",
6147 .bustype = CHIP_BUSTYPE_PARALLEL,
6148 .manufacture_id = ST_ID,
6149 .model_id = ST_M29F400BB,
6150 .total_size = 512,
6151 .page_size = 64 * 1024,
6152 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
6153 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
6154 .probe = probe_m29f400bt,
6155 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6156 .block_erasers =
6157 {
6158 {
6159 .eraseblocks = {
6160 {16 * 1024, 1},
6161 {8 * 1024, 2},
6162 {32 * 1024, 1},
6163 {64 * 1024, 7},
6164 },
6165 .block_erase = block_erase_m29f400bt,
6166 }, {
6167 .eraseblocks = { {512 * 1024, 1} },
6168 .block_erase = block_erase_chip_m29f400bt,
6169 }
6170 },
6171 .write = NULL,
6172 .read = read_memmapped,
6173 },
6174 {
6175 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6176 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006177 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006178 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006179 .manufacture_id = ST_ID,
6180 .model_id = ST_M29F400BT,
6181 .total_size = 512,
6182 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006183 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006184 .tested = TEST_UNTESTED,
6185 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006186 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006187 .block_erasers =
6188 {
6189 {
6190 .eraseblocks = {
6191 {64 * 1024, 7},
6192 {32 * 1024, 1},
6193 {8 * 1024, 2},
6194 {16 * 1024, 1},
6195 },
6196 .block_erase = block_erase_m29f400bt,
6197 }, {
6198 .eraseblocks = { {512 * 1024, 1} },
6199 .block_erase = block_erase_chip_m29f400bt,
6200 }
6201 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006202 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006203 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006204 },
6205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006206 {
6207 .vendor = "ST",
6208 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006209 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006210 .manufacture_id = ST_ID,
6211 .model_id = ST_M29W010B,
6212 .total_size = 128,
6213 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006214 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006215 .tested = TEST_UNTESTED,
6216 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006217 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006218 .block_erasers =
6219 {
6220 {
6221 .eraseblocks = { {16 * 1024, 8}, },
6222 .block_erase = erase_sector_jedec,
6223 }, {
6224 .eraseblocks = { {128 * 1024, 1} },
6225 .block_erase = erase_chip_block_jedec,
6226 }
6227 },
Sean Nelson35727f72010-01-28 23:55:12 +00006228 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006229 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006230 },
6231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006232 {
6233 .vendor = "ST",
6234 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006235 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006236 .manufacture_id = ST_ID,
6237 .model_id = ST_M29W040B,
6238 .total_size = 512,
6239 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006240 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006241 .tested = TEST_UNTESTED,
6242 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006243 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006244 .block_erasers =
6245 {
6246 {
6247 .eraseblocks = { {64 * 1024, 8}, },
6248 .block_erase = erase_sector_jedec,
6249 }, {
6250 .eraseblocks = { {512 * 1024, 1} },
6251 .block_erase = erase_chip_block_jedec,
6252 }
6253 },
Sean Nelson35727f72010-01-28 23:55:12 +00006254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006256 },
6257
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006258 {
6259 .vendor = "ST",
6260 .name = "M29W512B",
6261 .bustype = CHIP_BUSTYPE_PARALLEL,
6262 .manufacture_id = ST_ID,
6263 .model_id = ST_M29W512B,
6264 .total_size = 64,
6265 .page_size = 64 * 1024,
6266 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6267 .tested = TEST_OK_PREW,
6268 .probe = probe_jedec,
6269 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006270 .block_erasers =
6271 {
6272 {
6273 .eraseblocks = { {64 * 1024, 1} },
6274 .block_erase = erase_chip_block_jedec,
6275 }
6276 },
6277 .write = write_jedec_1,
6278 .read = read_memmapped,
6279 },
6280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006281 {
6282 .vendor = "ST",
6283 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006284 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006285 .manufacture_id = ST_ID,
6286 .model_id = ST_M50FLW040A,
6287 .total_size = 512,
6288 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006289 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006290 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006291 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006292 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006293 .block_erasers =
6294 {
6295 {
Sean Nelson329bde72010-01-19 16:39:19 +00006296 .eraseblocks = {
6297 {4 * 1024, 16}, /* sector */
6298 {64 * 1024, 5}, /* block */
6299 {4 * 1024, 16}, /* sector */
6300 {4 * 1024, 16}, /* sector */
6301 },
6302 .block_erase = NULL,
6303 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006304 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006305 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006306 }, {
6307 .eraseblocks = { {512 * 1024, 1} },
6308 .block_erase = erase_chip_stm50flw0x0x,
6309 }
6310 },
Sean Nelson28accc22010-03-19 18:47:06 +00006311 .unlock = unlock_stm50flw0x0x,
6312 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006313 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006314 },
6315
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006316 {
6317 .vendor = "ST",
6318 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006319 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006320 .manufacture_id = ST_ID,
6321 .model_id = ST_M50FLW040B,
6322 .total_size = 512,
6323 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006324 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006325 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006326 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006327 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006328 .block_erasers =
6329 {
6330 {
Sean Nelson329bde72010-01-19 16:39:19 +00006331 .eraseblocks = {
6332 {4 * 1024, 16}, /* sector */
6333 {4 * 1024, 16}, /* sector */
6334 {64 * 1024, 5}, /* block */
6335 {4 * 1024, 16}, /* sector */
6336 },
6337 .block_erase = NULL,
6338 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006339 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006340 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006341 }, {
6342 .eraseblocks = { {512 * 1024, 1} },
6343 .block_erase = erase_chip_stm50flw0x0x,
6344 }
6345 },
Sean Nelson28accc22010-03-19 18:47:06 +00006346 .unlock = unlock_stm50flw0x0x,
6347 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006348 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006349 },
6350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006351 {
6352 .vendor = "ST",
6353 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006354 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006355 .manufacture_id = ST_ID,
6356 .model_id = ST_M50FLW080A,
6357 .total_size = 1024,
6358 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006359 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00006360 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00006361 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006362 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006363 .block_erasers =
6364 {
6365 {
Sean Nelson329bde72010-01-19 16:39:19 +00006366 .eraseblocks = {
6367 {4 * 1024, 16}, /* sector */
6368 {64 * 1024, 13}, /* block */
6369 {4 * 1024, 16}, /* sector */
6370 {4 * 1024, 16}, /* sector */
6371 },
6372 .block_erase = NULL,
6373 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006374 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006375 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006376 }, {
6377 .eraseblocks = { {1024 * 1024, 1} },
6378 .block_erase = erase_chip_stm50flw0x0x,
6379 }
6380 },
Sean Nelson28accc22010-03-19 18:47:06 +00006381 .unlock = unlock_stm50flw0x0x,
6382 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006383 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006384 },
6385
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006386 {
6387 .vendor = "ST",
6388 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006389 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006390 .manufacture_id = ST_ID,
6391 .model_id = ST_M50FLW080B,
6392 .total_size = 1024,
6393 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006394 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006395 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006396 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006397 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006398 .block_erasers =
6399 {
6400 {
Sean Nelson329bde72010-01-19 16:39:19 +00006401 .eraseblocks = {
6402 {4 * 1024, 16}, /* sector */
6403 {4 * 1024, 16}, /* sector */
6404 {64 * 1024, 13}, /* block */
6405 {4 * 1024, 16}, /* sector */
6406 },
6407 .block_erase = NULL,
6408 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006409 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006410 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006411 }, {
6412 .eraseblocks = { {1024 * 1024, 1} },
6413 .block_erase = erase_chip_stm50flw0x0x,
6414 }
6415 },
Sean Nelson28accc22010-03-19 18:47:06 +00006416 .unlock = unlock_stm50flw0x0x,
6417 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006418 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006419 },
6420
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006421 {
6422 .vendor = "ST",
6423 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006424 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006425 .manufacture_id = ST_ID,
6426 .model_id = ST_M50FW002,
6427 .total_size = 256,
6428 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006429 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006430 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006431 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006432 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006433 .block_erasers =
6434 {
6435 {
6436 .eraseblocks = {
6437 {64 * 1024, 3},
6438 {32 * 1024, 1},
6439 {8 * 1024, 2},
6440 {16 * 1024, 1},
6441 },
Sean Nelson28accc22010-03-19 18:47:06 +00006442 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006443 }, {
6444 .eraseblocks = { {256 * 1024, 1} },
6445 .block_erase = erase_chip_stm50flw0x0x,
6446 }
6447 },
Sean Nelson28accc22010-03-19 18:47:06 +00006448 .unlock = unlock_stm50flw0x0x,
6449 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006450 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006451 },
6452
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006453 {
6454 .vendor = "ST",
6455 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006456 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006457 .manufacture_id = ST_ID,
6458 .model_id = ST_M50FW016,
6459 .total_size = 2048,
6460 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006461 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006462 .tested = TEST_UNTESTED,
6463 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006464 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006465 .block_erasers =
6466 {
6467 {
6468 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006469 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006470 }, {
6471 .eraseblocks = { {2 * 1024 * 1024, 1} },
6472 .block_erase = erase_chip_stm50flw0x0x,
6473 }
6474 },
Sean Nelson28accc22010-03-19 18:47:06 +00006475 .unlock = unlock_stm50flw0x0x,
6476 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006477 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006478 },
6479
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006480 {
6481 .vendor = "ST",
6482 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006483 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006484 .manufacture_id = ST_ID,
6485 .model_id = ST_M50FW040,
6486 .total_size = 512,
6487 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006488 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006489 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006490 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006491 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006492 .block_erasers =
6493 {
6494 {
6495 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006496 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006497 }, {
6498 .eraseblocks = { {512 * 1024, 1} },
6499 .block_erase = erase_chip_stm50flw0x0x,
6500 }
6501 },
Sean Nelson28accc22010-03-19 18:47:06 +00006502 .unlock = unlock_stm50flw0x0x,
6503 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006504 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006505 },
6506
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006507 {
6508 .vendor = "ST",
6509 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006510 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006511 .manufacture_id = ST_ID,
6512 .model_id = ST_M50FW080,
6513 .total_size = 1024,
6514 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006515 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006516 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006517 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006518 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006519 .block_erasers =
6520 {
6521 {
6522 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006523 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006524 }, {
6525 .eraseblocks = { {1024 * 1024, 1} },
6526 .block_erase = erase_chip_stm50flw0x0x,
6527 }
6528 },
Sean Nelson28accc22010-03-19 18:47:06 +00006529 .unlock = unlock_stm50flw0x0x,
6530 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006531 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006532 },
6533
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006534 {
6535 .vendor = "ST",
6536 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006537 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006538 .manufacture_id = ST_ID,
6539 .model_id = ST_M50LPW116,
6540 .total_size = 2048,
6541 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006542 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006543 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006544 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006545 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006546 .block_erasers =
6547 {
6548 {
6549 .eraseblocks = {
6550 {4 * 1024, 16},
6551 {64 * 1024, 30},
6552 {32 * 1024, 1},
6553 {8 * 1024, 2},
6554 {16 * 1024, 1},
6555 },
Sean Nelson28accc22010-03-19 18:47:06 +00006556 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006557 }, {
6558 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006559 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006560 }
6561 },
Sean Nelson28accc22010-03-19 18:47:06 +00006562 .unlock = unlock_stm50flw0x0x,
6563 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006564 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006565 },
6566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006567 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006568 .vendor = "SyncMOS/MoselVitelic",
6569 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006570 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006571 .manufacture_id = SYNCMOS_MVC_ID,
6572 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006573 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006574 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006575 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006576 .tested = TEST_UNTESTED,
6577 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006578 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006579 .block_erasers =
6580 {
6581 {
6582 .eraseblocks = { {512, 256} },
6583 .block_erase = erase_sector_jedec,
6584 }, {
6585 .eraseblocks = { {128 * 1024, 1} },
6586 .block_erase = erase_chip_block_jedec,
6587 },
6588 },
Sean Nelson35727f72010-01-28 23:55:12 +00006589 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006590 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006591 },
6592
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006593 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006594 .vendor = "SyncMOS/MoselVitelic",
6595 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006596 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006597 .manufacture_id = SYNCMOS_MVC_ID,
6598 .model_id = SM_MVC_29C51001T,
6599 .total_size = 128,
6600 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006601 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006602 .tested = TEST_UNTESTED,
6603 .probe = probe_jedec,
6604 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6605 .block_erasers =
6606 {
6607 {
6608 .eraseblocks = { {512, 256} },
6609 .block_erase = erase_sector_jedec,
6610 }, {
6611 .eraseblocks = { {128 * 1024, 1} },
6612 .block_erase = erase_chip_block_jedec,
6613 },
6614 },
6615 .write = write_jedec_1,
6616 .read = read_memmapped,
6617 },
6618
6619 {
6620 .vendor = "SyncMOS/MoselVitelic",
6621 .name = "{F,S,V}29C51002B",
6622 .bustype = CHIP_BUSTYPE_PARALLEL,
6623 .manufacture_id = SYNCMOS_MVC_ID,
6624 .model_id = SM_MVC_29C51002B,
6625 .total_size = 256,
6626 .page_size = 512,
6627 .feature_bits = FEATURE_EITHER_RESET,
6628 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006629 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006630 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006631 .block_erasers =
6632 {
6633 {
6634 .eraseblocks = { {512, 512} },
6635 .block_erase = erase_sector_jedec,
6636 }, {
6637 .eraseblocks = { {256 * 1024, 1} },
6638 .block_erase = erase_chip_block_jedec,
6639 },
6640 },
Sean Nelson35727f72010-01-28 23:55:12 +00006641 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006642 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006643 },
6644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006645 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006646 .vendor = "SyncMOS/MoselVitelic",
6647 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006648 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006649 .manufacture_id = SYNCMOS_MVC_ID,
6650 .model_id = SM_MVC_29C51002T,
6651 .total_size = 256,
6652 .page_size = 512,
6653 .feature_bits = FEATURE_EITHER_RESET,
6654 .tested = TEST_OK_PR,
6655 .probe = probe_jedec,
6656 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6657 .block_erasers =
6658 {
6659 {
6660 .eraseblocks = { {512, 512} },
6661 .block_erase = erase_sector_jedec,
6662 }, {
6663 .eraseblocks = { {256 * 1024, 1} },
6664 .block_erase = erase_chip_block_jedec,
6665 },
6666 },
6667 .write = write_jedec_1,
6668 .read = read_memmapped,
6669 },
6670
6671 {
6672 .vendor = "SyncMOS/MoselVitelic",
6673 .name = "{F,S,V}29C51004B",
6674 .bustype = CHIP_BUSTYPE_PARALLEL,
6675 .manufacture_id = SYNCMOS_MVC_ID,
6676 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006677 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006678 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006679 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006680 .tested = TEST_UNTESTED,
6681 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006682 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006683 .block_erasers =
6684 {
6685 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006686 .eraseblocks = { {1024, 512} },
6687 .block_erase = erase_sector_jedec,
6688 }, {
6689 .eraseblocks = { {512 * 1024, 1} },
6690 .block_erase = erase_chip_block_jedec,
6691 },
6692 },
6693 .write = write_jedec_1,
6694 .read = read_memmapped,
6695 },
6696
6697 {
6698 .vendor = "SyncMOS/MoselVitelic",
6699 .name = "{F,S,V}29C51004T",
6700 .bustype = CHIP_BUSTYPE_PARALLEL,
6701 .manufacture_id = SYNCMOS_MVC_ID,
6702 .model_id = SM_MVC_29C51004T,
6703 .total_size = 512,
6704 .page_size = 1024,
6705 .feature_bits = FEATURE_EITHER_RESET,
6706 .tested = TEST_UNTESTED,
6707 .probe = probe_jedec,
6708 .probe_timing = TIMING_ZERO,
6709 .block_erasers =
6710 {
6711 {
6712 .eraseblocks = { {1024, 512} },
6713 .block_erase = erase_sector_jedec,
6714 }, {
6715 .eraseblocks = { {512 * 1024, 1} },
6716 .block_erase = erase_chip_block_jedec,
6717 },
6718 },
6719 .write = write_jedec_1,
6720 .read = read_memmapped,
6721 },
6722
6723 {
6724 .vendor = "SyncMOS/MoselVitelic",
6725 .name = "{S,V}29C31004B",
6726 .bustype = CHIP_BUSTYPE_PARALLEL,
6727 .manufacture_id = SYNCMOS_MVC_ID,
6728 .model_id = SM_MVC_29C31004B,
6729 .total_size = 512,
6730 .page_size = 1024,
6731 .feature_bits = FEATURE_EITHER_RESET,
6732 .tested = TEST_UNTESTED,
6733 .probe = probe_jedec,
6734 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6735 .block_erasers =
6736 {
6737 {
6738 .eraseblocks = { {1024, 512} },
6739 .block_erase = erase_sector_jedec,
6740 }, {
6741 .eraseblocks = { {512 * 1024, 1} },
6742 .block_erase = erase_chip_block_jedec,
6743 },
6744 },
6745 .write = write_jedec_1,
6746 .read = read_memmapped,
6747 },
6748
6749 {
6750 .vendor = "SyncMOS/MoselVitelic",
6751 .name = "{S,V}29C31004T",
6752 .bustype = CHIP_BUSTYPE_PARALLEL,
6753 .manufacture_id = SYNCMOS_MVC_ID,
6754 .model_id = SM_MVC_29C31004T,
6755 .total_size = 512,
6756 .page_size = 1024,
6757 .feature_bits = FEATURE_EITHER_RESET,
6758 .tested = TEST_UNTESTED,
6759 .probe = probe_jedec,
6760 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6761 .block_erasers =
6762 {
6763 {
6764 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006765 .block_erase = erase_sector_jedec,
6766 }, {
6767 .eraseblocks = { {512 * 1024, 1} },
6768 .block_erase = erase_chip_block_jedec,
6769 },
6770 },
Sean Nelson35727f72010-01-28 23:55:12 +00006771 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006772 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006773 },
6774
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006775 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006776 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006777 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006778 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006779 .manufacture_id = TI_OLD_ID,
6780 .model_id = TI_TMS29F002RB,
6781 .total_size = 256,
6782 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006783 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006784 .tested = TEST_UNTESTED,
6785 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006786 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006787 .block_erasers =
6788 {
6789 {
6790 .eraseblocks = {
6791 {16 * 1024, 1},
6792 {8 * 1024, 2},
6793 {32 * 1024, 1},
6794 {64 * 1024, 3},
6795 },
6796 .block_erase = erase_sector_jedec,
6797 }, {
6798 .eraseblocks = { {256 * 1024, 1} },
6799 .block_erase = erase_chip_block_jedec,
6800 },
6801 },
Sean Nelson35727f72010-01-28 23:55:12 +00006802 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006803 .read = read_memmapped,
6804 },
6805
6806 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006807 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006808 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006809 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006810 .manufacture_id = TI_OLD_ID,
6811 .model_id = TI_TMS29F002RT,
6812 .total_size = 256,
6813 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006814 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006815 .tested = TEST_UNTESTED,
6816 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006817 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006818 .block_erasers =
6819 {
6820 {
6821 .eraseblocks = {
6822 {64 * 1024, 3},
6823 {32 * 1024, 1},
6824 {8 * 1024, 2},
6825 {16 * 1024, 1},
6826 },
6827 .block_erase = erase_sector_jedec,
6828 }, {
6829 .eraseblocks = { {256 * 1024, 1} },
6830 .block_erase = erase_chip_block_jedec,
6831 },
6832 },
Sean Nelson35727f72010-01-28 23:55:12 +00006833 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006834 .read = read_memmapped,
6835 },
6836
6837 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006838 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006839 .name = "W25Q80",
6840 .bustype = CHIP_BUSTYPE_SPI,
6841 .manufacture_id = WINBOND_NEX_ID,
6842 .model_id = W_25Q80,
6843 .total_size = 1024,
6844 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006845 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00006846 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006847 .probe = probe_spi_rdid,
6848 .probe_timing = TIMING_ZERO,
6849 .block_erasers =
6850 {
6851 {
6852 .eraseblocks = { {4 * 1024, 256} },
6853 .block_erase = spi_block_erase_20,
6854 }, {
6855 .eraseblocks = { {32 * 1024, 32} },
6856 .block_erase = spi_block_erase_52,
6857 }, {
6858 .eraseblocks = { {64 * 1024, 16} },
6859 .block_erase = spi_block_erase_d8,
6860 }, {
6861 .eraseblocks = { {1024 * 1024, 1} },
6862 .block_erase = spi_block_erase_60,
6863 }, {
6864 .eraseblocks = { {1024 * 1024, 1} },
6865 .block_erase = spi_block_erase_c7,
6866 }
6867 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006868 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006869 .write = spi_chip_write_256,
6870 .read = spi_chip_read,
6871 },
6872
6873 {
6874 .vendor = "Winbond",
6875 .name = "W25Q16",
6876 .bustype = CHIP_BUSTYPE_SPI,
6877 .manufacture_id = WINBOND_NEX_ID,
6878 .model_id = W_25Q16,
6879 .total_size = 2048,
6880 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006881 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006882 .tested = TEST_UNTESTED,
6883 .probe = probe_spi_rdid,
6884 .probe_timing = TIMING_ZERO,
6885 .block_erasers =
6886 {
6887 {
6888 .eraseblocks = { {4 * 1024, 512} },
6889 .block_erase = spi_block_erase_20,
6890 }, {
6891 .eraseblocks = { {32 * 1024, 64} },
6892 .block_erase = spi_block_erase_52,
6893 }, {
6894 .eraseblocks = { {64 * 1024, 32} },
6895 .block_erase = spi_block_erase_d8,
6896 }, {
6897 .eraseblocks = { {2 * 1024 * 1024, 1} },
6898 .block_erase = spi_block_erase_60,
6899 }, {
6900 .eraseblocks = { {2 * 1024 * 1024, 1} },
6901 .block_erase = spi_block_erase_c7,
6902 }
6903 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006904 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006905 .write = spi_chip_write_256,
6906 .read = spi_chip_read,
6907 },
6908
6909 {
6910 .vendor = "Winbond",
6911 .name = "W25Q32",
6912 .bustype = CHIP_BUSTYPE_SPI,
6913 .manufacture_id = WINBOND_NEX_ID,
6914 .model_id = W_25Q32,
6915 .total_size = 4096,
6916 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006917 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006918 .tested = TEST_UNTESTED,
6919 .probe = probe_spi_rdid,
6920 .probe_timing = TIMING_ZERO,
6921 .block_erasers =
6922 {
6923 {
6924 .eraseblocks = { {4 * 1024, 1024} },
6925 .block_erase = spi_block_erase_20,
6926 }, {
6927 .eraseblocks = { {32 * 1024, 128} },
6928 .block_erase = spi_block_erase_52,
6929 }, {
6930 .eraseblocks = { {64 * 1024, 64} },
6931 .block_erase = spi_block_erase_d8,
6932 }, {
6933 .eraseblocks = { {4 * 1024 * 1024, 1} },
6934 .block_erase = spi_block_erase_60,
6935 }, {
6936 .eraseblocks = { {4 * 1024 * 1024, 1} },
6937 .block_erase = spi_block_erase_c7,
6938 }
6939 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006940 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006941 .write = spi_chip_write_256,
6942 .read = spi_chip_read,
6943 },
6944
6945 {
6946 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006947 .name = "W25Q64",
6948 .bustype = CHIP_BUSTYPE_SPI,
6949 .manufacture_id = WINBOND_NEX_ID,
6950 .model_id = W_25Q64,
6951 .total_size = 8192,
6952 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006953 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksc4acec92010-06-24 11:39:57 +00006954 .tested = TEST_OK_PRW,
6955 .probe = probe_spi_rdid,
6956 .probe_timing = TIMING_ZERO,
6957 .block_erasers =
6958 {
6959 {
6960 .eraseblocks = { {4 * 1024, 2048} },
6961 .block_erase = spi_block_erase_20,
6962 }, {
6963 .eraseblocks = { {32 * 1024, 256} },
6964 .block_erase = spi_block_erase_52,
6965 }, {
6966 .eraseblocks = { {64 * 1024, 128} },
6967 .block_erase = spi_block_erase_d8,
6968 }, {
6969 .eraseblocks = { {8 * 1024 * 1024, 1} },
6970 .block_erase = spi_block_erase_60,
6971 }, {
6972 .eraseblocks = { {8 * 1024 * 1024, 1} },
6973 .block_erase = spi_block_erase_c7,
6974 }
6975 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006976 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006977 .write = spi_chip_write_256,
6978 .read = spi_chip_read,
6979 },
6980
6981 {
6982 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006983 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006984 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006985 .manufacture_id = WINBOND_NEX_ID,
6986 .model_id = W_25X10,
6987 .total_size = 128,
6988 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00006989 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006990 .tested = TEST_UNTESTED,
6991 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006992 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006993 .block_erasers =
6994 {
6995 {
6996 .eraseblocks = { {4 * 1024, 32} },
6997 .block_erase = spi_block_erase_20,
6998 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006999 .eraseblocks = { {64 * 1024, 2} },
7000 .block_erase = spi_block_erase_d8,
7001 }, {
7002 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007003 .block_erase = spi_block_erase_c7,
7004 }
7005 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007006 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007007 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007008 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007009 },
7010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007011 {
7012 .vendor = "Winbond",
7013 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007014 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007015 .manufacture_id = WINBOND_NEX_ID,
7016 .model_id = W_25X20,
7017 .total_size = 256,
7018 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007019 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007020 .tested = TEST_UNTESTED,
7021 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007022 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007023 .block_erasers =
7024 {
7025 {
7026 .eraseblocks = { {4 * 1024, 64} },
7027 .block_erase = spi_block_erase_20,
7028 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007029 .eraseblocks = { {64 * 1024, 4} },
7030 .block_erase = spi_block_erase_d8,
7031 }, {
7032 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007033 .block_erase = spi_block_erase_c7,
7034 }
7035 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007036 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007037 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007038 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007039 },
7040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007041 {
7042 .vendor = "Winbond",
7043 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007044 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007045 .manufacture_id = WINBOND_NEX_ID,
7046 .model_id = W_25X40,
7047 .total_size = 512,
7048 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007049 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007050 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007051 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007052 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007053 .block_erasers =
7054 {
7055 {
7056 .eraseblocks = { {4 * 1024, 128} },
7057 .block_erase = spi_block_erase_20,
7058 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007059 .eraseblocks = { {64 * 1024, 8} },
7060 .block_erase = spi_block_erase_d8,
7061 }, {
7062 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007063 .block_erase = spi_block_erase_c7,
7064 }
7065 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007066 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007067 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007068 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007069 },
7070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007071 {
7072 .vendor = "Winbond",
7073 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007074 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007075 .manufacture_id = WINBOND_NEX_ID,
7076 .model_id = W_25X80,
7077 .total_size = 1024,
7078 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007079 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007080 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007081 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007082 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007083 .block_erasers =
7084 {
7085 {
7086 .eraseblocks = { {4 * 1024, 256} },
7087 .block_erase = spi_block_erase_20,
7088 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007089 .eraseblocks = { {64 * 1024, 16} },
7090 .block_erase = spi_block_erase_d8,
7091 }, {
7092 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007093 .block_erase = spi_block_erase_c7,
7094 }
7095 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007096 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007097 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007098 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007099 },
7100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007101 {
7102 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007103 .name = "W25x16",
7104 .bustype = CHIP_BUSTYPE_SPI,
7105 .manufacture_id = WINBOND_NEX_ID,
7106 .model_id = W_25X16,
7107 .total_size = 2048,
7108 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007109 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007110 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00007111 .probe = probe_spi_rdid,
7112 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007113 .block_erasers =
7114 {
7115 {
7116 .eraseblocks = { {4 * 1024, 512} },
7117 .block_erase = spi_block_erase_20,
7118 }, {
7119 .eraseblocks = { {32 * 1024, 64} },
7120 .block_erase = spi_block_erase_52,
7121 }, {
7122 .eraseblocks = { {64 * 1024, 32} },
7123 .block_erase = spi_block_erase_d8,
7124 }, {
7125 .eraseblocks = { {2 * 1024 * 1024, 1} },
7126 .block_erase = spi_block_erase_60,
7127 }, {
7128 .eraseblocks = { {2 * 1024 * 1024, 1} },
7129 .block_erase = spi_block_erase_c7,
7130 }
7131 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007132 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007133 .write = spi_chip_write_256,
7134 .read = spi_chip_read,
7135 },
7136
7137 {
7138 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007139 .name = "W25x32",
7140 .bustype = CHIP_BUSTYPE_SPI,
7141 .manufacture_id = WINBOND_NEX_ID,
7142 .model_id = W_25X32,
7143 .total_size = 4096,
7144 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007145 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007146 .tested = TEST_OK_PROBE,
7147 .probe = probe_spi_rdid,
7148 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007149 .block_erasers =
7150 {
7151 {
7152 .eraseblocks = { {4 * 1024, 1024} },
7153 .block_erase = spi_block_erase_20,
7154 }, {
7155 .eraseblocks = { {32 * 1024, 128} },
7156 .block_erase = spi_block_erase_52,
7157 }, {
7158 .eraseblocks = { {64 * 1024, 64} },
7159 .block_erase = spi_block_erase_d8,
7160 }, {
7161 .eraseblocks = { {4 * 1024 * 1024, 1} },
7162 .block_erase = spi_block_erase_60,
7163 }, {
7164 .eraseblocks = { {4 * 1024 * 1024, 1} },
7165 .block_erase = spi_block_erase_c7,
7166 }
7167 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007168 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007169 .write = spi_chip_write_256,
7170 .read = spi_chip_read,
7171 },
7172
7173 {
7174 .vendor = "Winbond",
7175 .name = "W25x64",
7176 .bustype = CHIP_BUSTYPE_SPI,
7177 .manufacture_id = WINBOND_NEX_ID,
7178 .model_id = W_25X64,
7179 .total_size = 8192,
7180 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007181 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007182 .tested = TEST_UNTESTED,
7183 .probe = probe_spi_rdid,
7184 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007185 .block_erasers =
7186 {
7187 {
7188 .eraseblocks = { {4 * 1024, 2048} },
7189 .block_erase = spi_block_erase_20,
7190 }, {
7191 .eraseblocks = { {32 * 1024, 256} },
7192 .block_erase = spi_block_erase_52,
7193 }, {
7194 .eraseblocks = { {64 * 1024, 128} },
7195 .block_erase = spi_block_erase_d8,
7196 }, {
7197 .eraseblocks = { {8 * 1024 * 1024, 1} },
7198 .block_erase = spi_block_erase_60,
7199 }, {
7200 .eraseblocks = { {8 * 1024 * 1024, 1} },
7201 .block_erase = spi_block_erase_c7,
7202 }
7203 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007204 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007205 .write = spi_chip_write_256,
7206 .read = spi_chip_read,
7207 },
7208
7209 {
7210 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007211 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007213 .manufacture_id = WINBOND_ID,
7214 .model_id = W_29C011,
7215 .total_size = 128,
7216 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007217 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00007218 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007219 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007220 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007221 .block_erasers =
7222 {
7223 {
7224 .eraseblocks = { {128 * 1024, 1} },
7225 .block_erase = erase_chip_block_jedec,
7226 }
7227 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007228 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007229 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007230 },
7231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007232 {
7233 .vendor = "Winbond",
7234 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00007235 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007236 .manufacture_id = WINBOND_ID,
7237 .model_id = W_29C020C,
7238 .total_size = 256,
7239 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007240 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007241 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007242 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007243 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007244 .block_erasers =
7245 {
7246 {
7247 .eraseblocks = { {256 * 1024, 1} },
7248 .block_erase = erase_chip_block_jedec,
7249 }
7250 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007251 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007252 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007253 },
7254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007255 {
7256 .vendor = "Winbond",
7257 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007258 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007259 .manufacture_id = WINBOND_ID,
7260 .model_id = W_29C040P,
7261 .total_size = 512,
7262 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007263 .feature_bits = FEATURE_LONG_RESET,
7264 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007265 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007266 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007267 .block_erasers =
7268 {
7269 {
7270 .eraseblocks = { {512 * 1024, 1} },
7271 .block_erase = erase_chip_block_jedec,
7272 }
7273 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007274 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007275 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007276 },
7277
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007278 {
7279 .vendor = "Winbond",
7280 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00007281 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007282 .manufacture_id = WINBOND_ID,
7283 .model_id = W_29C011,
7284 .total_size = 128,
7285 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007286 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00007287 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007288 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007289 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007290 .block_erasers =
7291 {
7292 {
7293 .eraseblocks = { {128 * 1024, 1} },
7294 .block_erase = erase_chip_block_jedec,
7295 }
7296 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007297 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007299 },
7300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007301 {
7302 .vendor = "Winbond",
7303 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007304 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007305 .manufacture_id = WINBOND_ID,
7306 .model_id = W_39V040A,
7307 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007308 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007309 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00007310 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007311 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007312 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007313 .block_erasers =
7314 {
7315 {
7316 .eraseblocks = { {64 * 1024, 8} },
7317 .block_erase = erase_sector_jedec,
7318 }, {
7319 .eraseblocks = { {512 * 1024, 1} },
7320 .block_erase = erase_chip_block_jedec,
7321 }
7322 },
Sean Nelson35727f72010-01-28 23:55:12 +00007323 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007324 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007325 },
7326
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007327 {
7328 .vendor = "Winbond",
7329 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007330 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007331 .manufacture_id = WINBOND_ID,
7332 .model_id = W_39V040B,
7333 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007334 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007335 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00007336 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007337 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007338 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007339 .block_erasers =
7340 {
7341 {
7342 .eraseblocks = { {64 * 1024, 8} },
7343 .block_erase = erase_sector_jedec,
7344 }, {
7345 .eraseblocks = { {512 * 1024, 1} },
7346 .block_erase = erase_chip_block_jedec,
7347 }
7348 },
Sean Nelson35727f72010-01-28 23:55:12 +00007349 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007350 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007351 },
7352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007353 {
7354 .vendor = "Winbond",
7355 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007356 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007357 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00007358 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007359 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007360 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007361 .feature_bits = FEATURE_EITHER_RESET,
7362 .tested = TEST_UNTESTED,
7363 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007364 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007365 .block_erasers =
7366 {
7367 {
7368 .eraseblocks = { {64 * 1024, 8} },
7369 .block_erase = erase_sector_jedec,
7370 }, {
7371 .eraseblocks = { {512 * 1024, 1} },
7372 .block_erase = erase_chip_block_jedec,
7373 }
7374 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007375 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007376 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007377 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007378 },
7379
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007380 {
7381 .vendor = "Winbond",
7382 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007383 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007384 .manufacture_id = WINBOND_ID,
7385 .model_id = W_39V040FA,
7386 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007387 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007388 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00007389 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007390 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007391 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007392 .block_erasers =
7393 {
7394 {
7395 .eraseblocks = { {4 * 1024, 128} },
7396 .block_erase = erase_block_jedec,
7397 }, {
7398 .eraseblocks = { {64 * 1024, 8} },
7399 .block_erase = erase_sector_jedec,
7400 }, {
7401 .eraseblocks = { {512 * 1024, 1} },
7402 .block_erase = erase_chip_block_jedec,
7403 }
7404 },
Michael Karcherc9b63412010-05-30 16:55:18 +00007405 .printlock = printlock_sst_fwhub,
7406 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007407 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007408 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007409 },
7410
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007411 {
7412 .vendor = "Winbond",
7413 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007414 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007415 .manufacture_id = WINBOND_ID,
7416 .model_id = W_39V080A,
7417 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007418 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007419 .feature_bits = FEATURE_EITHER_RESET,
7420 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007421 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007422 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007423 .block_erasers =
7424 {
7425 {
7426 .eraseblocks = { {64 * 1024, 16} },
7427 .block_erase = erase_sector_jedec,
7428 }, {
7429 .eraseblocks = { {1024 * 1024, 1} },
7430 .block_erase = erase_chip_block_jedec,
7431 }
7432 },
Sean Nelson35727f72010-01-28 23:55:12 +00007433 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007434 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007435 },
7436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007437 {
7438 .vendor = "Winbond",
7439 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00007440 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007441 .manufacture_id = WINBOND_ID,
7442 .model_id = W_49F002U,
7443 .total_size = 256,
7444 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007445 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00007446 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007447 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007448 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007449 .block_erasers =
7450 {
7451 {
7452 .eraseblocks = {
7453 {128 * 1024, 1},
7454 {96 * 1024, 1},
7455 {8 * 1024, 2},
7456 {16 * 1024, 1},
7457 },
7458 .block_erase = erase_sector_jedec,
7459 }, {
7460 .eraseblocks = { {256 * 1024, 1} },
7461 .block_erase = erase_chip_block_jedec,
7462 }
7463 },
Sean Nelson35727f72010-01-28 23:55:12 +00007464 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007465 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007466 },
7467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007468 {
7469 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007470 .name = "W49F020",
7471 .bustype = CHIP_BUSTYPE_PARALLEL,
7472 .manufacture_id = WINBOND_ID,
7473 .model_id = W_49F020,
7474 .total_size = 256,
7475 .page_size = 128,
7476 .feature_bits = FEATURE_EITHER_RESET,
7477 .tested = TEST_OK_PROBE,
7478 .probe = probe_jedec,
7479 .probe_timing = 10,
7480 .block_erasers =
7481 {
7482 {
7483 .eraseblocks = { {256 * 1024, 1} },
7484 .block_erase = erase_chip_block_jedec,
7485 }
7486 },
7487 .write = write_jedec_1,
7488 .read = read_memmapped,
7489 },
7490
7491 {
7492 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007493 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007494 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007495 .manufacture_id = WINBOND_ID,
7496 .model_id = W_49V002A,
7497 .total_size = 256,
7498 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007499 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007500 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007501 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007502 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007503 .block_erasers =
7504 {
7505 {
7506 .eraseblocks = {
7507 {64 * 1024, 3},
7508 {32 * 1024, 1},
7509 {8 * 1024, 2},
7510 {16 * 1024, 1},
7511 },
7512 .block_erase = erase_sector_jedec,
7513 }, {
7514 .eraseblocks = { {256 * 1024, 1} },
7515 .block_erase = erase_chip_block_jedec,
7516 }
7517 },
Sean Nelson35727f72010-01-28 23:55:12 +00007518 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007519 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007520 },
7521
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007522 {
7523 .vendor = "Winbond",
7524 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007525 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007526 .manufacture_id = WINBOND_ID,
7527 .model_id = W_49V002FA,
7528 .total_size = 256,
7529 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007530 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00007531 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007532 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007533 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007534 .block_erasers =
7535 {
7536 {
7537 .eraseblocks = {
7538 {64 * 1024, 3},
7539 {32 * 1024, 1},
7540 {8 * 1024, 2},
7541 {16 * 1024, 1},
7542 },
7543 .block_erase = erase_sector_jedec,
7544 }, {
7545 .eraseblocks = { {256 * 1024, 1} },
7546 .block_erase = erase_chip_block_jedec,
7547 }
7548 },
Sean Nelson35727f72010-01-28 23:55:12 +00007549 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007550 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007551 },
7552
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007553 {
7554 .vendor = "Winbond",
7555 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007556 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007557 .manufacture_id = WINBOND_ID,
7558 .model_id = W_39V080FA,
7559 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007560 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007561 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007562 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007563 .probe = probe_jedec,
7564 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007565 .block_erasers =
7566 {
7567 {
7568 .eraseblocks = { {64 * 1024, 16}, },
7569 .block_erase = erase_sector_jedec,
7570 }, {
7571 .eraseblocks = { {1024 * 1024, 1} },
7572 .block_erase = erase_chip_block_jedec,
7573 }
7574 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007575 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007576 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007577 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007578 },
7579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007580 {
7581 .vendor = "Winbond",
7582 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007583 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007584 .manufacture_id = WINBOND_ID,
7585 .model_id = W_39V080FA_DM,
7586 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007587 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007588 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007589 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007590 .probe = probe_jedec,
7591 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007592 .block_erasers =
7593 {
7594 {
7595 .eraseblocks = { {64 * 1024, 8}, },
7596 .block_erase = erase_sector_jedec,
7597 }, {
7598 .eraseblocks = { {512 * 1024, 1} },
7599 .block_erase = erase_chip_block_jedec,
7600 }
7601 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007602 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007603 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007604 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007605 },
7606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007607 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007608 .vendor = "AMIC",
7609 .name = "unknown AMIC SPI chip",
7610 .bustype = CHIP_BUSTYPE_SPI,
7611 .manufacture_id = AMIC_ID,
7612 .model_id = GENERIC_DEVICE_ID,
7613 .total_size = 0,
7614 .page_size = 256,
7615 .tested = TEST_BAD_PREW,
7616 .probe = probe_spi_rdid4,
7617 .probe_timing = TIMING_ZERO,
7618 .write = NULL,
7619 .read = NULL,
7620 },
7621
7622 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007623 .vendor = "Atmel",
7624 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007625 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007626 .manufacture_id = ATMEL_ID,
7627 .model_id = GENERIC_DEVICE_ID,
7628 .total_size = 0,
7629 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007630 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007631 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007632 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007633 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007634 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007635 },
7636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007637 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007638 .vendor = "Eon",
7639 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007640 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007641 .manufacture_id = EON_ID_NOPREFIX,
7642 .model_id = GENERIC_DEVICE_ID,
7643 .total_size = 0,
7644 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007645 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007646 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007647 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007648 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007649 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007650 },
7651
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007652 {
7653 .vendor = "Macronix",
7654 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007655 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007656 .manufacture_id = MX_ID,
7657 .model_id = GENERIC_DEVICE_ID,
7658 .total_size = 0,
7659 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007660 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007661 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007662 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007663 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007664 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007665 },
7666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007667 {
7668 .vendor = "PMC",
7669 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007670 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007671 .manufacture_id = PMC_ID,
7672 .model_id = GENERIC_DEVICE_ID,
7673 .total_size = 0,
7674 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007675 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007676 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007677 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007678 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007679 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007680 },
7681
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007682 {
7683 .vendor = "SST",
7684 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007685 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007686 .manufacture_id = SST_ID,
7687 .model_id = GENERIC_DEVICE_ID,
7688 .total_size = 0,
7689 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007690 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007691 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007692 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007693 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007694 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007695 },
7696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007697 {
7698 .vendor = "ST",
7699 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007700 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007701 .manufacture_id = ST_ID,
7702 .model_id = GENERIC_DEVICE_ID,
7703 .total_size = 0,
7704 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007705 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007706 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007707 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007708 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007709 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007710 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007711
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007712 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007713 .vendor = "Sanyo",
7714 .name = "unknown Sanyo SPI chip",
7715 .bustype = CHIP_BUSTYPE_SPI,
7716 .manufacture_id = SANYO_ID,
7717 .model_id = GENERIC_DEVICE_ID,
7718 .total_size = 0,
7719 .page_size = 256,
7720 .tested = TEST_BAD_PREW,
7721 .probe = probe_spi_rdid,
7722 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007723 .write = NULL,
7724 .read = NULL,
7725 },
7726
7727 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007728 .vendor = "Generic",
7729 .name = "unknown SPI chip (RDID)",
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_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007737 .write = NULL,
7738 },
7739 {
7740 .vendor = "Generic",
7741 .name = "unknown SPI chip (REMS)",
7742 .bustype = CHIP_BUSTYPE_SPI,
7743 .manufacture_id = GENERIC_MANUF_ID,
7744 .model_id = GENERIC_DEVICE_ID,
7745 .total_size = 0,
7746 .page_size = 256,
7747 .tested = TEST_BAD_PREW,
7748 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007749 .write = NULL,
7750 },
7751
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007752 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007753};