blob: b6dff6c53a36eb58fa84352f09c3156143755229 [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,
David Borg204f4652010-12-04 03:26:40 +0000158 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +0000184 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +0000236 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000262 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +0000901 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000902 .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,
David Borg204f4652010-12-04 03:26:40 +0000932 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000933 .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,
David Borg204f4652010-12-04 03:26:40 +0000963 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000964 .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,
David Hendricks22e05322010-12-13 23:54:59 +00003687 .tested = TEST_OK_PREW,
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,
David Borg204f4652010-12-04 03:26:40 +00003821 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +00003853 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +00003885 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +00003916 .probe_timing = TIMING_ZERO,
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,
David Borg204f4652010-12-04 03:26:40 +00003973 .probe_timing = TIMING_ZERO,
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",
Rudy Hostf4e57772010-11-29 00:37:49 +00004770 .name = "S25FL004A",
4771 .bustype = CHIP_BUSTYPE_SPI,
4772 .manufacture_id = SPANSION_ID,
4773 .model_id = SPANSION_S25FL004A,
4774 .total_size = 512,
4775 .page_size = 256,
4776 .tested = TEST_UNTESTED,
4777 .probe = probe_spi_rdid,
4778 .probe_timing = TIMING_ZERO,
4779 .block_erasers =
4780 {
4781 {
4782 .eraseblocks = { {64 * 1024, 8} },
4783 .block_erase = spi_block_erase_d8,
4784 }, {
4785 .eraseblocks = { {512 * 1024, 1} },
4786 .block_erase = spi_block_erase_c7,
4787 }
4788 },
4789 .unlock = spi_disable_blockprotect,
4790 .write = spi_chip_write_256,
4791 .read = spi_chip_read,
4792 },
4793
4794 {
4795 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004796 .name = "S25FL008A",
4797 .bustype = CHIP_BUSTYPE_SPI,
4798 .manufacture_id = SPANSION_ID,
4799 .model_id = SPANSION_S25FL008A,
4800 .total_size = 1024,
4801 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004802 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00004803 .probe = probe_spi_rdid,
4804 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004805 .block_erasers =
4806 {
4807 {
4808 .eraseblocks = { {64 * 1024, 16} },
4809 .block_erase = spi_block_erase_d8,
4810 }, {
4811 .eraseblocks = { {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,
Michael Karcher23ff4602010-01-12 23:29:30 +00004816 .write = spi_chip_write_256,
4817 .read = spi_chip_read,
4818 },
4819
4820 {
4821 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004822 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004823 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004824 .manufacture_id = SPANSION_ID,
4825 .model_id = SPANSION_S25FL016A,
4826 .total_size = 2048,
4827 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004828 .tested = TEST_OK_PR,
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,
Sean Nelson5643c072010-01-19 03:23:07 +00004831 .block_erasers =
4832 {
4833 {
4834 .eraseblocks = { {64 * 1024, 32} },
4835 .block_erase = spi_block_erase_d8,
4836 }, {
4837 .eraseblocks = { {2 * 1024 * 1024, 1} },
4838 .block_erase = spi_block_erase_c7,
4839 }
4840 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004842 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004843 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004844 },
4845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 {
Rudy Hostf4e57772010-11-29 00:37:49 +00004847 .vendor = "Spansion",
4848 .name = "S25FL032A",
4849 .bustype = CHIP_BUSTYPE_SPI,
4850 .manufacture_id = SPANSION_ID,
4851 .model_id = SPANSION_S25FL032A,
4852 .total_size = 4096,
4853 .page_size = 256,
4854 .tested = TEST_UNTESTED,
4855 .probe = probe_spi_rdid,
4856 .probe_timing = TIMING_ZERO,
4857 .block_erasers =
4858 {
4859 {
4860 .eraseblocks = { {64 * 1024, 64} },
4861 .block_erase = spi_block_erase_d8,
4862 }, {
4863 .eraseblocks = { {4 * 1024 * 1024, 1} },
4864 .block_erase = spi_block_erase_c7,
4865 }
4866 },
4867 .unlock = spi_disable_blockprotect,
4868 .write = spi_chip_write_256,
4869 .read = spi_chip_read,
4870 },
4871
4872 {
4873 .vendor = "Spansion",
4874 .name = "S25FL064A",
4875 .bustype = CHIP_BUSTYPE_SPI,
4876 .manufacture_id = SPANSION_ID,
4877 .model_id = SPANSION_S25FL064A,
4878 .total_size = 8192,
4879 .page_size = 256,
4880 .tested = TEST_OK_PREW,
4881 .probe = probe_spi_rdid,
4882 .probe_timing = TIMING_ZERO,
4883 .block_erasers =
4884 {
4885 {
4886 .eraseblocks = { {64 * 1024, 128} },
4887 .block_erase = spi_block_erase_d8,
4888 }, {
4889 .eraseblocks = { {8 * 1024 * 1024, 1} },
4890 .block_erase = spi_block_erase_c7,
4891 }
4892 },
4893 .unlock = spi_disable_blockprotect,
4894 .write = spi_chip_write_256,
4895 .read = spi_chip_read,
4896 },
4897
4898 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004899 .vendor = "SST",
Mark Marshall90021f22010-12-03 14:48:11 +00004900 .name = "SST25VF010.REMS",
4901 .bustype = CHIP_BUSTYPE_SPI,
4902 .manufacture_id = SST_ID,
4903 .model_id = SST_SST25VF010_REMS,
4904 .total_size = 128,
4905 .page_size = 256,
4906 .tested = TEST_OK_PREW,
4907 .probe = probe_spi_rems,
4908 .probe_timing = TIMING_ZERO,
4909 .block_erasers =
4910 {
4911 {
4912 .eraseblocks = { {4 * 1024, 32} },
4913 .block_erase = spi_block_erase_20,
4914 }, {
4915 .eraseblocks = { {32 * 1024, 4} },
4916 .block_erase = spi_block_erase_52,
4917 }, {
4918 .eraseblocks = { {128 * 1024, 1} },
4919 .block_erase = spi_block_erase_60,
4920 },
4921 },
4922 .unlock = spi_disable_blockprotect,
4923 .write = spi_chip_write_1,
4924 .read = spi_chip_read,
4925 },
4926
4927 {
4928 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004929 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004930 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004931 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004932 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004933 .total_size = 2048,
4934 .page_size = 256,
Mark Marshall90021f22010-12-03 14:48:11 +00004935 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004936 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004937 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004938 .block_erasers =
4939 {
4940 {
4941 .eraseblocks = { {4 * 1024, 512} },
4942 .block_erase = spi_block_erase_20,
4943 }, {
4944 .eraseblocks = { {32 * 1024, 64} },
4945 .block_erase = spi_block_erase_52,
4946 }, {
4947 .eraseblocks = { {64 * 1024, 32} },
4948 .block_erase = spi_block_erase_d8,
4949 }, {
4950 .eraseblocks = { {2 * 1024 * 1024, 1} },
4951 .block_erase = spi_block_erase_60,
4952 }, {
4953 .eraseblocks = { {2 * 1024 * 1024, 1} },
4954 .block_erase = spi_block_erase_c7,
4955 },
4956 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004957 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004958 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004959 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004960 },
4961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004962 {
4963 .vendor = "SST",
4964 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004965 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004966 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004967 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004968 .total_size = 4096,
4969 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004970 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004971 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004972 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004973 .block_erasers =
4974 {
4975 {
4976 .eraseblocks = { {4 * 1024, 1024} },
4977 .block_erase = spi_block_erase_20,
4978 }, {
4979 .eraseblocks = { {32 * 1024, 128} },
4980 .block_erase = spi_block_erase_52,
4981 }, {
4982 .eraseblocks = { {64 * 1024, 64} },
4983 .block_erase = spi_block_erase_d8,
4984 }, {
4985 .eraseblocks = { {4 * 1024 * 1024, 1} },
4986 .block_erase = spi_block_erase_60,
4987 }, {
4988 .eraseblocks = { {4 * 1024 * 1024, 1} },
4989 .block_erase = spi_block_erase_c7,
4990 },
4991 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004992 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00004993 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004994 .read = spi_chip_read,
4995 },
4996
4997 {
4998 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004999 .name = "SST25VF064C",
5000 .bustype = CHIP_BUSTYPE_SPI,
5001 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005002 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005003 .total_size = 8192,
5004 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005005 .tested = TEST_OK_PRE,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005006 .probe = probe_spi_rdid,
5007 .probe_timing = TIMING_ZERO,
5008 .block_erasers =
5009 {
5010 {
5011 .eraseblocks = { {4 * 1024, 2048} },
5012 .block_erase = spi_block_erase_20,
5013 }, {
5014 .eraseblocks = { {32 * 1024, 256} },
5015 .block_erase = spi_block_erase_52,
5016 }, {
5017 .eraseblocks = { {64 * 1024, 128} },
5018 .block_erase = spi_block_erase_d8,
5019 }, {
5020 .eraseblocks = { {8 * 1024 * 1024, 1} },
5021 .block_erase = spi_block_erase_60,
5022 }, {
5023 .eraseblocks = { {8 * 1024 * 1024, 1} },
5024 .block_erase = spi_block_erase_c7,
5025 },
5026 },
5027 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00005028 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00005029 .read = spi_chip_read,
5030 },
5031
5032 {
5033 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005034 .name = "SST25VF040.REMS",
5035 .bustype = CHIP_BUSTYPE_SPI,
5036 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005037 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005038 .total_size = 512,
5039 .page_size = 256,
5040 .tested = TEST_OK_PR,
5041 .probe = probe_spi_rems,
5042 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005043 .block_erasers =
5044 {
5045 {
5046 .eraseblocks = { {4 * 1024, 128} },
5047 .block_erase = spi_block_erase_20,
5048 }, {
5049 .eraseblocks = { {32 * 1024, 16} },
5050 .block_erase = spi_block_erase_52,
5051 }, {
5052 .eraseblocks = { {512 * 1024, 1} },
5053 .block_erase = spi_block_erase_60,
5054 },
5055 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005056 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005057 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005058 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005059 },
5060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005061 {
5062 .vendor = "SST",
5063 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005064 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005065 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005066 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 .total_size = 512,
5068 .page_size = 256,
5069 .tested = TEST_UNTESTED,
5070 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005071 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005072 .block_erasers =
5073 {
5074 {
5075 .eraseblocks = { {4 * 1024, 128} },
5076 .block_erase = spi_block_erase_20,
5077 }, {
5078 .eraseblocks = { {32 * 1024, 16} },
5079 .block_erase = spi_block_erase_52,
5080 }, {
5081 .eraseblocks = { {64 * 1024, 8} },
5082 .block_erase = spi_block_erase_d8,
5083 }, {
5084 .eraseblocks = { {512 * 1024, 1} },
5085 .block_erase = spi_block_erase_60,
5086 }, {
5087 .eraseblocks = { {512 * 1024, 1} },
5088 .block_erase = spi_block_erase_c7,
5089 },
5090 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005091 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005092 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00005093 .read = spi_chip_read,
5094 },
5095
5096 {
5097 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005098 .name = "SST25LF040A.RES",
5099 .bustype = CHIP_BUSTYPE_SPI,
5100 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005101 .model_id = SST_SST25VF040_REMS,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005102 .total_size = 512,
5103 .page_size = 256,
5104 .tested = TEST_OK_PROBE,
5105 .probe = probe_spi_res2,
5106 .probe_timing = TIMING_ZERO,
5107 .block_erasers =
5108 {
5109 {
5110 .eraseblocks = { {4 * 1024, 128} },
5111 .block_erase = spi_block_erase_20,
5112 }, {
5113 .eraseblocks = { {32 * 1024, 16} },
5114 .block_erase = spi_block_erase_52,
5115 }, {
5116 .eraseblocks = { {512 * 1024, 1} },
5117 .block_erase = spi_block_erase_60,
5118 },
5119 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005120 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00005121 .write = spi_chip_write_1,
5122 .read = spi_chip_read,
5123 },
5124
5125 {
5126 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00005127 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005128 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005129 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005130 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00005131 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005132 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00005133 .tested = TEST_OK_PR,
5134 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005135 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005136 .block_erasers =
5137 {
5138 {
5139 .eraseblocks = { {4 * 1024, 128} },
5140 .block_erase = spi_block_erase_20,
5141 }, {
5142 .eraseblocks = { {32 * 1024, 16} },
5143 .block_erase = spi_block_erase_52,
5144 }, {
5145 .eraseblocks = { {64 * 1024, 8} },
5146 .block_erase = spi_block_erase_d8,
5147 }, {
5148 .eraseblocks = { {512 * 1024, 1} },
5149 .block_erase = spi_block_erase_60,
5150 }, {
5151 .eraseblocks = { {512 * 1024, 1} },
5152 .block_erase = spi_block_erase_c7,
5153 },
5154 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005155 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00005156 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00005157 .read = spi_chip_read,
5158 },
5159
5160 {
5161 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005164 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005165 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005166 .total_size = 1024,
5167 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005168 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005169 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005170 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00005171 .block_erasers =
5172 {
5173 {
5174 .eraseblocks = { {4 * 1024, 256} },
5175 .block_erase = spi_block_erase_20,
5176 }, {
5177 .eraseblocks = { {32 * 1024, 32} },
5178 .block_erase = spi_block_erase_52,
5179 }, {
5180 .eraseblocks = { {64 * 1024, 16} },
5181 .block_erase = spi_block_erase_d8,
5182 }, {
5183 .eraseblocks = { {1024 * 1024, 1} },
5184 .block_erase = spi_block_erase_60,
5185 }, {
5186 .eraseblocks = { {1024 * 1024, 1} },
5187 .block_erase = spi_block_erase_c7,
5188 },
5189 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005190 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005191 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005192 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005193 },
5194
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005195 {
5196 .vendor = "SST",
5197 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005198 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005199 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005200 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005201 .total_size = 512,
5202 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005204 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005205 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005206 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005207 .block_erasers =
5208 {
5209 {
5210 .eraseblocks = { {128, 4096} },
5211 .block_erase = erase_sector_28sf040,
5212 }, {
5213 .eraseblocks = { {512 * 1024, 1} },
5214 .block_erase = erase_chip_28sf040,
5215 }
5216 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005217 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005218 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005219 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005220 },
5221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005222 {
5223 .vendor = "SST",
5224 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005226 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005227 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005228 .total_size = 128,
5229 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005230 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005231 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005232 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005233 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005234 .block_erasers =
5235 {
5236 {
5237 .eraseblocks = { {128 * 1024, 1} },
5238 .block_erase = erase_chip_block_jedec,
5239 }
5240 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005242 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005243 },
5244
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005245 {
5246 .vendor = "SST",
5247 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005248 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005249 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005250 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005251 .total_size = 128,
5252 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005253 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005254 .tested = TEST_UNTESTED,
5255 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005256 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005257 .block_erasers =
5258 {
5259 {
5260 .eraseblocks = { {128 * 1024, 1} },
5261 .block_erase = erase_chip_block_jedec,
5262 }
5263 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005264 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005265 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005266 },
5267
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 {
5269 .vendor = "SST",
5270 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005271 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005272 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005273 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005274 .total_size = 256,
5275 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005276 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005277 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005278 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005279 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005280 .block_erasers =
5281 {
5282 {
5283 .eraseblocks = { {256 * 1024, 1} },
5284 .block_erase = erase_chip_block_jedec,
5285 }
5286 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005287 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005288 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005289 },
5290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 {
5292 .vendor = "SST",
5293 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005294 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005295 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005296 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005297 .total_size = 256,
5298 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005299 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005300 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005301 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005302 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005303 .block_erasers =
5304 {
5305 {
5306 .eraseblocks = { {256 * 1024, 1} },
5307 .block_erase = erase_chip_block_jedec,
5308 }
5309 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005310 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005312 },
5313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 {
5315 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00005316 .name = "SST39SF512",
5317 .bustype = CHIP_BUSTYPE_PARALLEL,
5318 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005319 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005320 .total_size = 64,
5321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005322 .feature_bits = FEATURE_EITHER_RESET,
5323 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005324 .probe = probe_jedec,
5325 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00005326 .block_erasers =
5327 {
5328 {
5329 .eraseblocks = { {4 * 1024, 16} },
5330 .block_erase = erase_sector_jedec,
5331 }, {
5332 .eraseblocks = { {64 * 1024, 1} },
5333 .block_erase = erase_chip_block_jedec,
5334 }
5335 },
Sean Nelson35727f72010-01-28 23:55:12 +00005336 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00005337 .read = read_memmapped,
5338 },
5339
5340 {
5341 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005342 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005343 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005344 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005345 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005346 .total_size = 128,
5347 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005348 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005349 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005350 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005351 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005352 .block_erasers =
5353 {
5354 {
5355 .eraseblocks = { {4 * 1024, 32} },
5356 .block_erase = erase_sector_jedec,
5357 }, {
5358 .eraseblocks = { {128 * 1024, 1} },
5359 .block_erase = erase_chip_block_jedec,
5360 }
5361 },
Sean Nelson35727f72010-01-28 23:55:12 +00005362 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005363 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005364 },
5365
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005366 {
5367 .vendor = "SST",
5368 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005369 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005370 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005371 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005372 .total_size = 256,
5373 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005374 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005375 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005376 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005377 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005378 .block_erasers =
5379 {
5380 {
5381 .eraseblocks = { {4 * 1024, 64} },
5382 .block_erase = erase_sector_jedec,
5383 }, {
5384 .eraseblocks = { {256 * 1024, 1} },
5385 .block_erase = erase_chip_block_jedec,
5386 }
5387 },
Sean Nelson35727f72010-01-28 23:55:12 +00005388 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005389 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005390 },
5391
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005392 {
5393 .vendor = "SST",
5394 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005395 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005396 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005397 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005398 .total_size = 512,
5399 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005400 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005401 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005403 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005404 .block_erasers =
5405 {
5406 {
5407 .eraseblocks = { {4 * 1024, 128} },
5408 .block_erase = erase_sector_jedec,
5409 }, {
5410 .eraseblocks = { {512 * 1024, 1} },
5411 .block_erase = erase_chip_block_jedec,
5412 }
5413 },
Sean Nelson35727f72010-01-28 23:55:12 +00005414 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005415 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005416 },
5417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005418 {
5419 .vendor = "SST",
5420 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00005421 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005422 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005423 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 .total_size = 64,
5425 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005426 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005427 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005429 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005430 .block_erasers =
5431 {
5432 {
5433 .eraseblocks = { {4 * 1024, 16} },
5434 .block_erase = erase_sector_jedec,
5435 }, {
5436 .eraseblocks = { {64 * 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,
FENG yu ningff692fb2008-12-08 18:15:10 +00005442 },
5443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005444 {
5445 .vendor = "SST",
5446 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00005447 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005448 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005449 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 .total_size = 128,
5451 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005452 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005453 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005455 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005456 .block_erasers =
5457 {
5458 {
5459 .eraseblocks = { {4 * 1024, 32} },
5460 .block_erase = erase_sector_jedec,
5461 }, {
5462 .eraseblocks = { {128 * 1024, 1} },
5463 .block_erase = erase_chip_block_jedec,
5464 }
5465 },
Sean Nelson35727f72010-01-28 23:55:12 +00005466 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005467 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005468 },
5469
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005470 {
5471 .vendor = "SST",
5472 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00005473 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005474 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005475 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005476 .total_size = 256,
5477 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005478 .feature_bits = FEATURE_EITHER_RESET,
5479 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005480 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005481 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005482 .block_erasers =
5483 {
5484 {
5485 .eraseblocks = { {4 * 1024, 64} },
5486 .block_erase = erase_sector_jedec,
5487 }, {
5488 .eraseblocks = { {256 * 1024, 1} },
5489 .block_erase = erase_chip_block_jedec,
5490 }
5491 },
Sean Nelson35727f72010-01-28 23:55:12 +00005492 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005493 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005494 },
5495
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005496 {
5497 .vendor = "SST",
5498 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005499 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005500 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005501 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005502 .total_size = 512,
5503 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005504 .feature_bits = FEATURE_EITHER_RESET,
5505 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005506 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005507 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005508 .block_erasers =
5509 {
5510 {
5511 .eraseblocks = { {4 * 1024, 128} },
5512 .block_erase = erase_sector_jedec,
5513 }, {
5514 .eraseblocks = { {512 * 1024, 1} },
5515 .block_erase = erase_chip_block_jedec,
5516 }
5517 },
Sean Nelson35727f72010-01-28 23:55:12 +00005518 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005519 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00005520 },
FENG yu ningff692fb2008-12-08 18:15:10 +00005521
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005522 {
5523 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00005524 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005525 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005526 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005527 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00005528 .total_size = 1024,
5529 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005530 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00005531 .tested = TEST_UNTESTED,
5532 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005533 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005534 .block_erasers =
5535 {
5536 {
5537 .eraseblocks = { {4 * 1024, 256} },
5538 .block_erase = erase_sector_jedec,
5539 }, {
5540 .eraseblocks = { {64 * 1024, 16} },
5541 .block_erase = erase_block_jedec,
5542 }, {
5543 .eraseblocks = { {1024 * 1024, 1} },
5544 .block_erase = erase_chip_block_jedec,
5545 }
5546 },
Sean Nelson35727f72010-01-28 23:55:12 +00005547 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005548 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00005549 },
5550
5551 {
5552 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005553 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005554 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005555 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005556 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005557 .total_size = 256,
5558 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005559 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005560 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005561 .probe = probe_jedec,
5562 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005563 .block_erasers =
5564 {
5565 {
5566 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005567 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005568 }, {
5569 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005570 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005571 }, {
5572 .eraseblocks = { {256 * 1024, 1} },
5573 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5574 }
5575 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005576 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005577 .unlock = unlock_sst_fwhub,
5578 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005579 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005580 },
5581
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005582 {
5583 .vendor = "SST",
5584 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005585 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005586 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005587 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005588 .total_size = 384,
5589 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005590 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00005591 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005592 .probe = probe_jedec,
5593 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005594 .block_erasers =
5595 {
5596 {
5597 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005598 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005599 }, {
5600 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005601 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005602 }, {
5603 .eraseblocks = { {384 * 1024, 1} },
5604 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5605 }
5606 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005607 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005608 .unlock = unlock_sst_fwhub,
5609 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005610 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005611 },
5612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005613 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005614 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5615 * and is only honored for 64k block erase, but not 4k sector erase.
5616 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005617 .vendor = "SST",
5618 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005619 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005621 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005622 .total_size = 512,
5623 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005624 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005625 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005626 .probe = probe_jedec,
5627 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005628 .block_erasers =
5629 {
5630 {
5631 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005632 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005633 }, {
5634 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005635 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005636 }, {
5637 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005638 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00005639 },
5640 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005641 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005642 .unlock = unlock_sst_fwhub,
5643 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005644 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005645 },
5646
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005647 {
5648 .vendor = "SST",
5649 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005650 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005651 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005652 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005653 .total_size = 512,
5654 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005655 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005656 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005657 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005658 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005659 .block_erasers =
5660 {
5661 {
5662 .eraseblocks = { {4 * 1024, 128} },
5663 .block_erase = erase_sector_49lfxxxc,
5664 }, {
5665 .eraseblocks = {
5666 {64 * 1024, 7},
5667 {32 * 1024, 1},
5668 {8 * 1024, 2},
5669 {16 * 1024, 1},
5670 },
Sean Nelson69e58112010-03-23 17:10:28 +00005671 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005672 }
5673 },
Sean Nelson69e58112010-03-23 17:10:28 +00005674 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005675 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005676 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005677 },
5678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005679 {
5680 .vendor = "SST",
5681 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005682 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005683 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005684 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .total_size = 1024,
5686 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005687 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005688 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005689 .probe = probe_jedec,
5690 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005691 .block_erasers =
5692 {
5693 {
5694 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005695 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005696 }, {
5697 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005698 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005699 }, {
5700 .eraseblocks = { {1024 * 1024, 1} },
5701 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5702 }
5703 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005704 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00005705 .unlock = unlock_sst_fwhub,
5706 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005707 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005708 },
5709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005710 {
5711 .vendor = "SST",
5712 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005713 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005715 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005716 .total_size = 1024,
5717 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005718 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005719 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005720 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005721 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005722 .block_erasers =
5723 {
5724 {
5725 .eraseblocks = { {4 * 1024, 256} },
5726 .block_erase = erase_sector_49lfxxxc,
5727 }, {
5728 .eraseblocks = {
5729 {64 * 1024, 15},
5730 {32 * 1024, 1},
5731 {8 * 1024, 2},
5732 {16 * 1024, 1},
5733 },
Sean Nelson69e58112010-03-23 17:10:28 +00005734 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005735 }
5736 },
Sean Nelson69e58112010-03-23 17:10:28 +00005737 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005738 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005739 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005740 },
5741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005742 {
5743 .vendor = "SST",
5744 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005745 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005746 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005747 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005748 .total_size = 2048,
5749 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005750 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005751 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005752 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005753 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005754 .block_erasers =
5755 {
5756 {
5757 .eraseblocks = { {4 * 1024, 512} },
5758 .block_erase = erase_sector_49lfxxxc,
5759 }, {
5760 .eraseblocks = {
5761 {64 * 1024, 31},
5762 {32 * 1024, 1},
5763 {8 * 1024, 2},
5764 {16 * 1024, 1},
5765 },
Sean Nelson69e58112010-03-23 17:10:28 +00005766 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005767 }
5768 },
Sean Nelson69e58112010-03-23 17:10:28 +00005769 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005770 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005771 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005772 },
5773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005774 {
5775 .vendor = "SST",
5776 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005777 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005778 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005779 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005780 .total_size = 256,
5781 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005782 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005783 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005785 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005786 .block_erasers =
5787 {
5788 {
5789 .eraseblocks = { {4 * 1024, 64} },
5790 .block_erase = erase_sector_jedec,
5791 }, {
5792 .eraseblocks = { {16 * 1024, 16} },
5793 .block_erase = erase_block_jedec,
5794 }, {
5795 .eraseblocks = { {256 * 1024, 1} },
5796 .block_erase = NULL,
5797 }
5798 },
Sean Nelson35727f72010-01-28 23:55:12 +00005799 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005800 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005801 },
5802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005803 {
5804 .vendor = "SST",
5805 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005806 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005807 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005808 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005809 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005810 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005811 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005812 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005813 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005814 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005815 .block_erasers =
5816 {
5817 {
5818 .eraseblocks = { {4 * 1024, 64} },
5819 .block_erase = erase_sector_jedec,
5820 }, {
5821 .eraseblocks = { {16 * 1024, 16} },
5822 .block_erase = erase_block_jedec,
5823 }, {
5824 .eraseblocks = { {256 * 1024, 1} },
5825 .block_erase = NULL,
5826 }
5827 },
Sean Nelson35727f72010-01-28 23:55:12 +00005828 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005829 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005830 },
5831
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005832 {
5833 .vendor = "SST",
5834 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005835 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005836 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005837 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005838 .total_size = 512,
5839 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005840 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005841 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005842 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00005843 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005844 .block_erasers =
5845 {
5846 {
5847 .eraseblocks = { {4 * 1024, 128} },
5848 .block_erase = erase_sector_jedec,
5849 }, {
5850 .eraseblocks = { {64 * 1024, 8} },
5851 .block_erase = erase_block_jedec,
5852 }, {
5853 .eraseblocks = { {512 * 1024, 1} },
5854 .block_erase = NULL,
5855 }
5856 },
Sean Nelson35727f72010-01-28 23:55:12 +00005857 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005858 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005859 },
5860
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005861 {
5862 .vendor = "SST",
5863 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005864 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005865 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005866 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005867 .total_size = 512,
5868 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005869 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005870 .tested = TEST_OK_PRE,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005871 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005872 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005873 .block_erasers =
5874 {
5875 {
5876 .eraseblocks = { {4 * 1024, 128} },
5877 .block_erase = erase_sector_jedec,
5878 }, {
5879 .eraseblocks = { {64 * 1024, 8} },
5880 .block_erase = erase_block_jedec,
5881 }, {
5882 .eraseblocks = { {512 * 1024, 1} },
5883 .block_erase = NULL,
5884 }
5885 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00005886 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00005887 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005888 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005889 },
5890
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005891 {
5892 .vendor = "SST",
5893 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005894 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005895 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005896 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005897 .total_size = 1024,
5898 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005899 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005900 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005901 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005902 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005903 .block_erasers =
5904 {
5905 {
5906 .eraseblocks = { {4 * 1024, 256} },
5907 .block_erase = erase_sector_jedec,
5908 }, {
5909 .eraseblocks = { {64 * 1024, 16} },
5910 .block_erase = erase_block_jedec,
5911 }, {
5912 .eraseblocks = { {1024 * 1024, 1} },
5913 .block_erase = NULL,
5914 }
5915 },
Sean Nelson35727f72010-01-28 23:55:12 +00005916 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005917 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005918 },
5919
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005920 {
5921 .vendor = "SST",
5922 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005923 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005925 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005926 .total_size = 2048,
5927 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005928 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005929 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005930 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005931 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005932 .block_erasers =
5933 {
5934 {
5935 .eraseblocks = { {4 * 1024, 512} },
5936 .block_erase = erase_sector_49lfxxxc,
5937 }, {
5938 .eraseblocks = {
5939 {64 * 1024, 31},
5940 {32 * 1024, 1},
5941 {8 * 1024, 2},
5942 {16 * 1024, 1},
5943 },
Sean Nelson69e58112010-03-23 17:10:28 +00005944 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005945 }
5946 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005947 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00005948 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005949 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005950 },
5951
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005952 {
5953 .vendor = "ST",
5954 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005955 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005956 .manufacture_id = ST_ID,
5957 .model_id = ST_M25P05A,
5958 .total_size = 64,
5959 .page_size = 256,
5960 .tested = TEST_UNTESTED,
5961 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005962 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005963 .block_erasers =
5964 {
5965 {
5966 .eraseblocks = { {32 * 1024, 2} },
5967 .block_erase = spi_block_erase_d8,
5968 }, {
5969 .eraseblocks = { {64 * 1024, 1} },
5970 .block_erase = spi_block_erase_c7,
5971 }
5972 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005973 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005974 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005975 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005976 },
5977
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005978 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5979 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005980 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005981 * only is successful if RDID does not work.
5982 */
5983 {
5984 .vendor = "ST",
5985 .name = "M25P05.RES",
5986 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005987 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005988 .model_id = ST_M25P05_RES,
5989 .total_size = 64,
5990 .page_size = 256,
5991 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005992 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005993 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005994 .block_erasers =
5995 {
5996 {
5997 .eraseblocks = { {32 * 1024, 2} },
5998 .block_erase = spi_block_erase_d8,
5999 }, {
6000 .eraseblocks = { {64 * 1024, 1} },
6001 .block_erase = spi_block_erase_c7,
6002 }
6003 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006004 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006005 .write = spi_chip_write_1, /* 128 */
6006 .read = spi_chip_read,
6007 },
6008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006009 {
6010 .vendor = "ST",
6011 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006013 .manufacture_id = ST_ID,
6014 .model_id = ST_M25P10A,
6015 .total_size = 128,
6016 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006017 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006019 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006020 .block_erasers =
6021 {
6022 {
6023 .eraseblocks = { {32 * 1024, 4} },
6024 .block_erase = spi_block_erase_d8,
6025 }, {
6026 .eraseblocks = { {128 * 1024, 1} },
6027 .block_erase = spi_block_erase_c7,
6028 }
6029 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006030 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006031 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006033 },
6034
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006035 /* The ST M25P10 has the same problem as the M25P05. */
6036 {
6037 .vendor = "ST",
6038 .name = "M25P10.RES",
6039 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006040 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006041 .model_id = ST_M25P10_RES,
6042 .total_size = 128,
6043 .page_size = 256,
6044 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006045 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006046 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006047 .block_erasers =
6048 {
6049 {
6050 .eraseblocks = { {32 * 1024, 4} },
6051 .block_erase = spi_block_erase_d8,
6052 }, {
6053 .eraseblocks = { {128 * 1024, 1} },
6054 .block_erase = spi_block_erase_c7,
6055 }
6056 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006057 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00006058 .write = spi_chip_write_1, /* 128 */
6059 .read = spi_chip_read,
6060 },
6061
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006062 {
6063 .vendor = "ST",
6064 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006065 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006066 .manufacture_id = ST_ID,
6067 .model_id = ST_M25P20,
6068 .total_size = 256,
6069 .page_size = 256,
6070 .tested = TEST_UNTESTED,
6071 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006072 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006073 .block_erasers =
6074 {
6075 {
6076 .eraseblocks = { {64 * 1024, 4} },
6077 .block_erase = spi_block_erase_d8,
6078 }, {
6079 .eraseblocks = { {256 * 1024, 1} },
6080 .block_erase = spi_block_erase_c7,
6081 }
6082 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006083 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006084 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006085 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006086 },
6087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006088 {
6089 .vendor = "ST",
6090 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006091 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006092 .manufacture_id = ST_ID,
6093 .model_id = ST_M25P40,
6094 .total_size = 512,
6095 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006096 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006097 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006098 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006099 .block_erasers =
6100 {
6101 {
6102 .eraseblocks = { {64 * 1024, 8} },
6103 .block_erase = spi_block_erase_d8,
6104 }, {
6105 .eraseblocks = { {512 * 1024, 1} },
6106 .block_erase = spi_block_erase_c7,
6107 }
6108 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006109 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006110 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006111 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006112 },
6113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006114 {
6115 .vendor = "ST",
6116 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006117 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006118 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006119 .model_id = ST_M25P40_RES,
6120 .total_size = 512,
6121 .page_size = 256,
6122 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00006123 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006124 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006125 .block_erasers =
6126 {
6127 {
6128 .eraseblocks = { {64 * 1024, 8} },
6129 .block_erase = spi_block_erase_d8,
6130 }, {
6131 .eraseblocks = { {512 * 1024, 1} },
6132 .block_erase = spi_block_erase_c7,
6133 }
6134 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006135 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006136 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006137 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006138 },
6139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 {
6141 .vendor = "ST",
6142 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006143 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006144 .manufacture_id = ST_ID,
6145 .model_id = ST_M25P80,
6146 .total_size = 1024,
6147 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006148 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006149 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006150 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006151 .block_erasers =
6152 {
6153 {
6154 .eraseblocks = { {64 * 1024, 16} },
6155 .block_erase = spi_block_erase_d8,
6156 }, {
6157 .eraseblocks = { {1024 * 1024, 1} },
6158 .block_erase = spi_block_erase_c7,
6159 }
6160 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006161 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006162 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006163 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006164 },
6165
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006166 {
6167 .vendor = "ST",
6168 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006169 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006170 .manufacture_id = ST_ID,
6171 .model_id = ST_M25P16,
6172 .total_size = 2048,
6173 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006174 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006175 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006176 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006177 .block_erasers =
6178 {
6179 {
6180 .eraseblocks = { {64 * 1024, 32} },
6181 .block_erase = spi_block_erase_d8,
6182 }, {
6183 .eraseblocks = { {2 * 1024 * 1024, 1} },
6184 .block_erase = spi_block_erase_c7,
6185 }
6186 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006187 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006188 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006189 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006190 },
6191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 {
6193 .vendor = "ST",
6194 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006195 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006196 .manufacture_id = ST_ID,
6197 .model_id = ST_M25P32,
6198 .total_size = 4096,
6199 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006200 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006201 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006202 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006203 .block_erasers =
6204 {
6205 {
6206 .eraseblocks = { {64 * 1024, 64} },
6207 .block_erase = spi_block_erase_d8,
6208 }, {
6209 .eraseblocks = { {4 * 1024 * 1024, 1} },
6210 .block_erase = spi_block_erase_c7,
6211 }
6212 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006213 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006214 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006215 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006216 },
6217
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006218 {
6219 .vendor = "ST",
6220 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006221 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006222 .manufacture_id = ST_ID,
6223 .model_id = ST_M25P64,
6224 .total_size = 8192,
6225 .page_size = 256,
6226 .tested = TEST_UNTESTED,
6227 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006228 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006229 .block_erasers =
6230 {
6231 {
6232 .eraseblocks = { {64 * 1024, 128} },
6233 .block_erase = spi_block_erase_d8,
6234 }, {
6235 .eraseblocks = { {8 * 1024 * 1024, 1} },
6236 .block_erase = spi_block_erase_c7,
6237 }
6238 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006239 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006240 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006241 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006242 },
6243
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006244 {
6245 .vendor = "ST",
6246 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006247 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006248 .manufacture_id = ST_ID,
6249 .model_id = ST_M25P128,
6250 .total_size = 16384,
6251 .page_size = 256,
6252 .tested = TEST_UNTESTED,
6253 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006254 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006255 .block_erasers =
6256 {
6257 {
6258 .eraseblocks = { {256 * 1024, 64} },
6259 .block_erase = spi_block_erase_d8,
6260 }, {
6261 .eraseblocks = { {16 * 1024 * 1024, 1} },
6262 .block_erase = spi_block_erase_c7,
6263 }
6264 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006265 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006266 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006267 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006268 },
6269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006270 {
6271 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00006272 .name = "M25PX32",
6273 .bustype = CHIP_BUSTYPE_SPI,
6274 .manufacture_id = ST_ID,
6275 .model_id = ST_M25PX32,
6276 .total_size = 4096,
6277 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006278 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006279 .probe = probe_spi_rdid,
6280 .probe_timing = TIMING_ZERO,
6281 .block_erasers =
6282 {
6283 {
6284 .eraseblocks = { { 4 * 1024, 1024 } },
6285 .block_erase = spi_block_erase_20,
6286 }, {
6287 .eraseblocks = { {64 * 1024, 64} },
6288 .block_erase = spi_block_erase_d8,
6289 }, {
6290 .eraseblocks = { {4 * 1024 * 1024, 1} },
6291 .block_erase = spi_block_erase_c7,
6292 }
6293 },
6294 .unlock = spi_disable_blockprotect,
6295 .write = spi_chip_write_256,
6296 .read = spi_chip_read,
6297 },
6298
6299 {
6300 .vendor = "ST",
6301 .name = "M25PX64",
6302 .bustype = CHIP_BUSTYPE_SPI,
6303 .manufacture_id = ST_ID,
6304 .model_id = ST_M25PX64,
6305 .total_size = 8192,
6306 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006307 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00006308 .probe = probe_spi_rdid,
6309 .probe_timing = TIMING_ZERO,
6310 .block_erasers =
6311 {
6312 {
6313 .eraseblocks = { { 4 * 1024, 2048 } },
6314 .block_erase = spi_block_erase_20,
6315 }, {
6316 .eraseblocks = { {64 * 1024, 128} },
6317 .block_erase = spi_block_erase_d8,
6318 }, {
6319 .eraseblocks = { {8 * 1024 * 1024, 1} },
6320 .block_erase = spi_block_erase_c7,
6321 }
6322 },
6323 .unlock = spi_disable_blockprotect,
6324 .write = spi_chip_write_256,
6325 .read = spi_chip_read,
6326 },
6327
6328 {
6329 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006330 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006331 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006332 .manufacture_id = ST_ID,
6333 .model_id = ST_M29F002B,
6334 .total_size = 256,
6335 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006336 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006337 .tested = TEST_UNTESTED,
6338 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006339 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006340 .block_erasers =
6341 {
6342 {
6343 .eraseblocks = {
6344 {16 * 1024, 1},
6345 {8 * 1024, 2},
6346 {32 * 1024, 1},
6347 {64 * 1024, 3},
6348 },
6349 .block_erase = erase_sector_jedec,
6350 }, {
6351 .eraseblocks = { {256 * 1024, 1} },
6352 .block_erase = erase_chip_block_jedec,
6353 }
6354 },
Sean Nelson35727f72010-01-28 23:55:12 +00006355 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006357 },
6358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006359 {
6360 .vendor = "ST",
6361 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006362 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006363 .manufacture_id = ST_ID,
6364 .model_id = ST_M29F002T,
6365 .total_size = 256,
6366 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006367 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6368 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006369 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006370 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006371 .block_erasers =
6372 {
6373 {
6374 .eraseblocks = {
6375 {64 * 1024, 3},
6376 {32 * 1024, 1},
6377 {8 * 1024, 2},
6378 {16 * 1024, 1},
6379 },
6380 .block_erase = erase_sector_jedec,
6381 }, {
6382 .eraseblocks = { {256 * 1024, 1} },
6383 .block_erase = erase_chip_block_jedec,
6384 }
6385 },
Sean Nelson35727f72010-01-28 23:55:12 +00006386 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006387 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006388 },
6389
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006390 {
6391 .vendor = "ST",
6392 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006393 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006394 .manufacture_id = ST_ID,
6395 .model_id = ST_M29F040B,
6396 .total_size = 512,
6397 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006398 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6399 .tested = TEST_UNTESTED,
6400 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00006401 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
Sean Nelson56358aa2010-01-19 16:08:51 +00006402 .block_erasers =
6403 {
6404 {
6405 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00006406 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006407 }, {
6408 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006409 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00006410 }
6411 },
Sean Nelson35727f72010-01-28 23:55:12 +00006412 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006413 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006414 },
6415
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006416 {
Sean Nelson35727f72010-01-28 23:55:12 +00006417 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006418 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006419 .name = "M29F400BB",
6420 .bustype = CHIP_BUSTYPE_PARALLEL,
6421 .manufacture_id = ST_ID,
6422 .model_id = ST_M29F400BB,
6423 .total_size = 512,
6424 .page_size = 64 * 1024,
6425 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006426 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006427 .probe = probe_m29f400bt,
6428 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6429 .block_erasers =
6430 {
6431 {
6432 .eraseblocks = {
6433 {16 * 1024, 1},
6434 {8 * 1024, 2},
6435 {32 * 1024, 1},
6436 {64 * 1024, 7},
6437 },
6438 .block_erase = block_erase_m29f400bt,
6439 }, {
6440 .eraseblocks = { {512 * 1024, 1} },
6441 .block_erase = block_erase_chip_m29f400bt,
6442 }
6443 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006444 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006445 .read = read_memmapped,
6446 },
6447 {
6448 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6449 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006450 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006451 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006452 .manufacture_id = ST_ID,
6453 .model_id = ST_M29F400BT,
6454 .total_size = 512,
6455 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006456 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006457 .tested = TEST_UNTESTED,
6458 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006459 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006460 .block_erasers =
6461 {
6462 {
6463 .eraseblocks = {
6464 {64 * 1024, 7},
6465 {32 * 1024, 1},
6466 {8 * 1024, 2},
6467 {16 * 1024, 1},
6468 },
6469 .block_erase = block_erase_m29f400bt,
6470 }, {
6471 .eraseblocks = { {512 * 1024, 1} },
6472 .block_erase = block_erase_chip_m29f400bt,
6473 }
6474 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00006475 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006476 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006477 },
6478
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006479 {
6480 .vendor = "ST",
6481 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006482 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006483 .manufacture_id = ST_ID,
6484 .model_id = ST_M29W010B,
6485 .total_size = 128,
6486 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006487 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006488 .tested = TEST_UNTESTED,
6489 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006490 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006491 .block_erasers =
6492 {
6493 {
6494 .eraseblocks = { {16 * 1024, 8}, },
6495 .block_erase = erase_sector_jedec,
6496 }, {
6497 .eraseblocks = { {128 * 1024, 1} },
6498 .block_erase = erase_chip_block_jedec,
6499 }
6500 },
Sean Nelson35727f72010-01-28 23:55:12 +00006501 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006502 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006503 },
6504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006505 {
6506 .vendor = "ST",
6507 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006508 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006509 .manufacture_id = ST_ID,
6510 .model_id = ST_M29W040B,
6511 .total_size = 512,
6512 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006513 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006514 .tested = TEST_UNTESTED,
6515 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006516 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006517 .block_erasers =
6518 {
6519 {
6520 .eraseblocks = { {64 * 1024, 8}, },
6521 .block_erase = erase_sector_jedec,
6522 }, {
6523 .eraseblocks = { {512 * 1024, 1} },
6524 .block_erase = erase_chip_block_jedec,
6525 }
6526 },
Sean Nelson35727f72010-01-28 23:55:12 +00006527 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006528 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006529 },
6530
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006531 {
6532 .vendor = "ST",
6533 .name = "M29W512B",
6534 .bustype = CHIP_BUSTYPE_PARALLEL,
6535 .manufacture_id = ST_ID,
6536 .model_id = ST_M29W512B,
6537 .total_size = 64,
6538 .page_size = 64 * 1024,
6539 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006540 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006541 .probe = probe_jedec,
6542 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00006543 .block_erasers =
6544 {
6545 {
6546 .eraseblocks = { {64 * 1024, 1} },
6547 .block_erase = erase_chip_block_jedec,
6548 }
6549 },
6550 .write = write_jedec_1,
6551 .read = read_memmapped,
6552 },
6553
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006554 {
6555 .vendor = "ST",
6556 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00006557 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006558 .manufacture_id = ST_ID,
6559 .model_id = ST_M50FLW040A,
6560 .total_size = 512,
6561 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006562 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006563 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006564 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006565 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006566 .block_erasers =
6567 {
6568 {
Sean Nelson329bde72010-01-19 16:39:19 +00006569 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006570 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006571 {64 * 1024, 5}, /* block */
6572 {4 * 1024, 16}, /* sector */
6573 {4 * 1024, 16}, /* sector */
6574 },
6575 .block_erase = NULL,
6576 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006577 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006578 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006579 }, {
6580 .eraseblocks = { {512 * 1024, 1} },
6581 .block_erase = erase_chip_stm50flw0x0x,
6582 }
6583 },
Sean Nelson28accc22010-03-19 18:47:06 +00006584 .unlock = unlock_stm50flw0x0x,
6585 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006586 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006587 },
6588
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006589 {
6590 .vendor = "ST",
6591 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00006592 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006593 .manufacture_id = ST_ID,
6594 .model_id = ST_M50FLW040B,
6595 .total_size = 512,
6596 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006597 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006598 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006599 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006600 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006601 .block_erasers =
6602 {
6603 {
Sean Nelson329bde72010-01-19 16:39:19 +00006604 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006605 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006606 {4 * 1024, 16}, /* sector */
6607 {64 * 1024, 5}, /* block */
6608 {4 * 1024, 16}, /* sector */
6609 },
6610 .block_erase = NULL,
6611 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006612 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006613 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006614 }, {
6615 .eraseblocks = { {512 * 1024, 1} },
6616 .block_erase = erase_chip_stm50flw0x0x,
6617 }
6618 },
Sean Nelson28accc22010-03-19 18:47:06 +00006619 .unlock = unlock_stm50flw0x0x,
6620 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006621 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006622 },
6623
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006624 {
6625 .vendor = "ST",
6626 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00006627 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .manufacture_id = ST_ID,
6629 .model_id = ST_M50FLW080A,
6630 .total_size = 1024,
6631 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006632 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006633 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00006634 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006635 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006636 .block_erasers =
6637 {
6638 {
Sean Nelson329bde72010-01-19 16:39:19 +00006639 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006640 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006641 {64 * 1024, 13}, /* block */
6642 {4 * 1024, 16}, /* sector */
6643 {4 * 1024, 16}, /* sector */
6644 },
6645 .block_erase = NULL,
6646 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006647 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006648 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006649 }, {
6650 .eraseblocks = { {1024 * 1024, 1} },
6651 .block_erase = erase_chip_stm50flw0x0x,
6652 }
6653 },
Sean Nelson28accc22010-03-19 18:47:06 +00006654 .unlock = unlock_stm50flw0x0x,
6655 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006656 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006657 },
6658
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006659 {
6660 .vendor = "ST",
6661 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00006662 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006663 .manufacture_id = ST_ID,
6664 .model_id = ST_M50FLW080B,
6665 .total_size = 1024,
6666 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006667 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006668 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006669 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006670 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00006671 .block_erasers =
6672 {
6673 {
Sean Nelson329bde72010-01-19 16:39:19 +00006674 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00006675 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00006676 {4 * 1024, 16}, /* sector */
6677 {64 * 1024, 13}, /* block */
6678 {4 * 1024, 16}, /* sector */
6679 },
6680 .block_erase = NULL,
6681 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00006682 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006683 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006684 }, {
6685 .eraseblocks = { {1024 * 1024, 1} },
6686 .block_erase = erase_chip_stm50flw0x0x,
6687 }
6688 },
Sean Nelson28accc22010-03-19 18:47:06 +00006689 .unlock = unlock_stm50flw0x0x,
6690 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006691 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006692 },
6693
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006694 {
6695 .vendor = "ST",
6696 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00006697 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006698 .manufacture_id = ST_ID,
6699 .model_id = ST_M50FW002,
6700 .total_size = 256,
6701 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006702 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006703 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006704 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006705 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006706 .block_erasers =
6707 {
6708 {
6709 .eraseblocks = {
6710 {64 * 1024, 3},
6711 {32 * 1024, 1},
6712 {8 * 1024, 2},
6713 {16 * 1024, 1},
6714 },
Sean Nelson28accc22010-03-19 18:47:06 +00006715 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006716 }, {
6717 .eraseblocks = { {256 * 1024, 1} },
6718 .block_erase = erase_chip_stm50flw0x0x,
6719 }
6720 },
Sean Nelson28accc22010-03-19 18:47:06 +00006721 .unlock = unlock_stm50flw0x0x,
6722 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006723 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006724 },
6725
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006726 {
6727 .vendor = "ST",
6728 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00006729 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006730 .manufacture_id = ST_ID,
6731 .model_id = ST_M50FW016,
6732 .total_size = 2048,
6733 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006734 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006735 .tested = TEST_UNTESTED,
6736 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006737 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006738 .block_erasers =
6739 {
6740 {
6741 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006742 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006743 }, {
6744 .eraseblocks = { {2 * 1024 * 1024, 1} },
6745 .block_erase = erase_chip_stm50flw0x0x,
6746 }
6747 },
Sean Nelson28accc22010-03-19 18:47:06 +00006748 .unlock = unlock_stm50flw0x0x,
6749 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006750 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006751 },
6752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006753 {
6754 .vendor = "ST",
6755 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00006756 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006757 .manufacture_id = ST_ID,
6758 .model_id = ST_M50FW040,
6759 .total_size = 512,
6760 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006761 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006762 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006763 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006764 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006765 .block_erasers =
6766 {
6767 {
6768 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006769 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006770 }, {
6771 .eraseblocks = { {512 * 1024, 1} },
6772 .block_erase = erase_chip_stm50flw0x0x,
6773 }
6774 },
Sean Nelson28accc22010-03-19 18:47:06 +00006775 .unlock = unlock_stm50flw0x0x,
6776 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006777 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006778 },
6779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006780 {
6781 .vendor = "ST",
6782 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00006783 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006784 .manufacture_id = ST_ID,
6785 .model_id = ST_M50FW080,
6786 .total_size = 1024,
6787 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006788 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00006789 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006790 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006791 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00006792 .block_erasers =
6793 {
6794 {
6795 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006796 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006797 }, {
6798 .eraseblocks = { {1024 * 1024, 1} },
6799 .block_erase = erase_chip_stm50flw0x0x,
6800 }
6801 },
Sean Nelson28accc22010-03-19 18:47:06 +00006802 .unlock = unlock_stm50flw0x0x,
6803 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006804 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006805 },
6806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006807 {
6808 .vendor = "ST",
6809 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006810 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006811 .manufacture_id = ST_ID,
6812 .model_id = ST_M50LPW116,
6813 .total_size = 2048,
6814 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006815 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006816 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006817 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006818 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006819 .block_erasers =
6820 {
6821 {
6822 .eraseblocks = {
6823 {4 * 1024, 16},
6824 {64 * 1024, 30},
6825 {32 * 1024, 1},
6826 {8 * 1024, 2},
6827 {16 * 1024, 1},
6828 },
Sean Nelson28accc22010-03-19 18:47:06 +00006829 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006830 }, {
6831 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006832 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006833 }
6834 },
Sean Nelson28accc22010-03-19 18:47:06 +00006835 .unlock = unlock_stm50flw0x0x,
6836 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006837 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006838 },
6839
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006840 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006841 .vendor = "SyncMOS/MoselVitelic",
6842 .name = "{F,S,V}29C51001B",
Urja Rannikko038a3122009-06-28 19:19:25 +00006843 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006844 .manufacture_id = SYNCMOS_MVC_ID,
6845 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006846 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006847 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006848 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006849 .tested = TEST_UNTESTED,
6850 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006851 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006852 .block_erasers =
6853 {
6854 {
6855 .eraseblocks = { {512, 256} },
6856 .block_erase = erase_sector_jedec,
6857 }, {
6858 .eraseblocks = { {128 * 1024, 1} },
6859 .block_erase = erase_chip_block_jedec,
6860 },
6861 },
Sean Nelson35727f72010-01-28 23:55:12 +00006862 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006863 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006864 },
6865
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006866 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006867 .vendor = "SyncMOS/MoselVitelic",
6868 .name = "{F,S,V}29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006869 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006870 .manufacture_id = SYNCMOS_MVC_ID,
6871 .model_id = SM_MVC_29C51001T,
6872 .total_size = 128,
6873 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00006874 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006875 .tested = TEST_UNTESTED,
6876 .probe = probe_jedec,
6877 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6878 .block_erasers =
6879 {
6880 {
6881 .eraseblocks = { {512, 256} },
6882 .block_erase = erase_sector_jedec,
6883 }, {
6884 .eraseblocks = { {128 * 1024, 1} },
6885 .block_erase = erase_chip_block_jedec,
6886 },
6887 },
6888 .write = write_jedec_1,
6889 .read = read_memmapped,
6890 },
6891
6892 {
6893 .vendor = "SyncMOS/MoselVitelic",
6894 .name = "{F,S,V}29C51002B",
6895 .bustype = CHIP_BUSTYPE_PARALLEL,
6896 .manufacture_id = SYNCMOS_MVC_ID,
6897 .model_id = SM_MVC_29C51002B,
6898 .total_size = 256,
6899 .page_size = 512,
6900 .feature_bits = FEATURE_EITHER_RESET,
6901 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006902 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006903 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006904 .block_erasers =
6905 {
6906 {
6907 .eraseblocks = { {512, 512} },
6908 .block_erase = erase_sector_jedec,
6909 }, {
6910 .eraseblocks = { {256 * 1024, 1} },
6911 .block_erase = erase_chip_block_jedec,
6912 },
6913 },
Sean Nelson35727f72010-01-28 23:55:12 +00006914 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006915 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006916 },
6917
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006918 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006919 .vendor = "SyncMOS/MoselVitelic",
6920 .name = "{F,S,V}29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006921 .bustype = CHIP_BUSTYPE_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006922 .manufacture_id = SYNCMOS_MVC_ID,
6923 .model_id = SM_MVC_29C51002T,
6924 .total_size = 256,
6925 .page_size = 512,
6926 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006927 .tested = TEST_OK_PRE,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006928 .probe = probe_jedec,
6929 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6930 .block_erasers =
6931 {
6932 {
6933 .eraseblocks = { {512, 512} },
6934 .block_erase = erase_sector_jedec,
6935 }, {
6936 .eraseblocks = { {256 * 1024, 1} },
6937 .block_erase = erase_chip_block_jedec,
6938 },
6939 },
6940 .write = write_jedec_1,
6941 .read = read_memmapped,
6942 },
6943
6944 {
6945 .vendor = "SyncMOS/MoselVitelic",
6946 .name = "{F,S,V}29C51004B",
6947 .bustype = CHIP_BUSTYPE_PARALLEL,
6948 .manufacture_id = SYNCMOS_MVC_ID,
6949 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006950 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00006951 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006952 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006953 .tested = TEST_UNTESTED,
6954 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006955 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006956 .block_erasers =
6957 {
6958 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00006959 .eraseblocks = { {1024, 512} },
6960 .block_erase = erase_sector_jedec,
6961 }, {
6962 .eraseblocks = { {512 * 1024, 1} },
6963 .block_erase = erase_chip_block_jedec,
6964 },
6965 },
6966 .write = write_jedec_1,
6967 .read = read_memmapped,
6968 },
6969
6970 {
6971 .vendor = "SyncMOS/MoselVitelic",
6972 .name = "{F,S,V}29C51004T",
6973 .bustype = CHIP_BUSTYPE_PARALLEL,
6974 .manufacture_id = SYNCMOS_MVC_ID,
6975 .model_id = SM_MVC_29C51004T,
6976 .total_size = 512,
6977 .page_size = 1024,
6978 .feature_bits = FEATURE_EITHER_RESET,
6979 .tested = TEST_UNTESTED,
6980 .probe = probe_jedec,
6981 .probe_timing = TIMING_ZERO,
6982 .block_erasers =
6983 {
6984 {
6985 .eraseblocks = { {1024, 512} },
6986 .block_erase = erase_sector_jedec,
6987 }, {
6988 .eraseblocks = { {512 * 1024, 1} },
6989 .block_erase = erase_chip_block_jedec,
6990 },
6991 },
6992 .write = write_jedec_1,
6993 .read = read_memmapped,
6994 },
6995
6996 {
6997 .vendor = "SyncMOS/MoselVitelic",
6998 .name = "{S,V}29C31004B",
6999 .bustype = CHIP_BUSTYPE_PARALLEL,
7000 .manufacture_id = SYNCMOS_MVC_ID,
7001 .model_id = SM_MVC_29C31004B,
7002 .total_size = 512,
7003 .page_size = 1024,
7004 .feature_bits = FEATURE_EITHER_RESET,
7005 .tested = TEST_UNTESTED,
7006 .probe = probe_jedec,
7007 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7008 .block_erasers =
7009 {
7010 {
7011 .eraseblocks = { {1024, 512} },
7012 .block_erase = erase_sector_jedec,
7013 }, {
7014 .eraseblocks = { {512 * 1024, 1} },
7015 .block_erase = erase_chip_block_jedec,
7016 },
7017 },
7018 .write = write_jedec_1,
7019 .read = read_memmapped,
7020 },
7021
7022 {
7023 .vendor = "SyncMOS/MoselVitelic",
7024 .name = "{S,V}29C31004T",
7025 .bustype = CHIP_BUSTYPE_PARALLEL,
7026 .manufacture_id = SYNCMOS_MVC_ID,
7027 .model_id = SM_MVC_29C31004T,
7028 .total_size = 512,
7029 .page_size = 1024,
7030 .feature_bits = FEATURE_EITHER_RESET,
7031 .tested = TEST_UNTESTED,
7032 .probe = probe_jedec,
7033 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7034 .block_erasers =
7035 {
7036 {
7037 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00007038 .block_erase = erase_sector_jedec,
7039 }, {
7040 .eraseblocks = { {512 * 1024, 1} },
7041 .block_erase = erase_chip_block_jedec,
7042 },
7043 },
Sean Nelson35727f72010-01-28 23:55:12 +00007044 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007045 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007046 },
7047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007048 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007049 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007050 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00007051 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007052 .manufacture_id = TI_OLD_ID,
7053 .model_id = TI_TMS29F002RB,
7054 .total_size = 256,
7055 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007056 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007057 .tested = TEST_UNTESTED,
7058 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007059 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007060 .block_erasers =
7061 {
7062 {
7063 .eraseblocks = {
7064 {16 * 1024, 1},
7065 {8 * 1024, 2},
7066 {32 * 1024, 1},
7067 {64 * 1024, 3},
7068 },
7069 .block_erase = erase_sector_jedec,
7070 }, {
7071 .eraseblocks = { {256 * 1024, 1} },
7072 .block_erase = erase_chip_block_jedec,
7073 },
7074 },
Sean Nelson35727f72010-01-28 23:55:12 +00007075 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007076 .read = read_memmapped,
7077 },
7078
7079 {
Uwe Hermanna106d152009-05-27 23:17:40 +00007080 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007081 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00007082 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007083 .manufacture_id = TI_OLD_ID,
7084 .model_id = TI_TMS29F002RT,
7085 .total_size = 256,
7086 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00007087 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007088 .tested = TEST_UNTESTED,
7089 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007090 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007091 .block_erasers =
7092 {
7093 {
7094 .eraseblocks = {
7095 {64 * 1024, 3},
7096 {32 * 1024, 1},
7097 {8 * 1024, 2},
7098 {16 * 1024, 1},
7099 },
7100 .block_erase = erase_sector_jedec,
7101 }, {
7102 .eraseblocks = { {256 * 1024, 1} },
7103 .block_erase = erase_chip_block_jedec,
7104 },
7105 },
Sean Nelson35727f72010-01-28 23:55:12 +00007106 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00007107 .read = read_memmapped,
7108 },
7109
7110 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007111 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00007112 .name = "W25Q80",
7113 .bustype = CHIP_BUSTYPE_SPI,
7114 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007115 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007116 .total_size = 1024,
7117 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007118 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007119 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007120 .probe = probe_spi_rdid,
7121 .probe_timing = TIMING_ZERO,
7122 .block_erasers =
7123 {
7124 {
7125 .eraseblocks = { {4 * 1024, 256} },
7126 .block_erase = spi_block_erase_20,
7127 }, {
7128 .eraseblocks = { {32 * 1024, 32} },
7129 .block_erase = spi_block_erase_52,
7130 }, {
7131 .eraseblocks = { {64 * 1024, 16} },
7132 .block_erase = spi_block_erase_d8,
7133 }, {
7134 .eraseblocks = { {1024 * 1024, 1} },
7135 .block_erase = spi_block_erase_60,
7136 }, {
7137 .eraseblocks = { {1024 * 1024, 1} },
7138 .block_erase = spi_block_erase_c7,
7139 }
7140 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007141 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007142 .write = spi_chip_write_256,
7143 .read = spi_chip_read,
7144 },
7145
7146 {
7147 .vendor = "Winbond",
7148 .name = "W25Q16",
7149 .bustype = CHIP_BUSTYPE_SPI,
7150 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007151 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007152 .total_size = 2048,
7153 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007154 .feature_bits = FEATURE_WRSR_WREN,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007155 .tested = TEST_UNTESTED,
7156 .probe = probe_spi_rdid,
7157 .probe_timing = TIMING_ZERO,
7158 .block_erasers =
7159 {
7160 {
7161 .eraseblocks = { {4 * 1024, 512} },
7162 .block_erase = spi_block_erase_20,
7163 }, {
7164 .eraseblocks = { {32 * 1024, 64} },
7165 .block_erase = spi_block_erase_52,
7166 }, {
7167 .eraseblocks = { {64 * 1024, 32} },
7168 .block_erase = spi_block_erase_d8,
7169 }, {
7170 .eraseblocks = { {2 * 1024 * 1024, 1} },
7171 .block_erase = spi_block_erase_60,
7172 }, {
7173 .eraseblocks = { {2 * 1024 * 1024, 1} },
7174 .block_erase = spi_block_erase_c7,
7175 }
7176 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007177 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007178 .write = spi_chip_write_256,
7179 .read = spi_chip_read,
7180 },
7181
7182 {
7183 .vendor = "Winbond",
7184 .name = "W25Q32",
7185 .bustype = CHIP_BUSTYPE_SPI,
7186 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007187 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007188 .total_size = 4096,
7189 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007190 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007191 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007192 .probe = probe_spi_rdid,
7193 .probe_timing = TIMING_ZERO,
7194 .block_erasers =
7195 {
7196 {
7197 .eraseblocks = { {4 * 1024, 1024} },
7198 .block_erase = spi_block_erase_20,
7199 }, {
7200 .eraseblocks = { {32 * 1024, 128} },
7201 .block_erase = spi_block_erase_52,
7202 }, {
7203 .eraseblocks = { {64 * 1024, 64} },
7204 .block_erase = spi_block_erase_d8,
7205 }, {
7206 .eraseblocks = { {4 * 1024 * 1024, 1} },
7207 .block_erase = spi_block_erase_60,
7208 }, {
7209 .eraseblocks = { {4 * 1024 * 1024, 1} },
7210 .block_erase = spi_block_erase_c7,
7211 }
7212 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007213 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00007214 .write = spi_chip_write_256,
7215 .read = spi_chip_read,
7216 },
7217
7218 {
7219 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00007220 .name = "W25Q64",
7221 .bustype = CHIP_BUSTYPE_SPI,
7222 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007223 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00007224 .total_size = 8192,
7225 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007226 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00007227 .tested = TEST_OK_PREW,
David Hendricksc4acec92010-06-24 11:39:57 +00007228 .probe = probe_spi_rdid,
7229 .probe_timing = TIMING_ZERO,
7230 .block_erasers =
7231 {
7232 {
7233 .eraseblocks = { {4 * 1024, 2048} },
7234 .block_erase = spi_block_erase_20,
7235 }, {
7236 .eraseblocks = { {32 * 1024, 256} },
7237 .block_erase = spi_block_erase_52,
7238 }, {
7239 .eraseblocks = { {64 * 1024, 128} },
7240 .block_erase = spi_block_erase_d8,
7241 }, {
7242 .eraseblocks = { {8 * 1024 * 1024, 1} },
7243 .block_erase = spi_block_erase_60,
7244 }, {
7245 .eraseblocks = { {8 * 1024 * 1024, 1} },
7246 .block_erase = spi_block_erase_c7,
7247 }
7248 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007249 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00007250 .write = spi_chip_write_256,
7251 .read = spi_chip_read,
7252 },
7253
7254 {
7255 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007256 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007257 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007258 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007259 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007260 .total_size = 128,
7261 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007262 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007263 .tested = TEST_UNTESTED,
7264 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007265 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007266 .block_erasers =
7267 {
7268 {
7269 .eraseblocks = { {4 * 1024, 32} },
7270 .block_erase = spi_block_erase_20,
7271 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007272 .eraseblocks = { {64 * 1024, 2} },
7273 .block_erase = spi_block_erase_d8,
7274 }, {
7275 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007276 .block_erase = spi_block_erase_c7,
7277 }
7278 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007279 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007280 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007281 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007282 },
7283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007284 {
7285 .vendor = "Winbond",
7286 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007287 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007288 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007289 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007290 .total_size = 256,
7291 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007292 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007293 .tested = TEST_UNTESTED,
7294 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007295 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007296 .block_erasers =
7297 {
7298 {
7299 .eraseblocks = { {4 * 1024, 64} },
7300 .block_erase = spi_block_erase_20,
7301 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007302 .eraseblocks = { {64 * 1024, 4} },
7303 .block_erase = spi_block_erase_d8,
7304 }, {
7305 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007306 .block_erase = spi_block_erase_c7,
7307 }
7308 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007309 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007310 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007311 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007312 },
7313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007314 {
7315 .vendor = "Winbond",
7316 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007317 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007318 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007319 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007320 .total_size = 512,
7321 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007322 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007323 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007324 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007325 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007326 .block_erasers =
7327 {
7328 {
7329 .eraseblocks = { {4 * 1024, 128} },
7330 .block_erase = spi_block_erase_20,
7331 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007332 .eraseblocks = { {64 * 1024, 8} },
7333 .block_erase = spi_block_erase_d8,
7334 }, {
7335 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007336 .block_erase = spi_block_erase_c7,
7337 }
7338 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007339 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007340 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007341 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007342 },
7343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007344 {
7345 .vendor = "Winbond",
7346 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007347 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007348 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007349 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007350 .total_size = 1024,
7351 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007352 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007353 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007354 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007355 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007356 .block_erasers =
7357 {
7358 {
7359 .eraseblocks = { {4 * 1024, 256} },
7360 .block_erase = spi_block_erase_20,
7361 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007362 .eraseblocks = { {64 * 1024, 16} },
7363 .block_erase = spi_block_erase_d8,
7364 }, {
7365 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007366 .block_erase = spi_block_erase_c7,
7367 }
7368 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007369 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007370 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007371 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007372 },
7373
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007374 {
7375 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00007376 .name = "W25x16",
7377 .bustype = CHIP_BUSTYPE_SPI,
7378 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007379 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00007380 .total_size = 2048,
7381 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007382 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007383 .tested = TEST_OK_PRE,
Hector Martina721ae22009-07-11 19:39:11 +00007384 .probe = probe_spi_rdid,
7385 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007386 .block_erasers =
7387 {
7388 {
7389 .eraseblocks = { {4 * 1024, 512} },
7390 .block_erase = spi_block_erase_20,
7391 }, {
7392 .eraseblocks = { {32 * 1024, 64} },
7393 .block_erase = spi_block_erase_52,
7394 }, {
7395 .eraseblocks = { {64 * 1024, 32} },
7396 .block_erase = spi_block_erase_d8,
7397 }, {
7398 .eraseblocks = { {2 * 1024 * 1024, 1} },
7399 .block_erase = spi_block_erase_60,
7400 }, {
7401 .eraseblocks = { {2 * 1024 * 1024, 1} },
7402 .block_erase = spi_block_erase_c7,
7403 }
7404 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007405 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00007406 .write = spi_chip_write_256,
7407 .read = spi_chip_read,
7408 },
7409
7410 {
7411 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00007412 .name = "W25x32",
7413 .bustype = CHIP_BUSTYPE_SPI,
7414 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007415 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00007416 .total_size = 4096,
7417 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007418 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007419 .tested = TEST_OK_PROBE,
7420 .probe = probe_spi_rdid,
7421 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007422 .block_erasers =
7423 {
7424 {
7425 .eraseblocks = { {4 * 1024, 1024} },
7426 .block_erase = spi_block_erase_20,
7427 }, {
7428 .eraseblocks = { {32 * 1024, 128} },
7429 .block_erase = spi_block_erase_52,
7430 }, {
7431 .eraseblocks = { {64 * 1024, 64} },
7432 .block_erase = spi_block_erase_d8,
7433 }, {
7434 .eraseblocks = { {4 * 1024 * 1024, 1} },
7435 .block_erase = spi_block_erase_60,
7436 }, {
7437 .eraseblocks = { {4 * 1024 * 1024, 1} },
7438 .block_erase = spi_block_erase_c7,
7439 }
7440 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007441 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007442 .write = spi_chip_write_256,
7443 .read = spi_chip_read,
7444 },
7445
7446 {
7447 .vendor = "Winbond",
7448 .name = "W25x64",
7449 .bustype = CHIP_BUSTYPE_SPI,
7450 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007451 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00007452 .total_size = 8192,
7453 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00007454 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00007455 .tested = TEST_UNTESTED,
7456 .probe = probe_spi_rdid,
7457 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007458 .block_erasers =
7459 {
7460 {
7461 .eraseblocks = { {4 * 1024, 2048} },
7462 .block_erase = spi_block_erase_20,
7463 }, {
7464 .eraseblocks = { {32 * 1024, 256} },
7465 .block_erase = spi_block_erase_52,
7466 }, {
7467 .eraseblocks = { {64 * 1024, 128} },
7468 .block_erase = spi_block_erase_d8,
7469 }, {
7470 .eraseblocks = { {8 * 1024 * 1024, 1} },
7471 .block_erase = spi_block_erase_60,
7472 }, {
7473 .eraseblocks = { {8 * 1024 * 1024, 1} },
7474 .block_erase = spi_block_erase_c7,
7475 }
7476 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007477 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00007478 .write = spi_chip_write_256,
7479 .read = spi_chip_read,
7480 },
7481
7482 {
7483 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007484 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007485 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007486 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007487 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007488 .total_size = 128,
7489 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007490 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007491 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007492 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007493 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007494 .block_erasers =
7495 {
7496 {
7497 .eraseblocks = { {128 * 1024, 1} },
7498 .block_erase = erase_chip_block_jedec,
7499 }
7500 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007501 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007502 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007503 },
7504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007505 {
7506 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007507 .name = "W29C020(C)/W29C022",
Urja Rannikko161b8852009-06-05 08:47:37 +00007508 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007509 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007510 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007511 .total_size = 256,
7512 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007513 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007514 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007515 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007516 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007517 .block_erasers =
7518 {
7519 {
7520 .eraseblocks = { {256 * 1024, 1} },
7521 .block_erase = erase_chip_block_jedec,
7522 }
7523 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007524 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007525 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007526 },
7527
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007528 {
7529 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007530 .name = "W29C040/P",
Urja Rannikko161b8852009-06-05 08:47:37 +00007531 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007532 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007533 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007534 .total_size = 512,
7535 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00007536 .feature_bits = FEATURE_LONG_RESET,
7537 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007538 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007539 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007540 .block_erasers =
7541 {
7542 {
7543 .eraseblocks = { {512 * 1024, 1} },
7544 .block_erase = erase_chip_block_jedec,
7545 }
7546 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007547 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007548 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007549 },
7550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007551 {
7552 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007553 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Urja Rannikko038a3122009-06-28 19:19:25 +00007554 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007555 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007556 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007557 .total_size = 128,
7558 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007559 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007560 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007561 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007562 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007563 .block_erasers =
7564 {
7565 {
7566 .eraseblocks = { {128 * 1024, 1} },
7567 .block_erase = erase_chip_block_jedec,
7568 }
7569 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007570 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007572 },
7573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007574 {
7575 .vendor = "Winbond",
7576 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007577 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007578 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007579 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007580 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007581 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007582 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007583 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007584 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007585 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007586 .block_erasers =
7587 {
7588 {
7589 .eraseblocks = { {64 * 1024, 8} },
7590 .block_erase = erase_sector_jedec,
7591 }, {
7592 .eraseblocks = { {512 * 1024, 1} },
7593 .block_erase = erase_chip_block_jedec,
7594 }
7595 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007596 .printlock = printlock_w39v040a,
Sean Nelson35727f72010-01-28 23:55:12 +00007597 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007598 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007599 },
7600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007601 {
7602 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007603 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007604 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007605 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007606 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007607 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007608 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007609 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007610 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007611 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007612 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007613 .block_erasers =
7614 {
7615 {
7616 .eraseblocks = { {64 * 1024, 8} },
7617 .block_erase = erase_sector_jedec,
7618 }, {
7619 .eraseblocks = { {512 * 1024, 1} },
7620 .block_erase = erase_chip_block_jedec,
7621 }
7622 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007623 .printlock = printlock_w39v040b,
Sean Nelson35727f72010-01-28 23:55:12 +00007624 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007625 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007626 },
7627
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007628 {
7629 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007630 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007631 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007632 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007633 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007634 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007635 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007636 .feature_bits = FEATURE_EITHER_RESET,
7637 .tested = TEST_UNTESTED,
7638 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007639 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007640 .block_erasers =
7641 {
7642 {
7643 .eraseblocks = { {64 * 1024, 8} },
7644 .block_erase = erase_sector_jedec,
7645 }, {
7646 .eraseblocks = { {512 * 1024, 1} },
7647 .block_erase = erase_chip_block_jedec,
7648 }
7649 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007650 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00007651 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007652 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007653 },
7654
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007655 {
7656 .vendor = "Winbond",
7657 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007658 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007659 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007660 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007661 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007662 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00007663 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007664 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007665 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007666 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007667 .block_erasers =
7668 {
7669 {
7670 .eraseblocks = { {4 * 1024, 128} },
7671 .block_erase = erase_block_jedec,
7672 }, {
7673 .eraseblocks = { {64 * 1024, 8} },
7674 .block_erase = erase_sector_jedec,
7675 }, {
7676 .eraseblocks = { {512 * 1024, 1} },
7677 .block_erase = erase_chip_block_jedec,
7678 }
7679 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007680 .printlock = printlock_w39v040fa,
Michael Karcherc9b63412010-05-30 16:55:18 +00007681 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00007682 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007683 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007684 },
7685
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007686 {
7687 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007688 .name = "W39V040FB",
7689 .bustype = CHIP_BUSTYPE_FWH,
7690 .manufacture_id = WINBOND_ID,
7691 .model_id = WINBOND_W39V040B,
7692 .total_size = 512,
7693 .page_size = 64 * 1024,
7694 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
7695 .tested = TEST_OK_PRE,
7696 .probe = probe_jedec,
7697 .probe_timing = 10,
7698 .block_erasers =
7699 {
7700 {
7701 .eraseblocks = { {64 * 1024, 8} },
7702 .block_erase = erase_sector_jedec,
7703 }, {
7704 .eraseblocks = { {512 * 1024, 1} },
7705 .block_erase = erase_chip_block_jedec,
7706 }
7707 },
7708 .printlock = printlock_w39v040fb,
Idwer Volleringecc67072010-12-26 23:55:12 +00007709 .unlock = unlock_w39v040fb,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007710 .write = write_jedec_1,
7711 .read = read_memmapped,
7712 },
7713
7714 {
7715 .vendor = "Winbond",
7716 .name = "W39V040FC",
7717 .bustype = CHIP_BUSTYPE_FWH,
7718 .manufacture_id = WINBOND_ID,
7719 .model_id = WINBOND_W39V040C,
7720 .total_size = 512,
7721 .page_size = 64 * 1024,
7722 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
7723 .tested = TEST_UNTESTED,
7724 .probe = probe_jedec,
7725 .probe_timing = 10,
7726 .block_erasers =
7727 {
7728 {
7729 .eraseblocks = { {64 * 1024, 8} },
7730 .block_erase = erase_sector_jedec,
7731 }, {
7732 .eraseblocks = { {512 * 1024, 1} },
7733 .block_erase = erase_chip_block_jedec,
7734 }
7735 },
7736 .printlock = printlock_w39v040fc,
7737 .write = write_jedec_1,
7738 .read = read_memmapped,
7739 },
7740
7741 {
7742 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007743 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007744 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007745 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007746 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007747 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007748 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007749 .feature_bits = FEATURE_EITHER_RESET,
7750 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007751 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007752 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007753 .block_erasers =
7754 {
7755 {
7756 .eraseblocks = { {64 * 1024, 16} },
7757 .block_erase = erase_sector_jedec,
7758 }, {
7759 .eraseblocks = { {1024 * 1024, 1} },
7760 .block_erase = erase_chip_block_jedec,
7761 }
7762 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007763 .printlock = printlock_w39v080a,
Sean Nelson35727f72010-01-28 23:55:12 +00007764 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007765 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007766 },
7767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007768 {
7769 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00007770 .name = "W49F002U/N",
Urja Rannikko038a3122009-06-28 19:19:25 +00007771 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007772 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007773 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007774 .total_size = 256,
7775 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007776 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007777 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007778 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007779 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007780 .block_erasers =
7781 {
7782 {
7783 .eraseblocks = {
7784 {128 * 1024, 1},
7785 {96 * 1024, 1},
7786 {8 * 1024, 2},
7787 {16 * 1024, 1},
7788 },
7789 .block_erase = erase_sector_jedec,
7790 }, {
7791 .eraseblocks = { {256 * 1024, 1} },
7792 .block_erase = erase_chip_block_jedec,
7793 }
7794 },
Sean Nelson35727f72010-01-28 23:55:12 +00007795 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007796 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007797 },
7798
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007799 {
7800 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007801 .name = "W49F020",
7802 .bustype = CHIP_BUSTYPE_PARALLEL,
7803 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007804 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00007805 .total_size = 256,
7806 .page_size = 128,
7807 .feature_bits = FEATURE_EITHER_RESET,
7808 .tested = TEST_OK_PROBE,
7809 .probe = probe_jedec,
7810 .probe_timing = 10,
7811 .block_erasers =
7812 {
7813 {
7814 .eraseblocks = { {256 * 1024, 1} },
7815 .block_erase = erase_chip_block_jedec,
7816 }
7817 },
7818 .write = write_jedec_1,
7819 .read = read_memmapped,
7820 },
7821
7822 {
7823 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007824 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007825 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007826 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007827 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007828 .total_size = 256,
7829 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007830 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007831 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007832 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007833 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007834 .block_erasers =
7835 {
7836 {
7837 .eraseblocks = {
7838 {64 * 1024, 3},
7839 {32 * 1024, 1},
7840 {8 * 1024, 2},
7841 {16 * 1024, 1},
7842 },
7843 .block_erase = erase_sector_jedec,
7844 }, {
7845 .eraseblocks = { {256 * 1024, 1} },
7846 .block_erase = erase_chip_block_jedec,
7847 }
7848 },
Sean Nelson35727f72010-01-28 23:55:12 +00007849 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007850 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007851 },
7852
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007853 {
7854 .vendor = "Winbond",
7855 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007856 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007857 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007858 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007859 .total_size = 256,
7860 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00007861 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007862 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007863 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007864 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007865 .block_erasers =
7866 {
7867 {
7868 .eraseblocks = {
7869 {64 * 1024, 3},
7870 {32 * 1024, 1},
7871 {8 * 1024, 2},
7872 {16 * 1024, 1},
7873 },
7874 .block_erase = erase_sector_jedec,
7875 }, {
7876 .eraseblocks = { {256 * 1024, 1} },
7877 .block_erase = erase_chip_block_jedec,
7878 }
7879 },
Sean Nelson35727f72010-01-28 23:55:12 +00007880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007882 },
7883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007884 {
7885 .vendor = "Winbond",
7886 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007887 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007888 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007889 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007890 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00007891 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007892 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007893 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007894 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007895 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007896 .block_erasers =
7897 {
7898 {
7899 .eraseblocks = { {64 * 1024, 16}, },
7900 .block_erase = erase_sector_jedec,
7901 }, {
7902 .eraseblocks = { {1024 * 1024, 1} },
7903 .block_erase = erase_chip_block_jedec,
7904 }
7905 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007906 .printlock = printlock_w39v080fa,
7907 .unlock = unlock_w39v080fa,
Sean Nelson35727f72010-01-28 23:55:12 +00007908 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007910 },
7911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007912 {
7913 .vendor = "Winbond",
7914 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00007915 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007916 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00007917 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007918 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00007919 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007920 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007921 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00007922 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007923 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00007924 .block_erasers =
7925 {
7926 {
7927 .eraseblocks = { {64 * 1024, 8}, },
7928 .block_erase = erase_sector_jedec,
7929 }, {
7930 .eraseblocks = { {512 * 1024, 1} },
7931 .block_erase = erase_chip_block_jedec,
7932 }
7933 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00007934 .printlock = printlock_w39v080fa_dual,
Sean Nelson35727f72010-01-28 23:55:12 +00007935 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007936 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00007937 },
7938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007939 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00007940 .vendor = "AMIC",
7941 .name = "unknown AMIC SPI chip",
7942 .bustype = CHIP_BUSTYPE_SPI,
7943 .manufacture_id = AMIC_ID,
7944 .model_id = GENERIC_DEVICE_ID,
7945 .total_size = 0,
7946 .page_size = 256,
7947 .tested = TEST_BAD_PREW,
7948 .probe = probe_spi_rdid4,
7949 .probe_timing = TIMING_ZERO,
7950 .write = NULL,
7951 .read = NULL,
7952 },
7953
7954 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007955 .vendor = "Atmel",
7956 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007958 .manufacture_id = ATMEL_ID,
7959 .model_id = GENERIC_DEVICE_ID,
7960 .total_size = 0,
7961 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007962 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007964 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007965 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007966 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007967 },
7968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007969 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00007970 .vendor = "Eon",
7971 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007972 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007973 .manufacture_id = EON_ID_NOPREFIX,
7974 .model_id = GENERIC_DEVICE_ID,
7975 .total_size = 0,
7976 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007977 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007978 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007979 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007980 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007981 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007982 },
7983
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007984 {
7985 .vendor = "Macronix",
7986 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007987 .bustype = CHIP_BUSTYPE_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007988 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007989 .model_id = GENERIC_DEVICE_ID,
7990 .total_size = 0,
7991 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007992 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007993 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007994 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007995 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007996 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007997 },
7998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007999 {
8000 .vendor = "PMC",
8001 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008002 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008003 .manufacture_id = PMC_ID,
8004 .model_id = GENERIC_DEVICE_ID,
8005 .total_size = 0,
8006 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008007 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008008 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008009 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008010 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008011 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008012 },
8013
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008014 {
8015 .vendor = "SST",
8016 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008017 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008018 .manufacture_id = SST_ID,
8019 .model_id = GENERIC_DEVICE_ID,
8020 .total_size = 0,
8021 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008022 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008023 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008024 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008025 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008026 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008027 },
8028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008029 {
8030 .vendor = "ST",
8031 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00008032 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008033 .manufacture_id = ST_ID,
8034 .model_id = GENERIC_DEVICE_ID,
8035 .total_size = 0,
8036 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00008037 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008038 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008039 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008040 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008041 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00008042 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00008043
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008044 {
Sean Nelson118e1d62009-11-24 02:08:11 +00008045 .vendor = "Sanyo",
8046 .name = "unknown Sanyo SPI chip",
8047 .bustype = CHIP_BUSTYPE_SPI,
8048 .manufacture_id = SANYO_ID,
8049 .model_id = GENERIC_DEVICE_ID,
8050 .total_size = 0,
8051 .page_size = 256,
8052 .tested = TEST_BAD_PREW,
8053 .probe = probe_spi_rdid,
8054 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00008055 .write = NULL,
8056 .read = NULL,
8057 },
8058
8059 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008060 .vendor = "Generic",
8061 .name = "unknown SPI chip (RDID)",
8062 .bustype = CHIP_BUSTYPE_SPI,
8063 .manufacture_id = GENERIC_MANUF_ID,
8064 .model_id = GENERIC_DEVICE_ID,
8065 .total_size = 0,
8066 .page_size = 256,
8067 .tested = TEST_BAD_PREW,
8068 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008069 .write = NULL,
8070 },
8071 {
8072 .vendor = "Generic",
8073 .name = "unknown SPI chip (REMS)",
8074 .bustype = CHIP_BUSTYPE_SPI,
8075 .manufacture_id = GENERIC_MANUF_ID,
8076 .model_id = GENERIC_DEVICE_ID,
8077 .total_size = 0,
8078 .page_size = 256,
8079 .tested = TEST_BAD_PREW,
8080 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00008081 .write = NULL,
8082 },
8083
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008084 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00008085};