blob: 946e4fcb82ccff9f619075e0d707760e57acfc2a [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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000064 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
Uwe Hermanna8b37272009-06-19 15:54:39 +000065 .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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000090 .model_id = AMD_AM29F002BB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000121 .model_id = AMD_AM29F002BT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000122 .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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000152 .model_id = AMD_AM29F016D,
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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000178 .model_id = AMD_AM29F040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000179 .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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000204 .model_id = AMD_AM29F080B,
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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000230 .model_id = AMD_AM29LV040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfinger9017cec2010-09-04 23:37:40 +0000234 .tested = TEST_OK_PREW,
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,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000256 .model_id = AMD_AM29LV080B,
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,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000646 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000647 .tested = TEST_UNTESTED,
648 .probe = probe_spi_rdid,
649 .probe_timing = TIMING_ZERO,
650 .block_erasers =
651 {
652 {
653 .eraseblocks = { { 4 * 1024, 16 } },
654 .block_erase = spi_block_erase_20,
655 }, {
656 .eraseblocks = { { 64 * 1024, 1 } },
657 .block_erase = spi_block_erase_d8,
658 }, {
659 .eraseblocks = { { 64 * 1024, 1 } },
660 .block_erase = spi_block_erase_c7,
661 }
662 },
663 .unlock = spi_disable_blockprotect,
664 .write = spi_chip_write_256,
665 .read = spi_chip_read,
666 },
667
668 {
669 .vendor = "AMIC",
670 .name = "A25L010",
671 .bustype = CHIP_BUSTYPE_SPI,
672 .manufacture_id = AMIC_ID_NOPREFIX,
673 .model_id = AMIC_A25L010,
674 .total_size = 128,
675 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000676 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000677 .tested = TEST_UNTESTED,
678 .probe = probe_spi_rdid,
679 .probe_timing = TIMING_ZERO,
680 .block_erasers =
681 {
682 {
683 .eraseblocks = { { 4 * 1024, 32 } },
684 .block_erase = spi_block_erase_20,
685 }, {
686 .eraseblocks = { { 64 * 1024, 2 } },
687 .block_erase = spi_block_erase_d8,
688 }, {
689 .eraseblocks = { { 128 * 1024, 1 } },
690 .block_erase = spi_block_erase_c7,
691 }
692 },
693 .unlock = spi_disable_blockprotect,
694 .write = spi_chip_write_256,
695 .read = spi_chip_read,
696 },
697
698 {
699 .vendor = "AMIC",
700 .name = "A25L020",
701 .bustype = CHIP_BUSTYPE_SPI,
702 .manufacture_id = AMIC_ID_NOPREFIX,
703 .model_id = AMIC_A25L020,
704 .total_size = 256,
705 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000706 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000707 .tested = TEST_UNTESTED,
708 .probe = probe_spi_rdid,
709 .probe_timing = TIMING_ZERO,
710 .block_erasers =
711 {
712 {
713 .eraseblocks = { { 4 * 1024, 64 } },
714 .block_erase = spi_block_erase_20,
715 }, {
716 .eraseblocks = { { 64 * 1024, 4 } },
717 .block_erase = spi_block_erase_d8,
718 }, {
719 .eraseblocks = { { 256 * 1024, 1 } },
720 .block_erase = spi_block_erase_c7,
721 }
722 },
723 .unlock = spi_disable_blockprotect,
724 .write = spi_chip_write_256,
725 .read = spi_chip_read,
726 },
727
728 {
729 .vendor = "AMIC",
730 .name = "A25L040",
731 .bustype = CHIP_BUSTYPE_SPI,
732 .manufacture_id = AMIC_ID_NOPREFIX,
733 .model_id = AMIC_A25L040,
734 .total_size = 512,
735 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000736 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000737 .tested = TEST_UNTESTED,
738 .probe = probe_spi_rdid,
739 .probe_timing = TIMING_ZERO,
740 .block_erasers =
741 {
742 {
743 .eraseblocks = { { 4 * 1024, 128 } },
744 .block_erase = spi_block_erase_20,
745 }, {
746 .eraseblocks = { { 64 * 1024, 8 } },
747 .block_erase = spi_block_erase_d8,
748 }, {
749 .eraseblocks = { { 512 * 1024, 1 } },
750 .block_erase = spi_block_erase_c7,
751 }
752 },
753 .unlock = spi_disable_blockprotect,
754 .write = spi_chip_write_256,
755 .read = spi_chip_read,
756 },
757
758 {
759 .vendor = "AMIC",
760 .name = "A25L080",
761 .bustype = CHIP_BUSTYPE_SPI,
762 .manufacture_id = AMIC_ID_NOPREFIX,
763 .model_id = AMIC_A25L080,
764 .total_size = 1024,
765 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000766 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000767 .tested = TEST_UNTESTED,
768 .probe = probe_spi_rdid,
769 .probe_timing = TIMING_ZERO,
770 .block_erasers =
771 {
772 {
773 .eraseblocks = { { 4 * 1024, 256 } },
774 .block_erase = spi_block_erase_20,
775 }, {
776 .eraseblocks = { { 64 * 1024, 16 } },
777 .block_erase = spi_block_erase_d8,
778 }, {
779 .eraseblocks = { { 1024 * 1024, 1 } },
780 .block_erase = spi_block_erase_c7,
781 }
782 },
783 .unlock = spi_disable_blockprotect,
784 .write = spi_chip_write_256,
785 .read = spi_chip_read,
786 },
787
788 {
789 .vendor = "AMIC",
790 .name = "A25L016",
791 .bustype = CHIP_BUSTYPE_SPI,
792 .manufacture_id = AMIC_ID_NOPREFIX,
793 .model_id = AMIC_A25L016,
794 .total_size = 2048,
795 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000796 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000797 .tested = TEST_UNTESTED,
798 .probe = probe_spi_rdid,
799 .probe_timing = TIMING_ZERO,
800 .block_erasers =
801 {
802 {
803 .eraseblocks = { { 4 * 1024, 512 } },
804 .block_erase = spi_block_erase_20,
805 }, {
806 .eraseblocks = { { 64 * 1024, 32 } },
807 .block_erase = spi_block_erase_d8,
808 }, {
809 .eraseblocks = { { 2048 * 1024, 1 } },
810 .block_erase = spi_block_erase_c7,
811 }
812 },
813 .unlock = spi_disable_blockprotect,
814 .write = spi_chip_write_256,
815 .read = spi_chip_read,
816 },
817
818 {
819 .vendor = "AMIC",
820 .name = "A25L032",
821 .bustype = CHIP_BUSTYPE_SPI,
822 .manufacture_id = AMIC_ID_NOPREFIX,
823 .model_id = AMIC_A25L032,
824 .total_size = 4096,
825 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000826 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000827 .tested = TEST_UNTESTED,
828 .probe = probe_spi_rdid,
829 .probe_timing = TIMING_ZERO,
830 .block_erasers =
831 {
832 {
833 .eraseblocks = { { 4 * 1024, 1024 } },
834 .block_erase = spi_block_erase_20,
835 }, {
836 .eraseblocks = { { 64 * 1024, 64 } },
837 .block_erase = spi_block_erase_52,
838 }, {
839 .eraseblocks = { { 64 * 1024, 64 } },
840 .block_erase = spi_block_erase_d8,
841 }, {
842 .eraseblocks = { { 4096 * 1024, 1 } },
843 .block_erase = spi_block_erase_60,
844 }, {
845 .eraseblocks = { { 4096 * 1024, 1 } },
846 .block_erase = spi_block_erase_c7,
847 }
848 },
849 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
850 .write = spi_chip_write_256,
851 .read = spi_chip_read,
852 },
853
854 {
855 .vendor = "AMIC",
856 .name = "A25LQ032",
857 .bustype = CHIP_BUSTYPE_SPI,
858 .manufacture_id = AMIC_ID_NOPREFIX,
859 .model_id = AMIC_A25LQ032,
860 .total_size = 4096,
861 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000862 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000863 .tested = TEST_UNTESTED,
864 .probe = probe_spi_rdid,
865 .probe_timing = TIMING_ZERO,
866 .block_erasers =
867 {
868 {
869 .eraseblocks = { { 4 * 1024, 1024 } },
870 .block_erase = spi_block_erase_20,
871 }, {
872 .eraseblocks = { { 64 * 1024, 64 } },
873 .block_erase = spi_block_erase_52,
874 }, {
875 .eraseblocks = { { 64 * 1024, 64 } },
876 .block_erase = spi_block_erase_d8,
877 }, {
878 .eraseblocks = { { 4096 * 1024, 1 } },
879 .block_erase = spi_block_erase_60,
880 }, {
881 .eraseblocks = { { 4096 * 1024, 1 } },
882 .block_erase = spi_block_erase_c7,
883 }
884 },
885 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
886 .write = spi_chip_write_256,
887 .read = spi_chip_read,
888 },
889
890 {
891 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000892 .name = "A29002B",
893 .bustype = CHIP_BUSTYPE_PARALLEL,
894 .manufacture_id = AMIC_ID_NOPREFIX,
895 .model_id = AMIC_A29002B,
896 .total_size = 256,
897 .page_size = 64 * 1024,
898 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
899 .tested = TEST_UNTESTED,
900 .probe = probe_jedec,
901 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
902 .block_erasers =
903 {
904 {
905 .eraseblocks = {
906 {16 * 1024, 1},
907 {8 * 1024, 2},
908 {32 * 1024, 1},
909 {64 * 1024, 3},
910 },
911 .block_erase = erase_sector_jedec,
912 }, {
913 .eraseblocks = { {256 * 1024, 1} },
914 .block_erase = erase_chip_block_jedec,
915 },
916 },
917 .write = write_jedec_1,
918 .read = read_memmapped,
919 },
920
921 {
922 .vendor = "AMIC",
923 .name = "A29002T",
924 .bustype = CHIP_BUSTYPE_PARALLEL,
925 .manufacture_id = AMIC_ID_NOPREFIX,
926 .model_id = AMIC_A29002T,
927 .total_size = 256,
928 .page_size = 64 * 1024,
929 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
930 .tested = TEST_OK_PRW,
931 .probe = probe_jedec,
932 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
933 .block_erasers =
934 {
935 {
936 .eraseblocks = {
937 {64 * 1024, 3},
938 {32 * 1024, 1},
939 {8 * 1024, 2},
940 {16 * 1024, 1},
941 },
942 .block_erase = erase_sector_jedec,
943 }, {
944 .eraseblocks = { {256 * 1024, 1} },
945 .block_erase = erase_chip_block_jedec,
946 },
947 },
948 .write = write_jedec_1,
949 .read = read_memmapped,
950 },
951
952 {
953 .vendor = "AMIC",
954 .name = "A29040B",
955 .bustype = CHIP_BUSTYPE_PARALLEL,
956 .manufacture_id = AMIC_ID_NOPREFIX,
957 .model_id = AMIC_A29040B,
958 .total_size = 512,
959 .page_size = 64 * 1024,
960 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
961 .tested = TEST_UNTESTED,
962 .probe = probe_jedec,
963 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
964 .block_erasers =
965 {
966 {
967 .eraseblocks = { {64 * 1024, 8} },
968 .block_erase = erase_sector_jedec,
969 }, {
970 .eraseblocks = { {512 * 1024, 1} },
971 .block_erase = erase_chip_block_jedec,
972 },
973 },
974 .write = write_jedec_1,
975 .read = read_memmapped,
976 },
977
978 {
979 .vendor = "AMIC",
980 .name = "A49LF040A",
981 .bustype = CHIP_BUSTYPE_LPC,
982 .manufacture_id = AMIC_ID_NOPREFIX,
983 .model_id = AMIC_A49LF040A,
984 .total_size = 512,
985 .page_size = 64 * 1024,
986 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
987 .tested = TEST_OK_PREW,
988 .probe = probe_jedec,
989 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
990 .block_erasers =
991 {
992 {
993 .eraseblocks = { {64 * 1024, 8} },
994 .block_erase = erase_block_jedec,
995 }, {
996 .eraseblocks = { {512 * 1024, 1} },
997 .block_erase = erase_chip_block_jedec,
998 }
999 },
1000 .unlock = unlock_49fl00x,
1001 .write = write_jedec_1,
1002 .read = read_memmapped,
1003 },
1004
1005 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 .vendor = "Atmel",
1007 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001010 .model_id = ATMEL_AT25DF021,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001011 .total_size = 256,
1012 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001013 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001014 .tested = TEST_UNTESTED,
1015 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001016 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001017 .block_erasers =
1018 {
1019 {
1020 .eraseblocks = { {4 * 1024, 64} },
1021 .block_erase = spi_block_erase_20,
1022 }, {
1023 .eraseblocks = { {32 * 1024, 8} },
1024 .block_erase = spi_block_erase_52,
1025 }, {
1026 .eraseblocks = { {64 * 1024, 4} },
1027 .block_erase = spi_block_erase_d8,
1028 }, {
1029 .eraseblocks = { {256 * 1024, 1} },
1030 .block_erase = spi_block_erase_60,
1031 }, {
1032 .eraseblocks = { {256 * 1024, 1} },
1033 .block_erase = spi_block_erase_c7,
1034 }
1035 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001036 .printlock = spi_prettyprint_status_register_at25df,
1037 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001038 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001039 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001040 },
1041
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001042 {
1043 .vendor = "Atmel",
1044 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001045 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001047 .model_id = ATMEL_AT25DF041A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001048 .total_size = 512,
1049 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001050 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001051 .tested = TEST_UNTESTED,
1052 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001053 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001054 .block_erasers =
1055 {
1056 {
1057 .eraseblocks = { {4 * 1024, 128} },
1058 .block_erase = spi_block_erase_20,
1059 }, {
1060 .eraseblocks = { {32 * 1024, 16} },
1061 .block_erase = spi_block_erase_52,
1062 }, {
1063 .eraseblocks = { {64 * 1024, 8} },
1064 .block_erase = spi_block_erase_d8,
1065 }, {
1066 .eraseblocks = { {512 * 1024, 1} },
1067 .block_erase = spi_block_erase_60,
1068 }, {
1069 .eraseblocks = { {512 * 1024, 1} },
1070 .block_erase = spi_block_erase_c7,
1071 }
1072 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001073 .printlock = spi_prettyprint_status_register_at25df,
1074 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001075 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001076 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001077 },
1078
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001079 {
1080 .vendor = "Atmel",
1081 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001082 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001083 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001084 .model_id = ATMEL_AT25DF081,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001085 .total_size = 1024,
1086 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001087 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001088 .tested = TEST_UNTESTED,
1089 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001090 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001091 .block_erasers =
1092 {
1093 {
1094 .eraseblocks = { {4 * 1024, 256} },
1095 .block_erase = spi_block_erase_20,
1096 }, {
1097 .eraseblocks = { {32 * 1024, 32} },
1098 .block_erase = spi_block_erase_52,
1099 }, {
1100 .eraseblocks = { {64 * 1024, 16} },
1101 .block_erase = spi_block_erase_d8,
1102 }, {
1103 .eraseblocks = { {1024 * 1024, 1} },
1104 .block_erase = spi_block_erase_60,
1105 }, {
1106 .eraseblocks = { {1024 * 1024, 1} },
1107 .block_erase = spi_block_erase_c7,
1108 }
1109 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001110 .printlock = spi_prettyprint_status_register_at25df,
1111 .unlock = spi_disable_blockprotect_at25df,
1112 .write = spi_chip_write_256,
1113 .read = spi_chip_read,
1114 },
1115
1116 {
1117 .vendor = "Atmel",
1118 .name = "AT25DF081A",
1119 .bustype = CHIP_BUSTYPE_SPI,
1120 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001121 .model_id = ATMEL_AT25DF081A,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001122 .total_size = 1024,
1123 .page_size = 256,
1124 .feature_bits = FEATURE_WRSR_WREN,
1125 .tested = TEST_UNTESTED,
1126 .probe = probe_spi_rdid,
1127 .probe_timing = TIMING_ZERO,
1128 .block_erasers =
1129 {
1130 {
1131 .eraseblocks = { {4 * 1024, 256} },
1132 .block_erase = spi_block_erase_20,
1133 }, {
1134 .eraseblocks = { {32 * 1024, 32} },
1135 .block_erase = spi_block_erase_52,
1136 }, {
1137 .eraseblocks = { {64 * 1024, 16} },
1138 .block_erase = spi_block_erase_d8,
1139 }, {
1140 .eraseblocks = { {1024 * 1024, 1} },
1141 .block_erase = spi_block_erase_60,
1142 }, {
1143 .eraseblocks = { {1024 * 1024, 1} },
1144 .block_erase = spi_block_erase_c7,
1145 }
1146 },
1147 .printlock = spi_prettyprint_status_register_at25df_sec,
1148 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001149 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001150 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001151 },
1152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001153 {
1154 .vendor = "Atmel",
1155 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001156 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001157 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001158 .model_id = ATMEL_AT25DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001159 .total_size = 2048,
1160 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001161 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001162 .tested = TEST_UNTESTED,
1163 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001164 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001165 .block_erasers =
1166 {
1167 {
1168 .eraseblocks = { {4 * 1024, 512} },
1169 .block_erase = spi_block_erase_20,
1170 }, {
1171 .eraseblocks = { {32 * 1024, 64} },
1172 .block_erase = spi_block_erase_52,
1173 }, {
1174 .eraseblocks = { {64 * 1024, 32} },
1175 .block_erase = spi_block_erase_d8,
1176 }, {
1177 .eraseblocks = { {2 * 1024 * 1024, 1} },
1178 .block_erase = spi_block_erase_60,
1179 }, {
1180 .eraseblocks = { {2 * 1024 * 1024, 1} },
1181 .block_erase = spi_block_erase_c7,
1182 }
1183 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001184 .printlock = spi_prettyprint_status_register_at25df_sec,
1185 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001186 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001187 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001188 },
1189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001190 {
1191 .vendor = "Atmel",
1192 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001193 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001194 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001195 .model_id = ATMEL_AT25DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 .total_size = 4096,
1197 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001198 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00001199 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001200 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001201 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001202 .block_erasers =
1203 {
1204 {
1205 .eraseblocks = { {4 * 1024, 1024} },
1206 .block_erase = spi_block_erase_20,
1207 }, {
1208 .eraseblocks = { {32 * 1024, 128} },
1209 .block_erase = spi_block_erase_52,
1210 }, {
1211 .eraseblocks = { {64 * 1024, 64} },
1212 .block_erase = spi_block_erase_d8,
1213 }, {
1214 .eraseblocks = { {4 * 1024 * 1024, 1} },
1215 .block_erase = spi_block_erase_60,
1216 }, {
1217 .eraseblocks = { {4 * 1024 * 1024, 1} },
1218 .block_erase = spi_block_erase_c7,
1219 }
1220 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001221 .printlock = spi_prettyprint_status_register_at25df,
1222 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001223 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001224 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001225 },
1226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001227 {
1228 .vendor = "Atmel",
1229 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001230 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001231 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001232 .model_id = ATMEL_AT25DF321A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001233 .total_size = 4096,
1234 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001235 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001236 .tested = TEST_UNTESTED,
1237 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001238 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001239 .block_erasers =
1240 {
1241 {
1242 .eraseblocks = { {4 * 1024, 1024} },
1243 .block_erase = spi_block_erase_20,
1244 }, {
1245 .eraseblocks = { {32 * 1024, 128} },
1246 .block_erase = spi_block_erase_52,
1247 }, {
1248 .eraseblocks = { {64 * 1024, 64} },
1249 .block_erase = spi_block_erase_d8,
1250 }, {
1251 .eraseblocks = { {4 * 1024 * 1024, 1} },
1252 .block_erase = spi_block_erase_60,
1253 }, {
1254 .eraseblocks = { {4 * 1024 * 1024, 1} },
1255 .block_erase = spi_block_erase_c7,
1256 }
1257 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001258 .printlock = spi_prettyprint_status_register_at25df_sec,
1259 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001260 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001262 },
1263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001264 {
1265 .vendor = "Atmel",
1266 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001267 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001268 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001269 .model_id = ATMEL_AT25DF641,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001270 .total_size = 8192,
1271 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001272 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001273 .tested = TEST_UNTESTED,
1274 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001275 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001276 .block_erasers =
1277 {
1278 {
1279 .eraseblocks = { {4 * 1024, 2048} },
1280 .block_erase = spi_block_erase_20,
1281 }, {
1282 .eraseblocks = { {32 * 1024, 256} },
1283 .block_erase = spi_block_erase_52,
1284 }, {
1285 .eraseblocks = { {64 * 1024, 128} },
1286 .block_erase = spi_block_erase_d8,
1287 }, {
1288 .eraseblocks = { {8 * 1024 * 1024, 1} },
1289 .block_erase = spi_block_erase_60,
1290 }, {
1291 .eraseblocks = { {8 * 1024 * 1024, 1} },
1292 .block_erase = spi_block_erase_c7,
1293 }
1294 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001295 .printlock = spi_prettyprint_status_register_at25df_sec,
1296 .unlock = spi_disable_blockprotect_at25df_sec,
1297 .write = spi_chip_write_256,
1298 .read = spi_chip_read,
1299 },
1300
1301 {
1302 .vendor = "Atmel",
1303 .name = "AT25DQ161",
1304 .bustype = CHIP_BUSTYPE_SPI,
1305 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001306 .model_id = ATMEL_AT25DQ161,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001307 .total_size = 2048,
1308 .page_size = 256,
1309 .feature_bits = FEATURE_WRSR_WREN,
1310 .tested = TEST_UNTESTED,
1311 .probe = probe_spi_rdid,
1312 .probe_timing = TIMING_ZERO,
1313 .block_erasers =
1314 {
1315 {
1316 .eraseblocks = { {4 * 1024, 512} },
1317 .block_erase = spi_block_erase_20,
1318 }, {
1319 .eraseblocks = { {32 * 1024, 64} },
1320 .block_erase = spi_block_erase_52,
1321 }, {
1322 .eraseblocks = { {64 * 1024, 32} },
1323 .block_erase = spi_block_erase_d8,
1324 }, {
1325 .eraseblocks = { {2 * 1024 * 1024, 1} },
1326 .block_erase = spi_block_erase_60,
1327 }, {
1328 .eraseblocks = { {2 * 1024 * 1024, 1} },
1329 .block_erase = spi_block_erase_c7,
1330 }
1331 },
1332 .printlock = spi_prettyprint_status_register_at25df_sec,
1333 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001334 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001335 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001336 },
1337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001338 {
1339 .vendor = "Atmel",
1340 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001341 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001342 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001343 .model_id = ATMEL_AT25F512B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001344 .total_size = 64,
1345 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001346 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001347 .tested = TEST_UNTESTED,
1348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001349 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001350 .block_erasers =
1351 {
1352 {
1353 .eraseblocks = { {4 * 1024, 16} },
1354 .block_erase = spi_block_erase_20,
1355 }, {
1356 .eraseblocks = { {32 * 1024, 2} },
1357 .block_erase = spi_block_erase_52,
1358 }, {
1359 .eraseblocks = { {32 * 1024, 2} },
1360 .block_erase = spi_block_erase_d8,
1361 }, {
1362 .eraseblocks = { {64 * 1024, 1} },
1363 .block_erase = spi_block_erase_60,
1364 }, {
1365 .eraseblocks = { {64 * 1024, 1} },
1366 .block_erase = spi_block_erase_c7,
1367 }
1368 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001369 .printlock = spi_prettyprint_status_register_at25f,
1370 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001371 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001372 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001373 },
1374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001375 {
1376 .vendor = "Atmel",
1377 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001378 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001379 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001380 .model_id = ATMEL_AT25FS010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001381 .total_size = 128,
1382 .page_size = 256,
1383 .tested = TEST_UNTESTED,
1384 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001385 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001386 .block_erasers =
1387 {
1388 {
1389 .eraseblocks = { {4 * 1024, 32} },
1390 .block_erase = spi_block_erase_20,
1391 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001392 .eraseblocks = { {4 * 1024, 32} },
1393 .block_erase = spi_block_erase_d7,
1394 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001395 .eraseblocks = { {32 * 1024, 4} },
1396 .block_erase = spi_block_erase_52,
1397 }, {
1398 .eraseblocks = { {32 * 1024, 4} },
1399 .block_erase = spi_block_erase_d8,
1400 }, {
1401 .eraseblocks = { {128 * 1024, 1} },
1402 .block_erase = spi_block_erase_60,
1403 }, {
1404 .eraseblocks = { {128 * 1024, 1} },
1405 .block_erase = spi_block_erase_c7,
1406 }
1407 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001408 .printlock = spi_prettyprint_status_register_at25fs010,
1409 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001410 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001411 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001412 },
1413
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001414 {
1415 .vendor = "Atmel",
1416 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001417 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001418 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001419 .model_id = ATMEL_AT25FS040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001420 .total_size = 512,
1421 .page_size = 256,
1422 .tested = TEST_UNTESTED,
1423 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001424 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001425 .block_erasers =
1426 {
1427 {
1428 .eraseblocks = { {4 * 1024, 128} },
1429 .block_erase = spi_block_erase_20,
1430 }, {
1431 .eraseblocks = { {64 * 1024, 8} },
1432 .block_erase = spi_block_erase_52,
1433 }, {
1434 .eraseblocks = { {64 * 1024, 8} },
1435 .block_erase = spi_block_erase_d8,
1436 }, {
1437 .eraseblocks = { {512 * 1024, 1} },
1438 .block_erase = spi_block_erase_60,
1439 }, {
1440 .eraseblocks = { {512 * 1024, 1} },
1441 .block_erase = spi_block_erase_c7,
1442 }
1443 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001444 .printlock = spi_prettyprint_status_register_at25fs040,
1445 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001446 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001447 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001448 },
1449
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001450 {
1451 .vendor = "Atmel",
1452 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001453 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001454 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001455 .model_id = ATMEL_AT26DF041,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001456 .total_size = 512,
1457 .page_size = 256,
1458 .tested = TEST_UNTESTED,
1459 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001460 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001461 .block_erasers =
1462 {
1463 {
1464 .eraseblocks = { {4 * 1024, 128} },
1465 .block_erase = spi_block_erase_20,
1466 }
1467 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001468 .write = NULL /* Incompatible Page write */,
1469 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001470 },
1471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001472 {
1473 .vendor = "Atmel",
1474 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001475 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001476 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001477 .model_id = ATMEL_AT26DF081A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001478 .total_size = 1024,
1479 .page_size = 256,
Carl-Daniel Hailfinger9017cec2010-09-04 23:37:40 +00001480 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001481 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001482 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001483 .block_erasers =
1484 {
1485 {
1486 .eraseblocks = { {4 * 1024, 256} },
1487 .block_erase = spi_block_erase_20,
1488 }, {
1489 .eraseblocks = { {32 * 1024, 32} },
1490 .block_erase = spi_block_erase_52,
1491 }, {
1492 .eraseblocks = { {64 * 1024, 16} },
1493 .block_erase = spi_block_erase_d8,
1494 }, {
1495 .eraseblocks = { {1024 * 1024, 1} },
1496 .block_erase = spi_block_erase_60,
1497 }, {
1498 .eraseblocks = { {1024 * 1024, 1} },
1499 .block_erase = spi_block_erase_c7,
1500 }
1501 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001502 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001503 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001504 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001505 },
1506
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001507 {
1508 .vendor = "Atmel",
1509 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001510 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001511 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001512 .model_id = ATMEL_AT26DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001513 .total_size = 2048,
1514 .page_size = 256,
1515 .tested = TEST_UNTESTED,
1516 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001517 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001518 .block_erasers =
1519 {
1520 {
1521 .eraseblocks = { {4 * 1024, 512} },
1522 .block_erase = spi_block_erase_20,
1523 }, {
1524 .eraseblocks = { {32 * 1024, 64} },
1525 .block_erase = spi_block_erase_52,
1526 }, {
1527 .eraseblocks = { {64 * 1024, 32} },
1528 .block_erase = spi_block_erase_d8,
1529 }, {
1530 .eraseblocks = { {2 * 1024 * 1024, 1} },
1531 .block_erase = spi_block_erase_60,
1532 }, {
1533 .eraseblocks = { {2 * 1024 * 1024, 1} },
1534 .block_erase = spi_block_erase_c7,
1535 }
1536 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001537 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001538 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001539 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001540 },
1541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001542 {
1543 .vendor = "Atmel",
1544 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001545 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001546 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001547 .model_id = ATMEL_AT26DF161A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001548 .total_size = 2048,
1549 .page_size = 256,
1550 .tested = TEST_UNTESTED,
1551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001552 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001553 .block_erasers =
1554 {
1555 {
1556 .eraseblocks = { {4 * 1024, 512} },
1557 .block_erase = spi_block_erase_20,
1558 }, {
1559 .eraseblocks = { {32 * 1024, 64} },
1560 .block_erase = spi_block_erase_52,
1561 }, {
1562 .eraseblocks = { {64 * 1024, 32} },
1563 .block_erase = spi_block_erase_d8,
1564 }, {
1565 .eraseblocks = { {2 * 1024 * 1024, 1} },
1566 .block_erase = spi_block_erase_60,
1567 }, {
1568 .eraseblocks = { {2 * 1024 * 1024, 1} },
1569 .block_erase = spi_block_erase_c7,
1570 }
1571 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001572 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001573 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001574 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001575 },
1576
1577 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001578 /*{
1579 .vendor = "Atmel",
1580 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001581 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001582 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001583 .model_id = ATMEL_AT26DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001584 .total_size = 4096,
1585 .page_size = 256,
1586 .tested = TEST_UNTESTED,
1587 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001588 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001589 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001590 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001591 .read = spi_chip_read,
1592 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001593
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001594 {
1595 .vendor = "Atmel",
1596 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001597 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001598 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001599 .model_id = ATMEL_AT26F004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001600 .total_size = 512,
1601 .page_size = 256,
1602 .tested = TEST_UNTESTED,
1603 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001604 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001605 .block_erasers =
1606 {
1607 {
1608 .eraseblocks = { {4 * 1024, 128} },
1609 .block_erase = spi_block_erase_20,
1610 }, {
1611 .eraseblocks = { {32 * 1024, 16} },
1612 .block_erase = spi_block_erase_52,
1613 }, {
1614 .eraseblocks = { {64 * 1024, 8} },
1615 .block_erase = spi_block_erase_d8,
1616 }, {
1617 .eraseblocks = { {512 * 1024, 1} },
1618 .block_erase = spi_block_erase_60,
1619 }, {
1620 .eraseblocks = { {512 * 1024, 1} },
1621 .block_erase = spi_block_erase_c7,
1622 }
1623 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001624 .write = NULL /* Incompatible Page write */,
1625 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001626 },
1627
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001628 {
1629 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001630 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +00001631 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001632 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001633 .model_id = ATMEL_AT29C512,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001634 .total_size = 64,
1635 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001636 .feature_bits = FEATURE_LONG_RESET,
1637 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001638 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001639 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001640 .block_erasers =
1641 {
1642 {
1643 .eraseblocks = { {64 * 1024, 1} },
1644 .block_erase = erase_chip_block_jedec,
1645 }
1646 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001647 .write = write_jedec,
1648 .read = read_memmapped,
1649
1650 },
1651
1652 {
1653 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001654 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001655 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001656 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001657 .model_id = ATMEL_AT29C010A,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001658 .total_size = 128,
1659 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001660 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00001661 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001662 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001663 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001664 .block_erasers =
1665 {
1666 {
1667 .eraseblocks = { {128 * 1024, 1} },
1668 .block_erase = erase_chip_block_jedec,
1669 }
1670 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001671 .write = write_jedec, /* FIXME */
1672 .read = read_memmapped,
1673 },
1674
1675 {
1676 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001677 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +00001678 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001680 .model_id = ATMEL_AT29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001681 .total_size = 256,
1682 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001683 .feature_bits = FEATURE_LONG_RESET,
1684 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001685 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00001686 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00001687 .block_erasers =
1688 {
1689 {
1690 .eraseblocks = { {256 * 1024, 1} },
1691 .block_erase = erase_chip_block_jedec,
1692 }
1693 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001694 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001695 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001696 },
1697
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001698 {
1699 .vendor = "Atmel",
1700 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001701 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001702 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001703 .model_id = ATMEL_AT29C040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001704 .total_size = 512,
1705 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001706 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001707 .tested = TEST_UNTESTED,
1708 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00001709 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00001710 .block_erasers =
1711 {
1712 {
1713 .eraseblocks = { {512 * 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 = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001724 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001726 .model_id = ATMEL_AT45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001727 .total_size = 16896 /* No power of two sizes */,
1728 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001729 .tested = TEST_BAD_READ,
1730 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001731 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001732 .write = NULL /* Incompatible Page write */,
1733 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001734 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001736 {
1737 .vendor = "Atmel",
1738 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001739 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001740 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001741 .model_id = ATMEL_AT45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001742 .total_size = 128 /* Size can only be determined from status register */,
1743 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001744 .tested = TEST_BAD_READ,
1745 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001746 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001747 .write = NULL,
1748 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001749 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001750
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001751 {
1752 .vendor = "Atmel",
1753 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001754 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001755 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001756 .model_id = ATMEL_AT45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001757 .total_size = 256 /* Size can only be determined from status register */,
1758 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001759 .tested = TEST_BAD_READ,
1760 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001761 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001762 .write = NULL,
1763 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001764 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001766 {
1767 .vendor = "Atmel",
1768 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001769 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001771 .model_id = ATMEL_AT45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001772 .total_size = 512 /* Size can only be determined from status register */,
1773 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 .tested = TEST_BAD_READ,
1775 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001776 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001777 .write = NULL,
1778 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001779 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001780
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001781 {
1782 .vendor = "Atmel",
1783 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001784 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001785 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001786 .model_id = ATMEL_AT45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001787 .total_size = 1024 /* Size can only be determined from status register */,
1788 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 .tested = TEST_BAD_READ,
1790 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001791 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001792 .write = NULL,
1793 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001794 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001795
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001796 {
1797 .vendor = "Atmel",
1798 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001799 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001801 .model_id = ATMEL_AT45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001802 .total_size = 2048 /* Size can only be determined from status register */,
1803 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001804 .tested = TEST_BAD_READ,
1805 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001806 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001807 .write = NULL,
1808 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001809 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001811 {
1812 .vendor = "Atmel",
1813 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001814 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001815 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001816 .model_id = ATMEL_AT45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001817 .total_size = 4224 /* No power of two sizes */,
1818 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001819 .tested = TEST_BAD_READ,
1820 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001821 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001822 .write = NULL,
1823 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001824 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001825
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001826 {
1827 .vendor = "Atmel",
1828 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001829 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001830 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001831 .model_id = ATMEL_AT45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001832 .total_size = 4096 /* Size can only be determined from status register */,
1833 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 .tested = TEST_BAD_READ,
1835 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001836 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001837 .write = NULL,
1838 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001839 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001840
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001841 {
1842 .vendor = "Atmel",
1843 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001844 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001845 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001846 .model_id = ATMEL_AT45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001847 .total_size = 8192 /* Size can only be determined from status register */,
1848 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001849 .tested = TEST_BAD_READ,
1850 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001851 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001852 .write = NULL,
1853 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001854 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001855
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001856 {
1857 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001858 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001859 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001860 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001861 .model_id = ATMEL_AT49BV512,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001862 .total_size = 64,
1863 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001864 .feature_bits = FEATURE_EITHER_RESET,
1865 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001866 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001867 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001868 .block_erasers =
1869 {
1870 {
1871 .eraseblocks = { {64 * 1024, 1} },
1872 .block_erase = erase_chip_block_jedec,
1873 }
1874 },
Sean Nelson35727f72010-01-28 23:55:12 +00001875 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001876 .read = read_memmapped,
1877 },
1878
1879 {
1880 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001881 .name = "AT49F020",
1882 .bustype = CHIP_BUSTYPE_PARALLEL,
1883 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001884 .model_id = ATMEL_AT49F020,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001885 .total_size = 256,
1886 .page_size = 256,
1887 .feature_bits = FEATURE_EITHER_RESET,
1888 .tested = TEST_OK_PREW,
1889 .probe = probe_jedec,
1890 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1891 .block_erasers =
1892 {
1893 {
1894 .eraseblocks = { {256 * 1024, 1} },
1895 .block_erase = erase_chip_block_jedec,
1896 }
1897 },
1898 .write = write_jedec_1,
1899 .read = read_memmapped,
1900 },
1901
1902 {
1903 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001904 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001905 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001906 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001907 .model_id = ATMEL_AT49F002N,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001908 .total_size = 256,
1909 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001910 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001911 .tested = TEST_UNTESTED,
1912 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001913 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001914 .block_erasers =
1915 {
1916 {
1917 .eraseblocks = {
1918 {16 * 1024, 1},
1919 {8 * 1024, 2},
1920 {96 * 1024, 1},
1921 {128 * 1024, 1},
1922 },
1923 .block_erase = erase_sector_jedec,
1924 }, {
1925 .eraseblocks = { {256 * 1024, 1} },
1926 .block_erase = erase_chip_block_jedec,
1927 }
1928 },
Sean Nelson35727f72010-01-28 23:55:12 +00001929 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001931 },
1932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001933 {
1934 .vendor = "Atmel",
1935 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001936 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001937 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001938 .model_id = ATMEL_AT49F002NT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001939 .total_size = 256,
1940 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001941 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001942 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001943 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001944 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001945 .block_erasers =
1946 {
1947 {
1948 .eraseblocks = {
1949 {128 * 1024, 1},
1950 {96 * 1024, 1},
1951 {8 * 1024, 2},
1952 {16 * 1024, 1},
1953 },
1954 .block_erase = erase_sector_jedec,
1955 }, {
1956 .eraseblocks = { {256 * 1024, 1} },
1957 .block_erase = erase_chip_block_jedec,
1958 }
1959 },
Sean Nelson35727f72010-01-28 23:55:12 +00001960 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001961 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001962 },
1963
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001964 {
Joshua Roysf1324e02010-09-16 00:51:51 +00001965 .vendor = "Bright",
1966 .name = "BM29F040",
1967 .bustype = CHIP_BUSTYPE_PARALLEL,
1968 .manufacture_id = BRIGHT_ID,
1969 .model_id = BRIGHT_BM29F040,
1970 .total_size = 512,
1971 .page_size = 64 * 1024,
1972 .feature_bits = FEATURE_EITHER_RESET,
1973 .tested = TEST_OK_PR,
1974 .probe = probe_jedec,
1975 .probe_timing = TIMING_ZERO,
1976 .block_erasers =
1977 {
1978 {
1979 .eraseblocks = { {64 * 1024, 8} },
1980 .block_erase = erase_sector_jedec,
1981 }, {
1982 .eraseblocks = { {512 * 1024, 1} },
1983 .block_erase = erase_chip_block_jedec,
1984 },
1985 },
1986 .write = write_jedec_1,
1987 .read = read_memmapped,
1988 },
1989
1990 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001991 .vendor = "EMST",
1992 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001993 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001994 .manufacture_id = EMST_ID,
1995 .model_id = EMST_F49B002UA,
1996 .total_size = 256,
1997 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001998 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001999 .tested = TEST_UNTESTED,
2000 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002001 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002002 .block_erasers =
2003 {
2004 {
2005 .eraseblocks = {
2006 {128 * 1024, 1},
2007 {96 * 1024, 1},
2008 {8 * 1024, 2},
2009 {16 * 1024, 1},
2010 },
2011 .block_erase = erase_sector_jedec,
2012 }, {
2013 .eraseblocks = { {256 * 1024, 1} },
2014 .block_erase = erase_chip_block_jedec,
2015 }
2016 },
Sean Nelson35727f72010-01-28 23:55:12 +00002017 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002018 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002019 },
2020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002021 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002022 .vendor = "EMST",
2023 .name = "F25L008A",
2024 .bustype = CHIP_BUSTYPE_SPI,
2025 .manufacture_id = EMST_ID,
2026 .model_id = EMST_F25L008A,
2027 .total_size = 1024,
2028 .page_size = 256,
2029 .tested = TEST_UNTESTED,
2030 .probe = probe_spi_rdid,
2031 .probe_timing = TIMING_ZERO,
2032 .block_erasers =
2033 {
2034 {
2035 .eraseblocks = { {4 * 1024, 256} },
2036 .block_erase = spi_block_erase_20,
2037 }, {
2038 .eraseblocks = { {64 * 1024, 16} },
2039 .block_erase = spi_block_erase_d8,
2040 }, {
2041 .eraseblocks = { {1024 * 1024, 1} },
2042 .block_erase = spi_block_erase_60,
2043 }, {
2044 .eraseblocks = { {1024 * 1024, 1} },
2045 .block_erase = spi_block_erase_c7,
2046 }
2047 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002048 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002049 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002050 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002051 },
2052
2053 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002054 .vendor = "Eon",
2055 .name = "EN25B05",
2056 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002057 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002058 .model_id = EON_EN25B05,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002059 .total_size = 64,
2060 .page_size = 256,
2061 .tested = TEST_UNTESTED,
2062 .probe = probe_spi_rdid,
2063 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002064 .block_erasers =
2065 {
2066 {
2067 .eraseblocks = {
2068 {4 * 1024, 2},
2069 {8 * 1024, 1},
2070 {16 * 1024, 1},
2071 {32 * 1024, 1},
2072 },
2073 .block_erase = spi_block_erase_d8,
2074 }, {
2075 .eraseblocks = { {64 * 1024, 1} },
2076 .block_erase = spi_block_erase_c7,
2077 }
2078 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002079 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002080 .write = spi_chip_write_256,
2081 .read = spi_chip_read,
2082 },
2083
2084 {
2085 .vendor = "Eon",
2086 .name = "EN25B05T",
2087 .bustype = CHIP_BUSTYPE_SPI,
2088 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002089 .model_id = EON_EN25B05,
Sean Nelson54596372010-01-09 05:30:14 +00002090 .total_size = 64,
2091 .page_size = 256,
2092 .tested = TEST_UNTESTED,
2093 .probe = probe_spi_rdid,
2094 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002095 .block_erasers =
2096 {
2097 {
2098 .eraseblocks = {
2099 {32 * 1024, 1},
2100 {16 * 1024, 1},
2101 {8 * 1024, 1},
2102 {4 * 1024, 2},
2103 },
2104 .block_erase = spi_block_erase_d8,
2105 }, {
2106 .eraseblocks = { {64 * 1024, 1} },
2107 .block_erase = spi_block_erase_c7,
2108 }
2109 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002110 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002111 .write = spi_chip_write_256,
2112 .read = spi_chip_read,
2113 },
2114
2115 {
2116 .vendor = "Eon",
2117 .name = "EN25B10",
2118 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002119 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002120 .model_id = EON_EN25B10,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002121 .total_size = 128,
2122 .page_size = 256,
2123 .tested = TEST_UNTESTED,
2124 .probe = probe_spi_rdid,
2125 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002126 .block_erasers =
2127 {
2128 {
2129 .eraseblocks = {
2130 {4 * 1024, 2},
2131 {8 * 1024, 1},
2132 {16 * 1024, 1},
2133 {32 * 1024, 3},
2134 },
2135 .block_erase = spi_block_erase_d8,
2136 }, {
2137 .eraseblocks = { {128 * 1024, 1} },
2138 .block_erase = spi_block_erase_c7,
2139 }
2140 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002141 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002142 .write = spi_chip_write_256,
2143 .read = spi_chip_read,
2144 },
2145
2146 {
2147 .vendor = "Eon",
2148 .name = "EN25B10T",
2149 .bustype = CHIP_BUSTYPE_SPI,
2150 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002151 .model_id = EON_EN25B10,
Sean Nelson54596372010-01-09 05:30:14 +00002152 .total_size = 128,
2153 .page_size = 256,
2154 .tested = TEST_UNTESTED,
2155 .probe = probe_spi_rdid,
2156 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002157 .block_erasers =
2158 {
2159 {
2160 .eraseblocks = {
2161 {32 * 1024, 3},
2162 {16 * 1024, 1},
2163 {8 * 1024, 1},
2164 {4 * 1024, 2},
2165 },
2166 .block_erase = spi_block_erase_d8,
2167 }, {
2168 .eraseblocks = { {128 * 1024, 1} },
2169 .block_erase = spi_block_erase_c7,
2170 }
2171 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002172 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002173 .write = spi_chip_write_256,
2174 .read = spi_chip_read,
2175 },
2176
2177 {
2178 .vendor = "Eon",
2179 .name = "EN25B20",
2180 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002181 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002182 .model_id = EON_EN25B20,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002183 .total_size = 256,
2184 .page_size = 256,
2185 .tested = TEST_UNTESTED,
2186 .probe = probe_spi_rdid,
2187 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002188 .block_erasers =
2189 {
2190 {
2191 .eraseblocks = {
2192 {4 * 1024, 2},
2193 {8 * 1024, 1},
2194 {16 * 1024, 1},
2195 {32 * 1024, 1},
2196 {64 * 1024, 3}
2197 },
2198 .block_erase = spi_block_erase_d8,
2199 }, {
2200 .eraseblocks = { {256 * 1024, 1} },
2201 .block_erase = spi_block_erase_c7,
2202 }
2203 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002204 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002205 .write = spi_chip_write_256,
2206 .read = spi_chip_read,
2207 },
2208
2209 {
2210 .vendor = "Eon",
2211 .name = "EN25B20T",
2212 .bustype = CHIP_BUSTYPE_SPI,
2213 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002214 .model_id = EON_EN25B20,
Sean Nelson54596372010-01-09 05:30:14 +00002215 .total_size = 256,
2216 .page_size = 256,
2217 .tested = TEST_UNTESTED,
2218 .probe = probe_spi_rdid,
2219 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002220 .block_erasers =
2221 {
2222 {
2223 .eraseblocks = {
2224 {64 * 1024, 3},
2225 {32 * 1024, 1},
2226 {16 * 1024, 1},
2227 {8 * 1024, 1},
2228 {4 * 1024, 2},
2229 },
2230 .block_erase = spi_block_erase_d8,
2231 }, {
2232 .eraseblocks = { {256 * 1024, 1} },
2233 .block_erase = spi_block_erase_c7,
2234 }
2235 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002236 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002237 .write = spi_chip_write_256,
2238 .read = spi_chip_read,
2239 },
2240
2241 {
2242 .vendor = "Eon",
2243 .name = "EN25B40",
2244 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002245 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002246 .model_id = EON_EN25B40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002247 .total_size = 512,
2248 .page_size = 256,
2249 .tested = TEST_UNTESTED,
2250 .probe = probe_spi_rdid,
2251 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002252 .block_erasers =
2253 {
2254 {
2255 .eraseblocks = {
2256 {4 * 1024, 2},
2257 {8 * 1024, 1},
2258 {16 * 1024, 1},
2259 {32 * 1024, 1},
2260 {64 * 1024, 7}
2261 },
2262 .block_erase = spi_block_erase_d8,
2263 }, {
2264 .eraseblocks = { {512 * 1024, 1} },
2265 .block_erase = spi_block_erase_c7,
2266 }
2267 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002268 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002269 .write = spi_chip_write_256,
2270 .read = spi_chip_read,
2271 },
2272
2273 {
2274 .vendor = "Eon",
2275 .name = "EN25B40T",
2276 .bustype = CHIP_BUSTYPE_SPI,
2277 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002278 .model_id = EON_EN25B40,
Sean Nelson54596372010-01-09 05:30:14 +00002279 .total_size = 512,
2280 .page_size = 256,
2281 .tested = TEST_UNTESTED,
2282 .probe = probe_spi_rdid,
2283 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002284 .block_erasers =
2285 {
2286 {
2287 .eraseblocks = {
2288 {64 * 1024, 7},
2289 {32 * 1024, 1},
2290 {16 * 1024, 1},
2291 {8 * 1024, 1},
2292 {4 * 1024, 2},
2293 },
2294 .block_erase = spi_block_erase_d8,
2295 }, {
2296 .eraseblocks = { {512 * 1024, 1} },
2297 .block_erase = spi_block_erase_c7,
2298 }
2299 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002300 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002301 .write = spi_chip_write_256,
2302 .read = spi_chip_read,
2303 },
2304
2305 {
2306 .vendor = "Eon",
2307 .name = "EN25B80",
2308 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002309 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002310 .model_id = EON_EN25B80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002311 .total_size = 1024,
2312 .page_size = 256,
2313 .tested = TEST_UNTESTED,
2314 .probe = probe_spi_rdid,
2315 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002316 .block_erasers =
2317 {
2318 {
2319 .eraseblocks = {
2320 {4 * 1024, 2},
2321 {8 * 1024, 1},
2322 {16 * 1024, 1},
2323 {32 * 1024, 1},
2324 {64 * 1024, 15}
2325 },
2326 .block_erase = spi_block_erase_d8,
2327 }, {
2328 .eraseblocks = { {1024 * 1024, 1} },
2329 .block_erase = spi_block_erase_c7,
2330 }
2331 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002332 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002333 .write = spi_chip_write_256,
2334 .read = spi_chip_read,
2335 },
2336
2337 {
2338 .vendor = "Eon",
2339 .name = "EN25B80T",
2340 .bustype = CHIP_BUSTYPE_SPI,
2341 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002342 .model_id = EON_EN25B80,
Sean Nelson54596372010-01-09 05:30:14 +00002343 .total_size = 1024,
2344 .page_size = 256,
2345 .tested = TEST_UNTESTED,
2346 .probe = probe_spi_rdid,
2347 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002348 .block_erasers =
2349 {
2350 {
2351 .eraseblocks = {
2352 {64 * 1024, 15},
2353 {32 * 1024, 1},
2354 {16 * 1024, 1},
2355 {8 * 1024, 1},
2356 {4 * 1024, 2},
2357 },
2358 .block_erase = spi_block_erase_d8,
2359 }, {
2360 .eraseblocks = { {1024 * 1024, 1} },
2361 .block_erase = spi_block_erase_c7,
2362 }
2363 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002364 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002365 .write = spi_chip_write_256,
2366 .read = spi_chip_read,
2367 },
2368
2369 {
2370 .vendor = "Eon",
2371 .name = "EN25B16",
2372 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002373 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002374 .model_id = EON_EN25B16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002375 .total_size = 2048,
2376 .page_size = 256,
2377 .tested = TEST_UNTESTED,
2378 .probe = probe_spi_rdid,
2379 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002380 .block_erasers =
2381 {
2382 {
2383 .eraseblocks = {
2384 {4 * 1024, 2},
2385 {8 * 1024, 1},
2386 {16 * 1024, 1},
2387 {32 * 1024, 1},
2388 {64 * 1024, 31},
2389 },
2390 .block_erase = spi_block_erase_d8,
2391 }, {
2392 .eraseblocks = { {2 * 1024 * 1024, 1} },
2393 .block_erase = spi_block_erase_c7,
2394 }
2395 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002396 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002397 .write = spi_chip_write_256,
2398 .read = spi_chip_read,
2399 },
2400
2401 {
2402 .vendor = "Eon",
2403 .name = "EN25B16T",
2404 .bustype = CHIP_BUSTYPE_SPI,
2405 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002406 .model_id = EON_EN25B16,
Sean Nelson54596372010-01-09 05:30:14 +00002407 .total_size = 2048,
2408 .page_size = 256,
2409 .tested = TEST_UNTESTED,
2410 .probe = probe_spi_rdid,
2411 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002412 .block_erasers =
2413 {
2414 {
2415 .eraseblocks = {
2416 {64 * 1024, 31},
2417 {32 * 1024, 1},
2418 {16 * 1024, 1},
2419 {8 * 1024, 1},
2420 {4 * 1024, 2},
2421 },
2422 .block_erase = spi_block_erase_d8,
2423 }, {
2424 .eraseblocks = { {2 * 1024 * 1024, 1} },
2425 .block_erase = spi_block_erase_c7,
2426 }
2427 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002428 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002429 .write = spi_chip_write_256,
2430 .read = spi_chip_read,
2431 },
2432
2433 {
2434 .vendor = "Eon",
2435 .name = "EN25B32",
2436 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002437 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002438 .model_id = EON_EN25B32,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002439 .total_size = 4096,
2440 .page_size = 256,
2441 .tested = TEST_UNTESTED,
2442 .probe = probe_spi_rdid,
2443 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002444 .block_erasers =
2445 {
2446 {
2447 .eraseblocks = {
2448 {4 * 1024, 2},
2449 {8 * 1024, 1},
2450 {16 * 1024, 1},
2451 {32 * 1024, 1},
2452 {64 * 1024, 63},
2453 },
2454 .block_erase = spi_block_erase_d8,
2455 }, {
2456 .eraseblocks = { {4 * 1024 * 1024, 1} },
2457 .block_erase = spi_block_erase_c7,
2458 }
2459 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002460 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002461 .write = spi_chip_write_256,
2462 .read = spi_chip_read,
2463 },
2464
2465 {
2466 .vendor = "Eon",
2467 .name = "EN25B32T",
2468 .bustype = CHIP_BUSTYPE_SPI,
2469 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002470 .model_id = EON_EN25B32,
Sean Nelson54596372010-01-09 05:30:14 +00002471 .total_size = 4096,
2472 .page_size = 256,
2473 .tested = TEST_UNTESTED,
2474 .probe = probe_spi_rdid,
2475 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002476 .block_erasers =
2477 {
2478 {
2479 .eraseblocks = {
2480 {64 * 1024, 63},
2481 {32 * 1024, 1},
2482 {16 * 1024, 1},
2483 {8 * 1024, 1},
2484 {4 * 1024, 2},
2485 },
2486 .block_erase = spi_block_erase_d8,
2487 }, {
2488 .eraseblocks = { {4 * 1024 * 1024, 1} },
2489 .block_erase = spi_block_erase_c7,
2490 }
2491 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002492 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002493 .write = spi_chip_write_256,
2494 .read = spi_chip_read,
2495 },
2496
2497 {
2498 .vendor = "Eon",
2499 .name = "EN25B64",
2500 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002501 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002502 .model_id = EON_EN25B64,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002503 .total_size = 8192,
2504 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002505 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002506 .tested = TEST_UNTESTED,
2507 .probe = probe_spi_rdid,
2508 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002509 .block_erasers =
2510 {
2511 {
2512 .eraseblocks = {
2513 {4 * 1024, 2},
2514 {8 * 1024, 1},
2515 {16 * 1024, 1},
2516 {32 * 1024, 1},
2517 {64 * 1024, 127},
2518 },
2519 .block_erase = spi_block_erase_d8,
2520 }, {
2521 .eraseblocks = { {8 * 1024 * 1024, 1} },
2522 .block_erase = spi_block_erase_c7,
2523 }
2524 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002525 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002526 .write = spi_chip_write_256,
2527 .read = spi_chip_read,
2528 },
2529
2530 {
2531 .vendor = "Eon",
2532 .name = "EN25B64T",
2533 .bustype = CHIP_BUSTYPE_SPI,
2534 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002535 .model_id = EON_EN25B64,
Sean Nelson54596372010-01-09 05:30:14 +00002536 .total_size = 8192,
2537 .page_size = 256,
2538 .tested = TEST_UNTESTED,
2539 .probe = probe_spi_rdid,
2540 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002541 .block_erasers =
2542 {
2543 {
2544 .eraseblocks = {
2545 {64 * 1024, 127},
2546 {32 * 1024, 1},
2547 {16 * 1024, 1},
2548 {8 * 1024, 1},
2549 {4 * 1024, 2},
2550 },
2551 .block_erase = spi_block_erase_d8,
2552 }, {
2553 .eraseblocks = { {8 * 1024 * 1024, 1} },
2554 .block_erase = spi_block_erase_c7,
2555 }
2556 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002557 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002558 .write = spi_chip_write_256,
2559 .read = spi_chip_read,
2560 },
2561
2562 {
2563 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002564 .name = "EN25D16",
2565 .bustype = CHIP_BUSTYPE_SPI,
2566 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002567 .model_id = EON_EN25D16,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002568 .total_size = 2048,
2569 .page_size = 256,
2570 .tested = TEST_UNTESTED,
2571 .probe = probe_spi_rdid,
2572 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002573 .block_erasers =
2574 {
2575 {
2576 .eraseblocks = { {4 * 1024, 512} },
2577 .block_erase = spi_block_erase_20,
2578 }, {
2579 .eraseblocks = { {64 * 1024, 32} },
2580 .block_erase = spi_block_erase_d8,
2581 }, {
2582 .eraseblocks = { {64 * 1024, 32} },
2583 .block_erase = spi_block_erase_52,
2584 }, {
2585 .eraseblocks = { {2 * 1024 * 1024, 1} },
2586 .block_erase = spi_block_erase_60,
2587 }, {
2588 .eraseblocks = { {2 * 1024 * 1024, 1} },
2589 .block_erase = spi_block_erase_c7,
2590 }
2591 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002592 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002593 .write = spi_chip_write_256,
2594 .read = spi_chip_read,
2595 },
2596
2597 {
2598 .vendor = "Eon",
2599 .name = "EN25F05",
2600 .bustype = CHIP_BUSTYPE_SPI,
2601 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002602 .model_id = EON_EN25F05,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002603 .total_size = 64,
2604 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002605 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002606 .tested = TEST_UNTESTED,
2607 .probe = probe_spi_rdid,
2608 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002609 .block_erasers =
2610 {
2611 {
2612 .eraseblocks = { {4 * 1024, 16} },
2613 .block_erase = spi_block_erase_20,
2614 }, {
2615 .eraseblocks = { {32 * 1024, 2} },
2616 .block_erase = spi_block_erase_d8,
2617 }, {
2618 .eraseblocks = { {32 * 1024, 2} },
2619 .block_erase = spi_block_erase_52,
2620 }, {
2621 .eraseblocks = { {64 * 1024, 1} },
2622 .block_erase = spi_block_erase_60,
2623 }, {
2624 .eraseblocks = { {64 * 1024, 1} },
2625 .block_erase = spi_block_erase_c7,
2626 }
2627 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002628 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002629 .write = spi_chip_write_256,
2630 .read = spi_chip_read,
2631 },
2632
2633 {
2634 .vendor = "Eon",
2635 .name = "EN25F10",
2636 .bustype = CHIP_BUSTYPE_SPI,
2637 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002638 .model_id = EON_EN25F10,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002639 .total_size = 128,
2640 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002641 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002642 .tested = TEST_UNTESTED,
2643 .probe = probe_spi_rdid,
2644 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002645 .block_erasers =
2646 {
2647 {
2648 .eraseblocks = { {4 * 1024, 32} },
2649 .block_erase = spi_block_erase_20,
2650 }, {
2651 .eraseblocks = { {32 * 1024, 4} },
2652 .block_erase = spi_block_erase_d8,
2653 }, {
2654 .eraseblocks = { {32 * 1024, 4} },
2655 .block_erase = spi_block_erase_52,
2656 }, {
2657 .eraseblocks = { {128 * 1024, 1} },
2658 .block_erase = spi_block_erase_60,
2659 }, {
2660 .eraseblocks = { {128 * 1024, 1} },
2661 .block_erase = spi_block_erase_c7,
2662 }
2663 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002664 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002665 .write = spi_chip_write_256,
2666 .read = spi_chip_read,
2667 },
2668
2669 {
2670 .vendor = "Eon",
2671 .name = "EN25F20",
2672 .bustype = CHIP_BUSTYPE_SPI,
2673 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002674 .model_id = EON_EN25F20,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002675 .total_size = 256,
2676 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002677 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002678 .tested = TEST_UNTESTED,
2679 .probe = probe_spi_rdid,
2680 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002681 .block_erasers =
2682 {
2683 {
2684 .eraseblocks = { {4 * 1024, 64} },
2685 .block_erase = spi_block_erase_20,
2686 }, {
2687 .eraseblocks = { {64 * 1024, 4} },
2688 .block_erase = spi_block_erase_d8,
2689 }, {
2690 .eraseblocks = { {64 * 1024, 4} },
2691 .block_erase = spi_block_erase_52,
2692 }, {
2693 .eraseblocks = { {256 * 1024, 1} },
2694 .block_erase = spi_block_erase_60,
2695 }, {
2696 .eraseblocks = { {256 * 1024, 1} },
2697 .block_erase = spi_block_erase_c7,
2698 }
2699 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002700 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002701 .write = spi_chip_write_256,
2702 .read = spi_chip_read,
2703 },
2704
2705 {
2706 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002707 .name = "EN25F40",
2708 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002709 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002710 .model_id = EON_EN25F40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002711 .total_size = 512,
2712 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002713 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002714 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002715 .probe = probe_spi_rdid,
2716 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002717 .block_erasers =
2718 {
2719 {
Sean Nelson54596372010-01-09 05:30:14 +00002720 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002721 .block_erase = spi_block_erase_20,
2722 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002723 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002724 .block_erase = spi_block_erase_d8,
2725 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002726 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002727 .block_erase = spi_block_erase_60,
2728 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002729 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002730 .block_erase = spi_block_erase_c7,
2731 },
2732 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002733 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002734 .write = spi_chip_write_256,
2735 .read = spi_chip_read,
2736 },
2737
2738 {
2739 .vendor = "Eon",
2740 .name = "EN25F80",
2741 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002742 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002743 .model_id = EON_EN25F80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002744 .total_size = 1024,
2745 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002746 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermann431f4f72010-09-05 12:41:25 +00002747 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002748 .probe = probe_spi_rdid,
2749 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002750 .block_erasers =
2751 {
2752 {
2753 .eraseblocks = { {4 * 1024, 256} },
2754 .block_erase = spi_block_erase_20,
2755 }, {
2756 .eraseblocks = { {64 * 1024, 16} },
2757 .block_erase = spi_block_erase_d8,
2758 }, {
2759 .eraseblocks = { {1024 * 1024, 1} },
2760 .block_erase = spi_block_erase_60,
2761 }, {
2762 .eraseblocks = { {1024 * 1024, 1} },
2763 .block_erase = spi_block_erase_c7,
2764 }
2765 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002766 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002767 .write = spi_chip_write_256,
2768 .read = spi_chip_read,
2769 },
2770
2771 {
2772 .vendor = "Eon",
2773 .name = "EN25F16",
2774 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002775 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002776 .model_id = EON_EN25F16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002777 .total_size = 2048,
2778 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002779 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002780 .tested = TEST_UNTESTED,
2781 .probe = probe_spi_rdid,
2782 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002783 .block_erasers =
2784 {
2785 {
2786 .eraseblocks = { {4 * 1024, 512} },
2787 .block_erase = spi_block_erase_20,
2788 }, {
2789 .eraseblocks = { {64 * 1024, 32} },
2790 .block_erase = spi_block_erase_d8,
2791 }, {
2792 .eraseblocks = { {2 * 1024 * 1024, 1} },
2793 .block_erase = spi_block_erase_60,
2794 }, {
2795 .eraseblocks = { {2 * 1024 * 1024, 1} },
2796 .block_erase = spi_block_erase_c7,
2797 }
2798 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002799 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002800 .write = spi_chip_write_256,
2801 .read = spi_chip_read,
2802 },
2803
2804 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002805 .vendor = "Eon",
2806 .name = "EN25F32",
2807 .bustype = CHIP_BUSTYPE_SPI,
2808 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002809 .model_id = EON_EN25F32,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002810 .total_size = 4096,
2811 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002812 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002813 .tested = TEST_UNTESTED,
2814 .probe = probe_spi_rdid,
2815 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002816 .block_erasers =
2817 {
2818 {
2819 .eraseblocks = { {4 * 1024, 1024} },
2820 .block_erase = spi_block_erase_20,
2821 }, {
2822 .eraseblocks = { {64 * 1024, 64} },
2823 .block_erase = spi_block_erase_d8,
2824 }, {
2825 .eraseblocks = { {4 * 1024 * 1024, 1} },
2826 .block_erase = spi_block_erase_60,
2827 }, {
2828 .eraseblocks = { {4 * 1024 * 1024, 1} },
2829 .block_erase = spi_block_erase_c7,
2830 }
2831 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002832 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002833 .write = spi_chip_write_256,
2834 .read = spi_chip_read,
2835 },
2836
2837 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002838 .vendor = "Eon",
2839 .name = "EN29F010",
2840 .bustype = CHIP_BUSTYPE_PARALLEL,
2841 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002842 .model_id = EON_EN29F010,
Russ Dill3cd5a122010-03-05 08:44:11 +00002843 .total_size = 128,
2844 .page_size = 128,
2845 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2846 .tested = TEST_OK_PREW,
2847 .probe = probe_jedec,
2848 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2849 .block_erasers =
2850 {
2851 {
2852 .eraseblocks = { {16 * 1024, 8} },
2853 .block_erase = erase_sector_jedec,
2854 },
2855 {
2856 .eraseblocks = { {128 * 1024, 1} },
2857 .block_erase = erase_chip_block_jedec,
2858 },
2859 },
2860 .write = write_jedec_1,
2861 .read = read_memmapped,
2862 },
2863
2864 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002865 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002866 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002867 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002868 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002869 .model_id = EON_EN29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002870 .total_size = 256,
2871 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002872 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002873 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002874 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002875 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002876 .block_erasers =
2877 {
2878 {
2879 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002880 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002881 {8 * 1024, 2},
2882 {32 * 1024, 1},
2883 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002884 },
2885 .block_erase = erase_sector_jedec,
2886 }, {
2887 .eraseblocks = { {256 * 1024, 1} },
2888 .block_erase = erase_chip_block_jedec,
2889 },
2890 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002891 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002892 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002893 },
2894
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002895 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00002896 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002897 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002898 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002899 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002900 .model_id = EON_EN29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002901 .total_size = 256,
2902 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002903 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002904 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002905 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002906 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002907 .block_erasers =
2908 {
2909 {
2910 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002911 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002912 {32 * 1024, 1},
2913 {8 * 1024, 2},
2914 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002915 },
2916 .block_erase = erase_sector_jedec,
2917 }, {
2918 .eraseblocks = { {256 * 1024, 1} },
2919 .block_erase = erase_chip_block_jedec,
2920 },
2921 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002922 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002923 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002924 },
2925
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002926 {
2927 .vendor = "Fujitsu",
2928 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002929 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002930 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002931 .model_id = FUJITSU_MBM29F004BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .total_size = 512,
2933 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002934 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002935 .tested = TEST_UNTESTED,
2936 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002937 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002938 .block_erasers =
2939 {
2940 {
2941 .eraseblocks = {
2942 {16 * 1024, 1},
2943 {8 * 1024, 2},
2944 {32 * 1024, 1},
2945 {64 * 1024, 7},
2946 },
Sean Nelson35727f72010-01-28 23:55:12 +00002947 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002948 }, {
2949 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002950 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002951 },
2952 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002953 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002954 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002955 },
2956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002957 {
2958 .vendor = "Fujitsu",
2959 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002960 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002961 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002962 .model_id = FUJITSU_MBM29F004TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002963 .total_size = 512,
2964 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002965 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002966 .tested = TEST_UNTESTED,
2967 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002968 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002969 .block_erasers =
2970 {
2971 {
2972 .eraseblocks = {
2973 {64 * 1024, 7},
2974 {32 * 1024, 1},
2975 {8 * 1024, 2},
2976 {16 * 1024, 1},
2977 },
Sean Nelson35727f72010-01-28 23:55:12 +00002978 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002979 }, {
2980 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002981 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002982 },
2983 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002984 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002985 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002986 },
2987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002988 {
Sean Nelson35727f72010-01-28 23:55:12 +00002989 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002990 .vendor = "Fujitsu",
2991 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002992 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002993 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002994 .model_id = FUJITSU_MBM29F400BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 .total_size = 512,
2996 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002997 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002998 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003000 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003001 .block_erasers =
3002 {
3003 {
3004 .eraseblocks = {
3005 {16 * 1024, 1},
3006 {8 * 1024, 2},
3007 {32 * 1024, 1},
3008 {64 * 1024, 7},
3009 },
3010 .block_erase = block_erase_m29f400bt,
3011 }, {
3012 .eraseblocks = { {512 * 1024, 1} },
3013 .block_erase = block_erase_chip_m29f400bt,
3014 },
3015 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003016 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003017 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003018 },
3019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 {
3021 .vendor = "Fujitsu",
3022 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00003023 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003024 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003025 .model_id = FUJITSU_MBM29F400TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 .total_size = 512,
3027 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003028 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003029 .tested = TEST_UNTESTED,
3030 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003031 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003032 .block_erasers =
3033 {
3034 {
3035 .eraseblocks = {
3036 {64 * 1024, 7},
3037 {32 * 1024, 1},
3038 {8 * 1024, 2},
3039 {16 * 1024, 1},
3040 },
3041 .block_erase = block_erase_m29f400bt,
3042 }, {
3043 .eraseblocks = { {512 * 1024, 1} },
3044 .block_erase = block_erase_chip_m29f400bt,
3045 },
3046 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003047 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003048 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003049 },
3050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 {
David Borgc96a8bd2010-06-21 16:12:22 +00003052 .vendor = "Hyundai",
3053 .name = "HY29F002T",
3054 .bustype = CHIP_BUSTYPE_PARALLEL,
3055 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003056 .model_id = HYUNDAI_HY29F002T,
David Borgc96a8bd2010-06-21 16:12:22 +00003057 .total_size = 256,
3058 .page_size = 256 * 1024,
3059 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3060 .tested = TEST_OK_PREW,
3061 .probe = probe_jedec,
3062 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3063 .block_erasers =
3064 {
3065 {
3066 .eraseblocks = {
3067 {64 * 1024, 3},
3068 {32 * 1024, 1},
3069 {8 * 1024, 2},
3070 {16 * 1024, 1},
3071 },
3072 .block_erase = erase_sector_jedec,
3073 }, {
3074 .eraseblocks = { {256 * 1024, 1} },
3075 .block_erase = erase_chip_block_jedec,
3076 },
3077 },
3078 .write = write_jedec_1,
3079 .read = read_memmapped,
3080 },
3081
3082 {
3083 .vendor = "Hyundai",
3084 .name = "HY29F002B",
3085 .bustype = CHIP_BUSTYPE_PARALLEL,
3086 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003087 .model_id = HYUNDAI_HY29F002B,
David Borgc96a8bd2010-06-21 16:12:22 +00003088 .total_size = 256,
3089 .page_size = 256 * 1024,
3090 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3091 .tested = TEST_UNTESTED,
3092 .probe = probe_jedec,
3093 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3094 .block_erasers =
3095 {
3096 {
3097 .eraseblocks = {
3098 {16 * 1024, 1},
3099 {8 * 1024, 2},
3100 {32 * 1024, 1},
3101 {64 * 1024, 3},
3102 },
3103 .block_erase = erase_sector_jedec,
3104 }, {
3105 .eraseblocks = { {256 * 1024, 1} },
3106 .block_erase = erase_chip_block_jedec,
3107 },
3108 },
3109 .write = write_jedec_1,
3110 .read = read_memmapped,
3111 },
3112
3113 {
Joshua Roysf1324e02010-09-16 00:51:51 +00003114 .vendor = "Hyundai",
3115 .name = "HY29F040A",
3116 .bustype = CHIP_BUSTYPE_PARALLEL,
3117 .manufacture_id = HYUNDAI_ID,
3118 .model_id = HYUNDAI_HY29F040A,
3119 .total_size = 512,
3120 .page_size = 64 * 1024,
3121 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3122 .tested = TEST_UNTESTED,
3123 .probe = probe_jedec,
3124 .probe_timing = TIMING_ZERO,
3125 .block_erasers =
3126 {
3127 {
3128 .eraseblocks = { {64 * 1024, 8} },
3129 .block_erase = erase_sector_jedec,
3130 }, {
3131 .eraseblocks = { {512 * 1024, 1} },
3132 .block_erase = erase_chip_block_jedec,
3133 },
3134 },
3135 .write = write_jedec_1,
3136 .read = read_memmapped,
3137 },
3138
3139 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003141 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00003142 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003143 .manufacture_id = INTEL_ID,
3144 .model_id = P28F001BXB,
3145 .total_size = 128,
3146 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003147 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003148 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003149 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003150 .block_erasers =
3151 {
3152 {
3153 .eraseblocks = {
3154 {8 * 1024, 1},
3155 {4 * 1024, 2},
3156 {112 * 1024, 1},
3157 },
Sean Nelson28accc22010-03-19 18:47:06 +00003158 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003159 },
3160 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003161 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003162 .read = read_memmapped,
3163 },
3164
3165 {
3166 .vendor = "Intel",
3167 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00003168 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003169 .manufacture_id = INTEL_ID,
3170 .model_id = P28F001BXT,
3171 .total_size = 128,
3172 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00003173 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003174 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003175 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00003176 .block_erasers =
3177 {
3178 {
3179 .eraseblocks = {
3180 {112 * 1024, 1},
3181 {4 * 1024, 2},
3182 {8 * 1024, 1},
3183 },
Sean Nelson28accc22010-03-19 18:47:06 +00003184 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003185 },
3186 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003187 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003188 .read = read_memmapped,
3189 },
3190
3191 {
3192 .vendor = "Intel",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003193 .name = "28F002BC-T",
3194 .bustype = CHIP_BUSTYPE_PARALLEL,
3195 .manufacture_id = INTEL_ID,
3196 .model_id = P28F002BC,
3197 .total_size = 256,
3198 .page_size = 256 * 1024,
3199 .tested = TEST_UNTESTED,
3200 .probe = probe_82802ab,
3201 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3202 .block_erasers =
3203 {
3204 {
3205 .eraseblocks = {
3206 {128 * 1024, 1},
3207 {96 * 1024, 1},
3208 {8 * 1024, 2},
3209 {16 * 1024, 1},
3210 },
3211 .block_erase = erase_block_82802ab,
3212 },
3213 },
3214 .write = write_82802ab,
3215 .read = read_memmapped,
3216 },
3217
3218 {
3219 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003220 .name = "28F004S5",
3221 .bustype = CHIP_BUSTYPE_PARALLEL,
3222 .manufacture_id = INTEL_ID,
3223 .model_id = E_28F004S5,
3224 .total_size = 512,
3225 .page_size = 256,
3226 .tested = TEST_UNTESTED,
3227 .probe = probe_82802ab,
3228 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003229 .block_erasers =
3230 {
3231 {
3232 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003233 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003234 },
3235 },
Sean Nelsondee4a832010-03-22 04:39:31 +00003236 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003237 .write = write_82802ab,
3238 .read = read_memmapped,
3239 },
3240
3241 {
3242 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00003243 .name = "28F004BV/BE-B",
3244 .bustype = CHIP_BUSTYPE_PARALLEL,
3245 .manufacture_id = INTEL_ID,
3246 .model_id = P28F004BB,
3247 .total_size = 512,
3248 .page_size = 128 * 1024, /* maximal block size */
3249 .tested = TEST_UNTESTED,
3250 .probe = probe_82802ab,
3251 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3252 .block_erasers =
3253 {
3254 {
3255 .eraseblocks = {
3256 {16 * 1024, 1},
3257 {8 * 1024, 2},
3258 {96 * 1024, 1},
3259 {128 * 1024, 3},
3260 },
3261 .block_erase = erase_block_82802ab,
3262 },
3263 },
3264 .write = write_82802ab,
3265 .read = read_memmapped,
3266 },
3267
3268 {
3269 .vendor = "Intel",
3270 .name = "28F004BV/BE-T",
3271 .bustype = CHIP_BUSTYPE_PARALLEL,
3272 .manufacture_id = INTEL_ID,
3273 .model_id = P28F004BT,
3274 .total_size = 512,
3275 .page_size = 128 * 1024, /* maximal block size */
3276 .tested = TEST_UNTESTED,
3277 .probe = probe_82802ab,
3278 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3279 .block_erasers =
3280 {
3281 {
3282 .eraseblocks = {
3283 {128 * 1024, 3},
3284 {96 * 1024, 1},
3285 {8 * 1024, 2},
3286 {16 * 1024, 1},
3287 },
3288 .block_erase = erase_block_82802ab,
3289 },
3290 },
3291 .write = write_82802ab,
3292 .read = read_memmapped,
3293 },
3294
3295 {
3296 .vendor = "Intel",
3297 .name = "28F400BV/CV/CE-B",
3298 .bustype = CHIP_BUSTYPE_PARALLEL,
3299 .manufacture_id = INTEL_ID,
3300 .model_id = P28F400BB,
3301 .total_size = 512,
3302 .page_size = 128 * 1024, /* maximal block size */
3303 .feature_bits = FEATURE_ADDR_SHIFTED,
3304 .tested = TEST_UNTESTED,
3305 .probe = probe_82802ab,
3306 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3307 .block_erasers =
3308 {
3309 {
3310 .eraseblocks = {
3311 {16 * 1024, 1},
3312 {8 * 1024, 2},
3313 {96 * 1024, 1},
3314 {128 * 1024, 3},
3315 },
3316 .block_erase = erase_block_82802ab,
3317 },
3318 },
3319 .write = write_82802ab,
3320 .read = read_memmapped,
3321 },
3322
3323 {
3324 .vendor = "Intel",
3325 .name = "28F400BV/CV/CE-T",
3326 .bustype = CHIP_BUSTYPE_PARALLEL,
3327 .manufacture_id = INTEL_ID,
3328 .model_id = P28F400BT,
3329 .total_size = 512,
3330 .page_size = 128 * 1024, /* maximal block size */
3331 .feature_bits = FEATURE_ADDR_SHIFTED,
3332 .tested = TEST_UNTESTED,
3333 .probe = probe_82802ab,
3334 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3335 .block_erasers =
3336 {
3337 {
3338 .eraseblocks = {
3339 {128 * 1024, 3},
3340 {96 * 1024, 1},
3341 {8 * 1024, 2},
3342 {16 * 1024, 1},
3343 },
3344 .block_erase = erase_block_82802ab,
3345 },
3346 },
3347 .write = write_82802ab,
3348 .read = read_memmapped,
3349 },
3350
3351 {
3352 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003353 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003354 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003355 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003356 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003357 .total_size = 512,
3358 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003359 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003360 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003362 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003363 .block_erasers =
3364 {
3365 {
3366 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00003367 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003368 },
3369 },
Sean Nelson28accc22010-03-19 18:47:06 +00003370 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003371 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003372 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003373 },
3374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003375 {
3376 .vendor = "Intel",
3377 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003378 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003379 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003380 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003381 .total_size = 1024,
3382 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003383 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003384 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003385 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003386 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003387 .block_erasers =
3388 {
3389 {
3390 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003391 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003392 },
3393 },
Sean Nelson28accc22010-03-19 18:47:06 +00003394 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003395 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003397 },
3398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003399 {
3400 .vendor = "Macronix",
3401 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003402 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003403 .manufacture_id = MACRONIX_ID,
3404 .model_id = MACRONIX_MX25L512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003405 .total_size = 64,
3406 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003407 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003408 .tested = TEST_UNTESTED,
3409 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003410 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003411 .block_erasers =
3412 {
3413 {
3414 .eraseblocks = { {4 * 1024, 16} },
3415 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003416 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003417 .eraseblocks = { {64 * 1024, 1} },
3418 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003419 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003420 .eraseblocks = { {64 * 1024, 1} },
3421 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003422 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003423 .eraseblocks = { {64 * 1024, 1} },
3424 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003425 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003426 .eraseblocks = { {64 * 1024, 1} },
3427 .block_erase = spi_block_erase_c7,
3428 },
3429 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003430 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003431 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003432 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003433 },
3434
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003435 {
3436 .vendor = "Macronix",
3437 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003438 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003439 .manufacture_id = MACRONIX_ID,
3440 .model_id = MACRONIX_MX25L1005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 .total_size = 128,
3442 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003443 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003444 .tested = TEST_UNTESTED,
3445 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003446 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003447 .block_erasers =
3448 {
3449 {
3450 .eraseblocks = { {4 * 1024, 32} },
3451 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003452 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003453 .eraseblocks = { {64 * 1024, 2} },
3454 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003455 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003456 .eraseblocks = { {128 * 1024, 1} },
3457 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003458 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003459 .eraseblocks = { {128 * 1024, 1} },
3460 .block_erase = spi_block_erase_c7,
3461 },
3462 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003463 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003464 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003465 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003466 },
3467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 {
3469 .vendor = "Macronix",
3470 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003471 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003472 .manufacture_id = MACRONIX_ID,
3473 .model_id = MACRONIX_MX25L2005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003474 .total_size = 256,
3475 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003476 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003477 .tested = TEST_UNTESTED,
3478 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003479 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003480 .block_erasers =
3481 {
3482 {
3483 .eraseblocks = { {4 * 1024, 64} },
3484 .block_erase = spi_block_erase_20,
3485 }, {
3486 .eraseblocks = { {64 * 1024, 4} },
3487 .block_erase = spi_block_erase_52,
3488 }, {
3489 .eraseblocks = { {64 * 1024, 4} },
3490 .block_erase = spi_block_erase_d8,
3491 }, {
3492 .eraseblocks = { {256 * 1024, 1} },
3493 .block_erase = spi_block_erase_60,
3494 }, {
3495 .eraseblocks = { {256 * 1024, 1} },
3496 .block_erase = spi_block_erase_c7,
3497 },
3498 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003499 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003500 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003501 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003502 },
3503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003504 {
3505 .vendor = "Macronix",
3506 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003507 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003508 .manufacture_id = MACRONIX_ID,
3509 .model_id = MACRONIX_MX25L4005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003510 .total_size = 512,
3511 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003512 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003513 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003514 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003515 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003516 .block_erasers =
3517 {
3518 {
3519 .eraseblocks = { {4 * 1024, 128} },
3520 .block_erase = spi_block_erase_20,
3521 }, {
3522 .eraseblocks = { {64 * 1024, 8} },
3523 .block_erase = spi_block_erase_52,
3524 }, {
3525 .eraseblocks = { {64 * 1024, 8} },
3526 .block_erase = spi_block_erase_d8,
3527 }, {
3528 .eraseblocks = { {512 * 1024, 1} },
3529 .block_erase = spi_block_erase_60,
3530 }, {
3531 .eraseblocks = { {512 * 1024, 1} },
3532 .block_erase = spi_block_erase_c7,
3533 },
3534 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003535 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003537 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003538 },
3539
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003540 {
3541 .vendor = "Macronix",
3542 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003543 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003544 .manufacture_id = MACRONIX_ID,
3545 .model_id = MACRONIX_MX25L8005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .total_size = 1024,
3547 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003548 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00003549 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003550 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003551 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003552 .block_erasers =
3553 {
3554 {
3555 .eraseblocks = { {4 * 1024, 256} },
3556 .block_erase = spi_block_erase_20,
3557 }, {
3558 .eraseblocks = { {64 * 1024, 16} },
3559 .block_erase = spi_block_erase_52,
3560 }, {
3561 .eraseblocks = { {64 * 1024, 16} },
3562 .block_erase = spi_block_erase_d8,
3563 }, {
3564 .eraseblocks = { {1024 * 1024, 1} },
3565 .block_erase = spi_block_erase_60,
3566 }, {
3567 .eraseblocks = { {1024 * 1024, 1} },
3568 .block_erase = spi_block_erase_c7,
3569 },
3570 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003571 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003572 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003573 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003574 },
3575
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003576 {
3577 .vendor = "Macronix",
3578 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003579 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003580 .manufacture_id = MACRONIX_ID,
3581 .model_id = MACRONIX_MX25L1605,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003582 .total_size = 2048,
3583 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003584 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003585 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003586 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003587 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003588 .block_erasers =
3589 {
3590 {
3591 .eraseblocks = { {4 * 1024, 512} },
3592 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3593 }, {
3594 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3595 .block_erase = spi_block_erase_52,
3596 }, {
3597 .eraseblocks = { {64 * 1024, 32} },
3598 .block_erase = spi_block_erase_d8,
3599 }, {
3600 .eraseblocks = { {2 * 1024 * 1024, 1} },
3601 .block_erase = spi_block_erase_60,
3602 }, {
3603 .eraseblocks = { {2 * 1024 * 1024, 1} },
3604 .block_erase = spi_block_erase_c7,
3605 },
3606 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003607 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003608 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003609 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003610 },
3611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003612 {
3613 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003614 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003615 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003616 .manufacture_id = MACRONIX_ID,
3617 .model_id = MACRONIX_MX25L1635D,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003618 .total_size = 2048,
3619 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003620 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003621 .tested = TEST_UNTESTED,
3622 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003623 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003624 .block_erasers =
3625 {
3626 {
3627 .eraseblocks = { {4 * 1024, 512} },
3628 .block_erase = spi_block_erase_20,
3629 }, {
3630 .eraseblocks = { {64 * 1024, 32} },
3631 .block_erase = spi_block_erase_d8,
3632 }, {
3633 .eraseblocks = { {2 * 1024 * 1024, 1} },
3634 .block_erase = spi_block_erase_60,
3635 }, {
3636 .eraseblocks = { {2 * 1024 * 1024, 1} },
3637 .block_erase = spi_block_erase_c7,
3638 }
3639 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003640 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003641 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003642 .read = spi_chip_read,
3643 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003644
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003645 {
3646 .vendor = "Macronix",
Stephan Guilloux3611b802010-09-13 19:59:28 +00003647 .name = "MX25L1635E",
3648 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003649 .manufacture_id = MACRONIX_ID,
3650 .model_id = MACRONIX_MX25L1635E,
Stephan Guilloux3611b802010-09-13 19:59:28 +00003651 .total_size = 2048,
3652 .page_size = 256,
3653 .feature_bits = FEATURE_WRSR_WREN,
3654 .tested = TEST_UNTESTED,
3655 .probe = probe_spi_rdid,
3656 .probe_timing = TIMING_ZERO,
3657 .block_erasers =
3658 {
3659 {
3660 .eraseblocks = { {4 * 1024, 512} },
3661 .block_erase = spi_block_erase_20,
3662 }, {
3663 .eraseblocks = { {64 * 1024, 32} },
3664 .block_erase = spi_block_erase_d8,
3665 }, {
3666 .eraseblocks = { {2 * 1024 * 1024, 1} },
3667 .block_erase = spi_block_erase_60,
3668 }, {
3669 .eraseblocks = { {2 * 1024 * 1024, 1} },
3670 .block_erase = spi_block_erase_c7,
3671 }
3672 },
3673 .unlock = spi_disable_blockprotect,
3674 .write = spi_chip_write_256,
3675 .read = spi_chip_read,
3676 },
3677
3678 {
3679 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003680 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003681 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003682 .manufacture_id = MACRONIX_ID,
3683 .model_id = MACRONIX_MX25L3205,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003684 .total_size = 4096,
3685 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003686 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003687 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003689 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003690 .block_erasers =
3691 {
3692 {
3693 .eraseblocks = { {4 * 1024, 1024} },
3694 .block_erase = spi_block_erase_20,
3695 }, {
3696 .eraseblocks = { {4 * 1024, 1024} },
3697 .block_erase = spi_block_erase_d8,
3698 }, {
3699 .eraseblocks = { {4 * 1024 * 1024, 1} },
3700 .block_erase = spi_block_erase_60,
3701 }, {
3702 .eraseblocks = { {4 * 1024 * 1024, 1} },
3703 .block_erase = spi_block_erase_c7,
3704 },
3705 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003706 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003707 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003708 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003709 },
3710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 {
3712 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003713 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003714 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003715 .manufacture_id = MACRONIX_ID,
3716 .model_id = MACRONIX_MX25L3235D,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003717 .total_size = 4096,
3718 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003719 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003720 .tested = TEST_UNTESTED,
3721 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003722 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003723 .block_erasers =
3724 {
3725 {
3726 .eraseblocks = { {4 * 1024, 1024} },
3727 .block_erase = spi_block_erase_20,
3728 }, {
3729 .eraseblocks = { {64 * 1024, 64} },
3730 .block_erase = spi_block_erase_d8,
3731 }, {
3732 .eraseblocks = { {4 * 1024 * 1024, 1} },
3733 .block_erase = spi_block_erase_60,
3734 }, {
3735 .eraseblocks = { {4 * 1024 * 1024, 1} },
3736 .block_erase = spi_block_erase_c7,
3737 }
3738 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003739 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003740 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003741 .read = spi_chip_read,
3742 },
3743
3744 {
3745 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003747 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003748 .manufacture_id = MACRONIX_ID,
3749 .model_id = MACRONIX_MX25L6405,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 .total_size = 8192,
3751 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003752 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003753 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003755 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003756 .block_erasers =
3757 {
3758 {
3759 .eraseblocks = { {64 * 1024, 128} },
3760 .block_erase = spi_block_erase_20,
3761 }, {
3762 .eraseblocks = { {64 * 1024, 128} },
3763 .block_erase = spi_block_erase_d8,
3764 }, {
3765 .eraseblocks = { {8 * 1024 * 1024, 1} },
3766 .block_erase = spi_block_erase_60,
3767 }, {
3768 .eraseblocks = { {8 * 1024 * 1024, 1} },
3769 .block_erase = spi_block_erase_c7,
3770 }
3771 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003772 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003773 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003774 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003775 },
3776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 {
3778 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003779 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003780 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003781 .manufacture_id = MACRONIX_ID,
3782 .model_id = MACRONIX_MX25L12805,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003783 .total_size = 16384,
3784 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00003785 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003786 .tested = TEST_UNTESTED,
3787 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003788 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003789 .block_erasers =
3790 {
3791 {
3792 .eraseblocks = { {4 * 1024, 4096} },
3793 .block_erase = spi_block_erase_20,
3794 }, {
3795 .eraseblocks = { {64 * 1024, 256} },
3796 .block_erase = spi_block_erase_d8,
3797 }, {
3798 .eraseblocks = { {16 * 1024 * 1024, 1} },
3799 .block_erase = spi_block_erase_60,
3800 }, {
3801 .eraseblocks = { {16 * 1024 * 1024, 1} },
3802 .block_erase = spi_block_erase_c7,
3803 }
3804 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003805 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003806 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003807 .read = spi_chip_read,
3808 },
3809
3810 {
3811 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003812 .name = "MX29F001B",
3813 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003814 .manufacture_id = MACRONIX_ID,
3815 .model_id = MACRONIX_MX29F001B,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003816 .total_size = 128,
3817 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003818 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3819 .tested = TEST_UNTESTED,
3820 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003821 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003822 .block_erasers =
3823 {
3824 {
3825 .eraseblocks = {
3826 {8 * 1024, 1},
3827 {4 * 1024, 2},
3828 {8 * 1024, 2},
3829 {32 * 1024, 1},
3830 {64 * 1024, 1},
3831 },
Sean Nelson35727f72010-01-28 23:55:12 +00003832 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003833 }, {
3834 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003835 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003836 }
3837 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003838 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003839 .read = read_memmapped,
3840 },
3841
3842 {
3843 .vendor = "Macronix",
3844 .name = "MX29F001T",
3845 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003846 .manufacture_id = MACRONIX_ID,
3847 .model_id = MACRONIX_MX29F001T,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003848 .total_size = 128,
3849 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003850 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3851 .tested = TEST_UNTESTED,
3852 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003853 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003854 .block_erasers =
3855 {
3856 {
3857 .eraseblocks = {
3858 {64 * 1024, 1},
3859 {32 * 1024, 1},
3860 {8 * 1024, 2},
3861 {4 * 1024, 2},
3862 {8 * 1024, 1},
3863 },
Sean Nelson35727f72010-01-28 23:55:12 +00003864 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003865 }, {
3866 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003867 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003868 }
3869 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003870 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003871 .read = read_memmapped,
3872 },
3873
3874 {
3875 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003876 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003877 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003878 .manufacture_id = MACRONIX_ID,
3879 .model_id = MACRONIX_MX29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003880 .total_size = 256,
3881 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003882 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003883 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003884 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003885 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003886 .block_erasers =
3887 {
3888 {
3889 .eraseblocks = {
3890 {16 * 1024, 1},
3891 {8 * 1024, 2},
3892 {32 * 1024, 1},
3893 {64 * 1024, 3},
3894 },
Sean Nelson35727f72010-01-28 23:55:12 +00003895 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003896 }, {
3897 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003898 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003899 },
3900 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003901 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003902 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003903 },
3904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003905 {
3906 .vendor = "Macronix",
3907 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003908 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003909 .manufacture_id = MACRONIX_ID,
3910 .model_id = MACRONIX_MX29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003911 .total_size = 256,
3912 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003913 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003914 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003915 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003916 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003917 .block_erasers =
3918 {
3919 {
3920 .eraseblocks = {
3921 {64 * 1024, 3},
3922 {32 * 1024, 1},
3923 {8 * 1024, 2},
3924 {16 * 1024, 1},
3925 },
Sean Nelson35727f72010-01-28 23:55:12 +00003926 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003927 }, {
3928 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003929 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003930 },
3931 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003932 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003933 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003934 },
3935
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003936 {
3937 .vendor = "Macronix",
Joshua Roysf1324e02010-09-16 00:51:51 +00003938 .name = "MX29F040",
3939 .bustype = CHIP_BUSTYPE_PARALLEL,
3940 .manufacture_id = MACRONIX_ID,
3941 .model_id = MACRONIX_MX29F040,
3942 .total_size = 512,
3943 .page_size = 64 * 1024,
3944 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3945 .tested = TEST_UNTESTED,
3946 .probe = probe_jedec,
3947 .probe_timing = TIMING_ZERO,
3948 .block_erasers =
3949 {
3950 {
3951 .eraseblocks = { {64 * 1024, 8} },
3952 .block_erase = erase_sector_jedec,
3953 }, {
3954 .eraseblocks = { {512 * 1024, 1} },
3955 .block_erase = erase_chip_block_jedec,
3956 },
3957 },
3958 .write = write_jedec_1,
3959 .read = read_memmapped,
3960 },
3961
3962 {
3963 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003964 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003965 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003966 .manufacture_id = MACRONIX_ID,
3967 .model_id = MACRONIX_MX29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 .total_size = 512,
3969 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003970 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3971 .tested = TEST_UNTESTED,
3972 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003973 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003974 .block_erasers =
3975 {
3976 {
3977 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003978 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003979 }, {
3980 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003981 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003982 },
3983 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003984 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003985 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003986 },
3987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003988 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00003989 .vendor = "MoselVitelic",
3990 .name = "V29C51000B",
3991 .bustype = CHIP_BUSTYPE_PARALLEL,
3992 .manufacture_id = SYNCMOS_MVC_ID,
3993 .model_id = MVC_V29C51000B,
3994 .total_size = 64,
3995 .page_size = 512,
3996 .feature_bits = FEATURE_EITHER_RESET,
3997 .tested = TEST_UNTESTED,
3998 .probe = probe_jedec,
3999 .probe_timing = TIMING_ZERO,
4000 .block_erasers =
4001 {
4002 {
4003 .eraseblocks = { {512, 128} },
4004 .block_erase = erase_sector_jedec,
4005 }, {
4006 .eraseblocks = { {64 * 1024, 1} },
4007 .block_erase = erase_chip_block_jedec,
4008 },
4009 },
4010 .write = write_jedec_1,
4011 .read = read_memmapped,
4012 },
4013
4014 {
4015 .vendor = "MoselVitelic",
4016 .name = "V29C51000T",
4017 .bustype = CHIP_BUSTYPE_PARALLEL,
4018 .manufacture_id = SYNCMOS_MVC_ID,
4019 .model_id = MVC_V29C51000T,
4020 .total_size = 64,
4021 .page_size = 512,
4022 .feature_bits = FEATURE_EITHER_RESET,
4023 .tested = TEST_UNTESTED,
4024 .probe = probe_jedec,
4025 .probe_timing = TIMING_ZERO,
4026 .block_erasers =
4027 {
4028 {
4029 .eraseblocks = { {512, 128} },
4030 .block_erase = erase_sector_jedec,
4031 }, {
4032 .eraseblocks = { {64 * 1024, 1} },
4033 .block_erase = erase_chip_block_jedec,
4034 },
4035 },
4036 .write = write_jedec_1,
4037 .read = read_memmapped,
4038 },
4039
4040 {
4041 .vendor = "MoselVitelic",
4042 .name = "V29C51400B",
4043 .bustype = CHIP_BUSTYPE_PARALLEL,
4044 .manufacture_id = SYNCMOS_MVC_ID,
4045 .model_id = MVC_V29C51400B,
4046 .total_size = 512,
4047 .page_size = 1024,
4048 .feature_bits = FEATURE_EITHER_RESET,
4049 .tested = TEST_UNTESTED,
4050 .probe = probe_jedec,
4051 .probe_timing = TIMING_ZERO,
4052 .block_erasers =
4053 {
4054 {
4055 .eraseblocks = { {1024, 512} },
4056 .block_erase = erase_sector_jedec,
4057 }, {
4058 .eraseblocks = { {512 * 1024, 1} },
4059 .block_erase = erase_chip_block_jedec,
4060 },
4061 },
4062 .write = write_jedec_1,
4063 .read = read_memmapped,
4064 },
4065
4066 {
4067 .vendor = "MoselVitelic",
4068 .name = "V29C51400T",
4069 .bustype = CHIP_BUSTYPE_PARALLEL,
4070 .manufacture_id = SYNCMOS_MVC_ID,
4071 .model_id = MVC_V29C51400T,
4072 .total_size = 512,
4073 .page_size = 1024,
4074 .feature_bits = FEATURE_EITHER_RESET,
4075 .tested = TEST_UNTESTED,
4076 .probe = probe_jedec,
4077 .probe_timing = TIMING_ZERO,
4078 .block_erasers =
4079 {
4080 {
4081 .eraseblocks = { {1024, 512} },
4082 .block_erase = erase_sector_jedec,
4083 }, {
4084 .eraseblocks = { {512 * 1024, 1} },
4085 .block_erase = erase_chip_block_jedec,
4086 },
4087 },
4088 .write = write_jedec_1,
4089 .read = read_memmapped,
4090 },
4091
4092 {
4093 .vendor = "MoselVitelic",
4094 .name = "V29LC51000",
4095 .bustype = CHIP_BUSTYPE_PARALLEL,
4096 .manufacture_id = SYNCMOS_MVC_ID,
4097 .model_id = MVC_V29LC51000,
4098 .total_size = 64,
4099 .page_size = 512,
4100 .feature_bits = FEATURE_EITHER_RESET,
4101 .tested = TEST_UNTESTED,
4102 .probe = probe_jedec,
4103 .probe_timing = TIMING_ZERO,
4104 .block_erasers =
4105 {
4106 {
4107 .eraseblocks = { {512, 128} },
4108 .block_erase = erase_sector_jedec,
4109 }, {
4110 .eraseblocks = { {64 * 1024, 1} },
4111 .block_erase = erase_chip_block_jedec,
4112 },
4113 },
4114 .write = write_jedec_1,
4115 .read = read_memmapped,
4116 },
4117
4118 {
4119 .vendor = "MoselVitelic",
4120 .name = "V29LC51001",
4121 .bustype = CHIP_BUSTYPE_PARALLEL,
4122 .manufacture_id = SYNCMOS_MVC_ID,
4123 .model_id = MVC_V29LC51001,
4124 .total_size = 128,
4125 .page_size = 512,
4126 .feature_bits = FEATURE_EITHER_RESET,
4127 .tested = TEST_UNTESTED,
4128 .probe = probe_jedec,
4129 .probe_timing = TIMING_ZERO,
4130 .block_erasers =
4131 {
4132 {
4133 .eraseblocks = { {512, 256} },
4134 .block_erase = erase_sector_jedec,
4135 }, {
4136 .eraseblocks = { {128 * 1024, 1} },
4137 .block_erase = erase_chip_block_jedec,
4138 },
4139 },
4140 .write = write_jedec_1,
4141 .read = read_memmapped,
4142 },
4143
4144 {
4145 .vendor = "MoselVitelic",
4146 .name = "V29LC51002",
4147 .bustype = CHIP_BUSTYPE_PARALLEL,
4148 .manufacture_id = SYNCMOS_MVC_ID,
4149 .model_id = MVC_V29LC51002,
4150 .total_size = 256,
4151 .page_size = 512,
4152 .feature_bits = FEATURE_EITHER_RESET,
4153 .tested = TEST_UNTESTED,
4154 .probe = probe_jedec,
4155 .probe_timing = TIMING_ZERO,
4156 .block_erasers =
4157 {
4158 {
4159 .eraseblocks = { {512, 512} },
4160 .block_erase = erase_sector_jedec,
4161 }, {
4162 .eraseblocks = { {256 * 1024, 1} },
4163 .block_erase = erase_chip_block_jedec,
4164 },
4165 },
4166 .write = write_jedec_1,
4167 .read = read_memmapped,
4168 },
4169
4170 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004171 .vendor = "Numonyx",
4172 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004173 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004175 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004176 .total_size = 128,
4177 .page_size = 256,
4178 .tested = TEST_UNTESTED,
4179 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004180 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004181 .block_erasers =
4182 {
4183 {
4184 .eraseblocks = { {4 * 1024, 32} },
4185 .block_erase = spi_block_erase_20,
4186 }, {
4187 .eraseblocks = { {64 * 1024, 2} },
4188 .block_erase = spi_block_erase_d8,
4189 }, {
4190 .eraseblocks = { {128 * 1024, 1} },
4191 .block_erase = spi_block_erase_c7,
4192 }
4193 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004194 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004197 },
4198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004199 {
4200 .vendor = "Numonyx",
4201 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004202 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004203 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004204 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004205 .total_size = 256,
4206 .page_size = 256,
4207 .tested = TEST_UNTESTED,
4208 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004209 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004210 .block_erasers =
4211 {
4212 {
4213 .eraseblocks = { {4 * 1024, 64} },
4214 .block_erase = spi_block_erase_20,
4215 }, {
4216 .eraseblocks = { {64 * 1024, 4} },
4217 .block_erase = spi_block_erase_d8,
4218 }, {
4219 .eraseblocks = { {256 * 1024, 1} },
4220 .block_erase = spi_block_erase_c7,
4221 }
4222 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004223 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004224 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004225 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004226 },
4227
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004228 {
4229 .vendor = "Numonyx",
4230 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004231 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004232 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004233 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00004234 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004235 .page_size = 256,
4236 .tested = TEST_UNTESTED,
4237 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004238 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004239 .block_erasers =
4240 {
4241 {
4242 .eraseblocks = { {4 * 1024, 128} },
4243 .block_erase = spi_block_erase_20,
4244 }, {
4245 .eraseblocks = { {64 * 1024, 8} },
4246 .block_erase = spi_block_erase_d8,
4247 }, {
4248 .eraseblocks = { {512 * 1024, 1} },
4249 .block_erase = spi_block_erase_c7,
4250 }
4251 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004252 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004253 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004254 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004255 },
4256
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004257 {
4258 .vendor = "Numonyx",
4259 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004260 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004261 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004262 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .total_size = 1024,
4264 .page_size = 256,
4265 .tested = TEST_OK_PREW,
4266 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004267 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004268 .block_erasers =
4269 {
4270 {
4271 .eraseblocks = { {4 * 1024, 256} },
4272 .block_erase = spi_block_erase_20,
4273 }, {
4274 .eraseblocks = { {64 * 1024, 16} },
4275 .block_erase = spi_block_erase_d8,
4276 }, {
4277 .eraseblocks = { {1024 * 1024, 1} },
4278 .block_erase = spi_block_erase_c7,
4279 }
4280 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004281 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004282 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004283 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004284 },
4285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004286 {
4287 .vendor = "Numonyx",
4288 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004289 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004290 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004291 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004292 .total_size = 2048,
4293 .page_size = 256,
4294 .tested = TEST_UNTESTED,
4295 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004296 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004297 .block_erasers =
4298 {
4299 {
4300 .eraseblocks = { {4 * 1024, 512} },
4301 .block_erase = spi_block_erase_20,
4302 }, {
4303 .eraseblocks = { {64 * 1024, 32} },
4304 .block_erase = spi_block_erase_d8,
4305 }, {
4306 .eraseblocks = { {2 * 1024 * 1024, 1} },
4307 .block_erase = spi_block_erase_c7,
4308 }
4309 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004310 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004311 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004312 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004313 },
4314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004315 {
4316 .vendor = "PMC",
4317 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004318 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004319 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004320 .model_id = PMC_PM25LV010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004321 .total_size = 128,
4322 .page_size = 256,
4323 .tested = TEST_UNTESTED,
4324 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004325 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004326 .block_erasers =
4327 {
4328 {
4329 .eraseblocks = { {4 * 1024, 32} },
4330 .block_erase = spi_block_erase_d7,
4331 }, {
4332 .eraseblocks = { {32 * 1024, 4} },
4333 .block_erase = spi_block_erase_d8,
4334 }, {
4335 .eraseblocks = { {128 * 1024, 1} },
4336 .block_erase = spi_block_erase_c7,
4337 }
4338 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004339 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004340 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004341 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004342 },
4343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004344 {
4345 .vendor = "PMC",
4346 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004347 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004348 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004349 .model_id = PMC_PM25LV016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004350 .total_size = 2048,
4351 .page_size = 256,
4352 .tested = TEST_UNTESTED,
4353 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004354 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004355 .block_erasers =
4356 {
4357 {
4358 .eraseblocks = { {4 * 1024, 512} },
4359 .block_erase = spi_block_erase_d7,
4360 }, {
4361 .eraseblocks = { {4 * 1024, 512} },
4362 .block_erase = spi_block_erase_20,
4363 }, {
4364 .eraseblocks = { {64 * 1024, 32} },
4365 .block_erase = spi_block_erase_d8,
4366 }, {
4367 .eraseblocks = { {2 * 1024 * 1024, 1} },
4368 .block_erase = spi_block_erase_60,
4369 }, {
4370 .eraseblocks = { {2 * 1024 * 1024, 1} },
4371 .block_erase = spi_block_erase_c7,
4372 }
4373 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004374 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004375 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004376 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004377 },
4378
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004379 {
4380 .vendor = "PMC",
4381 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004382 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004383 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004384 .model_id = PMC_PM25LV020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004385 .total_size = 256,
4386 .page_size = 256,
4387 .tested = TEST_UNTESTED,
4388 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004389 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004390 .block_erasers =
4391 {
4392 {
4393 .eraseblocks = { {4 * 1024, 64} },
4394 .block_erase = spi_block_erase_d7,
4395 }, {
4396 .eraseblocks = { {64 * 1024, 4} },
4397 .block_erase = spi_block_erase_d8,
4398 }, {
4399 .eraseblocks = { {256 * 1024, 1} },
4400 .block_erase = spi_block_erase_c7,
4401 }
4402 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004403 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004404 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004405 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004406 },
4407
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004408 {
4409 .vendor = "PMC",
4410 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004411 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004412 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004413 .model_id = PMC_PM25LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004414 .total_size = 512,
4415 .page_size = 256,
4416 .tested = TEST_UNTESTED,
4417 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004418 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004419 .block_erasers =
4420 {
4421 {
4422 .eraseblocks = { {4 * 1024, 128} },
4423 .block_erase = spi_block_erase_d7,
4424 }, {
4425 .eraseblocks = { {64 * 1024, 8} },
4426 .block_erase = spi_block_erase_d8,
4427 }, {
4428 .eraseblocks = { {512 * 1024, 1} },
4429 .block_erase = spi_block_erase_c7,
4430 }
4431 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004432 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004433 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004434 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004435 },
4436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004437 {
4438 .vendor = "PMC",
4439 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004440 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004441 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004442 .model_id = PMC_PM25LV080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004443 .total_size = 1024,
4444 .page_size = 256,
4445 .tested = TEST_UNTESTED,
4446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004447 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004448 .block_erasers =
4449 {
4450 {
4451 .eraseblocks = { {4 * 1024, 256} },
4452 .block_erase = spi_block_erase_d7,
4453 }, {
4454 .eraseblocks = { {4 * 1024, 256} },
4455 .block_erase = spi_block_erase_20,
4456 }, {
4457 .eraseblocks = { {64 * 1024, 16} },
4458 .block_erase = spi_block_erase_d8,
4459 }, {
4460 .eraseblocks = { {1024 * 1024, 1} },
4461 .block_erase = spi_block_erase_60,
4462 }, {
4463 .eraseblocks = { {1024 * 1024, 1} },
4464 .block_erase = spi_block_erase_c7,
4465 }
4466 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004467 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004468 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004469 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004470 },
4471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004472 {
4473 .vendor = "PMC",
4474 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004475 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004476 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004477 .model_id = PMC_PM25LV512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004478 .total_size = 64,
4479 .page_size = 256,
4480 .tested = TEST_UNTESTED,
4481 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004482 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004483 .block_erasers =
4484 {
4485 {
4486 .eraseblocks = { {4 * 1024, 16} },
4487 .block_erase = spi_block_erase_d7,
4488 }, {
4489 .eraseblocks = { {32 * 1024, 2} },
4490 .block_erase = spi_block_erase_d8,
4491 }, {
4492 .eraseblocks = { {64 * 1024, 1} },
4493 .block_erase = spi_block_erase_c7,
4494 }
4495 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004496 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004497 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004498 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004499 },
4500
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004501 {
4502 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004503 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004504 .bustype = CHIP_BUSTYPE_PARALLEL,
4505 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004506 .model_id = PMC_PM29F002T,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004507 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004508 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004509 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermann431f4f72010-09-05 12:41:25 +00004510 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00004511 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004512 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004513 .block_erasers =
4514 {
4515 {
4516 .eraseblocks = {
4517 {128 * 1024, 1},
4518 {96 * 1024, 1},
4519 {8 * 1024, 2},
4520 {16 * 1024, 1},
4521 },
Sean Nelson35727f72010-01-28 23:55:12 +00004522 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004523 }, {
4524 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004525 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004526 },
4527 },
Sean Nelson35727f72010-01-28 23:55:12 +00004528 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004529 .read = read_memmapped,
4530 },
4531
4532 {
4533 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00004534 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004535 .bustype = CHIP_BUSTYPE_PARALLEL,
4536 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004537 .model_id = PMC_PM29F002B,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004538 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00004539 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004540 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004541 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004542 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004543 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00004544 .block_erasers =
4545 {
4546 {
4547 .eraseblocks = {
4548 {16 * 1024, 1},
4549 {8 * 1024, 2},
4550 {96 * 1024, 1},
4551 {128 * 1024, 1},
4552 },
Sean Nelson35727f72010-01-28 23:55:12 +00004553 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004554 }, {
4555 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004556 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00004557 },
4558 },
Sean Nelson35727f72010-01-28 23:55:12 +00004559 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00004560 .read = read_memmapped,
4561 },
4562
4563 {
4564 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004565 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004566 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004567 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004568 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004569 .total_size = 128,
4570 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004571 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004572 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004573 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004574 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00004575 .block_erasers =
4576 {
4577 {
4578 .eraseblocks = { {4 * 1024, 32} },
4579 .block_erase = erase_sector_jedec,
4580 }, {
4581 .eraseblocks = { {64 * 1024, 2} },
4582 .block_erase = erase_block_jedec,
4583 }, {
4584 .eraseblocks = { {128 * 1024, 1} },
4585 .block_erase = erase_chip_block_jedec,
4586 }
4587 },
Sean Nelson35727f72010-01-28 23:55:12 +00004588 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00004589 .read = read_memmapped,
4590 },
4591
4592 {
4593 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004594 .name = "Pm39LV020",
4595 .bustype = CHIP_BUSTYPE_PARALLEL,
4596 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004597 .model_id = PMC_PM39LV020,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004598 .total_size = 256,
4599 .page_size = 4096,
4600 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4601 .tested = TEST_UNTESTED,
4602 .probe = probe_jedec,
4603 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4604 .block_erasers =
4605 {
4606 {
4607 .eraseblocks = { {4 * 1024, 64} },
4608 .block_erase = erase_sector_jedec,
4609 }, {
4610 .eraseblocks = { {64 * 1024, 4} },
4611 .block_erase = erase_block_jedec,
4612 }, {
4613 .eraseblocks = { {256 * 1024, 1} },
4614 .block_erase = erase_chip_block_jedec,
4615 }
4616 },
4617 .write = write_jedec_1,
4618 .read = read_memmapped,
4619 },
4620
4621 {
4622 .vendor = "PMC",
4623 .name = "Pm39LV040",
4624 .bustype = CHIP_BUSTYPE_PARALLEL,
4625 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004626 .model_id = PMC_PM39LV040,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00004627 .total_size = 512,
4628 .page_size = 4096,
4629 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4630 .tested = TEST_UNTESTED,
4631 .probe = probe_jedec,
4632 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4633 .block_erasers =
4634 {
4635 {
4636 .eraseblocks = { {4 * 1024, 128} },
4637 .block_erase = erase_sector_jedec,
4638 }, {
4639 .eraseblocks = { {64 * 1024, 8} },
4640 .block_erase = erase_block_jedec,
4641 }, {
4642 .eraseblocks = { {512 * 1024, 1} },
4643 .block_erase = erase_chip_block_jedec,
4644 }
4645 },
4646 .write = write_jedec_1,
4647 .read = read_memmapped,
4648 },
4649
4650 {
4651 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004652 .name = "Pm49FL002",
Uwe Hermann431f4f72010-09-05 12:41:25 +00004653 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004654 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004655 .model_id = PMC_PM49FL002,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004656 .total_size = 256,
4657 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004658 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004659 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004660 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004661 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004662 .block_erasers =
4663 {
4664 {
4665 .eraseblocks = { {4 * 1024, 64} },
4666 .block_erase = erase_sector_jedec,
4667 }, {
4668 .eraseblocks = { {16 * 1024, 16} },
4669 .block_erase = erase_block_jedec,
4670 }, {
4671 .eraseblocks = { {256 * 1024, 1} },
4672 .block_erase = erase_chip_block_jedec,
4673 }
4674 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004675 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004676 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004677 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004678 },
4679
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004680 {
4681 .vendor = "PMC",
4682 .name = "Pm49FL004",
Uwe Hermann431f4f72010-09-05 12:41:25 +00004683 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004685 .model_id = PMC_PM49FL004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004686 .total_size = 512,
4687 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004688 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004689 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004690 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004691 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004692 .block_erasers =
4693 {
4694 {
4695 .eraseblocks = { {4 * 1024, 128} },
4696 .block_erase = erase_sector_jedec,
4697 }, {
4698 .eraseblocks = { {64 * 1024, 8} },
4699 .block_erase = erase_block_jedec,
4700 }, {
4701 .eraseblocks = { {512 * 1024, 1} },
4702 .block_erase = erase_chip_block_jedec,
4703 }
4704 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004705 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004706 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004707 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004708 },
4709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004710 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004711 .vendor = "Sanyo",
4712 .name = "LF25FW203A",
4713 .bustype = CHIP_BUSTYPE_SPI,
4714 .manufacture_id = SANYO_ID,
4715 .model_id = SANYO_LE25FW203A,
4716 .total_size = 2048,
4717 .page_size = 256,
4718 .tested = TEST_UNTESTED,
4719 .probe = probe_spi_rdid,
4720 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004721 .block_erasers =
4722 {
4723 {
4724 .eraseblocks = { {64 * 1024, 32} },
4725 .block_erase = spi_block_erase_d8,
4726 }, {
4727 .eraseblocks = { {2 * 1024 * 1024, 1} },
4728 .block_erase = spi_block_erase_c7,
4729 }
4730 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004731 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004732 .write = spi_chip_write_256,
4733 .read = spi_chip_read,
4734 },
4735
4736 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004737 .vendor = "Sharp",
4738 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004739 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004740 .manufacture_id = SHARP_ID,
4741 .model_id = SHARP_LHF00L04,
4742 .total_size = 1024,
4743 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004744 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004746 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004747 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004748 .block_erasers =
4749 {
4750 {
4751 .eraseblocks = {
4752 {64 * 1024, 15},
4753 {8 * 1024, 8}
4754 },
Sean Nelson28accc22010-03-19 18:47:06 +00004755 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004756 }, {
4757 .eraseblocks = {
4758 {1024 * 1024, 1}
4759 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004760 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004761 },
4762 },
Sean Nelson28accc22010-03-19 18:47:06 +00004763 .unlock = unlock_82802ab,
4764 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004765 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004766 },
4767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004768 {
4769 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004770 .name = "S25FL008A",
4771 .bustype = CHIP_BUSTYPE_SPI,
4772 .manufacture_id = SPANSION_ID,
4773 .model_id = SPANSION_S25FL008A,
4774 .total_size = 1024,
4775 .page_size = 256,
4776 .tested = TEST_OK_PREW,
4777 .probe = probe_spi_rdid,
4778 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004779 .block_erasers =
4780 {
4781 {
4782 .eraseblocks = { {64 * 1024, 16} },
4783 .block_erase = spi_block_erase_d8,
4784 }, {
4785 .eraseblocks = { {1024 * 1024, 1} },
4786 .block_erase = spi_block_erase_c7,
4787 }
4788 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004789 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004790 .write = spi_chip_write_256,
4791 .read = spi_chip_read,
4792 },
4793
4794 {
4795 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004796 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004797 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004798 .manufacture_id = SPANSION_ID,
4799 .model_id = SPANSION_S25FL016A,
4800 .total_size = 2048,
4801 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004802 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004803 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004804 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004805 .block_erasers =
4806 {
4807 {
4808 .eraseblocks = { {64 * 1024, 32} },
4809 .block_erase = spi_block_erase_d8,
4810 }, {
4811 .eraseblocks = { {2 * 1024 * 1024, 1} },
4812 .block_erase = spi_block_erase_c7,
4813 }
4814 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004815 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004816 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004818 },
4819
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004820 {
4821 .vendor = "SST",
4822 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004823 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004824 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004825 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004826 .total_size = 2048,
4827 .page_size = 256,
Uwe Hermanna3473242010-09-14 22:59:39 +00004828 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004830 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004831 .block_erasers =
4832 {
4833 {
4834 .eraseblocks = { {4 * 1024, 512} },
4835 .block_erase = spi_block_erase_20,
4836 }, {
4837 .eraseblocks = { {32 * 1024, 64} },
4838 .block_erase = spi_block_erase_52,
4839 }, {
4840 .eraseblocks = { {64 * 1024, 32} },
4841 .block_erase = spi_block_erase_d8,
4842 }, {
4843 .eraseblocks = { {2 * 1024 * 1024, 1} },
4844 .block_erase = spi_block_erase_60,
4845 }, {
4846 .eraseblocks = { {2 * 1024 * 1024, 1} },
4847 .block_erase = spi_block_erase_c7,
4848 },
4849 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004850 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004851 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004852 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004853 },
4854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004855 {
4856 .vendor = "SST",
4857 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004858 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004860 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004861 .total_size = 4096,
4862 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004863 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004864 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004865 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004866 .block_erasers =
4867 {
4868 {
4869 .eraseblocks = { {4 * 1024, 1024} },
4870 .block_erase = spi_block_erase_20,
4871 }, {
4872 .eraseblocks = { {32 * 1024, 128} },
4873 .block_erase = spi_block_erase_52,
4874 }, {
4875 .eraseblocks = { {64 * 1024, 64} },
4876 .block_erase = spi_block_erase_d8,
4877 }, {
4878 .eraseblocks = { {4 * 1024 * 1024, 1} },
4879 .block_erase = spi_block_erase_60,
4880 }, {
4881 .eraseblocks = { {4 * 1024 * 1024, 1} },
4882 .block_erase = spi_block_erase_c7,
4883 },
4884 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004885 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004886 .write = spi_chip_write_1,
4887 .read = spi_chip_read,
4888 },
4889
4890 {
4891 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004892 .name = "SST25VF064C",
4893 .bustype = CHIP_BUSTYPE_SPI,
4894 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004895 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004896 .total_size = 8192,
4897 .page_size = 256,
4898 .tested = TEST_OK_PREW,
4899 .probe = probe_spi_rdid,
4900 .probe_timing = TIMING_ZERO,
4901 .block_erasers =
4902 {
4903 {
4904 .eraseblocks = { {4 * 1024, 2048} },
4905 .block_erase = spi_block_erase_20,
4906 }, {
4907 .eraseblocks = { {32 * 1024, 256} },
4908 .block_erase = spi_block_erase_52,
4909 }, {
4910 .eraseblocks = { {64 * 1024, 128} },
4911 .block_erase = spi_block_erase_d8,
4912 }, {
4913 .eraseblocks = { {8 * 1024 * 1024, 1} },
4914 .block_erase = spi_block_erase_60,
4915 }, {
4916 .eraseblocks = { {8 * 1024 * 1024, 1} },
4917 .block_erase = spi_block_erase_c7,
4918 },
4919 },
4920 .unlock = spi_disable_blockprotect,
4921 .write = spi_chip_write_1,
4922 .read = spi_chip_read,
4923 },
4924
4925 {
4926 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004927 .name = "SST25VF040.REMS",
4928 .bustype = CHIP_BUSTYPE_SPI,
4929 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004930 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004931 .total_size = 512,
4932 .page_size = 256,
4933 .tested = TEST_OK_PR,
4934 .probe = probe_spi_rems,
4935 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004936 .block_erasers =
4937 {
4938 {
4939 .eraseblocks = { {4 * 1024, 128} },
4940 .block_erase = spi_block_erase_20,
4941 }, {
4942 .eraseblocks = { {32 * 1024, 16} },
4943 .block_erase = spi_block_erase_52,
4944 }, {
4945 .eraseblocks = { {512 * 1024, 1} },
4946 .block_erase = spi_block_erase_60,
4947 },
4948 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004949 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004950 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004952 },
4953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004954 {
4955 .vendor = "SST",
4956 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004958 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004959 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004960 .total_size = 512,
4961 .page_size = 256,
4962 .tested = TEST_UNTESTED,
4963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004964 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004965 .block_erasers =
4966 {
4967 {
4968 .eraseblocks = { {4 * 1024, 128} },
4969 .block_erase = spi_block_erase_20,
4970 }, {
4971 .eraseblocks = { {32 * 1024, 16} },
4972 .block_erase = spi_block_erase_52,
4973 }, {
4974 .eraseblocks = { {64 * 1024, 8} },
4975 .block_erase = spi_block_erase_d8,
4976 }, {
4977 .eraseblocks = { {512 * 1024, 1} },
4978 .block_erase = spi_block_erase_60,
4979 }, {
4980 .eraseblocks = { {512 * 1024, 1} },
4981 .block_erase = spi_block_erase_c7,
4982 },
4983 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004984 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004985 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004986 .read = spi_chip_read,
4987 },
4988
4989 {
4990 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004991 .name = "SST25LF040A.RES",
4992 .bustype = CHIP_BUSTYPE_SPI,
4993 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004994 .model_id = SST_SST25VF040_REMS,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004995 .total_size = 512,
4996 .page_size = 256,
4997 .tested = TEST_OK_PROBE,
4998 .probe = probe_spi_res2,
4999 .probe_timing = TIMING_ZERO,
5000 .block_erasers =
5001 {
5002 {
5003 .eraseblocks = { {4 * 1024, 128} },
5004 .block_erase = spi_block_erase_20,
5005 }, {
5006 .eraseblocks = { {32 * 1024, 16} },
5007 .block_erase = spi_block_erase_52,
5008 }, {
5009 .eraseblocks = { {512 * 1024, 1} },
5010 .block_erase = spi_block_erase_60,
5011 },
5012 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005013 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005014 .write = spi_chip_write_1,
5015 .read = spi_chip_read,
5016 },
5017
5018 {
5019 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00005020 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005021 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005022 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005023 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00005024 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005025 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00005026 .tested = TEST_OK_PR,
5027 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005028 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005029 .block_erasers =
5030 {
5031 {
5032 .eraseblocks = { {4 * 1024, 128} },
5033 .block_erase = spi_block_erase_20,
5034 }, {
5035 .eraseblocks = { {32 * 1024, 16} },
5036 .block_erase = spi_block_erase_52,
5037 }, {
5038 .eraseblocks = { {64 * 1024, 8} },
5039 .block_erase = spi_block_erase_d8,
5040 }, {
5041 .eraseblocks = { {512 * 1024, 1} },
5042 .block_erase = spi_block_erase_60,
5043 }, {
5044 .eraseblocks = { {512 * 1024, 1} },
5045 .block_erase = spi_block_erase_c7,
5046 },
5047 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005048 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005049 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00005050 .read = spi_chip_read,
5051 },
5052
5053 {
5054 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005055 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005056 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005057 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005058 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005059 .total_size = 1024,
5060 .page_size = 256,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005061 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005062 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005063 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005064 .block_erasers =
5065 {
5066 {
5067 .eraseblocks = { {4 * 1024, 256} },
5068 .block_erase = spi_block_erase_20,
5069 }, {
5070 .eraseblocks = { {32 * 1024, 32} },
5071 .block_erase = spi_block_erase_52,
5072 }, {
5073 .eraseblocks = { {64 * 1024, 16} },
5074 .block_erase = spi_block_erase_d8,
5075 }, {
5076 .eraseblocks = { {1024 * 1024, 1} },
5077 .block_erase = spi_block_erase_60,
5078 }, {
5079 .eraseblocks = { {1024 * 1024, 1} },
5080 .block_erase = spi_block_erase_c7,
5081 },
5082 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005083 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005084 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005085 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005086 },
5087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005088 {
5089 .vendor = "SST",
5090 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005091 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005092 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005093 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .total_size = 512,
5095 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005096 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005098 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005099 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005100 .block_erasers =
5101 {
5102 {
5103 .eraseblocks = { {128, 4096} },
5104 .block_erase = erase_sector_28sf040,
5105 }, {
5106 .eraseblocks = { {512 * 1024, 1} },
5107 .block_erase = erase_chip_28sf040,
5108 }
5109 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005110 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005111 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005112 },
5113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005114 {
5115 .vendor = "SST",
5116 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005117 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005118 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005119 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005120 .total_size = 128,
5121 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005122 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005123 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005124 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005125 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005126 .block_erasers =
5127 {
5128 {
5129 .eraseblocks = { {128 * 1024, 1} },
5130 .block_erase = erase_chip_block_jedec,
5131 }
5132 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005133 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005134 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005135 },
5136
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 {
5138 .vendor = "SST",
5139 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005140 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005141 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005142 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005143 .total_size = 128,
5144 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005145 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005146 .tested = TEST_UNTESTED,
5147 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005148 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005149 .block_erasers =
5150 {
5151 {
5152 .eraseblocks = { {128 * 1024, 1} },
5153 .block_erase = erase_chip_block_jedec,
5154 }
5155 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005156 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005157 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005158 },
5159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 {
5161 .vendor = "SST",
5162 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005163 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005164 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005165 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005166 .total_size = 256,
5167 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005168 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005169 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005170 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005171 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005172 .block_erasers =
5173 {
5174 {
5175 .eraseblocks = { {256 * 1024, 1} },
5176 .block_erase = erase_chip_block_jedec,
5177 }
5178 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005179 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005181 },
5182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005183 {
5184 .vendor = "SST",
5185 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005186 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005187 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005188 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005189 .total_size = 256,
5190 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005191 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00005192 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005193 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005194 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005195 .block_erasers =
5196 {
5197 {
5198 .eraseblocks = { {256 * 1024, 1} },
5199 .block_erase = erase_chip_block_jedec,
5200 }
5201 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005202 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005203 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005204 },
5205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005206 {
5207 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005208 .name = "SST39SF512",
5209 .bustype = CHIP_BUSTYPE_PARALLEL,
5210 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005211 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005212 .total_size = 64,
5213 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005214 .feature_bits = FEATURE_EITHER_RESET,
5215 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005216 .probe = probe_jedec,
5217 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005218 .block_erasers =
5219 {
5220 {
5221 .eraseblocks = { {4 * 1024, 16} },
5222 .block_erase = erase_sector_jedec,
5223 }, {
5224 .eraseblocks = { {64 * 1024, 1} },
5225 .block_erase = erase_chip_block_jedec,
5226 }
5227 },
Sean Nelson35727f72010-01-28 23:55:12 +00005228 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005229 .read = read_memmapped,
5230 },
5231
5232 {
5233 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005234 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005235 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005236 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005237 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 .total_size = 128,
5239 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005240 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005241 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005242 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005243 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005244 .block_erasers =
5245 {
5246 {
5247 .eraseblocks = { {4 * 1024, 32} },
5248 .block_erase = erase_sector_jedec,
5249 }, {
5250 .eraseblocks = { {128 * 1024, 1} },
5251 .block_erase = erase_chip_block_jedec,
5252 }
5253 },
Sean Nelson35727f72010-01-28 23:55:12 +00005254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005256 },
5257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005258 {
5259 .vendor = "SST",
5260 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005261 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005262 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005263 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005264 .total_size = 256,
5265 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005266 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005267 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005269 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005270 .block_erasers =
5271 {
5272 {
5273 .eraseblocks = { {4 * 1024, 64} },
5274 .block_erase = erase_sector_jedec,
5275 }, {
5276 .eraseblocks = { {256 * 1024, 1} },
5277 .block_erase = erase_chip_block_jedec,
5278 }
5279 },
Sean Nelson35727f72010-01-28 23:55:12 +00005280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005282 },
5283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005284 {
5285 .vendor = "SST",
5286 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005287 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005288 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005289 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005290 .total_size = 512,
5291 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005292 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005293 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005294 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005295 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005296 .block_erasers =
5297 {
5298 {
5299 .eraseblocks = { {4 * 1024, 128} },
5300 .block_erase = erase_sector_jedec,
5301 }, {
5302 .eraseblocks = { {512 * 1024, 1} },
5303 .block_erase = erase_chip_block_jedec,
5304 }
5305 },
Sean Nelson35727f72010-01-28 23:55:12 +00005306 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005308 },
5309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005310 {
5311 .vendor = "SST",
5312 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005313 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005315 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005316 .total_size = 64,
5317 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005318 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger9017cec2010-09-04 23:37:40 +00005319 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005320 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005321 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005322 .block_erasers =
5323 {
5324 {
5325 .eraseblocks = { {4 * 1024, 16} },
5326 .block_erase = erase_sector_jedec,
5327 }, {
5328 .eraseblocks = { {64 * 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,
FENG yu ningff692fb2008-12-08 18:15:10 +00005334 },
5335
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005336 {
5337 .vendor = "SST",
5338 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005339 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005340 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005341 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005342 .total_size = 128,
5343 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005344 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005345 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005346 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005347 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005348 .block_erasers =
5349 {
5350 {
5351 .eraseblocks = { {4 * 1024, 32} },
5352 .block_erase = erase_sector_jedec,
5353 }, {
5354 .eraseblocks = { {128 * 1024, 1} },
5355 .block_erase = erase_chip_block_jedec,
5356 }
5357 },
Sean Nelson35727f72010-01-28 23:55:12 +00005358 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005359 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005360 },
5361
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005362 {
5363 .vendor = "SST",
5364 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005365 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005366 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005367 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005368 .total_size = 256,
5369 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005370 .feature_bits = FEATURE_EITHER_RESET,
5371 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005372 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005373 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005374 .block_erasers =
5375 {
5376 {
5377 .eraseblocks = { {4 * 1024, 64} },
5378 .block_erase = erase_sector_jedec,
5379 }, {
5380 .eraseblocks = { {256 * 1024, 1} },
5381 .block_erase = erase_chip_block_jedec,
5382 }
5383 },
Sean Nelson35727f72010-01-28 23:55:12 +00005384 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005385 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005386 },
5387
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005388 {
5389 .vendor = "SST",
5390 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005391 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005392 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005393 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005394 .total_size = 512,
5395 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005396 .feature_bits = FEATURE_EITHER_RESET,
5397 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005398 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005399 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005400 .block_erasers =
5401 {
5402 {
5403 .eraseblocks = { {4 * 1024, 128} },
5404 .block_erase = erase_sector_jedec,
5405 }, {
5406 .eraseblocks = { {512 * 1024, 1} },
5407 .block_erase = erase_chip_block_jedec,
5408 }
5409 },
Sean Nelson35727f72010-01-28 23:55:12 +00005410 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005411 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005412 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005413
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005414 {
5415 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005416 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005417 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005418 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005419 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005420 .total_size = 1024,
5421 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005422 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005423 .tested = TEST_UNTESTED,
5424 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005425 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005426 .block_erasers =
5427 {
5428 {
5429 .eraseblocks = { {4 * 1024, 256} },
5430 .block_erase = erase_sector_jedec,
5431 }, {
5432 .eraseblocks = { {64 * 1024, 16} },
5433 .block_erase = erase_block_jedec,
5434 }, {
5435 .eraseblocks = { {1024 * 1024, 1} },
5436 .block_erase = erase_chip_block_jedec,
5437 }
5438 },
Sean Nelson35727f72010-01-28 23:55:12 +00005439 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005440 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005441 },
5442
5443 {
5444 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005445 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005446 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005447 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005448 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005449 .total_size = 256,
5450 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005451 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005452 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005453 .probe = probe_jedec,
5454 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005455 .block_erasers =
5456 {
5457 {
5458 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005459 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005460 }, {
5461 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005462 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005463 }, {
5464 .eraseblocks = { {256 * 1024, 1} },
5465 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5466 }
5467 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005468 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005469 .unlock = unlock_sst_fwhub,
5470 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005471 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005472 },
5473
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005474 {
5475 .vendor = "SST",
5476 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005477 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005478 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005479 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005480 .total_size = 384,
5481 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005482 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005483 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005484 .probe = probe_jedec,
5485 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005486 .block_erasers =
5487 {
5488 {
5489 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005490 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005491 }, {
5492 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005493 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005494 }, {
5495 .eraseblocks = { {384 * 1024, 1} },
5496 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5497 }
5498 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005499 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005500 .unlock = unlock_sst_fwhub,
5501 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005502 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005503 },
5504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005505 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005506 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5507 * and is only honored for 64k block erase, but not 4k sector erase.
5508 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005509 .vendor = "SST",
5510 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005511 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005513 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005514 .total_size = 512,
5515 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005516 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005517 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005518 .probe = probe_jedec,
5519 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005520 .block_erasers =
5521 {
5522 {
5523 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005524 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005525 }, {
5526 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005527 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005528 }, {
5529 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005530 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005531 },
5532 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005533 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005534 .unlock = unlock_sst_fwhub,
5535 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005536 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005537 },
5538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005539 {
5540 .vendor = "SST",
5541 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005542 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005544 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005545 .total_size = 512,
5546 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005547 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005548 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005549 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005550 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005551 .block_erasers =
5552 {
5553 {
5554 .eraseblocks = { {4 * 1024, 128} },
5555 .block_erase = erase_sector_49lfxxxc,
5556 }, {
5557 .eraseblocks = {
5558 {64 * 1024, 7},
5559 {32 * 1024, 1},
5560 {8 * 1024, 2},
5561 {16 * 1024, 1},
5562 },
Sean Nelson69e58112010-03-23 17:10:28 +00005563 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005564 }
5565 },
Sean Nelson69e58112010-03-23 17:10:28 +00005566 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005567 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005568 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005569 },
5570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005571 {
5572 .vendor = "SST",
5573 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005574 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005575 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005576 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005577 .total_size = 1024,
5578 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005579 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005580 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005581 .probe = probe_jedec,
5582 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005583 .block_erasers =
5584 {
5585 {
5586 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005587 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005588 }, {
5589 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005590 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005591 }, {
5592 .eraseblocks = { {1024 * 1024, 1} },
5593 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5594 }
5595 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005596 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005597 .unlock = unlock_sst_fwhub,
5598 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005599 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005600 },
5601
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005602 {
5603 .vendor = "SST",
5604 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005605 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005606 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005607 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005608 .total_size = 1024,
5609 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005610 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005611 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005612 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005613 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005614 .block_erasers =
5615 {
5616 {
5617 .eraseblocks = { {4 * 1024, 256} },
5618 .block_erase = erase_sector_49lfxxxc,
5619 }, {
5620 .eraseblocks = {
5621 {64 * 1024, 15},
5622 {32 * 1024, 1},
5623 {8 * 1024, 2},
5624 {16 * 1024, 1},
5625 },
Sean Nelson69e58112010-03-23 17:10:28 +00005626 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005627 }
5628 },
Sean Nelson69e58112010-03-23 17:10:28 +00005629 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005630 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005631 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005632 },
5633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005634 {
5635 .vendor = "SST",
5636 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005637 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005638 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005639 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005640 .total_size = 2048,
5641 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005642 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005643 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005644 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005645 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005646 .block_erasers =
5647 {
5648 {
5649 .eraseblocks = { {4 * 1024, 512} },
5650 .block_erase = erase_sector_49lfxxxc,
5651 }, {
5652 .eraseblocks = {
5653 {64 * 1024, 31},
5654 {32 * 1024, 1},
5655 {8 * 1024, 2},
5656 {16 * 1024, 1},
5657 },
Sean Nelson69e58112010-03-23 17:10:28 +00005658 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005659 }
5660 },
Sean Nelson69e58112010-03-23 17:10:28 +00005661 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005662 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005663 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005664 },
5665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005666 {
5667 .vendor = "SST",
5668 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005669 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005670 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005671 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .total_size = 256,
5673 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005674 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005675 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005676 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005677 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005678 .block_erasers =
5679 {
5680 {
5681 .eraseblocks = { {4 * 1024, 64} },
5682 .block_erase = erase_sector_jedec,
5683 }, {
5684 .eraseblocks = { {16 * 1024, 16} },
5685 .block_erase = erase_block_jedec,
5686 }, {
5687 .eraseblocks = { {256 * 1024, 1} },
5688 .block_erase = NULL,
5689 }
5690 },
Sean Nelson35727f72010-01-28 23:55:12 +00005691 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005692 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005693 },
5694
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005695 {
5696 .vendor = "SST",
5697 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005698 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005699 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005700 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005701 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005702 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005703 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005704 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005705 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005706 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005707 .block_erasers =
5708 {
5709 {
5710 .eraseblocks = { {4 * 1024, 64} },
5711 .block_erase = erase_sector_jedec,
5712 }, {
5713 .eraseblocks = { {16 * 1024, 16} },
5714 .block_erase = erase_block_jedec,
5715 }, {
5716 .eraseblocks = { {256 * 1024, 1} },
5717 .block_erase = NULL,
5718 }
5719 },
Sean Nelson35727f72010-01-28 23:55:12 +00005720 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005721 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005722 },
5723
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 {
5725 .vendor = "SST",
5726 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005727 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005728 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005729 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005730 .total_size = 512,
5731 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005732 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00005733 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005734 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005735 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005736 .block_erasers =
5737 {
5738 {
5739 .eraseblocks = { {4 * 1024, 128} },
5740 .block_erase = erase_sector_jedec,
5741 }, {
5742 .eraseblocks = { {64 * 1024, 8} },
5743 .block_erase = erase_block_jedec,
5744 }, {
5745 .eraseblocks = { {512 * 1024, 1} },
5746 .block_erase = NULL,
5747 }
5748 },
Sean Nelson35727f72010-01-28 23:55:12 +00005749 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005750 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005751 },
5752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005753 {
5754 .vendor = "SST",
5755 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005756 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005757 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005758 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005759 .total_size = 512,
5760 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005761 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
5762 .tested = TEST_OK_PREW,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005763 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005764 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005765 .block_erasers =
5766 {
5767 {
5768 .eraseblocks = { {4 * 1024, 128} },
5769 .block_erase = erase_sector_jedec,
5770 }, {
5771 .eraseblocks = { {64 * 1024, 8} },
5772 .block_erase = erase_block_jedec,
5773 }, {
5774 .eraseblocks = { {512 * 1024, 1} },
5775 .block_erase = NULL,
5776 }
5777 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005778 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00005779 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005780 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005781 },
5782
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005783 {
5784 .vendor = "SST",
5785 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005786 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005787 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005788 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 .total_size = 1024,
5790 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005791 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005792 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005794 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005795 .block_erasers =
5796 {
5797 {
5798 .eraseblocks = { {4 * 1024, 256} },
5799 .block_erase = erase_sector_jedec,
5800 }, {
5801 .eraseblocks = { {64 * 1024, 16} },
5802 .block_erase = erase_block_jedec,
5803 }, {
5804 .eraseblocks = { {1024 * 1024, 1} },
5805 .block_erase = NULL,
5806 }
5807 },
Sean Nelson35727f72010-01-28 23:55:12 +00005808 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005809 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005810 },
5811
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005812 {
5813 .vendor = "SST",
5814 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005815 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005816 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005817 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005818 .total_size = 2048,
5819 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005820 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00005821 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005822 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005823 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005824 .block_erasers =
5825 {
5826 {
5827 .eraseblocks = { {4 * 1024, 512} },
5828 .block_erase = erase_sector_49lfxxxc,
5829 }, {
5830 .eraseblocks = {
5831 {64 * 1024, 31},
5832 {32 * 1024, 1},
5833 {8 * 1024, 2},
5834 {16 * 1024, 1},
5835 },
Sean Nelson69e58112010-03-23 17:10:28 +00005836 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005837 }
5838 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005839 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005840 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005841 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005842 },
5843
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005844 {
5845 .vendor = "ST",
5846 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005847 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 .manufacture_id = ST_ID,
5849 .model_id = ST_M25P05A,
5850 .total_size = 64,
5851 .page_size = 256,
5852 .tested = TEST_UNTESTED,
5853 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005854 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005855 .block_erasers =
5856 {
5857 {
5858 .eraseblocks = { {32 * 1024, 2} },
5859 .block_erase = spi_block_erase_d8,
5860 }, {
5861 .eraseblocks = { {64 * 1024, 1} },
5862 .block_erase = spi_block_erase_c7,
5863 }
5864 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005865 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005866 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005867 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005868 },
5869
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005870 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5871 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005872 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005873 * only is successful if RDID does not work.
5874 */
5875 {
5876 .vendor = "ST",
5877 .name = "M25P05.RES",
5878 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005879 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005880 .model_id = ST_M25P05_RES,
5881 .total_size = 64,
5882 .page_size = 256,
5883 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005884 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005885 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005886 .block_erasers =
5887 {
5888 {
5889 .eraseblocks = { {32 * 1024, 2} },
5890 .block_erase = spi_block_erase_d8,
5891 }, {
5892 .eraseblocks = { {64 * 1024, 1} },
5893 .block_erase = spi_block_erase_c7,
5894 }
5895 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005896 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005897 .write = spi_chip_write_1, /* 128 */
5898 .read = spi_chip_read,
5899 },
5900
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005901 {
5902 .vendor = "ST",
5903 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005904 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005905 .manufacture_id = ST_ID,
5906 .model_id = ST_M25P10A,
5907 .total_size = 128,
5908 .page_size = 256,
Uwe Hermann51afebb2010-08-01 00:13:49 +00005909 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005911 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005912 .block_erasers =
5913 {
5914 {
5915 .eraseblocks = { {32 * 1024, 4} },
5916 .block_erase = spi_block_erase_d8,
5917 }, {
5918 .eraseblocks = { {128 * 1024, 1} },
5919 .block_erase = spi_block_erase_c7,
5920 }
5921 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005922 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005923 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005925 },
5926
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005927 /* The ST M25P10 has the same problem as the M25P05. */
5928 {
5929 .vendor = "ST",
5930 .name = "M25P10.RES",
5931 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005932 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005933 .model_id = ST_M25P10_RES,
5934 .total_size = 128,
5935 .page_size = 256,
5936 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005937 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005938 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005939 .block_erasers =
5940 {
5941 {
5942 .eraseblocks = { {32 * 1024, 4} },
5943 .block_erase = spi_block_erase_d8,
5944 }, {
5945 .eraseblocks = { {128 * 1024, 1} },
5946 .block_erase = spi_block_erase_c7,
5947 }
5948 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005949 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005950 .write = spi_chip_write_1, /* 128 */
5951 .read = spi_chip_read,
5952 },
5953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005954 {
5955 .vendor = "ST",
5956 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005958 .manufacture_id = ST_ID,
5959 .model_id = ST_M25P20,
5960 .total_size = 256,
5961 .page_size = 256,
5962 .tested = TEST_UNTESTED,
5963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005964 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005965 .block_erasers =
5966 {
5967 {
5968 .eraseblocks = { {64 * 1024, 4} },
5969 .block_erase = spi_block_erase_d8,
5970 }, {
5971 .eraseblocks = { {256 * 1024, 1} },
5972 .block_erase = spi_block_erase_c7,
5973 }
5974 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005975 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005976 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005977 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005978 },
5979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005980 {
5981 .vendor = "ST",
5982 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005983 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005984 .manufacture_id = ST_ID,
5985 .model_id = ST_M25P40,
5986 .total_size = 512,
5987 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005988 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005990 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005991 .block_erasers =
5992 {
5993 {
5994 .eraseblocks = { {64 * 1024, 8} },
5995 .block_erase = spi_block_erase_d8,
5996 }, {
5997 .eraseblocks = { {512 * 1024, 1} },
5998 .block_erase = spi_block_erase_c7,
5999 }
6000 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006001 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006002 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006004 },
6005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 {
6007 .vendor = "ST",
6008 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006009 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006010 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006011 .model_id = ST_M25P40_RES,
6012 .total_size = 512,
6013 .page_size = 256,
6014 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006015 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006016 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006017 .block_erasers =
6018 {
6019 {
6020 .eraseblocks = { {64 * 1024, 8} },
6021 .block_erase = spi_block_erase_d8,
6022 }, {
6023 .eraseblocks = { {512 * 1024, 1} },
6024 .block_erase = spi_block_erase_c7,
6025 }
6026 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006027 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006028 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006029 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006030 },
6031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 {
6033 .vendor = "ST",
6034 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006035 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006036 .manufacture_id = ST_ID,
6037 .model_id = ST_M25P80,
6038 .total_size = 1024,
6039 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00006040 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006041 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006042 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006043 .block_erasers =
6044 {
6045 {
6046 .eraseblocks = { {64 * 1024, 16} },
6047 .block_erase = spi_block_erase_d8,
6048 }, {
6049 .eraseblocks = { {1024 * 1024, 1} },
6050 .block_erase = spi_block_erase_c7,
6051 }
6052 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006053 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006054 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006055 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006056 },
6057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006058 {
6059 .vendor = "ST",
6060 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006061 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006062 .manufacture_id = ST_ID,
6063 .model_id = ST_M25P16,
6064 .total_size = 2048,
6065 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00006066 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006067 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006068 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006069 .block_erasers =
6070 {
6071 {
6072 .eraseblocks = { {64 * 1024, 32} },
6073 .block_erase = spi_block_erase_d8,
6074 }, {
6075 .eraseblocks = { {2 * 1024 * 1024, 1} },
6076 .block_erase = spi_block_erase_c7,
6077 }
6078 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006079 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006080 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006081 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006082 },
6083
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006084 {
6085 .vendor = "ST",
6086 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006087 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006088 .manufacture_id = ST_ID,
6089 .model_id = ST_M25P32,
6090 .total_size = 4096,
6091 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00006092 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006093 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006094 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006095 .block_erasers =
6096 {
6097 {
6098 .eraseblocks = { {64 * 1024, 64} },
6099 .block_erase = spi_block_erase_d8,
6100 }, {
6101 .eraseblocks = { {4 * 1024 * 1024, 1} },
6102 .block_erase = spi_block_erase_c7,
6103 }
6104 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006105 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006106 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006107 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006108 },
6109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006110 {
6111 .vendor = "ST",
6112 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006113 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006114 .manufacture_id = ST_ID,
6115 .model_id = ST_M25P64,
6116 .total_size = 8192,
6117 .page_size = 256,
6118 .tested = TEST_UNTESTED,
6119 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006120 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006121 .block_erasers =
6122 {
6123 {
6124 .eraseblocks = { {64 * 1024, 128} },
6125 .block_erase = spi_block_erase_d8,
6126 }, {
6127 .eraseblocks = { {8 * 1024 * 1024, 1} },
6128 .block_erase = spi_block_erase_c7,
6129 }
6130 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006131 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006132 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006133 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006134 },
6135
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006136 {
6137 .vendor = "ST",
6138 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006139 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 .manufacture_id = ST_ID,
6141 .model_id = ST_M25P128,
6142 .total_size = 16384,
6143 .page_size = 256,
6144 .tested = TEST_UNTESTED,
6145 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006146 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006147 .block_erasers =
6148 {
6149 {
6150 .eraseblocks = { {256 * 1024, 64} },
6151 .block_erase = spi_block_erase_d8,
6152 }, {
6153 .eraseblocks = { {16 * 1024 * 1024, 1} },
6154 .block_erase = spi_block_erase_c7,
6155 }
6156 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006157 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006158 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006159 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006160 },
6161
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006162 {
6163 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00006164 .name = "M25PX32",
6165 .bustype = CHIP_BUSTYPE_SPI,
6166 .manufacture_id = ST_ID,
6167 .model_id = ST_M25PX32,
6168 .total_size = 4096,
6169 .page_size = 256,
6170 .tested = TEST_OK_PREW,
6171 .probe = probe_spi_rdid,
6172 .probe_timing = TIMING_ZERO,
6173 .block_erasers =
6174 {
6175 {
6176 .eraseblocks = { { 4 * 1024, 1024 } },
6177 .block_erase = spi_block_erase_20,
6178 }, {
6179 .eraseblocks = { {64 * 1024, 64} },
6180 .block_erase = spi_block_erase_d8,
6181 }, {
6182 .eraseblocks = { {4 * 1024 * 1024, 1} },
6183 .block_erase = spi_block_erase_c7,
6184 }
6185 },
6186 .unlock = spi_disable_blockprotect,
6187 .write = spi_chip_write_256,
6188 .read = spi_chip_read,
6189 },
6190
6191 {
6192 .vendor = "ST",
6193 .name = "M25PX64",
6194 .bustype = CHIP_BUSTYPE_SPI,
6195 .manufacture_id = ST_ID,
6196 .model_id = ST_M25PX64,
6197 .total_size = 8192,
6198 .page_size = 256,
6199 .tested = TEST_OK_PREW,
6200 .probe = probe_spi_rdid,
6201 .probe_timing = TIMING_ZERO,
6202 .block_erasers =
6203 {
6204 {
6205 .eraseblocks = { { 4 * 1024, 2048 } },
6206 .block_erase = spi_block_erase_20,
6207 }, {
6208 .eraseblocks = { {64 * 1024, 128} },
6209 .block_erase = spi_block_erase_d8,
6210 }, {
6211 .eraseblocks = { {8 * 1024 * 1024, 1} },
6212 .block_erase = spi_block_erase_c7,
6213 }
6214 },
6215 .unlock = spi_disable_blockprotect,
6216 .write = spi_chip_write_256,
6217 .read = spi_chip_read,
6218 },
6219
6220 {
6221 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006222 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006223 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006224 .manufacture_id = ST_ID,
6225 .model_id = ST_M29F002B,
6226 .total_size = 256,
6227 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006228 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006229 .tested = TEST_UNTESTED,
6230 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006231 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006232 .block_erasers =
6233 {
6234 {
6235 .eraseblocks = {
6236 {16 * 1024, 1},
6237 {8 * 1024, 2},
6238 {32 * 1024, 1},
6239 {64 * 1024, 3},
6240 },
6241 .block_erase = erase_sector_jedec,
6242 }, {
6243 .eraseblocks = { {256 * 1024, 1} },
6244 .block_erase = erase_chip_block_jedec,
6245 }
6246 },
Sean Nelson35727f72010-01-28 23:55:12 +00006247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006249 },
6250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006251 {
6252 .vendor = "ST",
6253 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006254 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006255 .manufacture_id = ST_ID,
6256 .model_id = ST_M29F002T,
6257 .total_size = 256,
6258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006259 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6260 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006261 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006262 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006263 .block_erasers =
6264 {
6265 {
6266 .eraseblocks = {
6267 {64 * 1024, 3},
6268 {32 * 1024, 1},
6269 {8 * 1024, 2},
6270 {16 * 1024, 1},
6271 },
6272 .block_erase = erase_sector_jedec,
6273 }, {
6274 .eraseblocks = { {256 * 1024, 1} },
6275 .block_erase = erase_chip_block_jedec,
6276 }
6277 },
Sean Nelson35727f72010-01-28 23:55:12 +00006278 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006279 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006280 },
6281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006282 {
6283 .vendor = "ST",
6284 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006285 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006286 .manufacture_id = ST_ID,
6287 .model_id = ST_M29F040B,
6288 .total_size = 512,
6289 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006290 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6291 .tested = TEST_UNTESTED,
6292 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006293 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006294 .block_erasers =
6295 {
6296 {
6297 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006298 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006299 }, {
6300 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006301 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006302 }
6303 },
Sean Nelson35727f72010-01-28 23:55:12 +00006304 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006306 },
6307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006308 {
Sean Nelson35727f72010-01-28 23:55:12 +00006309 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006310 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006311 .name = "M29F400BB",
6312 .bustype = CHIP_BUSTYPE_PARALLEL,
6313 .manufacture_id = ST_ID,
6314 .model_id = ST_M29F400BB,
6315 .total_size = 512,
6316 .page_size = 64 * 1024,
6317 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
6318 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
6319 .probe = probe_m29f400bt,
6320 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6321 .block_erasers =
6322 {
6323 {
6324 .eraseblocks = {
6325 {16 * 1024, 1},
6326 {8 * 1024, 2},
6327 {32 * 1024, 1},
6328 {64 * 1024, 7},
6329 },
6330 .block_erase = block_erase_m29f400bt,
6331 }, {
6332 .eraseblocks = { {512 * 1024, 1} },
6333 .block_erase = block_erase_chip_m29f400bt,
6334 }
6335 },
6336 .write = NULL,
6337 .read = read_memmapped,
6338 },
6339 {
6340 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6341 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006342 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006343 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006344 .manufacture_id = ST_ID,
6345 .model_id = ST_M29F400BT,
6346 .total_size = 512,
6347 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006348 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006349 .tested = TEST_UNTESTED,
6350 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006351 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006352 .block_erasers =
6353 {
6354 {
6355 .eraseblocks = {
6356 {64 * 1024, 7},
6357 {32 * 1024, 1},
6358 {8 * 1024, 2},
6359 {16 * 1024, 1},
6360 },
6361 .block_erase = block_erase_m29f400bt,
6362 }, {
6363 .eraseblocks = { {512 * 1024, 1} },
6364 .block_erase = block_erase_chip_m29f400bt,
6365 }
6366 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006367 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006368 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006369 },
6370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006371 {
6372 .vendor = "ST",
6373 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006374 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006375 .manufacture_id = ST_ID,
6376 .model_id = ST_M29W010B,
6377 .total_size = 128,
6378 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006379 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006380 .tested = TEST_UNTESTED,
6381 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006382 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006383 .block_erasers =
6384 {
6385 {
6386 .eraseblocks = { {16 * 1024, 8}, },
6387 .block_erase = erase_sector_jedec,
6388 }, {
6389 .eraseblocks = { {128 * 1024, 1} },
6390 .block_erase = erase_chip_block_jedec,
6391 }
6392 },
Sean Nelson35727f72010-01-28 23:55:12 +00006393 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006394 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006395 },
6396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006397 {
6398 .vendor = "ST",
6399 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006400 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006401 .manufacture_id = ST_ID,
6402 .model_id = ST_M29W040B,
6403 .total_size = 512,
6404 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006405 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006406 .tested = TEST_UNTESTED,
6407 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006408 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006409 .block_erasers =
6410 {
6411 {
6412 .eraseblocks = { {64 * 1024, 8}, },
6413 .block_erase = erase_sector_jedec,
6414 }, {
6415 .eraseblocks = { {512 * 1024, 1} },
6416 .block_erase = erase_chip_block_jedec,
6417 }
6418 },
Sean Nelson35727f72010-01-28 23:55:12 +00006419 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006420 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006421 },
6422
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006423 {
6424 .vendor = "ST",
6425 .name = "M29W512B",
6426 .bustype = CHIP_BUSTYPE_PARALLEL,
6427 .manufacture_id = ST_ID,
6428 .model_id = ST_M29W512B,
6429 .total_size = 64,
6430 .page_size = 64 * 1024,
6431 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6432 .tested = TEST_OK_PREW,
6433 .probe = probe_jedec,
6434 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006435 .block_erasers =
6436 {
6437 {
6438 .eraseblocks = { {64 * 1024, 1} },
6439 .block_erase = erase_chip_block_jedec,
6440 }
6441 },
6442 .write = write_jedec_1,
6443 .read = read_memmapped,
6444 },
6445
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006446 {
6447 .vendor = "ST",
6448 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006449 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006450 .manufacture_id = ST_ID,
6451 .model_id = ST_M50FLW040A,
6452 .total_size = 512,
6453 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006454 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006455 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006456 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006457 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006458 .block_erasers =
6459 {
6460 {
Sean Nelson329bde72010-01-19 16:39:19 +00006461 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006462 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006463 {64 * 1024, 5}, /* block */
6464 {4 * 1024, 16}, /* sector */
6465 {4 * 1024, 16}, /* sector */
6466 },
6467 .block_erase = NULL,
6468 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006469 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006470 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006471 }, {
6472 .eraseblocks = { {512 * 1024, 1} },
6473 .block_erase = erase_chip_stm50flw0x0x,
6474 }
6475 },
Sean Nelson28accc22010-03-19 18:47:06 +00006476 .unlock = unlock_stm50flw0x0x,
6477 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006478 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006479 },
6480
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006481 {
6482 .vendor = "ST",
6483 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006484 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006485 .manufacture_id = ST_ID,
6486 .model_id = ST_M50FLW040B,
6487 .total_size = 512,
6488 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006489 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006490 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006491 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006492 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006493 .block_erasers =
6494 {
6495 {
Sean Nelson329bde72010-01-19 16:39:19 +00006496 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006497 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006498 {4 * 1024, 16}, /* sector */
6499 {64 * 1024, 5}, /* block */
6500 {4 * 1024, 16}, /* sector */
6501 },
6502 .block_erase = NULL,
6503 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006504 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006505 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006506 }, {
6507 .eraseblocks = { {512 * 1024, 1} },
6508 .block_erase = erase_chip_stm50flw0x0x,
6509 }
6510 },
Sean Nelson28accc22010-03-19 18:47:06 +00006511 .unlock = unlock_stm50flw0x0x,
6512 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006513 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006514 },
6515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006516 {
6517 .vendor = "ST",
6518 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006519 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006520 .manufacture_id = ST_ID,
6521 .model_id = ST_M50FLW080A,
6522 .total_size = 1024,
6523 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006524 .feature_bits = FEATURE_REGISTERMAP,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00006525 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00006526 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006527 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006528 .block_erasers =
6529 {
6530 {
Sean Nelson329bde72010-01-19 16:39:19 +00006531 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006532 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006533 {64 * 1024, 13}, /* block */
6534 {4 * 1024, 16}, /* sector */
6535 {4 * 1024, 16}, /* sector */
6536 },
6537 .block_erase = NULL,
6538 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006539 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006540 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006541 }, {
6542 .eraseblocks = { {1024 * 1024, 1} },
6543 .block_erase = erase_chip_stm50flw0x0x,
6544 }
6545 },
Sean Nelson28accc22010-03-19 18:47:06 +00006546 .unlock = unlock_stm50flw0x0x,
6547 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006548 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006549 },
6550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006551 {
6552 .vendor = "ST",
6553 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006554 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006555 .manufacture_id = ST_ID,
6556 .model_id = ST_M50FLW080B,
6557 .total_size = 1024,
6558 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006559 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006560 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006561 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006562 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006563 .block_erasers =
6564 {
6565 {
Sean Nelson329bde72010-01-19 16:39:19 +00006566 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006567 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006568 {4 * 1024, 16}, /* sector */
6569 {64 * 1024, 13}, /* block */
6570 {4 * 1024, 16}, /* sector */
6571 },
6572 .block_erase = NULL,
6573 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006574 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006575 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006576 }, {
6577 .eraseblocks = { {1024 * 1024, 1} },
6578 .block_erase = erase_chip_stm50flw0x0x,
6579 }
6580 },
Sean Nelson28accc22010-03-19 18:47:06 +00006581 .unlock = unlock_stm50flw0x0x,
6582 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006583 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006584 },
6585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006586 {
6587 .vendor = "ST",
6588 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006589 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006590 .manufacture_id = ST_ID,
6591 .model_id = ST_M50FW002,
6592 .total_size = 256,
6593 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006594 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006595 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006596 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006597 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006598 .block_erasers =
6599 {
6600 {
6601 .eraseblocks = {
6602 {64 * 1024, 3},
6603 {32 * 1024, 1},
6604 {8 * 1024, 2},
6605 {16 * 1024, 1},
6606 },
Sean Nelson28accc22010-03-19 18:47:06 +00006607 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006608 }, {
6609 .eraseblocks = { {256 * 1024, 1} },
6610 .block_erase = erase_chip_stm50flw0x0x,
6611 }
6612 },
Sean Nelson28accc22010-03-19 18:47:06 +00006613 .unlock = unlock_stm50flw0x0x,
6614 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006615 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006616 },
6617
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006618 {
6619 .vendor = "ST",
6620 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006621 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006622 .manufacture_id = ST_ID,
6623 .model_id = ST_M50FW016,
6624 .total_size = 2048,
6625 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006626 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006627 .tested = TEST_UNTESTED,
6628 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006629 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006630 .block_erasers =
6631 {
6632 {
6633 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006634 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006635 }, {
6636 .eraseblocks = { {2 * 1024 * 1024, 1} },
6637 .block_erase = erase_chip_stm50flw0x0x,
6638 }
6639 },
Sean Nelson28accc22010-03-19 18:47:06 +00006640 .unlock = unlock_stm50flw0x0x,
6641 .write = write_82802ab,
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 {
6646 .vendor = "ST",
6647 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006648 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006649 .manufacture_id = ST_ID,
6650 .model_id = ST_M50FW040,
6651 .total_size = 512,
6652 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006653 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006654 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006655 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006656 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006657 .block_erasers =
6658 {
6659 {
6660 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006661 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006662 }, {
6663 .eraseblocks = { {512 * 1024, 1} },
6664 .block_erase = erase_chip_stm50flw0x0x,
6665 }
6666 },
Sean Nelson28accc22010-03-19 18:47:06 +00006667 .unlock = unlock_stm50flw0x0x,
6668 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006669 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006670 },
6671
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006672 {
6673 .vendor = "ST",
6674 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006675 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006676 .manufacture_id = ST_ID,
6677 .model_id = ST_M50FW080,
6678 .total_size = 1024,
6679 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006680 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006681 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006682 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006683 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006684 .block_erasers =
6685 {
6686 {
6687 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006688 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006689 }, {
6690 .eraseblocks = { {1024 * 1024, 1} },
6691 .block_erase = erase_chip_stm50flw0x0x,
6692 }
6693 },
Sean Nelson28accc22010-03-19 18:47:06 +00006694 .unlock = unlock_stm50flw0x0x,
6695 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006696 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006697 },
6698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006699 {
6700 .vendor = "ST",
6701 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006702 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006703 .manufacture_id = ST_ID,
6704 .model_id = ST_M50LPW116,
6705 .total_size = 2048,
6706 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006707 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006708 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006709 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006710 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006711 .block_erasers =
6712 {
6713 {
6714 .eraseblocks = {
6715 {4 * 1024, 16},
6716 {64 * 1024, 30},
6717 {32 * 1024, 1},
6718 {8 * 1024, 2},
6719 {16 * 1024, 1},
6720 },
Sean Nelson28accc22010-03-19 18:47:06 +00006721 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006722 }, {
6723 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006724 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006725 }
6726 },
Sean Nelson28accc22010-03-19 18:47:06 +00006727 .unlock = unlock_stm50flw0x0x,
6728 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006729 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006730 },
6731
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006732 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006733 .vendor = "SyncMOS/MoselVitelic",
6734 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006735 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006736 .manufacture_id = SYNCMOS_MVC_ID,
6737 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006738 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006739 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006740 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006741 .tested = TEST_UNTESTED,
6742 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006743 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006744 .block_erasers =
6745 {
6746 {
6747 .eraseblocks = { {512, 256} },
6748 .block_erase = erase_sector_jedec,
6749 }, {
6750 .eraseblocks = { {128 * 1024, 1} },
6751 .block_erase = erase_chip_block_jedec,
6752 },
6753 },
Sean Nelson35727f72010-01-28 23:55:12 +00006754 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006755 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006756 },
6757
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006758 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006759 .vendor = "SyncMOS/MoselVitelic",
6760 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006761 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006762 .manufacture_id = SYNCMOS_MVC_ID,
6763 .model_id = SM_MVC_29C51001T,
6764 .total_size = 128,
6765 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006766 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006767 .tested = TEST_UNTESTED,
6768 .probe = probe_jedec,
6769 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6770 .block_erasers =
6771 {
6772 {
6773 .eraseblocks = { {512, 256} },
6774 .block_erase = erase_sector_jedec,
6775 }, {
6776 .eraseblocks = { {128 * 1024, 1} },
6777 .block_erase = erase_chip_block_jedec,
6778 },
6779 },
6780 .write = write_jedec_1,
6781 .read = read_memmapped,
6782 },
6783
6784 {
6785 .vendor = "SyncMOS/MoselVitelic",
6786 .name = "{F,S,V}29C51002B",
6787 .bustype = CHIP_BUSTYPE_PARALLEL,
6788 .manufacture_id = SYNCMOS_MVC_ID,
6789 .model_id = SM_MVC_29C51002B,
6790 .total_size = 256,
6791 .page_size = 512,
6792 .feature_bits = FEATURE_EITHER_RESET,
6793 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006794 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006795 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006796 .block_erasers =
6797 {
6798 {
6799 .eraseblocks = { {512, 512} },
6800 .block_erase = erase_sector_jedec,
6801 }, {
6802 .eraseblocks = { {256 * 1024, 1} },
6803 .block_erase = erase_chip_block_jedec,
6804 },
6805 },
Sean Nelson35727f72010-01-28 23:55:12 +00006806 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006807 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006808 },
6809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006810 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006811 .vendor = "SyncMOS/MoselVitelic",
6812 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006813 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006814 .manufacture_id = SYNCMOS_MVC_ID,
6815 .model_id = SM_MVC_29C51002T,
6816 .total_size = 256,
6817 .page_size = 512,
6818 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006819 .tested = TEST_OK_PREW,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006820 .probe = probe_jedec,
6821 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6822 .block_erasers =
6823 {
6824 {
6825 .eraseblocks = { {512, 512} },
6826 .block_erase = erase_sector_jedec,
6827 }, {
6828 .eraseblocks = { {256 * 1024, 1} },
6829 .block_erase = erase_chip_block_jedec,
6830 },
6831 },
6832 .write = write_jedec_1,
6833 .read = read_memmapped,
6834 },
6835
6836 {
6837 .vendor = "SyncMOS/MoselVitelic",
6838 .name = "{F,S,V}29C51004B",
6839 .bustype = CHIP_BUSTYPE_PARALLEL,
6840 .manufacture_id = SYNCMOS_MVC_ID,
6841 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006842 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006843 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006844 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006845 .tested = TEST_UNTESTED,
6846 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006847 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006848 .block_erasers =
6849 {
6850 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006851 .eraseblocks = { {1024, 512} },
6852 .block_erase = erase_sector_jedec,
6853 }, {
6854 .eraseblocks = { {512 * 1024, 1} },
6855 .block_erase = erase_chip_block_jedec,
6856 },
6857 },
6858 .write = write_jedec_1,
6859 .read = read_memmapped,
6860 },
6861
6862 {
6863 .vendor = "SyncMOS/MoselVitelic",
6864 .name = "{F,S,V}29C51004T",
6865 .bustype = CHIP_BUSTYPE_PARALLEL,
6866 .manufacture_id = SYNCMOS_MVC_ID,
6867 .model_id = SM_MVC_29C51004T,
6868 .total_size = 512,
6869 .page_size = 1024,
6870 .feature_bits = FEATURE_EITHER_RESET,
6871 .tested = TEST_UNTESTED,
6872 .probe = probe_jedec,
6873 .probe_timing = TIMING_ZERO,
6874 .block_erasers =
6875 {
6876 {
6877 .eraseblocks = { {1024, 512} },
6878 .block_erase = erase_sector_jedec,
6879 }, {
6880 .eraseblocks = { {512 * 1024, 1} },
6881 .block_erase = erase_chip_block_jedec,
6882 },
6883 },
6884 .write = write_jedec_1,
6885 .read = read_memmapped,
6886 },
6887
6888 {
6889 .vendor = "SyncMOS/MoselVitelic",
6890 .name = "{S,V}29C31004B",
6891 .bustype = CHIP_BUSTYPE_PARALLEL,
6892 .manufacture_id = SYNCMOS_MVC_ID,
6893 .model_id = SM_MVC_29C31004B,
6894 .total_size = 512,
6895 .page_size = 1024,
6896 .feature_bits = FEATURE_EITHER_RESET,
6897 .tested = TEST_UNTESTED,
6898 .probe = probe_jedec,
6899 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6900 .block_erasers =
6901 {
6902 {
6903 .eraseblocks = { {1024, 512} },
6904 .block_erase = erase_sector_jedec,
6905 }, {
6906 .eraseblocks = { {512 * 1024, 1} },
6907 .block_erase = erase_chip_block_jedec,
6908 },
6909 },
6910 .write = write_jedec_1,
6911 .read = read_memmapped,
6912 },
6913
6914 {
6915 .vendor = "SyncMOS/MoselVitelic",
6916 .name = "{S,V}29C31004T",
6917 .bustype = CHIP_BUSTYPE_PARALLEL,
6918 .manufacture_id = SYNCMOS_MVC_ID,
6919 .model_id = SM_MVC_29C31004T,
6920 .total_size = 512,
6921 .page_size = 1024,
6922 .feature_bits = FEATURE_EITHER_RESET,
6923 .tested = TEST_UNTESTED,
6924 .probe = probe_jedec,
6925 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6926 .block_erasers =
6927 {
6928 {
6929 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006930 .block_erase = erase_sector_jedec,
6931 }, {
6932 .eraseblocks = { {512 * 1024, 1} },
6933 .block_erase = erase_chip_block_jedec,
6934 },
6935 },
Sean Nelson35727f72010-01-28 23:55:12 +00006936 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006937 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006938 },
6939
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006940 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006941 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006942 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006943 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006944 .manufacture_id = TI_OLD_ID,
6945 .model_id = TI_TMS29F002RB,
6946 .total_size = 256,
6947 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006948 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006949 .tested = TEST_UNTESTED,
6950 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006951 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006952 .block_erasers =
6953 {
6954 {
6955 .eraseblocks = {
6956 {16 * 1024, 1},
6957 {8 * 1024, 2},
6958 {32 * 1024, 1},
6959 {64 * 1024, 3},
6960 },
6961 .block_erase = erase_sector_jedec,
6962 }, {
6963 .eraseblocks = { {256 * 1024, 1} },
6964 .block_erase = erase_chip_block_jedec,
6965 },
6966 },
Sean Nelson35727f72010-01-28 23:55:12 +00006967 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006968 .read = read_memmapped,
6969 },
6970
6971 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006972 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006973 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006974 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006975 .manufacture_id = TI_OLD_ID,
6976 .model_id = TI_TMS29F002RT,
6977 .total_size = 256,
6978 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006979 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006980 .tested = TEST_UNTESTED,
6981 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006982 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006983 .block_erasers =
6984 {
6985 {
6986 .eraseblocks = {
6987 {64 * 1024, 3},
6988 {32 * 1024, 1},
6989 {8 * 1024, 2},
6990 {16 * 1024, 1},
6991 },
6992 .block_erase = erase_sector_jedec,
6993 }, {
6994 .eraseblocks = { {256 * 1024, 1} },
6995 .block_erase = erase_chip_block_jedec,
6996 },
6997 },
Sean Nelson35727f72010-01-28 23:55:12 +00006998 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006999 .read = read_memmapped,
7000 },
7001
7002 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007003 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00007004 .name = "W25Q80",
7005 .bustype = CHIP_BUSTYPE_SPI,
7006 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007007 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007008 .total_size = 1024,
7009 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007010 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007011 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007012 .probe = probe_spi_rdid,
7013 .probe_timing = TIMING_ZERO,
7014 .block_erasers =
7015 {
7016 {
7017 .eraseblocks = { {4 * 1024, 256} },
7018 .block_erase = spi_block_erase_20,
7019 }, {
7020 .eraseblocks = { {32 * 1024, 32} },
7021 .block_erase = spi_block_erase_52,
7022 }, {
7023 .eraseblocks = { {64 * 1024, 16} },
7024 .block_erase = spi_block_erase_d8,
7025 }, {
7026 .eraseblocks = { {1024 * 1024, 1} },
7027 .block_erase = spi_block_erase_60,
7028 }, {
7029 .eraseblocks = { {1024 * 1024, 1} },
7030 .block_erase = spi_block_erase_c7,
7031 }
7032 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007033 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007034 .write = spi_chip_write_256,
7035 .read = spi_chip_read,
7036 },
7037
7038 {
7039 .vendor = "Winbond",
7040 .name = "W25Q16",
7041 .bustype = CHIP_BUSTYPE_SPI,
7042 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007043 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007044 .total_size = 2048,
7045 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007046 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007047 .tested = TEST_UNTESTED,
7048 .probe = probe_spi_rdid,
7049 .probe_timing = TIMING_ZERO,
7050 .block_erasers =
7051 {
7052 {
7053 .eraseblocks = { {4 * 1024, 512} },
7054 .block_erase = spi_block_erase_20,
7055 }, {
7056 .eraseblocks = { {32 * 1024, 64} },
7057 .block_erase = spi_block_erase_52,
7058 }, {
7059 .eraseblocks = { {64 * 1024, 32} },
7060 .block_erase = spi_block_erase_d8,
7061 }, {
7062 .eraseblocks = { {2 * 1024 * 1024, 1} },
7063 .block_erase = spi_block_erase_60,
7064 }, {
7065 .eraseblocks = { {2 * 1024 * 1024, 1} },
7066 .block_erase = spi_block_erase_c7,
7067 }
7068 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007069 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007070 .write = spi_chip_write_256,
7071 .read = spi_chip_read,
7072 },
7073
7074 {
7075 .vendor = "Winbond",
7076 .name = "W25Q32",
7077 .bustype = CHIP_BUSTYPE_SPI,
7078 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007079 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007080 .total_size = 4096,
7081 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007082 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger9017cec2010-09-04 23:37:40 +00007083 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007084 .probe = probe_spi_rdid,
7085 .probe_timing = TIMING_ZERO,
7086 .block_erasers =
7087 {
7088 {
7089 .eraseblocks = { {4 * 1024, 1024} },
7090 .block_erase = spi_block_erase_20,
7091 }, {
7092 .eraseblocks = { {32 * 1024, 128} },
7093 .block_erase = spi_block_erase_52,
7094 }, {
7095 .eraseblocks = { {64 * 1024, 64} },
7096 .block_erase = spi_block_erase_d8,
7097 }, {
7098 .eraseblocks = { {4 * 1024 * 1024, 1} },
7099 .block_erase = spi_block_erase_60,
7100 }, {
7101 .eraseblocks = { {4 * 1024 * 1024, 1} },
7102 .block_erase = spi_block_erase_c7,
7103 }
7104 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007105 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007106 .write = spi_chip_write_256,
7107 .read = spi_chip_read,
7108 },
7109
7110 {
7111 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00007112 .name = "W25Q64",
7113 .bustype = CHIP_BUSTYPE_SPI,
7114 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007115 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00007116 .total_size = 8192,
7117 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007118 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksc4acec92010-06-24 11:39:57 +00007119 .tested = TEST_OK_PRW,
7120 .probe = probe_spi_rdid,
7121 .probe_timing = TIMING_ZERO,
7122 .block_erasers =
7123 {
7124 {
7125 .eraseblocks = { {4 * 1024, 2048} },
7126 .block_erase = spi_block_erase_20,
7127 }, {
7128 .eraseblocks = { {32 * 1024, 256} },
7129 .block_erase = spi_block_erase_52,
7130 }, {
7131 .eraseblocks = { {64 * 1024, 128} },
7132 .block_erase = spi_block_erase_d8,
7133 }, {
7134 .eraseblocks = { {8 * 1024 * 1024, 1} },
7135 .block_erase = spi_block_erase_60,
7136 }, {
7137 .eraseblocks = { {8 * 1024 * 1024, 1} },
7138 .block_erase = spi_block_erase_c7,
7139 }
7140 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007141 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00007142 .write = spi_chip_write_256,
7143 .read = spi_chip_read,
7144 },
7145
7146 {
7147 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007148 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007149 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007150 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007151 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007152 .total_size = 128,
7153 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007154 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007155 .tested = TEST_UNTESTED,
7156 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007157 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007158 .block_erasers =
7159 {
7160 {
7161 .eraseblocks = { {4 * 1024, 32} },
7162 .block_erase = spi_block_erase_20,
7163 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007164 .eraseblocks = { {64 * 1024, 2} },
7165 .block_erase = spi_block_erase_d8,
7166 }, {
7167 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007168 .block_erase = spi_block_erase_c7,
7169 }
7170 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007171 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007172 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007173 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007174 },
7175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007176 {
7177 .vendor = "Winbond",
7178 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007179 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007180 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007181 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007182 .total_size = 256,
7183 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007184 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007185 .tested = TEST_UNTESTED,
7186 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007187 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007188 .block_erasers =
7189 {
7190 {
7191 .eraseblocks = { {4 * 1024, 64} },
7192 .block_erase = spi_block_erase_20,
7193 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007194 .eraseblocks = { {64 * 1024, 4} },
7195 .block_erase = spi_block_erase_d8,
7196 }, {
7197 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007198 .block_erase = spi_block_erase_c7,
7199 }
7200 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007201 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007202 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007203 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007204 },
7205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007206 {
7207 .vendor = "Winbond",
7208 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007209 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007210 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007211 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007212 .total_size = 512,
7213 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007214 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007215 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007216 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007217 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007218 .block_erasers =
7219 {
7220 {
7221 .eraseblocks = { {4 * 1024, 128} },
7222 .block_erase = spi_block_erase_20,
7223 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007224 .eraseblocks = { {64 * 1024, 8} },
7225 .block_erase = spi_block_erase_d8,
7226 }, {
7227 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007228 .block_erase = spi_block_erase_c7,
7229 }
7230 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007231 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007232 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007233 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007234 },
7235
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007236 {
7237 .vendor = "Winbond",
7238 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007239 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007240 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007241 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007242 .total_size = 1024,
7243 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007244 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007245 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007246 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007247 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007248 .block_erasers =
7249 {
7250 {
7251 .eraseblocks = { {4 * 1024, 256} },
7252 .block_erase = spi_block_erase_20,
7253 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007254 .eraseblocks = { {64 * 1024, 16} },
7255 .block_erase = spi_block_erase_d8,
7256 }, {
7257 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007258 .block_erase = spi_block_erase_c7,
7259 }
7260 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007261 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007262 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007263 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007264 },
7265
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007266 {
7267 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007268 .name = "W25x16",
7269 .bustype = CHIP_BUSTYPE_SPI,
7270 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007271 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00007272 .total_size = 2048,
7273 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007274 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007275 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00007276 .probe = probe_spi_rdid,
7277 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007278 .block_erasers =
7279 {
7280 {
7281 .eraseblocks = { {4 * 1024, 512} },
7282 .block_erase = spi_block_erase_20,
7283 }, {
7284 .eraseblocks = { {32 * 1024, 64} },
7285 .block_erase = spi_block_erase_52,
7286 }, {
7287 .eraseblocks = { {64 * 1024, 32} },
7288 .block_erase = spi_block_erase_d8,
7289 }, {
7290 .eraseblocks = { {2 * 1024 * 1024, 1} },
7291 .block_erase = spi_block_erase_60,
7292 }, {
7293 .eraseblocks = { {2 * 1024 * 1024, 1} },
7294 .block_erase = spi_block_erase_c7,
7295 }
7296 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007297 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007298 .write = spi_chip_write_256,
7299 .read = spi_chip_read,
7300 },
7301
7302 {
7303 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007304 .name = "W25x32",
7305 .bustype = CHIP_BUSTYPE_SPI,
7306 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007307 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00007308 .total_size = 4096,
7309 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007310 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007311 .tested = TEST_OK_PROBE,
7312 .probe = probe_spi_rdid,
7313 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007314 .block_erasers =
7315 {
7316 {
7317 .eraseblocks = { {4 * 1024, 1024} },
7318 .block_erase = spi_block_erase_20,
7319 }, {
7320 .eraseblocks = { {32 * 1024, 128} },
7321 .block_erase = spi_block_erase_52,
7322 }, {
7323 .eraseblocks = { {64 * 1024, 64} },
7324 .block_erase = spi_block_erase_d8,
7325 }, {
7326 .eraseblocks = { {4 * 1024 * 1024, 1} },
7327 .block_erase = spi_block_erase_60,
7328 }, {
7329 .eraseblocks = { {4 * 1024 * 1024, 1} },
7330 .block_erase = spi_block_erase_c7,
7331 }
7332 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007333 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007334 .write = spi_chip_write_256,
7335 .read = spi_chip_read,
7336 },
7337
7338 {
7339 .vendor = "Winbond",
7340 .name = "W25x64",
7341 .bustype = CHIP_BUSTYPE_SPI,
7342 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007343 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00007344 .total_size = 8192,
7345 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007346 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007347 .tested = TEST_UNTESTED,
7348 .probe = probe_spi_rdid,
7349 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007350 .block_erasers =
7351 {
7352 {
7353 .eraseblocks = { {4 * 1024, 2048} },
7354 .block_erase = spi_block_erase_20,
7355 }, {
7356 .eraseblocks = { {32 * 1024, 256} },
7357 .block_erase = spi_block_erase_52,
7358 }, {
7359 .eraseblocks = { {64 * 1024, 128} },
7360 .block_erase = spi_block_erase_d8,
7361 }, {
7362 .eraseblocks = { {8 * 1024 * 1024, 1} },
7363 .block_erase = spi_block_erase_60,
7364 }, {
7365 .eraseblocks = { {8 * 1024 * 1024, 1} },
7366 .block_erase = spi_block_erase_c7,
7367 }
7368 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007369 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007370 .write = spi_chip_write_256,
7371 .read = spi_chip_read,
7372 },
7373
7374 {
7375 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007376 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007377 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007378 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007379 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007380 .total_size = 128,
7381 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007382 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00007383 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007384 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007385 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007386 .block_erasers =
7387 {
7388 {
7389 .eraseblocks = { {128 * 1024, 1} },
7390 .block_erase = erase_chip_block_jedec,
7391 }
7392 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007393 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007394 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007395 },
7396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007397 {
7398 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007399 .name = "W29C020(C)/W29C022",
Urja Rannikko161b8852009-06-05 08:47:37 +00007400 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007401 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007402 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007403 .total_size = 256,
7404 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007405 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007406 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007407 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007408 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007409 .block_erasers =
7410 {
7411 {
7412 .eraseblocks = { {256 * 1024, 1} },
7413 .block_erase = erase_chip_block_jedec,
7414 }
7415 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007416 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007417 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007418 },
7419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007420 {
7421 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007422 .name = "W29C040/P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007423 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007424 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007425 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007426 .total_size = 512,
7427 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007428 .feature_bits = FEATURE_LONG_RESET,
7429 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007430 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007431 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007432 .block_erasers =
7433 {
7434 {
7435 .eraseblocks = { {512 * 1024, 1} },
7436 .block_erase = erase_chip_block_jedec,
7437 }
7438 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007439 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007440 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007441 },
7442
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007443 {
7444 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007445 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007446 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007447 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007448 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007449 .total_size = 128,
7450 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007451 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann1e94fa62010-08-08 15:52:07 +00007452 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007453 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007454 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007455 .block_erasers =
7456 {
7457 {
7458 .eraseblocks = { {128 * 1024, 1} },
7459 .block_erase = erase_chip_block_jedec,
7460 }
7461 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007462 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007463 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007464 },
7465
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007466 {
7467 .vendor = "Winbond",
7468 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007469 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007470 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007471 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007472 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007473 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007474 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00007475 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007476 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007477 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007478 .block_erasers =
7479 {
7480 {
7481 .eraseblocks = { {64 * 1024, 8} },
7482 .block_erase = erase_sector_jedec,
7483 }, {
7484 .eraseblocks = { {512 * 1024, 1} },
7485 .block_erase = erase_chip_block_jedec,
7486 }
7487 },
Sean Nelson35727f72010-01-28 23:55:12 +00007488 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007489 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007490 },
7491
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007492 {
7493 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007494 .name = "W39V040(F)B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007495 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007496 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007497 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007498 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007499 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007500 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00007501 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007502 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007503 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007504 .block_erasers =
7505 {
7506 {
7507 .eraseblocks = { {64 * 1024, 8} },
7508 .block_erase = erase_sector_jedec,
7509 }, {
7510 .eraseblocks = { {512 * 1024, 1} },
7511 .block_erase = erase_chip_block_jedec,
7512 }
7513 },
Sean Nelson35727f72010-01-28 23:55:12 +00007514 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007515 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007516 },
7517
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007518 {
7519 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007520 .name = "W39V040(F)C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007521 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007522 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007523 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007524 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007525 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007526 .feature_bits = FEATURE_EITHER_RESET,
7527 .tested = TEST_UNTESTED,
7528 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007529 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007530 .block_erasers =
7531 {
7532 {
7533 .eraseblocks = { {64 * 1024, 8} },
7534 .block_erase = erase_sector_jedec,
7535 }, {
7536 .eraseblocks = { {512 * 1024, 1} },
7537 .block_erase = erase_chip_block_jedec,
7538 }
7539 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007540 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007541 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007542 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007543 },
7544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007545 {
7546 .vendor = "Winbond",
7547 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007548 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007549 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007550 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007551 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007552 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007553 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00007554 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007555 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007556 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007557 .block_erasers =
7558 {
7559 {
7560 .eraseblocks = { {4 * 1024, 128} },
7561 .block_erase = erase_block_jedec,
7562 }, {
7563 .eraseblocks = { {64 * 1024, 8} },
7564 .block_erase = erase_sector_jedec,
7565 }, {
7566 .eraseblocks = { {512 * 1024, 1} },
7567 .block_erase = erase_chip_block_jedec,
7568 }
7569 },
Michael Karcherc9b63412010-05-30 16:55:18 +00007570 .printlock = printlock_sst_fwhub,
7571 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007572 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007573 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007574 },
7575
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007576 {
7577 .vendor = "Winbond",
7578 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007579 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007580 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007581 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007582 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007583 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007584 .feature_bits = FEATURE_EITHER_RESET,
7585 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007586 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007587 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007588 .block_erasers =
7589 {
7590 {
7591 .eraseblocks = { {64 * 1024, 16} },
7592 .block_erase = erase_sector_jedec,
7593 }, {
7594 .eraseblocks = { {1024 * 1024, 1} },
7595 .block_erase = erase_chip_block_jedec,
7596 }
7597 },
Sean Nelson35727f72010-01-28 23:55:12 +00007598 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007599 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007600 },
7601
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007602 {
7603 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007604 .name = "W49F002U/N",
Urja Rannikko038a3122009-06-28 19:19:25 +00007605 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007606 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007607 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007608 .total_size = 256,
7609 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007610 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann51afebb2010-08-01 00:13:49 +00007611 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007612 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007613 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007614 .block_erasers =
7615 {
7616 {
7617 .eraseblocks = {
7618 {128 * 1024, 1},
7619 {96 * 1024, 1},
7620 {8 * 1024, 2},
7621 {16 * 1024, 1},
7622 },
7623 .block_erase = erase_sector_jedec,
7624 }, {
7625 .eraseblocks = { {256 * 1024, 1} },
7626 .block_erase = erase_chip_block_jedec,
7627 }
7628 },
Sean Nelson35727f72010-01-28 23:55:12 +00007629 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007630 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007631 },
7632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007633 {
7634 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007635 .name = "W49F020",
7636 .bustype = CHIP_BUSTYPE_PARALLEL,
7637 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007638 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007639 .total_size = 256,
7640 .page_size = 128,
7641 .feature_bits = FEATURE_EITHER_RESET,
7642 .tested = TEST_OK_PROBE,
7643 .probe = probe_jedec,
7644 .probe_timing = 10,
7645 .block_erasers =
7646 {
7647 {
7648 .eraseblocks = { {256 * 1024, 1} },
7649 .block_erase = erase_chip_block_jedec,
7650 }
7651 },
7652 .write = write_jedec_1,
7653 .read = read_memmapped,
7654 },
7655
7656 {
7657 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007658 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007659 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007660 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007661 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007662 .total_size = 256,
7663 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007664 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannc2521ab2010-07-29 22:39:47 +00007665 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007666 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007667 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007668 .block_erasers =
7669 {
7670 {
7671 .eraseblocks = {
7672 {64 * 1024, 3},
7673 {32 * 1024, 1},
7674 {8 * 1024, 2},
7675 {16 * 1024, 1},
7676 },
7677 .block_erase = erase_sector_jedec,
7678 }, {
7679 .eraseblocks = { {256 * 1024, 1} },
7680 .block_erase = erase_chip_block_jedec,
7681 }
7682 },
Sean Nelson35727f72010-01-28 23:55:12 +00007683 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007684 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007685 },
7686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007687 {
7688 .vendor = "Winbond",
7689 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007690 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007691 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007692 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007693 .total_size = 256,
7694 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007695 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00007696 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007697 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007698 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007699 .block_erasers =
7700 {
7701 {
7702 .eraseblocks = {
7703 {64 * 1024, 3},
7704 {32 * 1024, 1},
7705 {8 * 1024, 2},
7706 {16 * 1024, 1},
7707 },
7708 .block_erase = erase_sector_jedec,
7709 }, {
7710 .eraseblocks = { {256 * 1024, 1} },
7711 .block_erase = erase_chip_block_jedec,
7712 }
7713 },
Sean Nelson35727f72010-01-28 23:55:12 +00007714 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007715 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007716 },
7717
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007718 {
7719 .vendor = "Winbond",
7720 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007721 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007722 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007723 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007724 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007725 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007726 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00007727 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007728 .probe = probe_jedec,
7729 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007730 .block_erasers =
7731 {
7732 {
7733 .eraseblocks = { {64 * 1024, 16}, },
7734 .block_erase = erase_sector_jedec,
7735 }, {
7736 .eraseblocks = { {1024 * 1024, 1} },
7737 .block_erase = erase_chip_block_jedec,
7738 }
7739 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007740 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007741 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007742 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007743 },
7744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007745 {
7746 .vendor = "Winbond",
7747 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007748 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007749 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007750 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007751 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007752 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007753 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007754 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007755 .probe = probe_jedec,
7756 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007757 .block_erasers =
7758 {
7759 {
7760 .eraseblocks = { {64 * 1024, 8}, },
7761 .block_erase = erase_sector_jedec,
7762 }, {
7763 .eraseblocks = { {512 * 1024, 1} },
7764 .block_erase = erase_chip_block_jedec,
7765 }
7766 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007767 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007768 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007769 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007770 },
7771
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007772 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007773 .vendor = "AMIC",
7774 .name = "unknown AMIC SPI chip",
7775 .bustype = CHIP_BUSTYPE_SPI,
7776 .manufacture_id = AMIC_ID,
7777 .model_id = GENERIC_DEVICE_ID,
7778 .total_size = 0,
7779 .page_size = 256,
7780 .tested = TEST_BAD_PREW,
7781 .probe = probe_spi_rdid4,
7782 .probe_timing = TIMING_ZERO,
7783 .write = NULL,
7784 .read = NULL,
7785 },
7786
7787 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007788 .vendor = "Atmel",
7789 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007790 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007791 .manufacture_id = ATMEL_ID,
7792 .model_id = GENERIC_DEVICE_ID,
7793 .total_size = 0,
7794 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007795 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007796 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007797 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007798 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007799 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007800 },
7801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007802 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007803 .vendor = "Eon",
7804 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007805 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007806 .manufacture_id = EON_ID_NOPREFIX,
7807 .model_id = GENERIC_DEVICE_ID,
7808 .total_size = 0,
7809 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007810 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007811 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007812 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007813 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007814 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007815 },
7816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007817 {
7818 .vendor = "Macronix",
7819 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007820 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007821 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007822 .model_id = GENERIC_DEVICE_ID,
7823 .total_size = 0,
7824 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007825 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007826 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007827 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007828 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007829 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007830 },
7831
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007832 {
7833 .vendor = "PMC",
7834 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007835 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007836 .manufacture_id = PMC_ID,
7837 .model_id = GENERIC_DEVICE_ID,
7838 .total_size = 0,
7839 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007840 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007841 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007842 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007843 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007844 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007845 },
7846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007847 {
7848 .vendor = "SST",
7849 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007850 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007851 .manufacture_id = SST_ID,
7852 .model_id = GENERIC_DEVICE_ID,
7853 .total_size = 0,
7854 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007855 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007857 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007858 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007859 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007860 },
7861
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007862 {
7863 .vendor = "ST",
7864 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007865 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007866 .manufacture_id = ST_ID,
7867 .model_id = GENERIC_DEVICE_ID,
7868 .total_size = 0,
7869 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007870 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007871 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007872 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007873 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007874 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007875 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007876
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007877 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007878 .vendor = "Sanyo",
7879 .name = "unknown Sanyo SPI chip",
7880 .bustype = CHIP_BUSTYPE_SPI,
7881 .manufacture_id = SANYO_ID,
7882 .model_id = GENERIC_DEVICE_ID,
7883 .total_size = 0,
7884 .page_size = 256,
7885 .tested = TEST_BAD_PREW,
7886 .probe = probe_spi_rdid,
7887 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007888 .write = NULL,
7889 .read = NULL,
7890 },
7891
7892 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007893 .vendor = "Generic",
7894 .name = "unknown SPI chip (RDID)",
7895 .bustype = CHIP_BUSTYPE_SPI,
7896 .manufacture_id = GENERIC_MANUF_ID,
7897 .model_id = GENERIC_DEVICE_ID,
7898 .total_size = 0,
7899 .page_size = 256,
7900 .tested = TEST_BAD_PREW,
7901 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007902 .write = NULL,
7903 },
7904 {
7905 .vendor = "Generic",
7906 .name = "unknown SPI chip (REMS)",
7907 .bustype = CHIP_BUSTYPE_SPI,
7908 .manufacture_id = GENERIC_MANUF_ID,
7909 .model_id = GENERIC_DEVICE_ID,
7910 .total_size = 0,
7911 .page_size = 256,
7912 .tested = TEST_BAD_PREW,
7913 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007914 .write = NULL,
7915 },
7916
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007917 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007918};