blob: 715c0547028561c5efa75da6ef699ca07c0be778 [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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +000068 .tested = TEST_OK_PRE,
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 Hailfingerf52f7842010-10-08 18:52:29 +0000234 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000480 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000481 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000512 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000513 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000544 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000545 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000611 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000612 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000930 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000931 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000987 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000988 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001199 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001661 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001888 .tested = TEST_OK_PRE,
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001889 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001942 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002747 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002846 .tested = TEST_OK_PRE,
Russ Dill3cd5a122010-03-05 08:44:11 +00002847 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002873 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002904 .tested = TEST_OK_PR,
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 Hailfinger79e67572010-10-13 21:49:30 +00002998 .tested = TEST_UNTESTED,
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 Hailfinger79e67572010-10-13 21:49:30 +00003016 .write = write_m29f400bt,
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 */
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003060 .tested = TEST_OK_PRE,
David Borgc96a8bd2010-06-21 16:12:22 +00003061 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003141 .name = "28F001BN/BX-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,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003144 .model_id = INTEL_28F001B,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003145 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003167 .name = "28F001BN/BX-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,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003170 .model_id = INTEL_28F001T,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00003171 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003193 .name = "28F002BC/BL/BV/BX-T",
Joshua Roysd97c0e02010-07-22 15:20:43 +00003194 .bustype = CHIP_BUSTYPE_PARALLEL,
3195 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003196 .model_id = INTEL_28F002T,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003197 .total_size = 256,
3198 .page_size = 256 * 1024,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003199 .tested = TEST_OK_PRE,
Joshua Roysd97c0e02010-07-22 15:20:43 +00003200 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003220 .name = "28F008S3/S5/SC",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003221 .bustype = CHIP_BUSTYPE_PARALLEL,
3222 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003223 .model_id = INTEL_28F004S3,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00003224 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003243 .name = "28F004B5/BE/BV/BX-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003244 .bustype = CHIP_BUSTYPE_PARALLEL,
3245 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003246 .model_id = INTEL_28F004B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003247 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003270 .name = "28F004B5/BE/BV/BX-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003271 .bustype = CHIP_BUSTYPE_PARALLEL,
3272 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003273 .model_id = INTEL_28F004T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003274 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003297 .name = "28F400BV/BX/CE/CV-B",
Michael Karcherad0010a2010-04-03 10:27:08 +00003298 .bustype = CHIP_BUSTYPE_PARALLEL,
3299 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003300 .model_id = INTEL_28F400B,
Michael Karcherad0010a2010-04-03 10:27:08 +00003301 .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",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003325 .name = "28F400BV/BX/CE/CV-T",
Michael Karcherad0010a2010-04-03 10:27:08 +00003326 .bustype = CHIP_BUSTYPE_PARALLEL,
3327 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003328 .model_id = INTEL_28F400T,
Michael Karcherad0010a2010-04-03 10:27:08 +00003329 .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,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003356 .model_id = INTEL_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,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00003380 .model_id = INTEL_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 Hailfingerf52f7842010-10-08 18:52:29 +00003513 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003549 .tested = TEST_OK_PRE,
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 Hailfingerf52f7842010-10-08 18:52:29 +00003585 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003687 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003914 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004265 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004266 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004510 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004572 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004659 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004689 .tested = TEST_OK_PRE,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004776 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00004777 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004802 .tested = TEST_OK_PR,
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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004828 .tested = TEST_OK_PRE,
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 Hailfingerf52f7842010-10-08 18:52:29 +00004863 .tested = TEST_OK_PRE,
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,
Helge Wagner1db7a442010-10-05 22:29:08 +00004886 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004887 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004898 .tested = TEST_OK_PRE,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004899 .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,
Helge Wagner1db7a442010-10-05 22:29:08 +00004921 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004922 .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,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005061 .tested = TEST_OK_PRE,
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 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005110 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005111 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005112 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005113 },
5114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005115 {
5116 .vendor = "SST",
5117 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005118 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005120 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005121 .total_size = 128,
5122 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005123 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005124 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005125 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005126 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005127 .block_erasers =
5128 {
5129 {
5130 .eraseblocks = { {128 * 1024, 1} },
5131 .block_erase = erase_chip_block_jedec,
5132 }
5133 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005134 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005135 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005136 },
5137
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005138 {
5139 .vendor = "SST",
5140 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005141 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005142 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005143 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005144 .total_size = 128,
5145 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005146 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005147 .tested = TEST_UNTESTED,
5148 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005149 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005150 .block_erasers =
5151 {
5152 {
5153 .eraseblocks = { {128 * 1024, 1} },
5154 .block_erase = erase_chip_block_jedec,
5155 }
5156 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005157 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005159 },
5160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005161 {
5162 .vendor = "SST",
5163 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005164 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005165 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005166 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005167 .total_size = 256,
5168 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005169 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005170 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005171 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005172 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005173 .block_erasers =
5174 {
5175 {
5176 .eraseblocks = { {256 * 1024, 1} },
5177 .block_erase = erase_chip_block_jedec,
5178 }
5179 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005180 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005181 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005182 },
5183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 {
5185 .vendor = "SST",
5186 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005187 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005189 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005190 .total_size = 256,
5191 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005192 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005193 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005194 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005195 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005196 .block_erasers =
5197 {
5198 {
5199 .eraseblocks = { {256 * 1024, 1} },
5200 .block_erase = erase_chip_block_jedec,
5201 }
5202 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005203 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005204 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005205 },
5206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005207 {
5208 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005209 .name = "SST39SF512",
5210 .bustype = CHIP_BUSTYPE_PARALLEL,
5211 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005212 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005213 .total_size = 64,
5214 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005215 .feature_bits = FEATURE_EITHER_RESET,
5216 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005217 .probe = probe_jedec,
5218 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005219 .block_erasers =
5220 {
5221 {
5222 .eraseblocks = { {4 * 1024, 16} },
5223 .block_erase = erase_sector_jedec,
5224 }, {
5225 .eraseblocks = { {64 * 1024, 1} },
5226 .block_erase = erase_chip_block_jedec,
5227 }
5228 },
Sean Nelson35727f72010-01-28 23:55:12 +00005229 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005230 .read = read_memmapped,
5231 },
5232
5233 {
5234 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005235 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005236 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005238 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005239 .total_size = 128,
5240 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005241 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005242 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005243 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005244 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005245 .block_erasers =
5246 {
5247 {
5248 .eraseblocks = { {4 * 1024, 32} },
5249 .block_erase = erase_sector_jedec,
5250 }, {
5251 .eraseblocks = { {128 * 1024, 1} },
5252 .block_erase = erase_chip_block_jedec,
5253 }
5254 },
Sean Nelson35727f72010-01-28 23:55:12 +00005255 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005256 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005257 },
5258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 {
5260 .vendor = "SST",
5261 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005262 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005264 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005265 .total_size = 256,
5266 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005267 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005268 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005269 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005270 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005271 .block_erasers =
5272 {
5273 {
5274 .eraseblocks = { {4 * 1024, 64} },
5275 .block_erase = erase_sector_jedec,
5276 }, {
5277 .eraseblocks = { {256 * 1024, 1} },
5278 .block_erase = erase_chip_block_jedec,
5279 }
5280 },
Sean Nelson35727f72010-01-28 23:55:12 +00005281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005282 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005283 },
5284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005285 {
5286 .vendor = "SST",
5287 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005288 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005290 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 .total_size = 512,
5292 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005293 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005294 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005295 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005296 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005297 .block_erasers =
5298 {
5299 {
5300 .eraseblocks = { {4 * 1024, 128} },
5301 .block_erase = erase_sector_jedec,
5302 }, {
5303 .eraseblocks = { {512 * 1024, 1} },
5304 .block_erase = erase_chip_block_jedec,
5305 }
5306 },
Sean Nelson35727f72010-01-28 23:55:12 +00005307 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005309 },
5310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005311 {
5312 .vendor = "SST",
5313 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005314 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005315 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005316 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005317 .total_size = 64,
5318 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005319 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005320 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005321 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005322 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005323 .block_erasers =
5324 {
5325 {
5326 .eraseblocks = { {4 * 1024, 16} },
5327 .block_erase = erase_sector_jedec,
5328 }, {
5329 .eraseblocks = { {64 * 1024, 1} },
5330 .block_erase = erase_chip_block_jedec,
5331 }
5332 },
Sean Nelson35727f72010-01-28 23:55:12 +00005333 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005334 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005335 },
5336
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005337 {
5338 .vendor = "SST",
5339 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005340 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005341 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005342 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005343 .total_size = 128,
5344 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005345 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005346 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005347 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005348 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005349 .block_erasers =
5350 {
5351 {
5352 .eraseblocks = { {4 * 1024, 32} },
5353 .block_erase = erase_sector_jedec,
5354 }, {
5355 .eraseblocks = { {128 * 1024, 1} },
5356 .block_erase = erase_chip_block_jedec,
5357 }
5358 },
Sean Nelson35727f72010-01-28 23:55:12 +00005359 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005360 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005361 },
5362
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005363 {
5364 .vendor = "SST",
5365 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005366 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005367 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005368 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005369 .total_size = 256,
5370 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005371 .feature_bits = FEATURE_EITHER_RESET,
5372 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005373 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005374 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005375 .block_erasers =
5376 {
5377 {
5378 .eraseblocks = { {4 * 1024, 64} },
5379 .block_erase = erase_sector_jedec,
5380 }, {
5381 .eraseblocks = { {256 * 1024, 1} },
5382 .block_erase = erase_chip_block_jedec,
5383 }
5384 },
Sean Nelson35727f72010-01-28 23:55:12 +00005385 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005386 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005387 },
5388
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005389 {
5390 .vendor = "SST",
5391 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005392 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005393 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005394 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005395 .total_size = 512,
5396 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005397 .feature_bits = FEATURE_EITHER_RESET,
5398 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005399 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005400 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005401 .block_erasers =
5402 {
5403 {
5404 .eraseblocks = { {4 * 1024, 128} },
5405 .block_erase = erase_sector_jedec,
5406 }, {
5407 .eraseblocks = { {512 * 1024, 1} },
5408 .block_erase = erase_chip_block_jedec,
5409 }
5410 },
Sean Nelson35727f72010-01-28 23:55:12 +00005411 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005412 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005413 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005414
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005415 {
5416 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005417 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005418 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005419 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005420 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005421 .total_size = 1024,
5422 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005423 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005424 .tested = TEST_UNTESTED,
5425 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005426 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005427 .block_erasers =
5428 {
5429 {
5430 .eraseblocks = { {4 * 1024, 256} },
5431 .block_erase = erase_sector_jedec,
5432 }, {
5433 .eraseblocks = { {64 * 1024, 16} },
5434 .block_erase = erase_block_jedec,
5435 }, {
5436 .eraseblocks = { {1024 * 1024, 1} },
5437 .block_erase = erase_chip_block_jedec,
5438 }
5439 },
Sean Nelson35727f72010-01-28 23:55:12 +00005440 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005441 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005442 },
5443
5444 {
5445 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005446 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005447 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005448 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005449 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 .total_size = 256,
5451 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005452 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005453 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005454 .probe = probe_jedec,
5455 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005456 .block_erasers =
5457 {
5458 {
5459 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005460 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005461 }, {
5462 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005463 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005464 }, {
5465 .eraseblocks = { {256 * 1024, 1} },
5466 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5467 }
5468 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005469 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005470 .unlock = unlock_sst_fwhub,
5471 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005472 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005473 },
5474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005475 {
5476 .vendor = "SST",
5477 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005478 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005479 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005480 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005481 .total_size = 384,
5482 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005483 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005484 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005485 .probe = probe_jedec,
5486 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005487 .block_erasers =
5488 {
5489 {
5490 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005491 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005492 }, {
5493 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005494 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005495 }, {
5496 .eraseblocks = { {384 * 1024, 1} },
5497 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5498 }
5499 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005500 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005501 .unlock = unlock_sst_fwhub,
5502 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005503 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005504 },
5505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005506 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005507 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5508 * and is only honored for 64k block erase, but not 4k sector erase.
5509 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005510 .vendor = "SST",
5511 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005512 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005513 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005514 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 .total_size = 512,
5516 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005517 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005518 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005519 .probe = probe_jedec,
5520 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005521 .block_erasers =
5522 {
5523 {
5524 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005525 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005526 }, {
5527 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005528 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005529 }, {
5530 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005531 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005532 },
5533 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005534 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005535 .unlock = unlock_sst_fwhub,
5536 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005537 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005538 },
5539
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005540 {
5541 .vendor = "SST",
5542 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005543 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005544 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005545 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005546 .total_size = 512,
5547 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005548 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005549 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005550 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005551 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005552 .block_erasers =
5553 {
5554 {
5555 .eraseblocks = { {4 * 1024, 128} },
5556 .block_erase = erase_sector_49lfxxxc,
5557 }, {
5558 .eraseblocks = {
5559 {64 * 1024, 7},
5560 {32 * 1024, 1},
5561 {8 * 1024, 2},
5562 {16 * 1024, 1},
5563 },
Sean Nelson69e58112010-03-23 17:10:28 +00005564 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005565 }
5566 },
Sean Nelson69e58112010-03-23 17:10:28 +00005567 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005568 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005569 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005570 },
5571
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005572 {
5573 .vendor = "SST",
5574 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005575 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005576 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005577 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005578 .total_size = 1024,
5579 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005580 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005581 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005582 .probe = probe_jedec,
5583 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005584 .block_erasers =
5585 {
5586 {
5587 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005588 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005589 }, {
5590 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005591 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005592 }, {
5593 .eraseblocks = { {1024 * 1024, 1} },
5594 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5595 }
5596 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005597 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005598 .unlock = unlock_sst_fwhub,
5599 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005601 },
5602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005603 {
5604 .vendor = "SST",
5605 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005606 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005607 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005608 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005609 .total_size = 1024,
5610 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005611 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005613 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005614 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005615 .block_erasers =
5616 {
5617 {
5618 .eraseblocks = { {4 * 1024, 256} },
5619 .block_erase = erase_sector_49lfxxxc,
5620 }, {
5621 .eraseblocks = {
5622 {64 * 1024, 15},
5623 {32 * 1024, 1},
5624 {8 * 1024, 2},
5625 {16 * 1024, 1},
5626 },
Sean Nelson69e58112010-03-23 17:10:28 +00005627 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005628 }
5629 },
Sean Nelson69e58112010-03-23 17:10:28 +00005630 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005631 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005632 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005633 },
5634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005635 {
5636 .vendor = "SST",
5637 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005638 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005639 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005640 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005641 .total_size = 2048,
5642 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005643 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005644 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005645 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005646 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005647 .block_erasers =
5648 {
5649 {
5650 .eraseblocks = { {4 * 1024, 512} },
5651 .block_erase = erase_sector_49lfxxxc,
5652 }, {
5653 .eraseblocks = {
5654 {64 * 1024, 31},
5655 {32 * 1024, 1},
5656 {8 * 1024, 2},
5657 {16 * 1024, 1},
5658 },
Sean Nelson69e58112010-03-23 17:10:28 +00005659 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005660 }
5661 },
Sean Nelson69e58112010-03-23 17:10:28 +00005662 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005663 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005664 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005665 },
5666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005667 {
5668 .vendor = "SST",
5669 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005670 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005671 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005672 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005673 .total_size = 256,
5674 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005675 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005676 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005677 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005678 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005679 .block_erasers =
5680 {
5681 {
5682 .eraseblocks = { {4 * 1024, 64} },
5683 .block_erase = erase_sector_jedec,
5684 }, {
5685 .eraseblocks = { {16 * 1024, 16} },
5686 .block_erase = erase_block_jedec,
5687 }, {
5688 .eraseblocks = { {256 * 1024, 1} },
5689 .block_erase = NULL,
5690 }
5691 },
Sean Nelson35727f72010-01-28 23:55:12 +00005692 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005693 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005694 },
5695
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005696 {
5697 .vendor = "SST",
5698 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005699 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005700 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005701 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005702 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005703 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005704 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005705 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005706 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005707 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005708 .block_erasers =
5709 {
5710 {
5711 .eraseblocks = { {4 * 1024, 64} },
5712 .block_erase = erase_sector_jedec,
5713 }, {
5714 .eraseblocks = { {16 * 1024, 16} },
5715 .block_erase = erase_block_jedec,
5716 }, {
5717 .eraseblocks = { {256 * 1024, 1} },
5718 .block_erase = NULL,
5719 }
5720 },
Sean Nelson35727f72010-01-28 23:55:12 +00005721 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005722 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005723 },
5724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005725 {
5726 .vendor = "SST",
5727 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005728 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005729 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005730 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005731 .total_size = 512,
5732 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005733 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005734 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005735 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005736 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005737 .block_erasers =
5738 {
5739 {
5740 .eraseblocks = { {4 * 1024, 128} },
5741 .block_erase = erase_sector_jedec,
5742 }, {
5743 .eraseblocks = { {64 * 1024, 8} },
5744 .block_erase = erase_block_jedec,
5745 }, {
5746 .eraseblocks = { {512 * 1024, 1} },
5747 .block_erase = NULL,
5748 }
5749 },
Sean Nelson35727f72010-01-28 23:55:12 +00005750 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005751 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005752 },
5753
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005754 {
5755 .vendor = "SST",
5756 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005757 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005758 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005759 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005760 .total_size = 512,
5761 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005762 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005763 .tested = TEST_OK_PRE,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005764 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005765 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005766 .block_erasers =
5767 {
5768 {
5769 .eraseblocks = { {4 * 1024, 128} },
5770 .block_erase = erase_sector_jedec,
5771 }, {
5772 .eraseblocks = { {64 * 1024, 8} },
5773 .block_erase = erase_block_jedec,
5774 }, {
5775 .eraseblocks = { {512 * 1024, 1} },
5776 .block_erase = NULL,
5777 }
5778 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005779 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00005780 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005782 },
5783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 {
5785 .vendor = "SST",
5786 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005787 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005788 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005789 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005790 .total_size = 1024,
5791 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005792 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005793 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005794 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005795 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005796 .block_erasers =
5797 {
5798 {
5799 .eraseblocks = { {4 * 1024, 256} },
5800 .block_erase = erase_sector_jedec,
5801 }, {
5802 .eraseblocks = { {64 * 1024, 16} },
5803 .block_erase = erase_block_jedec,
5804 }, {
5805 .eraseblocks = { {1024 * 1024, 1} },
5806 .block_erase = NULL,
5807 }
5808 },
Sean Nelson35727f72010-01-28 23:55:12 +00005809 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005810 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005811 },
5812
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005813 {
5814 .vendor = "SST",
5815 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005816 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005817 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005818 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005819 .total_size = 2048,
5820 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005821 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005822 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005823 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005824 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005825 .block_erasers =
5826 {
5827 {
5828 .eraseblocks = { {4 * 1024, 512} },
5829 .block_erase = erase_sector_49lfxxxc,
5830 }, {
5831 .eraseblocks = {
5832 {64 * 1024, 31},
5833 {32 * 1024, 1},
5834 {8 * 1024, 2},
5835 {16 * 1024, 1},
5836 },
Sean Nelson69e58112010-03-23 17:10:28 +00005837 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005838 }
5839 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005840 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005841 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005842 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005843 },
5844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005845 {
5846 .vendor = "ST",
5847 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005848 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005849 .manufacture_id = ST_ID,
5850 .model_id = ST_M25P05A,
5851 .total_size = 64,
5852 .page_size = 256,
5853 .tested = TEST_UNTESTED,
5854 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005855 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005856 .block_erasers =
5857 {
5858 {
5859 .eraseblocks = { {32 * 1024, 2} },
5860 .block_erase = spi_block_erase_d8,
5861 }, {
5862 .eraseblocks = { {64 * 1024, 1} },
5863 .block_erase = spi_block_erase_c7,
5864 }
5865 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005866 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005867 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005868 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005869 },
5870
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005871 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5872 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005873 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005874 * only is successful if RDID does not work.
5875 */
5876 {
5877 .vendor = "ST",
5878 .name = "M25P05.RES",
5879 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005880 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005881 .model_id = ST_M25P05_RES,
5882 .total_size = 64,
5883 .page_size = 256,
5884 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005885 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005886 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005887 .block_erasers =
5888 {
5889 {
5890 .eraseblocks = { {32 * 1024, 2} },
5891 .block_erase = spi_block_erase_d8,
5892 }, {
5893 .eraseblocks = { {64 * 1024, 1} },
5894 .block_erase = spi_block_erase_c7,
5895 }
5896 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005897 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005898 .write = spi_chip_write_1, /* 128 */
5899 .read = spi_chip_read,
5900 },
5901
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005902 {
5903 .vendor = "ST",
5904 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005905 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 .manufacture_id = ST_ID,
5907 .model_id = ST_M25P10A,
5908 .total_size = 128,
5909 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005910 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005911 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005912 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005913 .block_erasers =
5914 {
5915 {
5916 .eraseblocks = { {32 * 1024, 4} },
5917 .block_erase = spi_block_erase_d8,
5918 }, {
5919 .eraseblocks = { {128 * 1024, 1} },
5920 .block_erase = spi_block_erase_c7,
5921 }
5922 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005923 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005924 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005925 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005926 },
5927
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005928 /* The ST M25P10 has the same problem as the M25P05. */
5929 {
5930 .vendor = "ST",
5931 .name = "M25P10.RES",
5932 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005933 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005934 .model_id = ST_M25P10_RES,
5935 .total_size = 128,
5936 .page_size = 256,
5937 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005938 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005939 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005940 .block_erasers =
5941 {
5942 {
5943 .eraseblocks = { {32 * 1024, 4} },
5944 .block_erase = spi_block_erase_d8,
5945 }, {
5946 .eraseblocks = { {128 * 1024, 1} },
5947 .block_erase = spi_block_erase_c7,
5948 }
5949 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005950 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005951 .write = spi_chip_write_1, /* 128 */
5952 .read = spi_chip_read,
5953 },
5954
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005955 {
5956 .vendor = "ST",
5957 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005958 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005959 .manufacture_id = ST_ID,
5960 .model_id = ST_M25P20,
5961 .total_size = 256,
5962 .page_size = 256,
5963 .tested = TEST_UNTESTED,
5964 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005965 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005966 .block_erasers =
5967 {
5968 {
5969 .eraseblocks = { {64 * 1024, 4} },
5970 .block_erase = spi_block_erase_d8,
5971 }, {
5972 .eraseblocks = { {256 * 1024, 1} },
5973 .block_erase = spi_block_erase_c7,
5974 }
5975 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005976 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005977 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005978 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005979 },
5980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005981 {
5982 .vendor = "ST",
5983 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005984 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005985 .manufacture_id = ST_ID,
5986 .model_id = ST_M25P40,
5987 .total_size = 512,
5988 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005989 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005991 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005992 .block_erasers =
5993 {
5994 {
5995 .eraseblocks = { {64 * 1024, 8} },
5996 .block_erase = spi_block_erase_d8,
5997 }, {
5998 .eraseblocks = { {512 * 1024, 1} },
5999 .block_erase = spi_block_erase_c7,
6000 }
6001 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006002 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006003 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006004 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006005 },
6006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006007 {
6008 .vendor = "ST",
6009 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006010 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006011 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 .model_id = ST_M25P40_RES,
6013 .total_size = 512,
6014 .page_size = 256,
6015 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006016 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006017 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006018 .block_erasers =
6019 {
6020 {
6021 .eraseblocks = { {64 * 1024, 8} },
6022 .block_erase = spi_block_erase_d8,
6023 }, {
6024 .eraseblocks = { {512 * 1024, 1} },
6025 .block_erase = spi_block_erase_c7,
6026 }
6027 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006028 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006029 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006030 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006031 },
6032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 {
6034 .vendor = "ST",
6035 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006036 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006037 .manufacture_id = ST_ID,
6038 .model_id = ST_M25P80,
6039 .total_size = 1024,
6040 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006041 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006042 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006043 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006044 .block_erasers =
6045 {
6046 {
6047 .eraseblocks = { {64 * 1024, 16} },
6048 .block_erase = spi_block_erase_d8,
6049 }, {
6050 .eraseblocks = { {1024 * 1024, 1} },
6051 .block_erase = spi_block_erase_c7,
6052 }
6053 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006054 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006055 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006056 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006057 },
6058
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006059 {
6060 .vendor = "ST",
6061 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006062 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 .manufacture_id = ST_ID,
6064 .model_id = ST_M25P16,
6065 .total_size = 2048,
6066 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006067 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006068 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006069 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006070 .block_erasers =
6071 {
6072 {
6073 .eraseblocks = { {64 * 1024, 32} },
6074 .block_erase = spi_block_erase_d8,
6075 }, {
6076 .eraseblocks = { {2 * 1024 * 1024, 1} },
6077 .block_erase = spi_block_erase_c7,
6078 }
6079 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006080 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006081 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006082 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006083 },
6084
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006085 {
6086 .vendor = "ST",
6087 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006088 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006089 .manufacture_id = ST_ID,
6090 .model_id = ST_M25P32,
6091 .total_size = 4096,
6092 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006093 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006094 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006095 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006096 .block_erasers =
6097 {
6098 {
6099 .eraseblocks = { {64 * 1024, 64} },
6100 .block_erase = spi_block_erase_d8,
6101 }, {
6102 .eraseblocks = { {4 * 1024 * 1024, 1} },
6103 .block_erase = spi_block_erase_c7,
6104 }
6105 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006106 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006107 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006108 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006109 },
6110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006111 {
6112 .vendor = "ST",
6113 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006114 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006115 .manufacture_id = ST_ID,
6116 .model_id = ST_M25P64,
6117 .total_size = 8192,
6118 .page_size = 256,
6119 .tested = TEST_UNTESTED,
6120 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006121 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006122 .block_erasers =
6123 {
6124 {
6125 .eraseblocks = { {64 * 1024, 128} },
6126 .block_erase = spi_block_erase_d8,
6127 }, {
6128 .eraseblocks = { {8 * 1024 * 1024, 1} },
6129 .block_erase = spi_block_erase_c7,
6130 }
6131 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006132 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006133 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006134 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006135 },
6136
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006137 {
6138 .vendor = "ST",
6139 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006141 .manufacture_id = ST_ID,
6142 .model_id = ST_M25P128,
6143 .total_size = 16384,
6144 .page_size = 256,
6145 .tested = TEST_UNTESTED,
6146 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006147 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006148 .block_erasers =
6149 {
6150 {
6151 .eraseblocks = { {256 * 1024, 64} },
6152 .block_erase = spi_block_erase_d8,
6153 }, {
6154 .eraseblocks = { {16 * 1024 * 1024, 1} },
6155 .block_erase = spi_block_erase_c7,
6156 }
6157 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006158 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006159 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006160 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006161 },
6162
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006163 {
6164 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00006165 .name = "M25PX32",
6166 .bustype = CHIP_BUSTYPE_SPI,
6167 .manufacture_id = ST_ID,
6168 .model_id = ST_M25PX32,
6169 .total_size = 4096,
6170 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006171 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006172 .probe = probe_spi_rdid,
6173 .probe_timing = TIMING_ZERO,
6174 .block_erasers =
6175 {
6176 {
6177 .eraseblocks = { { 4 * 1024, 1024 } },
6178 .block_erase = spi_block_erase_20,
6179 }, {
6180 .eraseblocks = { {64 * 1024, 64} },
6181 .block_erase = spi_block_erase_d8,
6182 }, {
6183 .eraseblocks = { {4 * 1024 * 1024, 1} },
6184 .block_erase = spi_block_erase_c7,
6185 }
6186 },
6187 .unlock = spi_disable_blockprotect,
6188 .write = spi_chip_write_256,
6189 .read = spi_chip_read,
6190 },
6191
6192 {
6193 .vendor = "ST",
6194 .name = "M25PX64",
6195 .bustype = CHIP_BUSTYPE_SPI,
6196 .manufacture_id = ST_ID,
6197 .model_id = ST_M25PX64,
6198 .total_size = 8192,
6199 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006200 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006201 .probe = probe_spi_rdid,
6202 .probe_timing = TIMING_ZERO,
6203 .block_erasers =
6204 {
6205 {
6206 .eraseblocks = { { 4 * 1024, 2048 } },
6207 .block_erase = spi_block_erase_20,
6208 }, {
6209 .eraseblocks = { {64 * 1024, 128} },
6210 .block_erase = spi_block_erase_d8,
6211 }, {
6212 .eraseblocks = { {8 * 1024 * 1024, 1} },
6213 .block_erase = spi_block_erase_c7,
6214 }
6215 },
6216 .unlock = spi_disable_blockprotect,
6217 .write = spi_chip_write_256,
6218 .read = spi_chip_read,
6219 },
6220
6221 {
6222 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006223 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006224 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006225 .manufacture_id = ST_ID,
6226 .model_id = ST_M29F002B,
6227 .total_size = 256,
6228 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006229 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006230 .tested = TEST_UNTESTED,
6231 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006232 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006233 .block_erasers =
6234 {
6235 {
6236 .eraseblocks = {
6237 {16 * 1024, 1},
6238 {8 * 1024, 2},
6239 {32 * 1024, 1},
6240 {64 * 1024, 3},
6241 },
6242 .block_erase = erase_sector_jedec,
6243 }, {
6244 .eraseblocks = { {256 * 1024, 1} },
6245 .block_erase = erase_chip_block_jedec,
6246 }
6247 },
Sean Nelson35727f72010-01-28 23:55:12 +00006248 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006249 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006250 },
6251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006252 {
6253 .vendor = "ST",
6254 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006255 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006256 .manufacture_id = ST_ID,
6257 .model_id = ST_M29F002T,
6258 .total_size = 256,
6259 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006260 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6261 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006262 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006263 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006264 .block_erasers =
6265 {
6266 {
6267 .eraseblocks = {
6268 {64 * 1024, 3},
6269 {32 * 1024, 1},
6270 {8 * 1024, 2},
6271 {16 * 1024, 1},
6272 },
6273 .block_erase = erase_sector_jedec,
6274 }, {
6275 .eraseblocks = { {256 * 1024, 1} },
6276 .block_erase = erase_chip_block_jedec,
6277 }
6278 },
Sean Nelson35727f72010-01-28 23:55:12 +00006279 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006280 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006281 },
6282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006283 {
6284 .vendor = "ST",
6285 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006286 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006287 .manufacture_id = ST_ID,
6288 .model_id = ST_M29F040B,
6289 .total_size = 512,
6290 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006291 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6292 .tested = TEST_UNTESTED,
6293 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006294 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006295 .block_erasers =
6296 {
6297 {
6298 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006299 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006300 }, {
6301 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006302 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006303 }
6304 },
Sean Nelson35727f72010-01-28 23:55:12 +00006305 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006306 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006307 },
6308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006309 {
Sean Nelson35727f72010-01-28 23:55:12 +00006310 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006311 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006312 .name = "M29F400BB",
6313 .bustype = CHIP_BUSTYPE_PARALLEL,
6314 .manufacture_id = ST_ID,
6315 .model_id = ST_M29F400BB,
6316 .total_size = 512,
6317 .page_size = 64 * 1024,
6318 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006319 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006320 .probe = probe_m29f400bt,
6321 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6322 .block_erasers =
6323 {
6324 {
6325 .eraseblocks = {
6326 {16 * 1024, 1},
6327 {8 * 1024, 2},
6328 {32 * 1024, 1},
6329 {64 * 1024, 7},
6330 },
6331 .block_erase = block_erase_m29f400bt,
6332 }, {
6333 .eraseblocks = { {512 * 1024, 1} },
6334 .block_erase = block_erase_chip_m29f400bt,
6335 }
6336 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006337 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006338 .read = read_memmapped,
6339 },
6340 {
6341 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6342 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006343 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006344 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006345 .manufacture_id = ST_ID,
6346 .model_id = ST_M29F400BT,
6347 .total_size = 512,
6348 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006349 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006350 .tested = TEST_UNTESTED,
6351 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006352 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006353 .block_erasers =
6354 {
6355 {
6356 .eraseblocks = {
6357 {64 * 1024, 7},
6358 {32 * 1024, 1},
6359 {8 * 1024, 2},
6360 {16 * 1024, 1},
6361 },
6362 .block_erase = block_erase_m29f400bt,
6363 }, {
6364 .eraseblocks = { {512 * 1024, 1} },
6365 .block_erase = block_erase_chip_m29f400bt,
6366 }
6367 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006368 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006369 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006370 },
6371
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006372 {
6373 .vendor = "ST",
6374 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006375 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006376 .manufacture_id = ST_ID,
6377 .model_id = ST_M29W010B,
6378 .total_size = 128,
6379 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006380 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006381 .tested = TEST_UNTESTED,
6382 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006383 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006384 .block_erasers =
6385 {
6386 {
6387 .eraseblocks = { {16 * 1024, 8}, },
6388 .block_erase = erase_sector_jedec,
6389 }, {
6390 .eraseblocks = { {128 * 1024, 1} },
6391 .block_erase = erase_chip_block_jedec,
6392 }
6393 },
Sean Nelson35727f72010-01-28 23:55:12 +00006394 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006395 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006396 },
6397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006398 {
6399 .vendor = "ST",
6400 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006401 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006402 .manufacture_id = ST_ID,
6403 .model_id = ST_M29W040B,
6404 .total_size = 512,
6405 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006406 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006407 .tested = TEST_UNTESTED,
6408 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006409 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006410 .block_erasers =
6411 {
6412 {
6413 .eraseblocks = { {64 * 1024, 8}, },
6414 .block_erase = erase_sector_jedec,
6415 }, {
6416 .eraseblocks = { {512 * 1024, 1} },
6417 .block_erase = erase_chip_block_jedec,
6418 }
6419 },
Sean Nelson35727f72010-01-28 23:55:12 +00006420 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006421 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006422 },
6423
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006424 {
6425 .vendor = "ST",
6426 .name = "M29W512B",
6427 .bustype = CHIP_BUSTYPE_PARALLEL,
6428 .manufacture_id = ST_ID,
6429 .model_id = ST_M29W512B,
6430 .total_size = 64,
6431 .page_size = 64 * 1024,
6432 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006433 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006434 .probe = probe_jedec,
6435 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006436 .block_erasers =
6437 {
6438 {
6439 .eraseblocks = { {64 * 1024, 1} },
6440 .block_erase = erase_chip_block_jedec,
6441 }
6442 },
6443 .write = write_jedec_1,
6444 .read = read_memmapped,
6445 },
6446
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006447 {
6448 .vendor = "ST",
6449 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006450 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006451 .manufacture_id = ST_ID,
6452 .model_id = ST_M50FLW040A,
6453 .total_size = 512,
6454 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006455 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006456 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006457 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006458 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006459 .block_erasers =
6460 {
6461 {
Sean Nelson329bde72010-01-19 16:39:19 +00006462 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006463 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006464 {64 * 1024, 5}, /* block */
6465 {4 * 1024, 16}, /* sector */
6466 {4 * 1024, 16}, /* sector */
6467 },
6468 .block_erase = NULL,
6469 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006470 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006471 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006472 }, {
6473 .eraseblocks = { {512 * 1024, 1} },
6474 .block_erase = erase_chip_stm50flw0x0x,
6475 }
6476 },
Sean Nelson28accc22010-03-19 18:47:06 +00006477 .unlock = unlock_stm50flw0x0x,
6478 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006479 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006480 },
6481
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006482 {
6483 .vendor = "ST",
6484 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006485 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006486 .manufacture_id = ST_ID,
6487 .model_id = ST_M50FLW040B,
6488 .total_size = 512,
6489 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006490 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006491 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006492 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006493 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006494 .block_erasers =
6495 {
6496 {
Sean Nelson329bde72010-01-19 16:39:19 +00006497 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006498 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006499 {4 * 1024, 16}, /* sector */
6500 {64 * 1024, 5}, /* block */
6501 {4 * 1024, 16}, /* sector */
6502 },
6503 .block_erase = NULL,
6504 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006505 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006506 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006507 }, {
6508 .eraseblocks = { {512 * 1024, 1} },
6509 .block_erase = erase_chip_stm50flw0x0x,
6510 }
6511 },
Sean Nelson28accc22010-03-19 18:47:06 +00006512 .unlock = unlock_stm50flw0x0x,
6513 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006514 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006515 },
6516
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006517 {
6518 .vendor = "ST",
6519 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006520 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006521 .manufacture_id = ST_ID,
6522 .model_id = ST_M50FLW080A,
6523 .total_size = 1024,
6524 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006525 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006526 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00006527 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006528 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006529 .block_erasers =
6530 {
6531 {
Sean Nelson329bde72010-01-19 16:39:19 +00006532 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006533 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006534 {64 * 1024, 13}, /* block */
6535 {4 * 1024, 16}, /* sector */
6536 {4 * 1024, 16}, /* sector */
6537 },
6538 .block_erase = NULL,
6539 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006540 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006541 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006542 }, {
6543 .eraseblocks = { {1024 * 1024, 1} },
6544 .block_erase = erase_chip_stm50flw0x0x,
6545 }
6546 },
Sean Nelson28accc22010-03-19 18:47:06 +00006547 .unlock = unlock_stm50flw0x0x,
6548 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006549 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006550 },
6551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006552 {
6553 .vendor = "ST",
6554 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006555 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006556 .manufacture_id = ST_ID,
6557 .model_id = ST_M50FLW080B,
6558 .total_size = 1024,
6559 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006560 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006561 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006562 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006563 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006564 .block_erasers =
6565 {
6566 {
Sean Nelson329bde72010-01-19 16:39:19 +00006567 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006568 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006569 {4 * 1024, 16}, /* sector */
6570 {64 * 1024, 13}, /* block */
6571 {4 * 1024, 16}, /* sector */
6572 },
6573 .block_erase = NULL,
6574 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006575 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006576 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006577 }, {
6578 .eraseblocks = { {1024 * 1024, 1} },
6579 .block_erase = erase_chip_stm50flw0x0x,
6580 }
6581 },
Sean Nelson28accc22010-03-19 18:47:06 +00006582 .unlock = unlock_stm50flw0x0x,
6583 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006584 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006585 },
6586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006587 {
6588 .vendor = "ST",
6589 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006590 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006591 .manufacture_id = ST_ID,
6592 .model_id = ST_M50FW002,
6593 .total_size = 256,
6594 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006595 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006596 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006597 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006598 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006599 .block_erasers =
6600 {
6601 {
6602 .eraseblocks = {
6603 {64 * 1024, 3},
6604 {32 * 1024, 1},
6605 {8 * 1024, 2},
6606 {16 * 1024, 1},
6607 },
Sean Nelson28accc22010-03-19 18:47:06 +00006608 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006609 }, {
6610 .eraseblocks = { {256 * 1024, 1} },
6611 .block_erase = erase_chip_stm50flw0x0x,
6612 }
6613 },
Sean Nelson28accc22010-03-19 18:47:06 +00006614 .unlock = unlock_stm50flw0x0x,
6615 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006616 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006617 },
6618
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006619 {
6620 .vendor = "ST",
6621 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006622 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006623 .manufacture_id = ST_ID,
6624 .model_id = ST_M50FW016,
6625 .total_size = 2048,
6626 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006627 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .tested = TEST_UNTESTED,
6629 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006630 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006631 .block_erasers =
6632 {
6633 {
6634 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006635 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006636 }, {
6637 .eraseblocks = { {2 * 1024 * 1024, 1} },
6638 .block_erase = erase_chip_stm50flw0x0x,
6639 }
6640 },
Sean Nelson28accc22010-03-19 18:47:06 +00006641 .unlock = unlock_stm50flw0x0x,
6642 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006643 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006644 },
6645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006646 {
6647 .vendor = "ST",
6648 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006649 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006650 .manufacture_id = ST_ID,
6651 .model_id = ST_M50FW040,
6652 .total_size = 512,
6653 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006654 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006655 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006656 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006657 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006658 .block_erasers =
6659 {
6660 {
6661 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006662 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006663 }, {
6664 .eraseblocks = { {512 * 1024, 1} },
6665 .block_erase = erase_chip_stm50flw0x0x,
6666 }
6667 },
Sean Nelson28accc22010-03-19 18:47:06 +00006668 .unlock = unlock_stm50flw0x0x,
6669 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006670 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006671 },
6672
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006673 {
6674 .vendor = "ST",
6675 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006676 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006677 .manufacture_id = ST_ID,
6678 .model_id = ST_M50FW080,
6679 .total_size = 1024,
6680 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006681 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006682 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006683 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006684 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006685 .block_erasers =
6686 {
6687 {
6688 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006689 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006690 }, {
6691 .eraseblocks = { {1024 * 1024, 1} },
6692 .block_erase = erase_chip_stm50flw0x0x,
6693 }
6694 },
Sean Nelson28accc22010-03-19 18:47:06 +00006695 .unlock = unlock_stm50flw0x0x,
6696 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006697 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006698 },
6699
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006700 {
6701 .vendor = "ST",
6702 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006703 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006704 .manufacture_id = ST_ID,
6705 .model_id = ST_M50LPW116,
6706 .total_size = 2048,
6707 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006708 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006709 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006710 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006711 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006712 .block_erasers =
6713 {
6714 {
6715 .eraseblocks = {
6716 {4 * 1024, 16},
6717 {64 * 1024, 30},
6718 {32 * 1024, 1},
6719 {8 * 1024, 2},
6720 {16 * 1024, 1},
6721 },
Sean Nelson28accc22010-03-19 18:47:06 +00006722 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006723 }, {
6724 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006725 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006726 }
6727 },
Sean Nelson28accc22010-03-19 18:47:06 +00006728 .unlock = unlock_stm50flw0x0x,
6729 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006731 },
6732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006733 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006734 .vendor = "SyncMOS/MoselVitelic",
6735 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006736 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006737 .manufacture_id = SYNCMOS_MVC_ID,
6738 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006739 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006740 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006741 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006742 .tested = TEST_UNTESTED,
6743 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006744 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006745 .block_erasers =
6746 {
6747 {
6748 .eraseblocks = { {512, 256} },
6749 .block_erase = erase_sector_jedec,
6750 }, {
6751 .eraseblocks = { {128 * 1024, 1} },
6752 .block_erase = erase_chip_block_jedec,
6753 },
6754 },
Sean Nelson35727f72010-01-28 23:55:12 +00006755 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006756 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006757 },
6758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006759 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006760 .vendor = "SyncMOS/MoselVitelic",
6761 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006762 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006763 .manufacture_id = SYNCMOS_MVC_ID,
6764 .model_id = SM_MVC_29C51001T,
6765 .total_size = 128,
6766 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006767 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006768 .tested = TEST_UNTESTED,
6769 .probe = probe_jedec,
6770 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6771 .block_erasers =
6772 {
6773 {
6774 .eraseblocks = { {512, 256} },
6775 .block_erase = erase_sector_jedec,
6776 }, {
6777 .eraseblocks = { {128 * 1024, 1} },
6778 .block_erase = erase_chip_block_jedec,
6779 },
6780 },
6781 .write = write_jedec_1,
6782 .read = read_memmapped,
6783 },
6784
6785 {
6786 .vendor = "SyncMOS/MoselVitelic",
6787 .name = "{F,S,V}29C51002B",
6788 .bustype = CHIP_BUSTYPE_PARALLEL,
6789 .manufacture_id = SYNCMOS_MVC_ID,
6790 .model_id = SM_MVC_29C51002B,
6791 .total_size = 256,
6792 .page_size = 512,
6793 .feature_bits = FEATURE_EITHER_RESET,
6794 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006795 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006796 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006797 .block_erasers =
6798 {
6799 {
6800 .eraseblocks = { {512, 512} },
6801 .block_erase = erase_sector_jedec,
6802 }, {
6803 .eraseblocks = { {256 * 1024, 1} },
6804 .block_erase = erase_chip_block_jedec,
6805 },
6806 },
Sean Nelson35727f72010-01-28 23:55:12 +00006807 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006808 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006809 },
6810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006811 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006812 .vendor = "SyncMOS/MoselVitelic",
6813 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006814 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006815 .manufacture_id = SYNCMOS_MVC_ID,
6816 .model_id = SM_MVC_29C51002T,
6817 .total_size = 256,
6818 .page_size = 512,
6819 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006820 .tested = TEST_OK_PRE,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006821 .probe = probe_jedec,
6822 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6823 .block_erasers =
6824 {
6825 {
6826 .eraseblocks = { {512, 512} },
6827 .block_erase = erase_sector_jedec,
6828 }, {
6829 .eraseblocks = { {256 * 1024, 1} },
6830 .block_erase = erase_chip_block_jedec,
6831 },
6832 },
6833 .write = write_jedec_1,
6834 .read = read_memmapped,
6835 },
6836
6837 {
6838 .vendor = "SyncMOS/MoselVitelic",
6839 .name = "{F,S,V}29C51004B",
6840 .bustype = CHIP_BUSTYPE_PARALLEL,
6841 .manufacture_id = SYNCMOS_MVC_ID,
6842 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006843 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006844 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006845 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006846 .tested = TEST_UNTESTED,
6847 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006848 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006849 .block_erasers =
6850 {
6851 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006852 .eraseblocks = { {1024, 512} },
6853 .block_erase = erase_sector_jedec,
6854 }, {
6855 .eraseblocks = { {512 * 1024, 1} },
6856 .block_erase = erase_chip_block_jedec,
6857 },
6858 },
6859 .write = write_jedec_1,
6860 .read = read_memmapped,
6861 },
6862
6863 {
6864 .vendor = "SyncMOS/MoselVitelic",
6865 .name = "{F,S,V}29C51004T",
6866 .bustype = CHIP_BUSTYPE_PARALLEL,
6867 .manufacture_id = SYNCMOS_MVC_ID,
6868 .model_id = SM_MVC_29C51004T,
6869 .total_size = 512,
6870 .page_size = 1024,
6871 .feature_bits = FEATURE_EITHER_RESET,
6872 .tested = TEST_UNTESTED,
6873 .probe = probe_jedec,
6874 .probe_timing = TIMING_ZERO,
6875 .block_erasers =
6876 {
6877 {
6878 .eraseblocks = { {1024, 512} },
6879 .block_erase = erase_sector_jedec,
6880 }, {
6881 .eraseblocks = { {512 * 1024, 1} },
6882 .block_erase = erase_chip_block_jedec,
6883 },
6884 },
6885 .write = write_jedec_1,
6886 .read = read_memmapped,
6887 },
6888
6889 {
6890 .vendor = "SyncMOS/MoselVitelic",
6891 .name = "{S,V}29C31004B",
6892 .bustype = CHIP_BUSTYPE_PARALLEL,
6893 .manufacture_id = SYNCMOS_MVC_ID,
6894 .model_id = SM_MVC_29C31004B,
6895 .total_size = 512,
6896 .page_size = 1024,
6897 .feature_bits = FEATURE_EITHER_RESET,
6898 .tested = TEST_UNTESTED,
6899 .probe = probe_jedec,
6900 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6901 .block_erasers =
6902 {
6903 {
6904 .eraseblocks = { {1024, 512} },
6905 .block_erase = erase_sector_jedec,
6906 }, {
6907 .eraseblocks = { {512 * 1024, 1} },
6908 .block_erase = erase_chip_block_jedec,
6909 },
6910 },
6911 .write = write_jedec_1,
6912 .read = read_memmapped,
6913 },
6914
6915 {
6916 .vendor = "SyncMOS/MoselVitelic",
6917 .name = "{S,V}29C31004T",
6918 .bustype = CHIP_BUSTYPE_PARALLEL,
6919 .manufacture_id = SYNCMOS_MVC_ID,
6920 .model_id = SM_MVC_29C31004T,
6921 .total_size = 512,
6922 .page_size = 1024,
6923 .feature_bits = FEATURE_EITHER_RESET,
6924 .tested = TEST_UNTESTED,
6925 .probe = probe_jedec,
6926 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6927 .block_erasers =
6928 {
6929 {
6930 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006931 .block_erase = erase_sector_jedec,
6932 }, {
6933 .eraseblocks = { {512 * 1024, 1} },
6934 .block_erase = erase_chip_block_jedec,
6935 },
6936 },
Sean Nelson35727f72010-01-28 23:55:12 +00006937 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006938 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006939 },
6940
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006941 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006942 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006943 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006944 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006945 .manufacture_id = TI_OLD_ID,
6946 .model_id = TI_TMS29F002RB,
6947 .total_size = 256,
6948 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006949 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006950 .tested = TEST_UNTESTED,
6951 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006952 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006953 .block_erasers =
6954 {
6955 {
6956 .eraseblocks = {
6957 {16 * 1024, 1},
6958 {8 * 1024, 2},
6959 {32 * 1024, 1},
6960 {64 * 1024, 3},
6961 },
6962 .block_erase = erase_sector_jedec,
6963 }, {
6964 .eraseblocks = { {256 * 1024, 1} },
6965 .block_erase = erase_chip_block_jedec,
6966 },
6967 },
Sean Nelson35727f72010-01-28 23:55:12 +00006968 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006969 .read = read_memmapped,
6970 },
6971
6972 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006973 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006974 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006975 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006976 .manufacture_id = TI_OLD_ID,
6977 .model_id = TI_TMS29F002RT,
6978 .total_size = 256,
6979 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006980 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006981 .tested = TEST_UNTESTED,
6982 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006983 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006984 .block_erasers =
6985 {
6986 {
6987 .eraseblocks = {
6988 {64 * 1024, 3},
6989 {32 * 1024, 1},
6990 {8 * 1024, 2},
6991 {16 * 1024, 1},
6992 },
6993 .block_erase = erase_sector_jedec,
6994 }, {
6995 .eraseblocks = { {256 * 1024, 1} },
6996 .block_erase = erase_chip_block_jedec,
6997 },
6998 },
Sean Nelson35727f72010-01-28 23:55:12 +00006999 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007000 .read = read_memmapped,
7001 },
7002
7003 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007004 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00007005 .name = "W25Q80",
7006 .bustype = CHIP_BUSTYPE_SPI,
7007 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007008 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007009 .total_size = 1024,
7010 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007011 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007012 .tested = TEST_OK_PRE,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007013 .probe = probe_spi_rdid,
7014 .probe_timing = TIMING_ZERO,
7015 .block_erasers =
7016 {
7017 {
7018 .eraseblocks = { {4 * 1024, 256} },
7019 .block_erase = spi_block_erase_20,
7020 }, {
7021 .eraseblocks = { {32 * 1024, 32} },
7022 .block_erase = spi_block_erase_52,
7023 }, {
7024 .eraseblocks = { {64 * 1024, 16} },
7025 .block_erase = spi_block_erase_d8,
7026 }, {
7027 .eraseblocks = { {1024 * 1024, 1} },
7028 .block_erase = spi_block_erase_60,
7029 }, {
7030 .eraseblocks = { {1024 * 1024, 1} },
7031 .block_erase = spi_block_erase_c7,
7032 }
7033 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007034 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007035 .write = spi_chip_write_256,
7036 .read = spi_chip_read,
7037 },
7038
7039 {
7040 .vendor = "Winbond",
7041 .name = "W25Q16",
7042 .bustype = CHIP_BUSTYPE_SPI,
7043 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007044 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007045 .total_size = 2048,
7046 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007047 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007048 .tested = TEST_UNTESTED,
7049 .probe = probe_spi_rdid,
7050 .probe_timing = TIMING_ZERO,
7051 .block_erasers =
7052 {
7053 {
7054 .eraseblocks = { {4 * 1024, 512} },
7055 .block_erase = spi_block_erase_20,
7056 }, {
7057 .eraseblocks = { {32 * 1024, 64} },
7058 .block_erase = spi_block_erase_52,
7059 }, {
7060 .eraseblocks = { {64 * 1024, 32} },
7061 .block_erase = spi_block_erase_d8,
7062 }, {
7063 .eraseblocks = { {2 * 1024 * 1024, 1} },
7064 .block_erase = spi_block_erase_60,
7065 }, {
7066 .eraseblocks = { {2 * 1024 * 1024, 1} },
7067 .block_erase = spi_block_erase_c7,
7068 }
7069 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007070 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007071 .write = spi_chip_write_256,
7072 .read = spi_chip_read,
7073 },
7074
7075 {
7076 .vendor = "Winbond",
7077 .name = "W25Q32",
7078 .bustype = CHIP_BUSTYPE_SPI,
7079 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007080 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007081 .total_size = 4096,
7082 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007083 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007084 .tested = TEST_OK_PRE,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007085 .probe = probe_spi_rdid,
7086 .probe_timing = TIMING_ZERO,
7087 .block_erasers =
7088 {
7089 {
7090 .eraseblocks = { {4 * 1024, 1024} },
7091 .block_erase = spi_block_erase_20,
7092 }, {
7093 .eraseblocks = { {32 * 1024, 128} },
7094 .block_erase = spi_block_erase_52,
7095 }, {
7096 .eraseblocks = { {64 * 1024, 64} },
7097 .block_erase = spi_block_erase_d8,
7098 }, {
7099 .eraseblocks = { {4 * 1024 * 1024, 1} },
7100 .block_erase = spi_block_erase_60,
7101 }, {
7102 .eraseblocks = { {4 * 1024 * 1024, 1} },
7103 .block_erase = spi_block_erase_c7,
7104 }
7105 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007106 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007107 .write = spi_chip_write_256,
7108 .read = spi_chip_read,
7109 },
7110
7111 {
7112 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00007113 .name = "W25Q64",
7114 .bustype = CHIP_BUSTYPE_SPI,
7115 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007116 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00007117 .total_size = 8192,
7118 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007119 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007120 .tested = TEST_OK_PR,
David Hendricksc4acec92010-06-24 11:39:57 +00007121 .probe = probe_spi_rdid,
7122 .probe_timing = TIMING_ZERO,
7123 .block_erasers =
7124 {
7125 {
7126 .eraseblocks = { {4 * 1024, 2048} },
7127 .block_erase = spi_block_erase_20,
7128 }, {
7129 .eraseblocks = { {32 * 1024, 256} },
7130 .block_erase = spi_block_erase_52,
7131 }, {
7132 .eraseblocks = { {64 * 1024, 128} },
7133 .block_erase = spi_block_erase_d8,
7134 }, {
7135 .eraseblocks = { {8 * 1024 * 1024, 1} },
7136 .block_erase = spi_block_erase_60,
7137 }, {
7138 .eraseblocks = { {8 * 1024 * 1024, 1} },
7139 .block_erase = spi_block_erase_c7,
7140 }
7141 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007142 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00007143 .write = spi_chip_write_256,
7144 .read = spi_chip_read,
7145 },
7146
7147 {
7148 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007149 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007150 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007151 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007152 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007153 .total_size = 128,
7154 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007155 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007156 .tested = TEST_UNTESTED,
7157 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007158 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007159 .block_erasers =
7160 {
7161 {
7162 .eraseblocks = { {4 * 1024, 32} },
7163 .block_erase = spi_block_erase_20,
7164 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007165 .eraseblocks = { {64 * 1024, 2} },
7166 .block_erase = spi_block_erase_d8,
7167 }, {
7168 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007169 .block_erase = spi_block_erase_c7,
7170 }
7171 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007172 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007173 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007174 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007175 },
7176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007177 {
7178 .vendor = "Winbond",
7179 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007180 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007181 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007182 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007183 .total_size = 256,
7184 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007185 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007186 .tested = TEST_UNTESTED,
7187 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007188 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007189 .block_erasers =
7190 {
7191 {
7192 .eraseblocks = { {4 * 1024, 64} },
7193 .block_erase = spi_block_erase_20,
7194 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007195 .eraseblocks = { {64 * 1024, 4} },
7196 .block_erase = spi_block_erase_d8,
7197 }, {
7198 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007199 .block_erase = spi_block_erase_c7,
7200 }
7201 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007202 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007203 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007204 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007205 },
7206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007207 {
7208 .vendor = "Winbond",
7209 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007210 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007211 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007212 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007213 .total_size = 512,
7214 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007215 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007216 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007217 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007218 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007219 .block_erasers =
7220 {
7221 {
7222 .eraseblocks = { {4 * 1024, 128} },
7223 .block_erase = spi_block_erase_20,
7224 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007225 .eraseblocks = { {64 * 1024, 8} },
7226 .block_erase = spi_block_erase_d8,
7227 }, {
7228 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007229 .block_erase = spi_block_erase_c7,
7230 }
7231 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007232 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007233 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007234 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007235 },
7236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007237 {
7238 .vendor = "Winbond",
7239 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007240 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007241 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007242 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007243 .total_size = 1024,
7244 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007245 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007246 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007247 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007248 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007249 .block_erasers =
7250 {
7251 {
7252 .eraseblocks = { {4 * 1024, 256} },
7253 .block_erase = spi_block_erase_20,
7254 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007255 .eraseblocks = { {64 * 1024, 16} },
7256 .block_erase = spi_block_erase_d8,
7257 }, {
7258 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007259 .block_erase = spi_block_erase_c7,
7260 }
7261 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007262 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007263 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007264 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007265 },
7266
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007267 {
7268 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007269 .name = "W25x16",
7270 .bustype = CHIP_BUSTYPE_SPI,
7271 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007272 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00007273 .total_size = 2048,
7274 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007275 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007276 .tested = TEST_OK_PRE,
Hector Martina721ae22009-07-11 19:39:11 +00007277 .probe = probe_spi_rdid,
7278 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007279 .block_erasers =
7280 {
7281 {
7282 .eraseblocks = { {4 * 1024, 512} },
7283 .block_erase = spi_block_erase_20,
7284 }, {
7285 .eraseblocks = { {32 * 1024, 64} },
7286 .block_erase = spi_block_erase_52,
7287 }, {
7288 .eraseblocks = { {64 * 1024, 32} },
7289 .block_erase = spi_block_erase_d8,
7290 }, {
7291 .eraseblocks = { {2 * 1024 * 1024, 1} },
7292 .block_erase = spi_block_erase_60,
7293 }, {
7294 .eraseblocks = { {2 * 1024 * 1024, 1} },
7295 .block_erase = spi_block_erase_c7,
7296 }
7297 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007298 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007299 .write = spi_chip_write_256,
7300 .read = spi_chip_read,
7301 },
7302
7303 {
7304 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007305 .name = "W25x32",
7306 .bustype = CHIP_BUSTYPE_SPI,
7307 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007308 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00007309 .total_size = 4096,
7310 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007311 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007312 .tested = TEST_OK_PROBE,
7313 .probe = probe_spi_rdid,
7314 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007315 .block_erasers =
7316 {
7317 {
7318 .eraseblocks = { {4 * 1024, 1024} },
7319 .block_erase = spi_block_erase_20,
7320 }, {
7321 .eraseblocks = { {32 * 1024, 128} },
7322 .block_erase = spi_block_erase_52,
7323 }, {
7324 .eraseblocks = { {64 * 1024, 64} },
7325 .block_erase = spi_block_erase_d8,
7326 }, {
7327 .eraseblocks = { {4 * 1024 * 1024, 1} },
7328 .block_erase = spi_block_erase_60,
7329 }, {
7330 .eraseblocks = { {4 * 1024 * 1024, 1} },
7331 .block_erase = spi_block_erase_c7,
7332 }
7333 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007334 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007335 .write = spi_chip_write_256,
7336 .read = spi_chip_read,
7337 },
7338
7339 {
7340 .vendor = "Winbond",
7341 .name = "W25x64",
7342 .bustype = CHIP_BUSTYPE_SPI,
7343 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007344 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00007345 .total_size = 8192,
7346 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007347 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007348 .tested = TEST_UNTESTED,
7349 .probe = probe_spi_rdid,
7350 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007351 .block_erasers =
7352 {
7353 {
7354 .eraseblocks = { {4 * 1024, 2048} },
7355 .block_erase = spi_block_erase_20,
7356 }, {
7357 .eraseblocks = { {32 * 1024, 256} },
7358 .block_erase = spi_block_erase_52,
7359 }, {
7360 .eraseblocks = { {64 * 1024, 128} },
7361 .block_erase = spi_block_erase_d8,
7362 }, {
7363 .eraseblocks = { {8 * 1024 * 1024, 1} },
7364 .block_erase = spi_block_erase_60,
7365 }, {
7366 .eraseblocks = { {8 * 1024 * 1024, 1} },
7367 .block_erase = spi_block_erase_c7,
7368 }
7369 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007370 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007371 .write = spi_chip_write_256,
7372 .read = spi_chip_read,
7373 },
7374
7375 {
7376 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007377 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007378 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007379 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007380 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007381 .total_size = 128,
7382 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007383 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007384 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007385 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007386 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007387 .block_erasers =
7388 {
7389 {
7390 .eraseblocks = { {128 * 1024, 1} },
7391 .block_erase = erase_chip_block_jedec,
7392 }
7393 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007394 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007395 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007396 },
7397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007398 {
7399 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007400 .name = "W29C020(C)/W29C022",
Urja Rannikko161b8852009-06-05 08:47:37 +00007401 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007402 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007403 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007404 .total_size = 256,
7405 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007406 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007407 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007408 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007409 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007410 .block_erasers =
7411 {
7412 {
7413 .eraseblocks = { {256 * 1024, 1} },
7414 .block_erase = erase_chip_block_jedec,
7415 }
7416 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007417 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007418 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007419 },
7420
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007421 {
7422 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007423 .name = "W29C040/P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007424 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007425 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007426 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007427 .total_size = 512,
7428 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007429 .feature_bits = FEATURE_LONG_RESET,
7430 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007431 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007432 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007433 .block_erasers =
7434 {
7435 {
7436 .eraseblocks = { {512 * 1024, 1} },
7437 .block_erase = erase_chip_block_jedec,
7438 }
7439 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007440 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007441 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007442 },
7443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007444 {
7445 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007446 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007447 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007448 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007449 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007450 .total_size = 128,
7451 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007452 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007453 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007454 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007455 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007456 .block_erasers =
7457 {
7458 {
7459 .eraseblocks = { {128 * 1024, 1} },
7460 .block_erase = erase_chip_block_jedec,
7461 }
7462 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007463 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007464 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007465 },
7466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007467 {
7468 .vendor = "Winbond",
7469 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007470 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007471 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007472 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007473 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007474 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007475 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007476 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007477 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007478 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007479 .block_erasers =
7480 {
7481 {
7482 .eraseblocks = { {64 * 1024, 8} },
7483 .block_erase = erase_sector_jedec,
7484 }, {
7485 .eraseblocks = { {512 * 1024, 1} },
7486 .block_erase = erase_chip_block_jedec,
7487 }
7488 },
Sean Nelson35727f72010-01-28 23:55:12 +00007489 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007490 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007491 },
7492
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007493 {
7494 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007495 .name = "W39V040(F)B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007496 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007497 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007498 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007499 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007500 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007501 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007502 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007503 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007504 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007505 .block_erasers =
7506 {
7507 {
7508 .eraseblocks = { {64 * 1024, 8} },
7509 .block_erase = erase_sector_jedec,
7510 }, {
7511 .eraseblocks = { {512 * 1024, 1} },
7512 .block_erase = erase_chip_block_jedec,
7513 }
7514 },
Sean Nelson35727f72010-01-28 23:55:12 +00007515 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007516 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007517 },
7518
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007519 {
7520 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007521 .name = "W39V040(F)C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007522 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007523 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007524 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007525 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007526 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007527 .feature_bits = FEATURE_EITHER_RESET,
7528 .tested = TEST_UNTESTED,
7529 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007530 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007531 .block_erasers =
7532 {
7533 {
7534 .eraseblocks = { {64 * 1024, 8} },
7535 .block_erase = erase_sector_jedec,
7536 }, {
7537 .eraseblocks = { {512 * 1024, 1} },
7538 .block_erase = erase_chip_block_jedec,
7539 }
7540 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007541 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007542 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007543 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007544 },
7545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007546 {
7547 .vendor = "Winbond",
7548 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007549 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007550 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007551 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007552 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007553 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007554 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007555 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007556 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007557 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007558 .block_erasers =
7559 {
7560 {
7561 .eraseblocks = { {4 * 1024, 128} },
7562 .block_erase = erase_block_jedec,
7563 }, {
7564 .eraseblocks = { {64 * 1024, 8} },
7565 .block_erase = erase_sector_jedec,
7566 }, {
7567 .eraseblocks = { {512 * 1024, 1} },
7568 .block_erase = erase_chip_block_jedec,
7569 }
7570 },
Michael Karcherc9b63412010-05-30 16:55:18 +00007571 .printlock = printlock_sst_fwhub,
7572 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007573 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007574 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007575 },
7576
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007577 {
7578 .vendor = "Winbond",
7579 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007580 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007581 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007582 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007583 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007584 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007585 .feature_bits = FEATURE_EITHER_RESET,
7586 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007587 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007588 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007589 .block_erasers =
7590 {
7591 {
7592 .eraseblocks = { {64 * 1024, 16} },
7593 .block_erase = erase_sector_jedec,
7594 }, {
7595 .eraseblocks = { {1024 * 1024, 1} },
7596 .block_erase = erase_chip_block_jedec,
7597 }
7598 },
Sean Nelson35727f72010-01-28 23:55:12 +00007599 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007601 },
7602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007603 {
7604 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007605 .name = "W49F002U/N",
Urja Rannikko038a3122009-06-28 19:19:25 +00007606 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007607 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007608 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007609 .total_size = 256,
7610 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007611 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007612 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007613 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007614 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007615 .block_erasers =
7616 {
7617 {
7618 .eraseblocks = {
7619 {128 * 1024, 1},
7620 {96 * 1024, 1},
7621 {8 * 1024, 2},
7622 {16 * 1024, 1},
7623 },
7624 .block_erase = erase_sector_jedec,
7625 }, {
7626 .eraseblocks = { {256 * 1024, 1} },
7627 .block_erase = erase_chip_block_jedec,
7628 }
7629 },
Sean Nelson35727f72010-01-28 23:55:12 +00007630 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007631 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007632 },
7633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007634 {
7635 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007636 .name = "W49F020",
7637 .bustype = CHIP_BUSTYPE_PARALLEL,
7638 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007639 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007640 .total_size = 256,
7641 .page_size = 128,
7642 .feature_bits = FEATURE_EITHER_RESET,
7643 .tested = TEST_OK_PROBE,
7644 .probe = probe_jedec,
7645 .probe_timing = 10,
7646 .block_erasers =
7647 {
7648 {
7649 .eraseblocks = { {256 * 1024, 1} },
7650 .block_erase = erase_chip_block_jedec,
7651 }
7652 },
7653 .write = write_jedec_1,
7654 .read = read_memmapped,
7655 },
7656
7657 {
7658 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007659 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007660 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007661 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007662 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007663 .total_size = 256,
7664 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007665 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007666 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007667 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007668 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007669 .block_erasers =
7670 {
7671 {
7672 .eraseblocks = {
7673 {64 * 1024, 3},
7674 {32 * 1024, 1},
7675 {8 * 1024, 2},
7676 {16 * 1024, 1},
7677 },
7678 .block_erase = erase_sector_jedec,
7679 }, {
7680 .eraseblocks = { {256 * 1024, 1} },
7681 .block_erase = erase_chip_block_jedec,
7682 }
7683 },
Sean Nelson35727f72010-01-28 23:55:12 +00007684 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007685 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007686 },
7687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007688 {
7689 .vendor = "Winbond",
7690 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007691 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007692 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007693 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007694 .total_size = 256,
7695 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007696 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007697 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007698 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007699 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007700 .block_erasers =
7701 {
7702 {
7703 .eraseblocks = {
7704 {64 * 1024, 3},
7705 {32 * 1024, 1},
7706 {8 * 1024, 2},
7707 {16 * 1024, 1},
7708 },
7709 .block_erase = erase_sector_jedec,
7710 }, {
7711 .eraseblocks = { {256 * 1024, 1} },
7712 .block_erase = erase_chip_block_jedec,
7713 }
7714 },
Sean Nelson35727f72010-01-28 23:55:12 +00007715 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007716 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007717 },
7718
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007719 {
7720 .vendor = "Winbond",
7721 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007722 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007723 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007724 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007725 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007726 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007727 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007728 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007729 .probe = probe_jedec,
7730 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007731 .block_erasers =
7732 {
7733 {
7734 .eraseblocks = { {64 * 1024, 16}, },
7735 .block_erase = erase_sector_jedec,
7736 }, {
7737 .eraseblocks = { {1024 * 1024, 1} },
7738 .block_erase = erase_chip_block_jedec,
7739 }
7740 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007741 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007742 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007743 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007744 },
7745
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007746 {
7747 .vendor = "Winbond",
7748 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007749 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007750 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007751 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007752 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007753 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007754 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007755 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007756 .probe = probe_jedec,
7757 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007758 .block_erasers =
7759 {
7760 {
7761 .eraseblocks = { {64 * 1024, 8}, },
7762 .block_erase = erase_sector_jedec,
7763 }, {
7764 .eraseblocks = { {512 * 1024, 1} },
7765 .block_erase = erase_chip_block_jedec,
7766 }
7767 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007768 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007769 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007770 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007771 },
7772
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007773 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007774 .vendor = "AMIC",
7775 .name = "unknown AMIC SPI chip",
7776 .bustype = CHIP_BUSTYPE_SPI,
7777 .manufacture_id = AMIC_ID,
7778 .model_id = GENERIC_DEVICE_ID,
7779 .total_size = 0,
7780 .page_size = 256,
7781 .tested = TEST_BAD_PREW,
7782 .probe = probe_spi_rdid4,
7783 .probe_timing = TIMING_ZERO,
7784 .write = NULL,
7785 .read = NULL,
7786 },
7787
7788 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007789 .vendor = "Atmel",
7790 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007791 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007792 .manufacture_id = ATMEL_ID,
7793 .model_id = GENERIC_DEVICE_ID,
7794 .total_size = 0,
7795 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007796 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007797 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007798 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007799 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007800 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007801 },
7802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007803 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007804 .vendor = "Eon",
7805 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007806 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007807 .manufacture_id = EON_ID_NOPREFIX,
7808 .model_id = GENERIC_DEVICE_ID,
7809 .total_size = 0,
7810 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007811 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007812 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007813 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007814 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007815 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007816 },
7817
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007818 {
7819 .vendor = "Macronix",
7820 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007821 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007822 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007823 .model_id = GENERIC_DEVICE_ID,
7824 .total_size = 0,
7825 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007826 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007827 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007828 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007829 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007830 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007831 },
7832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007833 {
7834 .vendor = "PMC",
7835 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007836 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007837 .manufacture_id = PMC_ID,
7838 .model_id = GENERIC_DEVICE_ID,
7839 .total_size = 0,
7840 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007841 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007842 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007843 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007844 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007845 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007846 },
7847
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007848 {
7849 .vendor = "SST",
7850 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007851 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007852 .manufacture_id = SST_ID,
7853 .model_id = GENERIC_DEVICE_ID,
7854 .total_size = 0,
7855 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007856 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007857 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007858 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007859 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007860 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007861 },
7862
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007863 {
7864 .vendor = "ST",
7865 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007866 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007867 .manufacture_id = ST_ID,
7868 .model_id = GENERIC_DEVICE_ID,
7869 .total_size = 0,
7870 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007871 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007872 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007873 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007874 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007875 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007876 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007877
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007878 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007879 .vendor = "Sanyo",
7880 .name = "unknown Sanyo SPI chip",
7881 .bustype = CHIP_BUSTYPE_SPI,
7882 .manufacture_id = SANYO_ID,
7883 .model_id = GENERIC_DEVICE_ID,
7884 .total_size = 0,
7885 .page_size = 256,
7886 .tested = TEST_BAD_PREW,
7887 .probe = probe_spi_rdid,
7888 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007889 .write = NULL,
7890 .read = NULL,
7891 },
7892
7893 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007894 .vendor = "Generic",
7895 .name = "unknown SPI chip (RDID)",
7896 .bustype = CHIP_BUSTYPE_SPI,
7897 .manufacture_id = GENERIC_MANUF_ID,
7898 .model_id = GENERIC_DEVICE_ID,
7899 .total_size = 0,
7900 .page_size = 256,
7901 .tested = TEST_BAD_PREW,
7902 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007903 .write = NULL,
7904 },
7905 {
7906 .vendor = "Generic",
7907 .name = "unknown SPI chip (REMS)",
7908 .bustype = CHIP_BUSTYPE_SPI,
7909 .manufacture_id = GENERIC_MANUF_ID,
7910 .model_id = GENERIC_DEVICE_ID,
7911 .total_size = 0,
7912 .page_size = 256,
7913 .tested = TEST_BAD_PREW,
7914 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007915 .write = NULL,
7916 },
7917
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007918 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007919};